Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 56395 Details for
Bug 89242
New ebuild for mozilla firefox with more gtk+ support (ie. file chooser)
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
mozilla-firefox_1.0.2-0ubuntu5.diff
mozilla-firefox_1.0.2-0ubuntu5.diff (text/plain), 1.93 MB, created by
Alex Roman
on 2005-04-15 18:17:11 UTC
(
hide
)
Description:
mozilla-firefox_1.0.2-0ubuntu5.diff
Filename:
MIME Type:
Creator:
Alex Roman
Created:
2005-04-15 18:17:11 UTC
Size:
1.93 MB
patch
obsolete
>--- browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in >+++ browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in >@@ -29,6 +29,15 @@ > <em:contributor>Mozilla Contributors</em:contributor> > > <em:internalName>classic/1.0</em:internalName> >+ >+ <em:file> >+ <Description about="urn:mozilla:extension:file:classic.jar"> >+ <em:skin>skin/classic/browser/</em:skin> >+ <em:skin>skin/classic/global/</em:skin> >+ <em:skin>skin/classic/communicator/</em:skin> >+ <em:skin>skin/classic/mozapps/</em:skin> >+ </Description> >+ </em:file> > </Description> > > </RDF> >--- browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf >+++ browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf >@@ -0,0 +1,43 @@ >+<?xml version="1.0"?> >+ >+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" >+ xmlns:em="http://www.mozilla.org/2004/em-rdf#"> >+ >+ <Description about="urn:mozilla:install-manifest"> >+ <em:id>{972ce4c6-7e08-4474-a285-3208198ce6fd}</em:id> >+ <em:version>2.0</em:version> >+ >+ <!-- Target Application this theme can install into, >+ with minimum and maximum supported versions. --> >+ <em:targetApplication> >+ <Description> >+ <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> >+ <em:minVersion>1.0</em:minVersion> >+ <em:maxVersion>1.0</em:maxVersion> >+ </Description> >+ </em:targetApplication> >+ >+ <!-- Front End MetaData --> >+ <em:name>Firefox (default)</em:name> >+ <em:description>The default theme</em:description> >+ >+ <em:locked>true</em:locked> >+ >+ <!-- Front End Integration Hooks (used by Theme Manager)--> >+ <!-- XXXben - preprocess this file to use different info for mac version --> >+ <em:creator>Gerich and Horlander</em:creator> >+ <em:contributor>Mozilla Contributors</em:contributor> >+ >+ <em:internalName>classic/1.0</em:internalName> >+ >+ <em:file> >+ <Description about="urn:mozilla:extension:file:classic.jar"> >+ <em:skin>skin/classic/browser/</em:skin> >+ <em:skin>skin/classic/global/</em:skin> >+ <em:skin>skin/classic/communicator/</em:skin> >+ <em:skin>skin/classic/mozapps/</em:skin> >+ </Description> >+ </em:file> >+ </Description> >+ >+</RDF> >--- browser/app/profile/firefox.js >+++ browser/app/profile/firefox.js >@@ -38,6 +38,9 @@ > // SYNTAX HINTS: dashes are delimiters. Use underscores instead. > // The first character after a period must be alphabetic. > >+// Disable default browser checking. >+pref("browser.shell.checkDefaultBrowser", false); >+ > // pref("startup.homepage_override_url","chrome://browser-region/locale/region.properties"); > pref("general.startup.browser", true); > >@@ -62,8 +65,8 @@ > ); > > // App-specific update preferences >-pref("app.update.enabled", true); // Whether or not app updates are enabled >-pref("app.update.autoUpdateEnabled", true); // Whether or not background app updates >+pref("app.update.enabled", false); // Whether or not app updates are enabled >+pref("app.update.autoUpdateEnabled", false); // Whether or not background app updates > // are enabled > pref("app.update.url", "chrome://mozapps/locale/update/update.properties"); > pref("app.update.updatesAvailable", false); >@@ -81,7 +84,7 @@ > // .. etc .. > // > pref("extensions.update.enabled", true); >-pref("extensions.update.autoUpdateEnabled", true); >+pref("extensions.update.autoUpdateEnabled", false); > pref("extensions.update.url", "chrome://mozapps/locale/extensions/extensions.properties"); > pref("extensions.update.autoUpdate", false); // Automatically download and install > // updates to themes and extensions. >@@ -123,9 +126,9 @@ > > pref("general.skins.selectedSkin", "classic/1.0"); > pref("general.useragent.vendor", "Firefox"); >-pref("general.useragent.vendorSub", >-#expand __APP_VERSION__ >-); >+pref("general.useragent.vendorSub", "1.0"); >+//#expand __APP_VERSION__ >+//); > > pref("general.smoothScroll", false); > #ifdef XP_UNIX >@@ -141,10 +144,10 @@ > // 0 = blank, 1 = home (browser.startup.homepage), 2 = last > // XXXBlake Remove this stupid pref > pref("browser.startup.page", 1); >-pref("browser.startup.homepage", "resource:/browserconfig.properties"); >+pref("browser.startup.homepage", "chrome://browser-region/locale/region.properties"); > > // These values are deliberately non-localizable for official builds. >-pref("browser.startup.homepage_reset", "resource:/browserconfig.properties"); >+pref("browser.startup.homepage_reset", "chrome://browser-region/locale/region.properties"); > pref("browser.update.resetHomepage", false); > // "browser.startup.homepage_override" was for 4.x > pref("browser.startup.homepage_override.1", false); >@@ -236,6 +239,9 @@ > pref("network.cookie.cookieBehavior", 0); // cookies enabled > pref("network.cookie.enableForCurrentSessionOnly", false); > >+// Use LANG environment variable to choose locale >+pref("intl.locale.matchOS", true); >+ > // l12n and i18n > pref("intl.accept_languages", "chrome://global/locale/intl.properties"); > // collationOption is only set on linux for japanese. see bug 18338 and 62015 >@@ -258,6 +264,8 @@ > pref("mousewheel.withshiftkey.action",2); > pref("mousewheel.withaltkey.action",0); > >+pref("middlemouse.contentLoadURL", false); // setting to false disables pasting urls on to the page >+ > pref("profile.allow_automigration", false); // setting to false bypasses automigration in the profile code > > // Customizable toolbar stuff >@@ -326,3 +334,12 @@ > > // plugin finder service > pref("pfs.datasource.url", "chrome://mozapps/locale/plugins/plugins.properties"); >+ >+// enable negotiate extension >+pref("network.negotiate-auth.trusted-uris", "https://"); >+ >+// don't raise windows by default >+pref("mozilla.widget.raise-on-setfocus", false); >+ >+// disable IDN for now, since it's a phising risk >+//pref("network.enableIDN", false); >--- browser/app/Makefile.in >+++ browser/app/Makefile.in >@@ -320,4 +320,4 @@ > $(INSTALL) $^ $(DIST)/bin/defaults/profile > > install:: $(srcdir)/profile/prefs.js >- $(SYSINSTALL) $(IFLAGS1) $^ $(destdir)$(bindir)/defaults/profile >+ $(SYSINSTALL) $(IFLAGS1) $^ $(DESTDIR)$(bindir)/defaults/profile >--- browser/base/content/aboutDialog.css >+++ browser/base/content/aboutDialog.css >@@ -26,11 +26,7 @@ > -moz-appearance: none; > overflow: hidden; > >-#ifdef XP_MACOSX > height: 3.8em; >-#else >- height: 2.4em; >-#endif > > border: none; > } >--- browser/base/content/browserconfig.properties >+++ browser/base/content/browserconfig.properties >@@ -1,3 +1,3 @@ > # Do NOT localize or otherwise change these values > browser.startup.homepage=http://www.mozilla.org/products/firefox/central.html >-browser.startup.homepage_reset=http://www.mozilla.org/products/firefox/central.html >\ No newline at end of file >+browser.startup.homepage_reset=http://www.mozilla.org/products/firefox/central.html >--- browser/base/content/openLocation.xul >+++ browser/base/content/openLocation.xul >@@ -32,6 +32,7 @@ > title="&caption.label;" > onload="onLoad()" > buttonlabelaccept="&openBtn.label;" >+ buttoniconaccept="open" > ondialogaccept="open()" > style="width: 40em;" > persist="screenX screenY" >--- browser/base/content/pageInfo.xul >+++ browser/base/content/pageInfo.xul >@@ -297,7 +297,8 @@ > </rows> > </grid> > <hbox> >- <button label="&mediaSaveAs;" accesskey="&mediaSaveAsAccesskey;" id="imagesaveasbutton" disabled="true" oncommand="saveMedia();"/> >+ <button label="&mediaSaveAs;" accesskey="&mediaSaveAsAccesskey;" id="imagesaveasbutton" >+ icon="save" disabled="true" oncommand="saveMedia();"/> > </hbox> > <vbox class="inset iframe" flex="1" pack="center"> > <hbox id="theimagecontainer" pack="center"> >--- browser/base/content/pageReport.xul >+++ browser/base/content/pageReport.xul >@@ -49,9 +49,9 @@ > <separator class="thin"/> > <hbox> > <button label="&unblock.label;" id="unblockButton" oncommand="whitelistSite();" >- disabled="true" accesskey="&unblock.accesskey;"/> >+ disabled="true" accesskey="&unblock.accesskey;" icon="yes"/> > <spacer flex="1"/> >- <button dlgtype="accept" label="&done.label;" default="true" >+ <button dlgtype="accept" label="&done.label;" default="true" icon="close" > oncommand="window.close();" accesskey="&done.accesskey;"/> > </hbox> > </dialog> >--- browser/base/content/searchconfig.properties >+++ browser/base/content/searchconfig.properties >@@ -3,4 +3,4 @@ > browser.search.param.Google.1.default=client=firefox > browser.search.param.Google.release=rls=%S:%S:unofficial > >-browser.search.param.Yahoo.release=rls=%S:%S:unofficial >\ No newline at end of file >+browser.search.param.Yahoo.release=rls=%S:%S:unofficial >--- browser/components/bookmarks/content/addBookmark.xul >+++ browser/components/bookmarks/content/addBookmark.xul >@@ -93,7 +93,7 @@ > <bookmarks-tree id="bookmarks-view" flex="1" type="folders"/> > <vbox> > <button label="&button.newfolder.label;" accesskey="&button.newfolder.accesskey;" >- oncommand="createNewFolder();"/> >+ oncommand="createNewFolder();" icon="open"/> > <button label="&button.defaultfolder.label;" > accesskey="&button.defaultfolder.accesskey;" > oncommand="useDefaultFolder();"/> >--- browser/components/bookmarks/content/addBookmark2.xul >+++ browser/components/bookmarks/content/addBookmark2.xul >@@ -42,6 +42,8 @@ > buttonlabelextra2="&newFolder.label;" buttonaccesskeyextra2="&newFolder.accesskey;" > #ifdef XP_UNIX > buttonlabelaccept="&acceptButton.label;" >+ buttoniconaccept="add" >+ buttoniconextra2="open" > #endif > title="&newBookmark.title;" title-selectFolder="&selectFolder.label;" > onload="Startup();" >--- browser/components/cookieviewer/content/CookieExceptions.xul >+++ browser/components/cookieviewer/content/CookieExceptions.xul >@@ -47,12 +47,12 @@ > <hbox align="start"> > <textbox id="url" flex="1" oninput="gPermissionManager.onHostInput(event.target);"/> > </hbox> >- <hbox pack="end"> >- <button id="btnBlock" disabled="true" >+ <hbox pack="end"> >+ <button id="btnBlock" disabled="true" icon="no" > label="&block.label;" oncommand="gPermissionManager.addPermission(nsIPermissionManager.DENY_ACTION);"/> >- <button id="btnSession" disabled="true" >+ <button id="btnSession" disabled="true" > label="&session.label;" oncommand="gPermissionManager.addPermission(nsICookiePermission.ACCESS_SESSION);"/> >- <button id="btnAllow" disabled="true" >+ <button id="btnAllow" disabled="true" icon="yes" > label="&allow.label;" oncommand="gPermissionManager.addPermission(nsIPermissionManager.ALLOW_ACTION);"/> > </hbox> > <separator class="thin"/> >@@ -71,9 +71,9 @@ > </tree> > <separator class="thin"/> > <hbox> >- <button id="removePermission" disabled="true" label="&removepermission.label;" >+ <button id="removePermission" disabled="true" icon="remove" label="&removepermission.label;" > oncommand="gPermissionManager.onPermissionDeleted();"/> >- <button id="removeAllPermissions" label="&removeallpermissions.label;" >+ <button id="removeAllPermissions" icon="clear" label="&removeallpermissions.label;" > oncommand="gPermissionManager.onAllPermissionsDeleted();"/> > </hbox> > </dialog> >--- browser/components/cookieviewer/content/CookieViewer.xul >+++ browser/components/cookieviewer/content/CookieViewer.xul >@@ -112,10 +112,10 @@ > </grid> > </groupbox> > <hbox> >- <button id="removeCookie" disabled="true" >+ <button id="removeCookie" disabled="true" icon="remove" > label="&button.removecookie.label;" > oncommand="DeleteCookie();"/> >- <button id="removeAllCookies" >+ <button id="removeAllCookies" icon="clear" > label="&button.removeallcookies.label;" > oncommand="DeleteAllCookies();"/> > </hbox> >--- browser/components/prefwindow/content/pref-advanced.xul >+++ browser/components/prefwindow/content/pref-advanced.xul >@@ -72,9 +72,9 @@ > open="true" persist="open" clearhidden="true" align="left"> > <label>&softwareupdateinfo.label;</label> > <vbox class="indent" align="left"> >- <checkbox id="enableSmartUpdate" >+ <!-- checkbox id="enableSmartUpdate" > label="&enableSmartUpdate.label;" accesskey="&enableSmartUpdate.accesskey;" >- prefstring="app.update.autoUpdateEnabled"/> >+ prefstring="app.update.autoUpdateEnabled"/ --> > <checkbox id="enableExtensionUpdate" > label="&enableExtensionUpdate.label;" accesskey="&enableExtensionUpdate.accesskey;" > prefstring="extensions.update.autoUpdateEnabled"/> >@@ -112,7 +112,7 @@ > <hbox align="center"> > <button label="&managecerts.button;" > oncommand="openCertManager();" >- id="openCertManagerButton" >+ id="openCertManagerButton" icon="properties" > accesskey="&managecerts.accesskey;" > prefstring="security.disable_button.openCertManager"/> > </hbox> >@@ -125,7 +125,7 @@ > <hbox align="center"> > <button label="&managedevices.button;" > oncommand="openDeviceManager();" >- id="openDeviceManagerButton" >+ id="openDeviceManagerButton" icon="properties" > accesskey="&managedevices.accesskey;" > prefstring="security.disable_button.openDeviceManager"/> > </hbox> >@@ -139,7 +139,7 @@ > <hbox align="center"> > <button label="&validation.managecrls.button;" > oncommand="openCrlManager();" >- id="managecrlbutton" >+ id="managecrlbutton" icon="properties" > accesskey="&validation.managecrls.accesskey;" > prefstring="security.OCSP.disable_button.managecrl"/> > </hbox> >--- browser/components/prefwindow/content/pref-features-images.xul >+++ browser/components/prefwindow/content/pref-features-images.xul >@@ -54,11 +54,11 @@ > <treechildren/> > </tree> > <hbox> >- <button id="removePermission" disabled="true" >+ <button id="removePermission" disabled="true" icon="remove" > label="&removepermission.label;" > oncommand="DeletePermission();"/> > <button id="removeAllPermissions" >- label="&removeallpermissions.label;" >+ label="&removeallpermissions.label;" icon="clear" > oncommand="DeleteAllPermissions();"/> > </hbox> > </dialog> >--- browser/components/prefwindow/content/pref-navigator.xul >+++ browser/components/prefwindow/content/pref-navigator.xul >@@ -86,7 +86,7 @@ > <caption label="&fonts.caption;"/> > <hbox align="center"> > <description flex="1">&fontsInfo.label;</description> >- <button label="&showFontsAndColors.label;" >+ <button label="&showFontsAndColors.label;" icon="select-font" > accesskey="&showFontsAndColors.accesskey;" > oncommand="showFontsAndColors();"/> > </hbox> >@@ -118,7 +118,7 @@ > <hbox align="center"> > <description flex="1">&proxiesInfo.label;</description> > <button id="catProxiesButton" label="&showConnections.label;" >- accesskey="&showConnections.accesskey;" >+ accesskey="&showConnections.accesskey;" icon="network" > oncommand="showConnections();"/> > </hbox> > </groupbox> >--- browser/components/shell/src/nsGNOMEShellService.h >+++ browser/components/shell/src/nsGNOMEShellService.h >@@ -43,7 +43,7 @@ > class nsGNOMEShellService : public nsIShellService > { > public: >- nsGNOMEShellService() : mCheckedThisSession(PR_FALSE) { } >+ nsGNOMEShellService() : mCheckedThisSession(PR_TRUE) { } > > NS_DECL_ISUPPORTS > NS_DECL_NSISHELLSERVICE >--- browser/locales/en-US/chrome/browser-region/region.properties >+++ browser/locales/en-US/chrome/browser-region/region.properties >@@ -1,21 +1,21 @@ > general.useragent.contentlocale=US > >-homePageDefault=http://www.mozilla.org/products/firefox/start/ >+homePageDefault=file:///usr/share/ubuntu-artwork/home/index.html > fallbackDefaultSearchURL=http://www.google.com/search?&q= > > tellAFriendURL=http://www.spreadfirefox.com/ > promoteURL=http://www.spreadfirefox.com/promote/ > > # firefox.js >-browser.startup.homepage=http://start.mozilla.org/firefox/ >-browser.throbber.url=http://www.mozilla.org/products/firefox/central.html >+browser.startup.homepage=file:///usr/share/ubuntu-artwork/home/index.html >+browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html > browser.search.defaulturl=http://www.google.com/search?lr=&ie=UTF-8&oe=UTF-8&q= > > browser.search.order.1=Google > browser.search.order.2=Yahoo > > #config.js >-startup.homepage_override_url=http://www.mozilla.org/products/firefox/start/ >+startup.homepage_override_url=file:///usr/share/ubuntu-artwork/home/index.html > > # search-panel.properties > defaultSearchURL=http://www.google.com/search?hl=en&lr=&ie=UTF-8&oe=UTF-8&q= >--- browser/locales/en-US/searchplugins/list.txt >+++ browser/locales/en-US/searchplugins/list.txt >@@ -3,4 +3,4 @@ > dictionary > eBay > yahoo >-creativecommons >\ No newline at end of file >+creativecommons >--- browser/themes/Makefile.in >+++ browser/themes/Makefile.in >@@ -45,8 +45,9 @@ > # > # Theme Selection > # >-# Windows, GNOME/Linux Winstripe >+# Windows Winstripe > # MacOS X Pinstripe >+# GNOME/Linux Gnomestripe > # > > ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) >--- build/unix/run-mozilla.sh >+++ build/unix/run-mozilla.sh >@@ -249,16 +249,18 @@ > fi > if [ -x "$debugger" ] > then >- echo "set args ${1+"$@"}" > /tmp/mozargs$$ >+ tmpfile=`mktemp -t` || { echo "Cannot create temporary file" >&2; exit 1; } >+ trap " [ -f \"$tmpfile\" ] && /bin/rm -f -- \"$tmpfile\"" 0 1 2 3 13 15 >+ echo "set args ${1+"$@"}" > $tmpfile > # If you are not using ddd, gdb and know of a way to convey the arguments > # over to the prog then add that here- Gagan Saksena 03/15/00 > case `basename $debugger` in >- gdb) echo "$debugger $prog -x /tmp/mozargs$$" >- $debugger "$prog" -x /tmp/mozargs$$ >+ gdb) echo "$debugger $prog -x $tmpfile" >+ $debugger "$prog" -x $tmpfile > exitcode=$? > ;; >- ddd) echo "$debugger --debugger \"gdb -x /tmp/mozargs$$\" $prog" >- $debugger --debugger "gdb -x /tmp/mozargs$$" "$prog" >+ ddd) echo "$debugger --debugger \"gdb -x $tmpfile\" $prog" >+ $debugger --debugger "gdb -x $tmpfile" "$prog" > exitcode=$? > ;; > *) echo "$debugger $prog ${1+"$@"}" >@@ -266,7 +268,6 @@ > exitcode=$? > ;; > esac >- /bin/rm /tmp/mozargs$$ > else > echo "Could not find a debugger on your system." > fi >--- build/unix/firefox-config >+++ build/unix/firefox-config >@@ -0,0 +1,142 @@ >+#!/bin/sh >+ >+prefix=/usr >+exec_prefix=/usr >+exec_prefix_set=no >+ >+usage() >+{ >+ cat <<EOF >+Usage: $0 [OPTIONS] [LIBRARIES] >+Options: >+ [--prefix[=DIR]] >+ [--exec-prefix[=DIR]] >+ [--version] >+ [--defines] >+ [--libs] [libraries] >+ [--cflags] [components] >+ [--idlflags] >+Components: >+ * >+Libraries: >+ xpcom >+ nspr >+ js >+ jsj >+ gfx >+EOF >+ exit $1 >+} >+ >+if test $# -eq 0; then >+ usage 1 1>&2 >+fi >+ >+while test $# -gt 0; do >+ case "$1" in >+ -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; >+ *) optarg= ;; >+ esac >+ >+ case $1 in >+ --prefix=*) >+ prefix=$optarg >+ if test $exec_prefix_set = no ; then >+ exec_prefix=$optarg >+ fi >+ ;; >+ --prefix) >+ echo_prefix=yes >+ ;; >+ --exec-prefix=*) >+ exec_prefix=$optarg >+ exec_prefix_set=yes >+ ;; >+ --exec-prefix) >+ echo_exec_prefix=yes >+ ;; >+ --version) >+ echo 1.0.2 >+ exit 0 >+ ;; >+ --cflags) >+ if test "/usr/include/mozilla-firefox" != /usr/include ; then >+ includes="-I/usr/include/mozilla-firefox" >+ fi >+ echo_cflags=yes >+ ;; >+ --defines) >+ echo_defines=yes >+ ;; >+ --libs) >+ echo_libs=yes >+ ;; >+ --idlflags) >+ echo_idlflags=yes >+ ;; >+ xpcom|js|nspr|gfx|jsj) >+ echo_components="$echo_components $1" >+ echo_libraries="$echo_libraries $1" >+ ;; >+ xpconnect) >+ echo_components="$echo_components $1" >+ ;; >+ "") >+ usage 1 1>&2 >+ ;; >+ *) >+ echo_components="$echo_components $1" >+ ;; >+ esac >+ shift >+done >+ >+if test "$echo_prefix" = "yes"; then >+ echo $prefix >+fi >+if test "$echo_exec_prefix" = "yes"; then >+ echo $exec_prefix >+fi >+ >+if test "$echo_defines" = "yes"; then >+ echo -DHAVE_64BIT_OS=1 -DMOZILLA_VERSION=\"1.7.6\" -DD_INO=d_ino -DSTDC_HEADERS=1 -DHAVE_ST_BLKSIZE=1 -DHAVE_SIGINFO_T=1 -DHAVE_INT16_T=1 -DHAVE_INT32_T=1 -DHAVE_INT64_T=1 -DHAVE_UINT=1 -DHAVE_UNAME_DOMAINNAME_FIELD=1 -DHAVE_VISIBILITY_ATTRIBUTE=1 -DHAVE_DIRENT_H=1 -DHAVE_GETOPT_H=1 -DHAVE_SYS_BITYPES_H=1 -DHAVE_MEMORY_H=1 -DHAVE_UNISTD_H=1 -DHAVE_GNU_LIBC_VERSION_H=1 -DHAVE_NL_TYPES_H=1 -DHAVE_MALLOC_H=1 -DHAVE_X11_XKBLIB_H=1 -DHAVE_SYS_STATVFS_H=1 -DHAVE_SYS_STATFS_H=1 -DHAVE_SYS_CDEFS_H=1 -DHAVE_LIBM=1 -DHAVE_LIBDL=1 -DFUNCPROTO=15 -DHAVE_XSHM=1 -D_REENTRANT=1 -DHAVE_RANDOM=1 -DHAVE_STRERROR=1 -DHAVE_LCHOWN=1 -DHAVE_FCHMOD=1 -DHAVE_SNPRINTF=1 -DHAVE_MEMMOVE=1 -DHAVE_RINT=1 -DHAVE_FLOCKFILE=1 -DHAVE_LOCALTIME_R=1 -DHAVE_STRTOK_R=1 -DHAVE_RES_NINIT=1 -DHAVE_GNU_GET_LIBC_VERSION=1 -DHAVE_LANGINFO_CODESET=1 -DVA_COPY=va_copy -DHAVE_VA_COPY=1 -DHAVE_VA_LIST_AS_ARRAY=1 -DHAVE_I18N_LC_MESSAGES=1 -DMOZ_DEFAULT_TOOLKIT=\"gtk2\" -DMOZ_WIDGET_GTK2=1 -DMOZ_ENABLE_XREMOTE=1 -DMOZ_X11=1 -DMOZ_DISTRIBUTION_ID_UNQUOTED=org.mozilla -DMOZ_DISTRIBUTION_ID=\"org.mozilla\" -DMOZ_PHOENIX=1 -DMOZ_XUL_APP=1 -DMOZ_APP_NAME=\"firefox\" -DMOZ_ENABLE_XFT=1 -DMOZ_ENABLE_PANGO=1 -DHAVE_LIBPANGOFT2_1_0=1 -DMOZ_ENABLE_COREXFONTS=1 -DMOZ_EXTRA_X11CONVERTERS=1 -DOJI=1 -DMOZ_ENABLE_XINERAMA=1 -DIBMBIDI=1 -DMOZ_VIEW_SOURCE=1 -DACCESSIBILITY=1 -DMOZ_XPINSTALL=1 -DMOZ_JSLOADER=1 -DHAVE_GSSAPI_GSSAPI_H=1 -DHAVE_GSSAPI_GSSAPI_GENERIC_H=1 -DHAVE_GSS_C_NT_HOSTBASED_SERVICE=1 -DMOZ_MATHML=1 -DMOZ_LOGGING=1 -DHAVE___CXA_DEMANGLE=1 -DMOZ_DEFAULT_MOZILLA_FIVE_HOME=\"/usr/lib/mozilla-firefox\" -DMOZ_USER_DIR=\".mozilla\" -DMOZ_XUL=1 -DMOZ_PROFILELOCKING=1 -DMOZ_DLL_SUFFIX=\".so\" -DXP_UNIX=1 -DUNIX_ASYNC_DNS=1 -DJS_THREADSAFE=1 -DNS_PRINT_PREVIEW=1 -DNS_PRINTING=1 -DMOZ_ACCESSIBILITY_ATK=1 -DMOZILLA_LOCALE_VERSION=\"1.7\" -DMOZILLA_REGION_VERSION=\"1.7\" -DMOZILLA_SKIN_VERSION=\"1.5\" >+fi >+ >+if test "$echo_cflags" = "yes"; then >+ nspr_cflags="-I/usr/include/mozilla-firefox/nspr" >+ for n in $echo_components; do >+ component_includes="$component_includes -I/usr/include/mozilla-firefox/$n" >+ done >+ echo $component_includes $includes $nspr_cflags >+fi >+ >+if test "$echo_idlflags" = "yes"; then >+ echo "-I%{idldir}" >+fi >+ >+_nspr_libs="-L/usr/lib/mozilla-firefox -lplds4 -lplc4 -lnspr4 -lpthread -ldl" >+_xpcom_libs="-lxpcom $_nspr_libs" >+_js_libs="-ljs" >+ >+if test "$echo_libs" = "yes"; then >+ for l in $echo_libraries; do >+ case "$l" in >+ gfx) >+ libs="$libs -lgkgfx $_xpcom_libs" >+ ;; >+ xpcom) >+ libs="$libs $_xpcom_libs" >+ ;; >+ nspr) >+ libs="$libs $_nspr_libs" >+ ;; >+ js) >+ libs="$libs $_js_libs" >+ ;; >+ jsj) >+ libs="$libs -ljsj $_js_libs $_xpcom_libs" >+ ;; >+ esac >+ done >+ echo -L/usr/lib/mozilla-firefox $libs >+fi >--- nsprpub/lib/tests/Makefile >+++ nsprpub/lib/tests/Makefile >@@ -0,0 +1,255 @@ >+# Generated automatically from Makefile.in by configure. >+# >+# The contents of this file are subject to the Mozilla Public >+# License Version 1.1 (the "License"); you may not use this file >+# except in compliance with the License. You may obtain a copy of >+# the License at http://www.mozilla.org/MPL/ >+# >+# Software distributed under the License is distributed on an "AS >+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or >+# implied. See the License for the specific language governing >+# rights and limitations under the License. >+# >+# The Original Code is the Netscape Portable Runtime (NSPR). >+# >+# The Initial Developer of the Original Code is Netscape >+# Communications Corporation. Portions created by Netscape are >+# Copyright (C) 1998-2000 Netscape Communications Corporation. All >+# Rights Reserved. >+# >+# Contributor(s): >+# >+# Alternatively, the contents of this file may be used under the >+# terms of the GNU General Public License Version 2 or later (the >+# "GPL"), in which case the provisions of the GPL are applicable >+# instead of those above. If you wish to allow use of your >+# version of this file only under the terms of the GPL and not to >+# allow others to use your version of this file under the MPL, >+# indicate your decision by deleting the provisions above and >+# replace them with the notice and other provisions required by >+# the GPL. If you do not delete the provisions above, a recipient >+# may use your version of this file under either the MPL or the >+# GPL. >+# >+ >+#! gmake >+ >+MOD_DEPTH = ../.. >+topsrcdir = ../.. >+srcdir = . >+ >+include $(MOD_DEPTH)/config/autoconf.mk >+ >+include $(topsrcdir)/config/config.mk >+ >+ifeq ($(OS_ARCH), WINNT) >+# DIRS = windows >+endif >+ >+ifeq ($(OS_TARGET), WIN16) >+OS_CFLAGS = $(OS_EXE_CFLAGS) >+endif >+ >+CSRCS = \ >+ arena.c \ >+ string.c \ >+ base64t.c >+ >+ifeq (,$(filter-out WINNT OS2,$(OS_ARCH))) >+CSRCS += arena.c >+endif >+ >+ifeq (,$(filter-out WINNT OS2,$(OS_ARCH))) >+PROG_SUFFIX = .exe >+else >+PROG_SUFFIX = >+endif >+ >+PROGS = $(addprefix $(OBJDIR)/, $(CSRCS:.c=$(PROG_SUFFIX))) >+ >+TARGETS = $(PROGS) $(OBJS) >+ >+INCLUDES = -I$(dist_includedir) >+ >+# Setting the variables LDOPTS and LIBPR. We first initialize >+# them to the default values, then adjust them for some platforms. >+LDOPTS = -L$(dist_libdir) >+LIBPR = -lnspr$(MOD_MAJOR_VERSION) >+LIBPLC = -lplc$(MOD_MAJOR_VERSION) >+LIBPLDS = -lplds$(MOD_MAJOR_VERSION) >+ >+ifeq ($(OS_ARCH), WINNT) >+ifeq ($(OS_TARGET), WIN16) >+ LIBPR = $(dist_libdir)/nspr$(MOD_MAJOR_VERSION).lib >+ LIBPLC= $(dist_libdir)/plc$(MOD_MAJOR_VERSION).lib >+ LIBPLDS= $(dist_libdir)/plds$(MOD_MAJOR_VERSION).lib >+else >+ LDOPTS = -NOLOGO -DEBUG -DEBUGTYPE:CV -INCREMENTAL:NO >+ ifeq ($(OS_TARGET), WIN95) >+ LIBPR = $(dist_libdir)/nspr$(MOD_MAJOR_VERSION).$(LIB_SUFFIX) >+ LIBPLC= $(dist_libdir)/plc$(MOD_MAJOR_VERSION).$(LIB_SUFFIX) >+ LIBPLDS= $(dist_libdir)/plds$(MOD_MAJOR_VERSION).$(LIB_SUFFIX) >+ else >+ LIBPR = $(dist_libdir)/libnspr$(MOD_MAJOR_VERSION).$(LIB_SUFFIX) >+ LIBPLC= $(dist_libdir)/libplc$(MOD_MAJOR_VERSION).$(LIB_SUFFIX) >+ LIBPLDS= $(dist_libdir)/libplds$(MOD_MAJOR_VERSION).$(LIB_SUFFIX) >+ endif >+endif >+endif >+ >+ifeq ($(OS_ARCH),OS2) >+ ifeq ($(MOZ_OS2_TOOLS),VACPP) >+ LDOPTS = -NOE -DEBUG -nologo -PMTYPE:VIO /S:32768 >+ LIBPR = $(dist_libdir)/nspr$(MOD_MAJOR_VERSION).lib >+ LIBPLC = $(dist_libdir)/plc$(MOD_MAJOR_VERSION).lib >+ LIBPLDS= $(dist_libdir)/plds$(MOD_MAJOR_VERSION).$(LIB_SUFFIX) >+ else >+ LDOPTS += -Zomf -Zlinker /PM:VIO >+ endif >+endif >+ >+ifneq ($(OS_ARCH), WINNT) >+PWD = $(shell pwd) >+endif >+ >+ifeq ($(OS_ARCH), IRIX) >+LDOPTS += -rpath $(PWD)/$(dist_libdir) >+endif >+ >+ifeq ($(OS_ARCH), Linux) >+ ifeq ($(OS_RELEASE), 1.2) >+ EXTRA_LIBS = -ldl >+ else >+ LDOPTS += -Xlinker -rpath $(PWD)/$(dist_libdir) >+ ifeq ($(USE_PTHREADS),1) >+ EXTRA_LIBS = -lpthread >+ endif >+ endif >+endif >+ >+ifeq ($(OS_ARCH), OSF1) >+LDOPTS += -rpath $(PWD)/$(dist_libdir) -lpthread >+endif >+ >+ifeq ($(OS_ARCH), HP-UX) >+LDOPTS += -Wl,+s,+b,$(PWD)/$(dist_libdir) >+endif >+ >+# AIX >+ifeq ($(OS_ARCH),AIX) >+LDOPTS += -blibpath:$(PWD)/$(dist_libdir):/usr/lib:/lib >+LIBPR = -lnspr$(MOD_MAJOR_VERSION)_shr >+LIBPLC = -lplc$(MOD_MAJOR_VERSION)_shr >+endif >+ >+# Solaris >+ifeq ($(OS_ARCH), SunOS) >+ifneq ($(OS_RELEASE), 4.1.3_U1) >+ifdef NS_USE_GCC >+LDOPTS += -Xlinker -R -Xlinker $(PWD)/$(dist_libdir) >+else >+LDOPTS += -R $(PWD)/$(dist_libdir) >+endif >+endif >+ >+# SunOS 5.4 and 5.5 need to link with -lthread or -lpthread, >+# even though we already linked with these system libraries >+# when we built libnspr.so. >+ifeq ($(OS_RELEASE), 5.4) >+EXTRA_LIBS = -lthread >+endif >+ >+ifeq ($(OS_RELEASE), 5.5) >+ifdef USE_PTHREADS >+EXTRA_LIBS = -lpthread >+else >+EXTRA_LIBS = -lthread >+endif >+endif >+endif # SunOS >+ >+ifeq ($(OS_ARCH), NCR) >+# NCR needs to link against -lsocket -lnsl (and -lc, which is linked >+# implicitly by $(CC)) again even though we already linked with these >+# system libraries when we built libnspr.so. >+EXTRA_LIBS = -lsocket -lnsl >+# This hardcodes in the executable programs the directory to find >+# libnspr.so etc. at program startup. Equivalent to the -R or -rpath >+# option for ld on other platforms. >+export LD_RUN_PATH = $(PWD)/$(dist_libdir) >+endif >+ >+##################################################### >+# >+# The rules >+# >+##################################################### >+ >+include $(topsrcdir)/config/rules.mk >+ >+AIX_PRE_4_2 = 0 >+ifeq ($(OS_ARCH),AIX) >+ifneq ($(OS_RELEASE),4.2) >+ifneq ($(USE_PTHREADS), 1) >+#AIX_PRE_4_2 = 1 >+endif >+endif >+endif >+ >+ifeq ($(AIX_PRE_4_2),1) >+ >+# AIX releases prior to 4.2 need a special two-step linking hack >+# in order to both override the system select() and be able to >+# get at the original system select(). >+# >+# We use a pattern rule in ns/nspr20/config/rules.mk to generate >+# the .$(OBJ_SUFFIX) file from the .c source file, then do the >+# two-step linking hack below. >+ >+$(OBJDIR)/%: $(OBJDIR)/%.$(OBJ_SUFFIX) >+ @$(MAKE_OBJDIR) >+ rm -f $@ $(AIX_TMP) >+ $(CC) $(AIX_LINK_OPTS) -o $(AIX_TMP) $< $(dist_libdir)/libnspr$(MOD_MAJOR_VERSION).a >+ $(CC) -o $@ $(AIX_TMP) $(AIX_WRAP) >+ rm -f $(AIX_TMP) >+ >+else >+ >+# All platforms that are not AIX pre-4.2. >+ >+$(OBJDIR)/%$(PROG_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX) >+ @$(MAKE_OBJDIR) >+ >+ifeq ($(OS_ARCH), WINNT) >+ifeq ($(OS_TARGET),WIN16) >+ echo system windows >w16link >+ echo option map >>w16link >+ echo option stack=10K >>w16link >+ echo option heapsize=32K >>w16link >+ echo debug $(DEBUGTYPE) all >>w16link >+ echo name $@ >>w16link >+ echo file >>w16link >+ echo $< >>w16link >+ echo library >>w16link >+ echo $(LIBPR), >>w16link >+ echo $(LIBPLC), >>w16link >+ echo winsock.lib >>w16link >+ wlink @w16link. >+else >+ link $(LDOPTS) $< $(LIBPLC) $(LIBPLDS) $(LIBPR) wsock32.lib -out:$@ >+endif >+else >+ifeq ($(OS_ARCH),OS2) >+ $(LINK) $(EXEFLAGS) $(LDOPTS) $< $(LIBPLC) $(LIBPLDS) $(LIBPR) $(OS_LIBS) $(EXTRA_LIBS) >+else >+ $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBPLDS) $(LIBPR) $(EXTRA_LIBS) -o $@ >+endif >+endif >+endif >+ >+export:: $(TARGETS) >+clean:: >+ rm -f $(TARGETS) >+ >+ >+ >--- nsprpub/pkg/linux/Makefile >+++ nsprpub/pkg/linux/Makefile >@@ -0,0 +1,44 @@ >+# Generated automatically from Makefile.in by configure. >+# >+# Copyright 2002 Sun Microsystems, Inc. All rights reserved. >+# Use is subject to license terms. >+# >+#ident "$Id: Makefile.in,v 1.2.2.1 2003/02/26 06:17:31 wtc%netscape.com Exp $" >+# >+ >+MOD_DEPTH = ../.. >+topsrcdir = ../.. >+srcdir = . >+ >+NAME = sun-nspr >+RELEASE = 1 >+TOPDIR = /usr/src/redhat >+VERSION = `grep PR_VERSION $(dist_includedir)/prinit.h \ >+ | sed -e 's/"$$//' -e 's/.*"//' -e 's/ .*//'` >+ >+include $(MOD_DEPTH)/config/autoconf.mk >+ >+publish: >+ $(MAKE) clean >+ mkdir -p usr/lib/mps >+ cp -L $(MOD_DEPTH)/dist/lib/* usr/lib/mps >+ mkdir -p usr/include/mps >+ cp -Lr $(MOD_DEPTH)/dist/include/* usr/include/mps >+ tar czvf $(NAME)-$(VERSION).tar.gz usr >+ echo "%define name $(NAME)" >$(NAME).spec >+ echo "%define version $(VERSION)" >>$(NAME).spec >+ echo "%define release $(RELEASE)" >>$(NAME).spec >+ >+ cat $(srcdir)/$(NAME).spec >>$(NAME).spec >+ cp $(NAME)-$(VERSION).tar.gz $(TOPDIR)/SOURCES >+ rpm -ba $(NAME).spec >+ if [ ! -d RPMS ] ; then mkdir -p RPMS ; fi >+ if [ ! -d SRPMS ] ; then mkdir -p SRPMS ; fi >+ cp -v $(TOPDIR)/RPMS/i386/$(NAME)-$(VERSION)-* RPMS >+ cp -v $(TOPDIR)/RPMS/i386/$(NAME)-devel-$(VERSION)-* RPMS >+ cp -v $(TOPDIR)/SRPMS/$(NAME)-$(VERSION)-* SRPMS >+ >+clean: >+ rm -rf $(TOPDIR)/BUILD/$(NAME) >+ rm -rf RPMS SRPMS usr >+ rm -f $(NAME)-$(VERSION).tar.gz >--- nsprpub/pkg/solaris/SUNWpr/Makefile >+++ nsprpub/pkg/solaris/SUNWpr/Makefile >@@ -0,0 +1,22 @@ >+# Generated automatically from Makefile.in by configure. >+# >+# Copyright 2002 Sun Microsystems, Inc. All rights reserved. >+# Use is subject to license terms. >+# >+#ident "$Id: Makefile.in,v 1.1.2.1 2003/01/07 15:29:37 wtc%netscape.com Exp $" >+# >+ >+MOD_DEPTH = ../../.. >+topsrcdir = ../../.. >+srcdir = . >+ >+include $(MOD_DEPTH)/config/autoconf.mk >+ >+include $(srcdir)/../Makefile.com >+ >+DATAFILES += >+ >+all:: $(FILES) >+publish:: all pkg >+ >+include $(srcdir)/../Makefile.targ >--- nsprpub/pkg/solaris/SUNWprx/Makefile >+++ nsprpub/pkg/solaris/SUNWprx/Makefile >@@ -0,0 +1,22 @@ >+# Generated automatically from Makefile.in by configure. >+# >+# Copyright 2002 Sun Microsystems, Inc. All rights reserved. >+# Use is subject to license terms. >+# >+#ident "$Id: Makefile.in,v 1.1.2.1 2003/01/07 15:29:43 wtc%netscape.com Exp $" >+# >+ >+MOD_DEPTH = ../../.. >+topsrcdir = ../../.. >+srcdir = . >+ >+include $(MOD_DEPTH)/config/autoconf.mk >+ >+include $(srcdir)/../Makefile.com >+ >+DATAFILES += >+ >+all:: $(FILES) >+publish:: all pkg >+ >+include $(srcdir)/../Makefile.targ >--- nsprpub/pkg/solaris/Makefile >+++ nsprpub/pkg/solaris/Makefile >@@ -0,0 +1,60 @@ >+# Generated automatically from Makefile.in by configure. >+# >+# Copyright 2002 Sun Microsystems, Inc. All rights reserved. >+# Use is subject to license terms. >+# >+#ident "$Id: Makefile.in,v 1.1.2.1 2003/01/07 15:29:33 wtc%netscape.com Exp $" >+# >+ >+MOD_DEPTH = ../.. >+topsrcdir = ../.. >+srcdir = . >+ >+include $(MOD_DEPTH)/config/autoconf.mk >+ >+%: %.ksh >+ $(RM) $@ >+ cp $< $@ >+ chmod +x $@ >+ >+ifeq ($(USE_64), 1) >+DIRS = \ >+ SUNWprx >+else >+DIRS = \ >+ SUNWpr >+endif >+ >+PROTO = \ >+ $(ROOT) \ >+ $(ROOT)/usr \ >+ $(ROOT)/usr/lib \ >+ $(ROOT)/usr/lib/mps >+ >+ifdef USE_64 >+PROTO += $(ROOT)/usr/lib/mps/sparcv9 >+endif >+ >+include $(srcdir)/Makefile.com >+ >+awk_pkginfo: bld_awk_pkginfo >+ ./bld_awk_pkginfo -m $(MACH) -p "$(PRODUCT_VERSION)" -o $@ -v $(PRODUCT_VERSION) >+ >+all:: awk_pkginfo $(PROTO) >+publish: awk_pkginfo $(PROTO) >+ +$(LOOP_OVER_DIRS) >+ >+clean clobber:: >+ $(RM) awk_pkginfo bld_awk_pkginfo >+ $(RM) -r $(ROOT) >+ >+$(ROOT) $(ROOT)/%: >+ mkdir -p $@ >+ >+ifdef USE_64 >+$(ROOT)/usr/lib/mps/sparcv9: >+ $(LN) -sf ../../../../$(dist_libdir) $@ >+else >+$(ROOT)/usr/lib/mps: >+ $(LN) -sf ../../../$(dist_libdir) $@ >+endif >--- nsprpub/pkg/Makefile >+++ nsprpub/pkg/Makefile >@@ -0,0 +1,54 @@ >+# Generated automatically from Makefile.in by configure. >+# >+# The contents of this file are subject to the Mozilla Public >+# License Version 1.1 (the "License"); you may not use this file >+# except in compliance with the License. You may obtain a copy of >+# the License at http://www.mozilla.org/MPL/ >+# >+# Software distributed under the License is distributed on an "AS >+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or >+# implied. See the License for the specific language governing >+# rights and limitations under the License. >+# >+# The Original Code is the Netscape Portable Runtime (NSPR). >+# >+# The Initial Developer of the Original Code is Netscape >+# Communications Corporation. Portions created by Netscape are >+# Copyright (C) 1998-2000 Netscape Communications Corporation. All >+# Rights Reserved. >+# >+# Contributor(s): >+# >+# Alternatively, the contents of this file may be used under the >+# terms of the GNU General Public License Version 2 or later (the >+# "GPL"), in which case the provisions of the GPL are applicable >+# instead of those above. If you wish to allow use of your >+# version of this file only under the terms of the GPL and not to >+# allow others to use your version of this file under the MPL, >+# indicate your decision by deleting the provisions above and >+# replace them with the notice and other provisions required by >+# the GPL. If you do not delete the provisions above, a recipient >+# may use your version of this file under either the MPL or the >+# GPL. >+# >+ >+#! gmake >+ >+MOD_DEPTH = .. >+topsrcdir = .. >+srcdir = . >+ >+include $(MOD_DEPTH)/config/autoconf.mk >+ >+DIRS = >+ifeq ($(OS_TARGET),Linux) >+DIRS = linux >+endif >+ifeq ($(OS_TARGET),SunOS) >+DIRS = solaris >+endif >+ >+publish:: >+ +$(LOOP_OVER_DIRS) >+ >+include $(topsrcdir)/config/rules.mk >--- security/nss/lib/freebl/unix_rand.c >+++ security/nss/lib/freebl/unix_rand.c >@@ -875,12 +875,14 @@ > safe_pclose(fp); > } > #endif >+#ifndef LINUX > fp = safe_popen(netstat_ni_cmd); > if (fp != NULL) { > while ((bytes = fread(buf, 1, sizeof(buf), fp)) > 0) > RNG_RandomUpdate(buf, bytes); > safe_pclose(fp); > } >+#endif > > } > #else >--- security/coreconf/Linux.mk >+++ security/coreconf/Linux.mk >@@ -69,6 +69,8 @@ > ifeq ($(OS_TEST),x86_64) > OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE > CPU_ARCH = x86_64 >+ CC = gcc-3.4 >+ CCC = g++-3.4 > else > ifeq ($(OS_TEST),sparc) > OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE >--- security/manager/boot/src/nsSecureBrowserUIImpl.cpp >+++ security/manager/boot/src/nsSecureBrowserUIImpl.cpp >@@ -1325,6 +1325,10 @@ > > rv = internal->GetPrompter(&prompt); > *result = prompt; >+ } else if (uuid.Equals(NS_GET_IID(nsIDOMWindow))) { >+ *result = mWindow; >+ NS_ADDREF ((nsISupports*) *result); >+ rv = NS_OK; > } else { > rv = NS_ERROR_NO_INTERFACE; > } >--- modules/libpr0n/build/_img_list >+++ modules/libpr0n/build/_img_list >@@ -0,0 +1 @@ >+png gif jpeg bmp xbm icon >--- modules/libpr0n/decoders/icon/win/nsIconChannel.h >+++ modules/libpr0n/decoders/icon/win/nsIconChannel.h >@@ -45,7 +45,7 @@ > NS_DECL_NSISTREAMLISTENER > > nsIconChannel(); >- virtual ~nsIconChannel(); >+ ~nsIconChannel(); > > nsresult Init(nsIURI* uri); > >--- modules/libpr0n/decoders/icon/Makefile.in >+++ modules/libpr0n/decoders/icon/Makefile.in >@@ -35,6 +35,13 @@ > > PACKAGE_FILE = imgicon.pkg > >+ifdef MOZ_ENABLE_GNOMEUI >+EXTRA_DSO_LDOPTS = $(MOZ_GNOMEUI_LIBS) >+PLATFORM = gtk >+FORCE_SHARED_LIB = 1 >+EXPORT_LIBRARY = >+endif >+ > ifeq ($(OS_ARCH),WINNT) > EXTRA_DSO_LIBS = gkgfx > PLATFORM = win >@@ -48,6 +55,10 @@ > PLATFORM = mac > endif > >+ifeq ($(MOZ_WIDGET_TOOLKIT),gtk2) >+PLATFORM = gtk >+endif >+ > DIRS = $(PLATFORM) > > REQUIRES = xpcom \ >@@ -68,7 +79,7 @@ > > SHARED_LIBRARY_LIBS = $(DIST)/lib/$(LIB_PREFIX)imgicon$(PLATFORM)_s.$(LIB_SUFFIX) > >-EXTRA_DSO_LDOPTS = \ >+EXTRA_DSO_LDOPTS += \ > $(EXTRA_DSO_LIBS) \ > $(MOZ_COMPONENT_LIBS) \ > $(NULL) >--- modules/libpr0n/decoders/icon/nsIIconURI.idl >+++ modules/libpr0n/decoders/icon/nsIIconURI.idl >@@ -21,26 +21,90 @@ > > #include "nsIURI.idl" > >-// >-// moz-icon URLs have the following syntax >-// >-// moz-icon:<file-uri>?size=16&contentType=text/html >-// OR >-// moz-icon://dummyfile.html >-// moz-icon://dummyfile.html?size=32 >-// >-// The content type field is optional. The size field is optional. You only need to specify a file url inside the icon >-// if the file you want the icon for actually exists. Otherwise you can omit the file:// and just place a dummy file name with the extension >-// or content type you want: moz-icon://dummy.html. >-// >+ /** >+ * nsIIconURI >+ * >+ * This interface derives from nsIURI, to provide additional information >+ * about moz-icon URIs. These URIs >+ * >+ * What *is* a moz-icon URI you ask? Well, it has the following syntax: >+ * >+ * moz-icon://[<file-uri> | <file-with-extension>]? ['?'[<parameter-value-pairs>]] >+ * >+ * <file-uri> is a legal file: URI spec. You only need to specify a file: URI inside the icon >+ * if the file you want the icon for actually exists. >+ * >+ * <file-with-extension> is any filename with an extension, e.g. "dummy.html". >+ * If the file you want an icon for isn't known to exist, you can omit the file URI, and just >+ * place a dummy file name with the extension or content type you want: moz-icon://dummy.html. >+ * >+ * <stock-image> is of the format: stock/<icon-name> >+ * >+ * <icon-name> is a valid icon name, such as 'ok', 'cancel', 'yes', 'no'. >+ * XXXcaa document or reference to all 76 (yes, 76) of them. >+ * >+ * Legal parameter value pairs are listed below: >+ * >+ * Parameter: size >+ * Values: [<integer> | button | toolbar | toolbarsmall | menu | dialog] >+ * Description: If integer, this is the desired size in square pixels of the icon >+ * Else, use the OS default for the specified keyword context. >+ * Note that stock images require a keyword, not an integer pixel value. >+ * >+ * Parameter: contentType >+ * Values: <mime-type> >+ * Description: A valid mime type for the icon. >+ */ > > [scriptable, uuid(733A7A16-2D36-11d5-9907-001083010E9B)] > interface nsIMozIconURI : nsIURI > { >- // Returns the file URL contained within this -moz-icon url. >- attribute nsIURI IconFile; // maybe null if there isn't a real file we are trying to fetch >+ /** >+ * iconFile >+ * >+ * the file URL contained within this moz-icon url, or null. >+ */ >+ attribute nsIURI iconFile; >+ /** >+ * imageSize >+ * >+ * The image area in square pixels, defaulting to 16 if unspecified. >+ */ >+ attribute unsigned long imageSize; > >- attribute unsigned long imageSize; // measured by # of pixels in a row. defaults to 16. >- attribute ACString contentType; // may be an empty string >+ /** >+ * contentType >+ * >+ * A valid mime type, or the empty string. >+ */ >+ >+ attribute ACString contentType; >+ >+ /** >+ * fileExtension >+ * >+ * The file extension of the file which we are looking up. >+ */ > readonly attribute ACString fileExtension; >+ >+ /** >+ * stockIcon >+ * >+ * The stock icon name requested from the OS. >+ */ >+ readonly attribute ACString stockIcon; >+ >+ /** >+ * stockIconSize >+ * >+ * The stock icon size requested from the OS. >+ */ >+ readonly attribute ACString stockIconSize; >+ >+ /** >+ * stockIconState >+ * >+ * The stock icon state requested from the OS. >+ */ >+ readonly attribute ACString stockIconState; > }; >--- modules/libpr0n/decoders/icon/nsIconModule.cpp >+++ modules/libpr0n/decoders/icon/nsIconModule.cpp >@@ -26,6 +26,7 @@ > > #include "nsIconDecoder.h" > #include "nsIconProtocolHandler.h" >+#include "nsIconURI.h" > > // objects that just require generic constructors > /****************************************************************************** >@@ -41,7 +42,8 @@ > { "icon decoder", > NS_ICONDECODER_CID, > "@mozilla.org/image/decoder;2?type=image/icon", >- nsIconDecoderConstructor, }, >+ nsIconDecoderConstructor >+ }, > > { "Icon Protocol Handler", > NS_ICONPROTOCOL_CID, >@@ -50,4 +52,12 @@ > } > }; > >-NS_IMPL_NSGETMODULE(nsIconDecoderModule, components) >+PR_STATIC_CALLBACK(nsresult) >+IconDecoderModuleCtor(nsIModule* aSelf) >+{ >+ nsMozIconURI::InitAtoms(); >+ return NS_OK; >+} >+ >+NS_IMPL_NSGETMODULE_WITH_CTOR(nsIconDecoderModule, components, >+ IconDecoderModuleCtor) >--- modules/libpr0n/decoders/icon/nsIconProtocolHandler.cpp >+++ modules/libpr0n/decoders/icon/nsIconProtocolHandler.cpp >@@ -89,15 +89,18 @@ > > NS_IMETHODIMP nsIconProtocolHandler::NewChannel(nsIURI* url, nsIChannel* *result) > { >- nsCOMPtr<nsIChannel> channel; >- NS_NEWXPCOM(channel, nsIconChannel); >+ nsIconChannel* channel = new nsIconChannel; >+ if (!channel) >+ return NS_ERROR_OUT_OF_MEMORY; >+ NS_ADDREF(channel); > >- if (channel) >- NS_STATIC_CAST(nsIconChannel*,NS_STATIC_CAST(nsIChannel*, channel))->Init(url); >+ nsresult rv = channel->Init(url); >+ if (NS_FAILED(rv)) { >+ delete channel; >+ return rv; >+ } > > *result = channel; >- NS_IF_ADDREF(*result); >- > return NS_OK; > } > >--- modules/libpr0n/decoders/icon/nsIconURI.cpp >+++ modules/libpr0n/decoders/icon/nsIconURI.cpp >@@ -26,6 +26,8 @@ > #include "nsCRT.h" > #include "nsReadableUtils.h" > #include "nsPrintfCString.h" >+#include "nsIAtom.h" >+#include "nsStaticAtom.h" > > static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); > #define DEFAULT_IMAGE_SIZE 16 >@@ -34,17 +36,48 @@ > // from the icon url. > static void extractAttributeValue(const char * searchString, const char * attributeName, char ** result); > >+static nsIAtom *sStockSizeButton = nsnull; >+static nsIAtom *sStockSizeToolbar = nsnull; >+static nsIAtom *sStockSizeToolbarsmall = nsnull; >+static nsIAtom *sStockSizeMenu = nsnull; >+static nsIAtom *sStockSizeDialog = nsnull; >+static nsIAtom *sStockStateNormal = nsnull; >+static nsIAtom *sStockStateDisabled = nsnull; >+ >+/* static */ const nsStaticAtom nsMozIconURI::sSizeAtoms[] = >+{ >+ { "button", &sStockSizeButton }, >+ { "toolbar", &sStockSizeToolbar }, >+ { "toolbarsmall", &sStockSizeToolbarsmall }, >+ { "menu", &sStockSizeMenu }, >+ { "dialog", &sStockSizeDialog } >+}; >+ >+/* static */ const nsStaticAtom nsMozIconURI::sStateAtoms[] = >+{ >+ { "normal", &sStockStateNormal }, >+ { "disabled", &sStockStateDisabled } >+}; >+ > //////////////////////////////////////////////////////////////////////////////// > > nsMozIconURI::nsMozIconURI() >+ : mSize(DEFAULT_IMAGE_SIZE) > { >- mSize = DEFAULT_IMAGE_SIZE; > } > > nsMozIconURI::~nsMozIconURI() > { > } > >+ >+/* static */ void >+nsMozIconURI::InitAtoms() >+{ >+ NS_RegisterStaticAtoms(sSizeAtoms, NS_ARRAY_LENGTH(sSizeAtoms)); >+ NS_RegisterStaticAtoms(sStateAtoms, NS_ARRAY_LENGTH(sStateAtoms)); >+} >+ > NS_IMPL_THREADSAFE_ISUPPORTS2(nsMozIconURI, nsIMozIconURI, nsIURI) > > #define NS_MOZICON_SCHEME "moz-icon:" >@@ -64,6 +97,26 @@ > NS_ENSURE_SUCCESS(rv, rv); > spec += fileIconSpec; > } >+ else if (!mStockIcon.IsEmpty()) >+ { >+ spec += "//stock/"; >+ spec += mStockIcon; >+ if (mStockIconSize) { >+ spec += NS_MOZ_ICON_DELIMITER; >+ spec += "size="; >+ const char *size_string; >+ mStockIconSize->GetUTF8String(&size_string); >+ spec.Append(nsPrintfCString("%s", size_string)); >+ } >+ if (mStockIconState) { >+ spec += NS_MOZ_ICON_DELIMITER; >+ spec += "state="; >+ const char *state_string; >+ mStockIconSize->GetUTF8String(&state_string); >+ spec.Append(nsPrintfCString("%s", state_string)); >+ } >+ return NS_OK; >+ } > else > { > spec += "//"; >@@ -116,12 +169,10 @@ > else // there is nothing left so eat up rest of line. > attributeValue = PL_strdup(startOfAttribute); > } // if we have a attribute value >- > } // if we have a attribute name > } // if we got non-null search string and attribute name values > > *result = attributeValue; // passing ownership of attributeValue into result...no need to >- return; > } > > NS_IMETHODIMP >@@ -138,6 +189,8 @@ > if (strcmp("moz-icon", scheme.get()) != 0) > return NS_ERROR_MALFORMED_URI; > >+ nsXPIDLCString sizeString; >+ nsXPIDLCString stateString; > nsCAutoString mozIconPath(aSpec); > PRInt32 endPos = mozIconPath.FindChar(':') + 1; // guaranteed to exist! > PRInt32 pos = mozIconPath.FindChar(NS_MOZ_ICON_DELIMITER); >@@ -150,26 +203,48 @@ > { > mozIconPath.Mid(mDummyFilePath, endPos, pos - endPos); > // fill in any size and content type values... >- nsXPIDLCString sizeString; > nsXPIDLCString contentTypeString; > extractAttributeValue(mozIconPath.get() + pos, "size=", getter_Copies(sizeString)); >+ extractAttributeValue(mozIconPath.get() + pos, "state=", getter_Copies(stateString)); > extractAttributeValue(mozIconPath.get() + pos, "contentType=", getter_Copies(contentTypeString)); > mContentType = contentTypeString; >- >- if (sizeString.get()) >- { >- PRInt32 sizeValue = atoi(sizeString); >- // if the size value we got back is > 0 then use it >- if (sizeValue) >- mSize = sizeValue; >- } > } > >- // Okay now we have a bit of a hack here...filePath can have two forms: >+ // Okay now we have a bit of a hack here...filePath can have three forms: > // (1) file://<some valid platform specific file url> > // (2) //<some dummy file with an extension> >+ // (3) stock/<icon-identifier> > // We need to determine which case we are and behave accordingly... >- if (mDummyFilePath.Length() > 2) // we should at least have two forward slashes followed by a file or a file:// >+ if (mDummyFilePath.Length() > 2) >+ { >+ if (!strncmp("//stock/", mDummyFilePath.get(), 8)) >+ { >+ // we have a stock icon >+ mStockIcon = Substring(mDummyFilePath, 8); >+ if (!sizeString.IsEmpty()) >+ { >+ nsCOMPtr<nsIAtom> atom = do_GetAtom(sizeString); >+ for (PRUint32 i = 0; i < NS_ARRAY_LENGTH(sSizeAtoms); i++) >+ { >+ if (atom == *(sSizeAtoms[i].mAtom)) >+ { >+ mStockIconSize = atom; >+ break; >+ } >+ } >+ >+ atom = do_GetAtom(stateString); >+ for (PRUint32 i = 0; i < NS_ARRAY_LENGTH(sStateAtoms); i++) >+ { >+ if (atom == *(sStateAtoms[i].mAtom)) >+ { >+ mStockIconState = atom; >+ break; >+ } >+ } >+ } >+ } >+ else > { > if (!nsCRT::strncmp("//", mDummyFilePath.get(), 2))// must not have a url here.. > { >@@ -177,16 +252,22 @@ > // and remember the rest in mDummyFilePath > mDummyFilePath.Cut(0, 2); // cut the first 2 bytes.... > } >- >- if (!nsCRT::strncmp("file://", mDummyFilePath.get(), 7)) >+ else if (!nsCRT::strncmp("file://", mDummyFilePath.get(), 7)) > { > // we have a file url.....so store it... > rv = ioService->NewURI(mDummyFilePath, nsnull, nsnull, getter_AddRefs(mFileIcon)); >- if (NS_FAILED(rv)) return NS_ERROR_MALFORMED_URI; >+ } >+ if (!sizeString.IsEmpty()) >+ { >+ PRInt32 sizeValue = atoi(sizeString); >+ // if the size value we got back is > 0 then use it >+ if (sizeValue) >+ mSize = sizeValue; >+ } > } > } > else >- return NS_ERROR_MALFORMED_URI; // they didn't include a file path... >+ rv = NS_ERROR_MALFORMED_URI; // they didn't include a file path... > return rv; > } > >@@ -436,10 +517,35 @@ > const char * chFileName = fileExtension.get(); // get the underlying buffer > const char * fileExt = strrchr(chFileName, '.'); > if (!fileExt) return NS_ERROR_FAILURE; // no file extension to work from. >- else >+ > aFileExtension = nsDependentCString(fileExt); > > return NS_OK; > } > >+NS_IMETHODIMP >+nsMozIconURI::GetStockIcon(nsACString &aStockIcon) >+{ >+ aStockIcon.Assign(mStockIcon); >+ >+ return NS_OK; >+} >+ >+NS_IMETHODIMP >+nsMozIconURI::GetStockIconSize(nsACString &aSize) >+{ >+ if (mStockIconSize) >+ return mStockIconSize->ToUTF8String(aSize); >+ aSize.Truncate(); >+ return NS_OK; >+} >+ >+NS_IMETHODIMP >+nsMozIconURI::GetStockIconState(nsACString &aState) >+{ >+ if (mStockIconState) >+ return mStockIconState->ToUTF8String(aState); >+ aState.Truncate(); >+ return NS_OK; >+} > //////////////////////////////////////////////////////////////////////////////// >--- modules/libpr0n/decoders/icon/nsIconURI.h >+++ modules/libpr0n/decoders/icon/nsIconURI.h >@@ -25,6 +25,9 @@ > #include "nsIIconURI.h" > #include "nsCOMPtr.h" > #include "nsString.h" >+class nsStaticAtom; >+ >+class nsIAtom; > > #define NS_MOZICONURI_CID \ > { \ >@@ -41,6 +44,8 @@ > NS_DECL_NSIURI > NS_DECL_NSIMOZICONURI > >+ static void InitAtoms(); >+ > // nsJARURI > nsMozIconURI(); > virtual ~nsMozIconURI(); >@@ -50,6 +55,12 @@ > PRUint32 mSize; // the # of pixels in a row that we want for this image. Typically 16, 32, 128, etc. > nsCString mContentType; // optional field explicitly specifying the content type > nsCString mDummyFilePath; // if we don't have a valid file url, the file path is stored here....i.e if mFileIcon is null..... >+ nsCString mStockIcon; >+ nsCOMPtr<nsIAtom> mStockIconSize; >+ nsCOMPtr<nsIAtom> mStockIconState; >+ >+ static const nsStaticAtom sSizeAtoms[]; >+ static const nsStaticAtom sStateAtoms[]; > > nsresult FormatSpec(nsACString &result); > }; >--- modules/libpr0n/decoders/icon/gtk/Makefile.in >+++ modules/libpr0n/decoders/icon/gtk/Makefile.in >@@ -0,0 +1,63 @@ >+# ***** BEGIN LICENSE BLOCK ***** >+# Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+# >+# The contents of this file are subject to the Mozilla Public License Version >+# 1.1 (the "License"); you may not use this file except in compliance with >+# the License. You may obtain a copy of the License at >+# http://www.mozilla.org/MPL/ >+# >+# Software distributed under the License is distributed on an "AS IS" basis, >+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+# for the specific language governing rights and limitations under the >+# License. >+# >+# The Original Code is the Makefile for the Gnome icon decoder. >+# >+# The Initial Developer of the Original Code is >+# Christian Biesinger <cbiesinger@web.de>. >+# Portions created by the Initial Developer are Copyright (C) 2004 >+# the Initial Developer. All Rights Reserved. >+# >+# Contributor(s): >+# >+# Alternatively, the contents of this file may be used under the terms of >+# either the GNU General Public License Version 2 or later (the "GPL"), or >+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+# in which case the provisions of the GPL or the LGPL are applicable instead >+# of those above. If you wish to allow use of your version of this file only >+# under the terms of either the GPL or the LGPL, and not to allow others to >+# use your version of this file under the terms of the MPL, indicate your >+# decision by deleting the provisions above and replace them with the notice >+# and other provisions required by the GPL or the LGPL. If you do not delete >+# the provisions above, a recipient may use your version of this file under >+# the terms of any one of the MPL, the GPL or the LGPL. >+# >+# ***** END LICENSE BLOCK ***** >+ >+ >+DEPTH = ../../../../.. >+topsrcdir = @top_srcdir@ >+srcdir = @srcdir@ >+VPATH = @srcdir@ >+ >+include $(DEPTH)/config/autoconf.mk >+ >+MODULE = imgicon >+LIBRARY_NAME = imgicongtk_s >+ >+REQUIRES = xpcom \ >+ string \ >+ necko \ >+ intl \ >+ mimetype \ >+ $(NULL) >+ >+CPPSRCS = nsIconChannel.cpp >+ >+LOCAL_INCLUDES += $(MOZ_GNOMEUI_CFLAGS) $(MOZ_GTK2_CFLAGS) >+ >+# we don't want the shared lib, but we want to force the creation of a static lib. >+FORCE_STATIC_LIB = 1 >+ >+include $(topsrcdir)/config/rules.mk >+ >--- modules/libpr0n/decoders/icon/gtk/nsIconChannel.h >+++ modules/libpr0n/decoders/icon/gtk/nsIconChannel.h >@@ -0,0 +1,84 @@ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is the Mozilla icon channel for gnome. >+ * >+ * The Initial Developer of the Original Code is >+ * Christian Biesinger <cbiesinger@web.de>. >+ * Portions created by the Initial Developer are Copyright (C) 2004 >+ * the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+#ifndef nsIconChannel_h_ >+#define nsIconChannel_h_ >+ >+#include "nsIChannel.h" >+#include "nsIStreamListener.h" >+#include "nsIURI.h" >+#include "nsIIconURI.h" >+#include "nsCOMPtr.h" >+ >+/** >+ * This class is the gnome implementation of nsIconChannel. It basically asks >+ * gtk/gnome for an icon, saves it as a tmp icon, and creates a new channel for >+ * that file to which all calls will be proxied. >+ */ >+class nsIconChannel : public nsIChannel >+{ >+ public: >+ NS_DECL_ISUPPORTS >+ NS_FORWARD_NSIREQUEST(mRealChannel->) >+ NS_FORWARD_NSICHANNEL(mRealChannel->) >+ >+ nsIconChannel() {} >+ ~nsIconChannel() {} >+ >+ /** >+ * Called by nsIconProtocolHandler after it creates this channel. >+ * Must be called before calling any other function on this object. >+ * If this method fails, no other function must be called on this object. >+ */ >+ NS_HIDDEN_(nsresult) Init(nsIURI* aURI); >+ private: >+ /** >+ * The channel to the temp icon file (e.g. to /tmp/2qy9wjqw.html). >+ * Will always be non-null after a successful Init. >+ */ >+ nsCOMPtr<nsIChannel> mRealChannel; >+ /** >+ * The moz-icon URI we're loading. Always non-null after a successful Init. >+ */ >+ nsCOMPtr<nsIMozIconURI> mURI; >+ >+ /** >+ * Called by Init if we need to use the gnomeui library. >+ */ >+ nsresult InitWithGnome(); >+}; >+ >+#endif >--- modules/libpr0n/decoders/icon/gtk/nsIconChannel.cpp >+++ modules/libpr0n/decoders/icon/gtk/nsIconChannel.cpp >@@ -0,0 +1,352 @@ >+/* vim:set ts=2 sw=2 sts=2 cin et: */ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is the Mozilla icon channel for gnome. >+ * >+ * The Initial Developer of the Original Code is >+ * Christian Biesinger <cbiesinger@web.de>. >+ * Portions created by the Initial Developer are Copyright (C) 2004 >+ * the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+#include <stdlib.h> >+#include <unistd.h> >+// Older versions of these headers seem to be missing an extern "C" >+extern "C" { >+#include <libgnome/libgnome.h> >+#include <libgnomeui/gnome-icon-theme.h> >+#include <libgnomeui/gnome-icon-lookup.h> >+#include <libgnomeui/gnome-ui-init.h> >+ >+#include <libgnomevfs/gnome-vfs-file-info.h> >+#include <libgnomevfs/gnome-vfs-ops.h> >+} >+ >+#include <gtk/gtk.h> >+#include <gdk/gdk.h> >+ >+#include "nsIMIMEService.h" >+ >+#include "nsIStringBundle.h" >+ >+#include "nsEscape.h" >+#include "nsNetUtil.h" >+#include "nsIURL.h" >+#include "prlink.h" >+#include "nsIconChannel.h" >+ >+NS_IMPL_ISUPPORTS2(nsIconChannel, nsIRequest, nsIChannel) >+ >+/** >+ * Given a path to a PNG Image, creates a channel from it. >+ * Note that the channel will delete the file when it's done with it. >+ * >+ * (When this function fails, the file will NOT be deleted) >+ */ >+static nsresult pngfile_to_channel(const char* aFilename, nsIChannel** aChannel) { >+ // Now we have to create an uri for the file... >+ nsCOMPtr<nsILocalFile> lf; >+ nsresult rv = NS_NewNativeLocalFile(nsDependentCString(aFilename), PR_FALSE, >+ getter_AddRefs(lf)); >+ if (NS_FAILED(rv)) >+ return rv; >+ >+ nsCOMPtr<nsIInputStream> is; >+ rv = NS_NewLocalFileInputStream(getter_AddRefs(is), lf, -1, -1, >+ nsIFileInputStream::DELETE_ON_CLOSE); >+ if (NS_FAILED(rv)) >+ return rv; >+ >+ nsCOMPtr<nsIURI> realURI; >+ rv = NS_NewFileURI(getter_AddRefs(realURI), lf); >+ if (NS_FAILED(rv)) >+ return rv; >+ >+ rv = NS_NewInputStreamChannel(aChannel, realURI, is, >+ NS_LITERAL_CSTRING("image/png")); >+ return rv; >+} >+ >+static nsresult >+moz_gdk_pixbuf_to_channel(GdkPixbuf* aPixbuf, nsIChannel **aChannel) >+{ >+ char tmpfile[] = "/tmp/moziconXXXXXX"; >+ int fd = mkstemp(tmpfile); >+ if (fd == -1) { >+ return NS_ERROR_UNEXPECTED; >+ } >+ >+ GError *err = NULL; >+ gboolean ok = gdk_pixbuf_save(aPixbuf, tmpfile, "png", &err, NULL); >+ if (!ok) { >+ close(fd); >+ remove(tmpfile); >+ if (err) >+ g_error_free(err); >+ return NS_ERROR_UNEXPECTED; >+ } >+ >+ nsresult rv = pngfile_to_channel(tmpfile, aChannel); >+ close(fd); >+ if (NS_FAILED(rv)) >+ remove(tmpfile); >+ return rv; >+} >+ >+static GtkWidget *gProtoWindow = nsnull; >+static GtkWidget *gStockImageWidget = nsnull; >+static GtkIconFactory *gIconFactory = nsnull; >+ >+static void >+ensure_stock_image_widget() >+{ >+ if (!gProtoWindow) { >+ gProtoWindow = gtk_window_new(GTK_WINDOW_POPUP); >+ gtk_widget_realize(gProtoWindow); >+ GtkWidget* protoLayout = gtk_fixed_new(); >+ gtk_container_add(GTK_CONTAINER(gProtoWindow), protoLayout); >+ >+ gStockImageWidget = gtk_image_new(); >+ gtk_container_add(GTK_CONTAINER(protoLayout), gStockImageWidget); >+ gtk_widget_realize(gStockImageWidget); >+ } >+} >+ >+static void >+ensure_icon_factory() >+{ >+ if (!gIconFactory) { >+ gIconFactory = gtk_icon_factory_new(); >+ gtk_icon_factory_add_default (gIconFactory); >+ g_object_unref(gIconFactory); >+ } >+} >+ >+static GtkIconSize >+moz_gtk_icon_size(const char *name) >+{ >+ if (strcmp(name, "button") == 0) >+ return GTK_ICON_SIZE_BUTTON; >+ >+ if (strcmp(name, "menu") == 0) >+ return GTK_ICON_SIZE_MENU; >+ >+ if (strcmp(name, "toolbar") == 0) >+ return GTK_ICON_SIZE_LARGE_TOOLBAR; >+ >+ if (strcmp(name, "toolbarsmall") == 0) >+ return GTK_ICON_SIZE_SMALL_TOOLBAR; >+ >+ if (strcmp(name, "dialog") == 0) >+ return GTK_ICON_SIZE_DIALOG; >+ >+ return GTK_ICON_SIZE_INVALID; >+} >+ >+nsresult >+nsIconChannel::InitWithGnome() >+{ >+ if (!gnome_program_get()) { >+ // Get the brandShortName from the string bundle to pass to GNOME >+ // as the application name. This may be used for things such as >+ // the title of grouped windows in the panel. >+ nsCOMPtr<nsIStringBundleService> bundleService = >+ do_GetService(NS_STRINGBUNDLE_CONTRACTID); >+ >+ NS_ASSERTION(bundleService, "String bundle service must be present!"); >+ >+ nsCOMPtr<nsIStringBundle> bundle; >+ bundleService->CreateBundle("chrome://global/locale/brand.properties", >+ getter_AddRefs(bundle)); >+ nsXPIDLString appName; >+ >+ if (bundle) { >+ bundle->GetStringFromName(NS_LITERAL_STRING("brandShortName").get(), >+ getter_Copies(appName)); >+ } else { >+ NS_WARNING("brand.properties not present, using default application name"); >+ appName.Assign(NS_LITERAL_STRING("Gecko")); >+ } >+ >+ char* empty[] = { "" }; >+ gnome_init(NS_ConvertUTF16toUTF8(appName).get(), "1.0", 1, empty); >+ } >+ >+ PRUint32 iconSize; >+ nsresult rv = mURI->GetImageSize(&iconSize); >+ NS_ASSERTION(NS_SUCCEEDED(rv), "GetImageSize failed"); >+ >+ nsCAutoString type; >+ mURI->GetContentType(type); >+ >+ GnomeVFSFileInfo fileInfo = {0}; >+ fileInfo.refcount = 1; // In case some GnomeVFS function addrefs and releases it >+ >+ nsCAutoString spec; >+ nsCOMPtr<nsIURI> fileURI; >+ rv = mURI->GetIconFile(getter_AddRefs(fileURI)); >+ if (fileURI) { >+ fileURI->GetAsciiSpec(spec); >+ // Only ask gnome-vfs for a GnomeVFSFileInfo for file: uris, to avoid a >+ // network request >+ PRBool isFile; >+ if (NS_SUCCEEDED(fileURI->SchemeIs("file", &isFile)) && isFile) { >+ gnome_vfs_get_file_info(spec.get(), &fileInfo, GNOME_VFS_FILE_INFO_DEFAULT); >+ } >+ else { >+ // We have to get a leaf name from our uri... >+ nsCOMPtr<nsIURL> url(do_QueryInterface(fileURI)); >+ if (url) { >+ nsCAutoString name; >+ // The filename we get is UTF-8-compatible, which matches gnome expectations. >+ // See also: http://lists.gnome.org/archives/gnome-vfs-list/2004-March/msg00049.html >+ // "Whenever we can detect the charset used for the URI type we try to >+ // convert it to/from utf8 automatically inside gnome-vfs." >+ // I'll interpret that as "otherwise, this field is random junk". >+ url->GetFileName(name); >+ fileInfo.name = g_strdup(name.get()); >+ } >+ // If this is no nsIURL, nothing we can do really. >+ >+ if (!type.IsEmpty()) { >+ fileInfo.valid_fields = GNOME_VFS_FILE_INFO_FIELDS_MIME_TYPE; >+ fileInfo.mime_type = g_strdup(type.get()); >+ } >+ } >+ } >+ >+ >+ if (type.IsEmpty()) { >+ nsCOMPtr<nsIMIMEService> ms(do_GetService("@mozilla.org/mime;1")); >+ if (ms) { >+ nsCAutoString fileExt; >+ mURI->GetFileExtension(fileExt); >+ nsXPIDLCString extType; >+ ms->GetTypeFromExtension(fileExt.get(), getter_Copies(extType)); >+ fileExt.Assign(extType); >+ } >+ } >+ >+ // Get the icon theme >+ GnomeIconTheme *t = gnome_icon_theme_new(); >+ if (!t) { >+ gnome_vfs_file_info_clear(&fileInfo); >+ return NS_ERROR_NOT_AVAILABLE; >+ } >+ >+ >+ char* name = gnome_icon_lookup(t, NULL, spec.get(), NULL, &fileInfo, type.get(), GNOME_ICON_LOOKUP_FLAGS_NONE, NULL); >+ gnome_vfs_file_info_clear(&fileInfo); >+ if (!name) { >+ g_object_unref(G_OBJECT(t)); >+ return NS_ERROR_NOT_AVAILABLE; >+ } >+ >+ char* file = gnome_icon_theme_lookup_icon(t, name, iconSize, NULL, NULL); >+ g_free(name); >+ g_object_unref(G_OBJECT(t)); >+ if (!file) >+ return NS_ERROR_NOT_AVAILABLE; >+ >+ // Create a GdkPixbuf buffer and scale it >+ GError *err = nsnull; >+ GdkPixbuf* buf = gdk_pixbuf_new_from_file(file, &err); >+ g_free(file); >+ if (!buf) { >+ if (err) >+ g_error_free(err); >+ return NS_ERROR_UNEXPECTED; >+ } >+ >+ // scale... >+ GdkPixbuf* scaled = gdk_pixbuf_scale_simple(buf, iconSize, iconSize, GDK_INTERP_BILINEAR); >+ gdk_pixbuf_unref(buf); >+ if (!scaled) >+ return NS_ERROR_OUT_OF_MEMORY; >+ >+ rv = moz_gdk_pixbuf_to_channel(scaled, getter_AddRefs(mRealChannel)); >+ gdk_pixbuf_unref(scaled); >+ return rv; >+} >+ >+nsresult >+nsIconChannel::Init(nsIURI* aURI) { >+ mURI = do_QueryInterface(aURI); >+ NS_ASSERTION(mURI, "URI passed to nsIconChannel is no nsIMozIconURI!"); >+ >+ nsCAutoString stockIcon; >+ mURI->GetStockIcon(stockIcon); >+ if (stockIcon.IsEmpty()) { >+ return InitWithGnome(); >+ } >+ >+ nsCAutoString iconSizeString; >+ mURI->GetStockIconSize(iconSizeString); >+ >+ nsCAutoString iconStateString; >+ mURI->GetStockIconState(iconStateString); >+ >+ GtkIconSize icon_size = moz_gtk_icon_size(iconSizeString.get()); >+ if (icon_size == GTK_ICON_SIZE_INVALID) { >+ NS_WARNING(iconSizeString.get()); >+ return NS_ERROR_FAILURE; >+ } >+ >+ ensure_stock_image_widget(); >+ >+ gboolean sensitive = strcmp(iconStateString.get(), "disabled"); >+ gtk_widget_set_sensitive (gStockImageWidget, sensitive); >+ >+ GdkPixbuf *icon = gtk_widget_render_icon(gStockImageWidget, stockIcon.get(), >+ icon_size, NULL); >+ if (!icon) { >+ ensure_icon_factory(); >+ >+ GtkIconSet *icon_set = gtk_icon_set_new(); >+ GtkIconSource *icon_source = gtk_icon_source_new(); >+ >+ gtk_icon_source_set_icon_name(icon_source, stockIcon.get()); >+ gtk_icon_set_add_source(icon_set, icon_source); >+ gtk_icon_factory_add(gIconFactory, stockIcon.get(), icon_set); >+ gtk_icon_set_unref(icon_set); >+ gtk_icon_source_free(icon_source); >+ >+ icon = gtk_widget_render_icon(gStockImageWidget, stockIcon.get(), >+ icon_size, NULL); >+ } >+ >+ if (!icon) >+ return NS_ERROR_NOT_AVAILABLE; >+ >+ nsresult rv = moz_gdk_pixbuf_to_channel(icon, getter_AddRefs(mRealChannel)); >+ >+ gdk_pixbuf_unref(icon); >+ >+ return rv; >+} >--- modules/libpr0n/decoders/Makefile.in >+++ modules/libpr0n/decoders/Makefile.in >@@ -29,6 +29,9 @@ > DIRS = $(MOZ_IMG_DECODERS) > > ifneq (,$(findstring icon,$(MOZ_IMG_DECODERS))) >+#ifdef MOZ_ENABLE_GNOMEUI >+#DIRS := icon/gtk $(DIRS) >+#endif > ifeq ($(OS_ARCH),WINNT) > DIRS := icon/win $(DIRS) > endif >@@ -39,6 +42,9 @@ > DIRS := icon/mac $(DIRS) > endif > endif # icon >+ifeq ($(MOZ_WIDGET_TOOLKIT),gtk2) >+DIRS := icon/gtk $(DIRS) >+endif > > include $(topsrcdir)/config/rules.mk > >--- modules/libpref/src/init/all.js >+++ modules/libpref/src/init/all.js >@@ -49,8 +49,8 @@ > > pref("keyword.URL", "http://www.google.com/search?ie=UTF-8&oe=utf-8&q="); > pref("keyword.enabled", false); >-pref("general.useragent.locale", "chrome://navigator/locale/navigator.properties"); >-pref("general.useragent.contentlocale", "chrome://navigator-region/locale/region.properties"); >+pref("general.useragent.locale", "chrome://global/locale/intl.properties"); >+pref("general.useragent.contentlocale", "chrome://browser-region/locale/region.properties"); > > pref("general.config.obscure_value", 13); // for MCD .cfg files > >@@ -645,31 +645,30 @@ > pref("converter.html2txt.structs", true); // Output structured phrases (strong, em, code, sub, sup, b, i, u) > pref("converter.html2txt.header_strategy", 1); // 0 = no indention; 1 = indention, increased with header level; 2 = numbering and slight indention > >-pref("intl.accept_languages", "chrome://navigator/locale/navigator.properties"); >+pref("intl.accept_languages", "chrome://global/locale/intl.properties"); > pref("intl.accept_charsets", "iso-8859-1,*,utf-8"); >-pref("intl.collationOption", "chrome://navigator-platform/locale/navigator.properties"); >-pref("intl.menuitems.alwaysappendaccesskeys","chrome://navigator/locale/navigator.properties"); >-pref("intl.charsetmenu.browser.static", "chrome://navigator/locale/navigator.properties"); >-pref("intl.charsetmenu.browser.more1", "chrome://navigator/locale/navigator.properties"); >-pref("intl.charsetmenu.browser.more2", "chrome://navigator/locale/navigator.properties"); >-pref("intl.charsetmenu.browser.more3", "chrome://navigator/locale/navigator.properties"); >-pref("intl.charsetmenu.browser.more4", "chrome://navigator/locale/navigator.properties"); >-pref("intl.charsetmenu.browser.more5", "chrome://navigator/locale/navigator.properties"); >-pref("intl.charsetmenu.browser.unicode", "chrome://navigator/locale/navigator.properties"); >-pref("intl.charsetmenu.mailedit", "chrome://navigator/locale/navigator.properties"); >+pref("intl.collationOption", "chrome://global-platform/locale/intl.properties"); >+pref("intl.menuitems.alwaysappendaccesskeys","chrome://global/locale/intl.properties"); >+pref("intl.charsetmenu.browser.static", "chrome://global/locale/intl.properties"); >+pref("intl.charsetmenu.browser.more1", "chrome://global/locale/intl.properties"); >+pref("intl.charsetmenu.browser.more2", "chrome://global/locale/intl.properties"); >+pref("intl.charsetmenu.browser.more3", "chrome://global/locale/intl.properties"); >+pref("intl.charsetmenu.browser.more4", "chrome://global/locale/intl.properties"); >+pref("intl.charsetmenu.browser.more5", "chrome://global/locale/intl.properties"); >+pref("intl.charsetmenu.browser.unicode", "chrome://global/locale/intl.properties"); >+pref("intl.charsetmenu.mailedit", "chrome://global/locale/intl.properties"); > pref("intl.charsetmenu.browser.cache", ""); > pref("intl.charsetmenu.mailview.cache", ""); > pref("intl.charsetmenu.composer.cache", ""); > pref("intl.charsetmenu.browser.cache.size", 5); >-pref("intl.charset.detector", "chrome://navigator/locale/navigator.properties"); >-pref("intl.charset.default", "chrome://navigator-platform/locale/navigator.properties"); >-pref("intl.content.langcode", "chrome://communicator-region/locale/region.properties"); >+pref("intl.charset.detector", "chrome://global/locale/intl.properties"); >+pref("intl.charset.default", "chrome://global-platform/locale/intl.properties"); > pref("intl.locale.matchOS", false); > // fallback charset list for Unicode conversion (converting from Unicode) > // currently used for mail send only to handle symbol characters (e.g Euro, trademark, smartquotes) > // for ISO-8859-1 > pref("intl.fallbackCharsetList.ISO-8859-1", "windows-1252"); >-pref("font.language.group", "chrome://navigator/locale/navigator.properties"); >+pref("font.language.group", "chrome://global/locale/intl.properties"); > > pref("images.dither", "auto"); > pref("security.directory", ""); >@@ -725,6 +724,16 @@ > pref("mousewheel.horizscroll.withaltkey.numlines",-1); > pref("mousewheel.horizscroll.withaltkey.sysnumlines",false); > >+pref("mousebuttonsextended.buttonlist", "67"); >+pref("mousebuttonsextended.buttons.6.action.up", 2); >+pref("mousebuttonsextended.buttons.6.numlines.up", -1); >+pref("mousebuttonsextended.buttons.6.action.down", -1); >+pref("mousebuttonsextended.buttons.6.numlines.down", -1); >+pref("mousebuttonsextended.buttons.7.action.up", 2); >+pref("mousebuttonsextended.buttons.7.numlines.up", 1); >+pref("mousebuttonsextended.buttons.7.action.down", -1); >+pref("mousebuttonsextended.buttons.7.numlines.down", -1); >+ > pref("profile.confirm_automigration",true); > // profile.migration_behavior determines how the profiles root is set > // 0 - use NS_APP_USER_PROFILES_ROOT_DIR >--- toolkit/components/filepicker/content/filepicker.js >+++ toolkit/components/filepicker/content/filepicker.js >@@ -67,6 +67,7 @@ > if (o.displayDirectory) { > const directory = o.displayDirectory.path; > } >+ > const initialText = o.defaultString; > const filterTitles = o.filters.titles; > const filterTypes = o.filters.types; >@@ -121,13 +122,18 @@ > treeView.showOnlyDirectories = true; > } > >+ // set up the right icon for GNOME stock icons >+ if (filePickerMode == nsIFilePicker.modeSave) >+ okButton.setAttribute("icon","save"); >+ else >+ okButton.setAttribute("icon","open"); >+ > // start out with a filename sort > handleColumnClick("FilenameColumn"); > > document.documentElement.setAttribute("ondialogcancel", "return onCancel();"); > try { >- var buttonLabel = getOKAction(); >- okButton.setAttribute("label", buttonLabel); >+ setOKAction(); > } catch (exception) { > // keep it set to "OK" > } >@@ -496,8 +502,9 @@ > onFileSelected(treeView.selectedFiles); > } > >-function getOKAction(file) { >+function setOKAction(file) { > var buttonLabel; >+ var buttonIcon = "open"; // used in all but one case > > if (file && file.isDirectory() && filePickerMode != nsIFilePicker.modeGetFolder) { > document.documentElement.setAttribute("ondialogaccept", "return openOnOK();"); >@@ -515,11 +522,12 @@ > break; > case nsIFilePicker.modeSave: > buttonLabel = gFilePickerBundle.getString("saveButtonLabel"); >+ buttonIcon = "save"; > break; > } > } >- >- return buttonLabel; >+ okButton.setAttribute("label", buttonLabel); >+ okButton.setAttribute("icon", buttonIcon); > } > > function onSelect(event) { >@@ -558,8 +566,7 @@ > } > > if (validFileSelected) { >- var buttonLabel = getOKAction(file); >- okButton.setAttribute("label", buttonLabel); >+ setOKAction(file); > okButton.disabled = invalidSelection; > } else > okButton.disabled = (textInput.value == ""); >@@ -586,8 +593,7 @@ > } > > function onTextFieldFocus() { >- var buttonLabel = getOKAction(null); >- okButton.setAttribute("label", buttonLabel); >+ setOKAction(null); > doEnabling(); > } > >--- toolkit/components/filepicker/content/filepicker.xul >+++ toolkit/components/filepicker/content/filepicker.xul >@@ -95,7 +95,7 @@ > <hbox class="dialog-button-box" align="center"> > <checkbox label="&showHiddenFiles.label;" oncommand="toggleShowHidden();" > flex="1" align="left" accesskey="&showHiddenFiles.accesskey;"/> >- <button dlgtype="cancel" class="dialog-button"/> >- <button dlgtype="accept" class="dialog-button"/> >+ <button dlgtype="cancel" icon="cancel" class="dialog-button"/> >+ <button dlgtype="accept" icon="accept" class="dialog-button"/> > </hbox> > </dialog> >--- toolkit/components/passwordmgr/resources/content/passwordManager.xul >+++ toolkit/components/passwordmgr/resources/content/passwordManager.xul >@@ -29,6 +29,7 @@ > title="&windowtitle.label;" > xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" > buttons="accept" >+ buttoniconaccept="close" > onload="Startup()" > onunload="Shutdown()" > persist="screenX screenY width height"> >@@ -66,9 +67,9 @@ > </tree> > <separator class="thin"/> > <hbox> >- <button id="removeSignon" disabled="true" >+ <button id="removeSignon" disabled="true" icon="remove" > label="&remove.label;" oncommand="DeleteSignon();"/> >- <button id="removeAllSignons" >+ <button id="removeAllSignons" icon="remove" > label="&removeall.label;" > oncommand="DeleteAllSignons();"/> > <spacer flex="1"/> >@@ -91,9 +92,9 @@ > </tree> > <separator class="thin"/> > <hbox> >- <button id="removeReject" disabled="true" >+ <button id="removeReject" disabled="true" icon="remove" > label="&remove.label;" oncommand="DeleteReject();"/> >- <button id="removeAllRejects" >+ <button id="removeAllRejects" icon="remove" > label="&removeall.label;" > oncommand="DeleteAllRejects();"/> > </hbox> >--- toolkit/components/printing/content/printPreviewBindings.xml >+++ toolkit/components/printing/content/printPreviewBindings.xml >@@ -53,7 +53,7 @@ > > <content> > <xul:button label="&print.label;" accesskey="&print.accesskey;" >- oncommand="PrintUtils.print();"/> >+ oncommand="PrintUtils.print();" icon="print"/> > > <xul:button label="&pageSetup.label;" accesskey="&pageSetup.accesskey;" > oncommand="this.parentNode.doPageSetup();"/> >@@ -118,7 +118,7 @@ > > <xul:toolbarseparator class="toolbarseparator-primary"/> > <xul:button label="&close.label;" accesskey="&close.accesskey;" >- oncommand="PrintUtils.exitPrintPreview();"/> >+ oncommand="PrintUtils.exitPrintPreview();" icon="close"/> > <xul:data value="&customPrompt.title;"/> > </content> > >--- toolkit/components/printing/content/printProgress.xul >+++ toolkit/components/printing/content/printProgress.xul >@@ -94,7 +94,7 @@ > </grid> > <separator/> > <hbox id="CancelButton" pack="end"> >- <button id="cancel" label="&dialogCancel.label;" >+ <button id="cancel" label="&dialogCancel.label;" icon="cancel" > oncommand="doCancelButton()"/> > </hbox> > </window> >--- toolkit/components/printing/content/printdialog.xul >+++ toolkit/components/printing/content/printdialog.xul >@@ -48,6 +48,7 @@ > onload="onLoad();" > ondialogaccept="return onAccept();" > oncancel="return onCancel();" >+ buttoniconaccept="print" > title="&printDialog.title;" > persist="screenX screenY" > screenX="24" screenY="24"> >@@ -82,14 +83,14 @@ > <menulist id="printerList" flex="1" oncommand="setPrinterDefaultsForSelectedPrinter();"> > <menupopup/> > </menulist> >- <button id="properties" label="&propertiesButton.label;" oncommand="displayPropertiesDialog();"/> >+ <button id="properties" label="&propertiesButton.label;" icon="properties" oncommand="displayPropertiesDialog();"/> > </row> > <row align="center"> > <hbox align="center" pack="end"> > <label id="fileLabel" control="fileInput" value="&fileInput.label;"/> > </hbox> > <textbox id="fileInput" flex="1" onblur="stripTrailingWhitespace(this)"/> >- <button id="chooseFile" label="&chooseButton.label;" oncommand="onChooseFile()"/> >+ <button id="chooseFile" label="&chooseButton.label;" icon="open" oncommand="onChooseFile()"/> > </row> > </rows> > >--- toolkit/content/widgets/browser.xml >+++ toolkit/content/widgets/browser.xml >@@ -577,6 +577,7 @@ > > this.securityUI = null; > this._fastFind = null; >+ this._webBrowserFind = null; > > this.removeEventListener("load", this.onLoad, true); > this.removeEventListener("unload", this.onUnload, true); >--- toolkit/content/widgets/dialog.xml >+++ toolkit/content/widgets/dialog.xml >@@ -221,6 +221,30 @@ > button.setAttribute("accesskey", accessKey); > } > } >+ // allow specifying alternate icons in the dialog header >+ if (!button.hasAttribute("icon")) { >+ // if there's an icon specified, use that >+ if (this.hasAttribute("buttonicon"+dlgtype)) >+ button.setAttribute("icon", this.getAttribute("buttonicon"+dlgtype)); >+ // otherwise set defaults >+ else >+ switch (dlgtype) { >+ case "accept": >+ button.setAttribute("icon","accept"); >+ break; >+ case "cancel": >+ button.setAttribute("icon","cancel"); >+ break; >+ case "disclosue": >+ button.setAttribute("icon","properties"); >+ break; >+ case "help": >+ button.setAttribute("icon","help"); >+ break; >+ default: >+ break; >+ } >+ } > } > > // ensure that hitting enter triggers ondialogaccept >--- toolkit/content/widgets/expander.xml >+++ toolkit/content/widgets/expander.xml >@@ -12,7 +12,7 @@ > <xul:hbox align="center"> > <xul:button type="disclosure" class="expanderButton" anonid="disclosure" xbl:inherits="disabled" mousethrough="always"/> > <xul:label class="header expanderButton" anonid="label" xbl:inherits="value=label,disabled" mousethrough="always" flex="1"/> >- <xul:button anonid="clear-button" xbl:inherits="label=clearlabel,disabled=cleardisabled,hidden=clearhidden" mousethrough="always"/> >+ <xul:button anonid="clear-button" xbl:inherits="label=clearlabel,disabled=cleardisabled,hidden=clearhidden" mousethrough="always" icon="clear"/> > </xul:hbox> > <xul:vbox flex="1" anonid="settings" class="settingsContainer" collapsed="true" xbl:inherits="align"> > <children/> >--- toolkit/content/widgets/tabbrowser.xml >+++ toolkit/content/widgets/tabbrowser.xml >@@ -1144,7 +1144,15 @@ > // clean up the before/afterselected attributes before removing the tab > oldTab.selected = false; > >- // XXX browser's destructor isn't always called, so we force a cleanup ourselves >+ // Because of the way XBL works (fields just set JS >+ // properties on the element) and the code we have in place >+ // to preserve the JS objects for any elements that have >+ // JS properties set on them, the browser element won't be >+ // destroyed until the document goes away. >+ // This has to hapen before we remove the child so that the >+ // XBL implementation of nsIObserver still works. But >+ // clearing focusedWindow happens below because it gets >+ // reset by updateCurrentBrowser. > oldBrowser.destroy(); > > this.mTabContainer.removeChild(oldTab); >@@ -1154,6 +1162,10 @@ > this.mPanelContainer.selectedIndex = newIndex; > > this.updateCurrentBrowser(); >+ >+ // see comment above destroy above >+ oldBrowser.focusedWindow = null; >+ oldBrowser.focusedElement = null; > } > ]]> > </body> >--- toolkit/content/widgets/wizard.xml >+++ toolkit/content/widgets/wizard.xml >@@ -64,9 +64,19 @@ > if (this.onFirstPage) { > this.canRewind = false; > this.setAttribute("firstpage", "true"); >+#ifdef XP_UNIX >+#ifndef XP_MACOSX >+ this._backButton.setAttribute('hidden', 'true'); >+#endif >+#endif > } else { > this.canRewind = true; > this.setAttribute("firstpage", "false"); >+#ifdef XP_UNIX >+#ifndef XP_MACOSX >+ this._backButton.setAttribute('hidden', 'false'); >+#endif >+#endif > } > > if (this.onLastPage) { >@@ -328,7 +338,11 @@ > var btn = document.getAnonymousElementByAttribute(this._wizardButtons, "dlgtype", aName); > if (btn) { > btn.addEventListener("command", this["_"+aName+"Func"], false); >- btn.setAttribute("label", this._bundle.GetStringFromName("button-"+aName)); >+#ifdef XP_UNIX >+#ifndef XP_MACOSX >+ btn.setAttribute("label", this._bundle.GetStringFromName("button-"+aName+"-gnome")); >+#endif >+#endif > this["_"+aName+"Button"] = btn; > } > return btn; >@@ -478,16 +492,22 @@ > <xul:separator class="wizard-buttons-separator groove"/> > <xul:hbox class="wizard-buttons-box-2"> > <xul:spacer flex="1"/> >- <xul:button class="wizard-button" dlgtype="back"/> >+#ifdef XP_UNIX >+ <xul:button class="wizard-button" dlgtype="cancel" icon="cancel"/> >+ <xul:spacer style="width: 24px"/> >+#endif >+ <xul:button class="wizard-button" dlgtype="back" icon="go-back"/> > <xul:deck class="wizard-next-deck" anonid="WizardButtonDeck"> > <xul:hbox> > <xul:button class="wizard-button" dlgtype="finish" default="true" flex="1"/> > </xul:hbox> > <xul:hbox> >- <xul:button class="wizard-button" dlgtype="next" default="true" flex="1"/> >+ <xul:button class="wizard-button" dlgtype="next" icon="go-forward" default="true" flex="1"/> > </xul:hbox> > </xul:deck> >- <xul:button class="wizard-button" dlgtype="cancel"/> >+#ifdef XP_WIN >+ <xul:button class="wizard-button" dlgtype="cancel" icon="cancel"/> >+#endif > </xul:hbox> > </xul:vbox> > </content> >--- toolkit/content/customizeCharset.xul >+++ toolkit/content/customizeCharset.xul >@@ -72,7 +72,7 @@ > > <hbox align="center"> > <button id="add_button" oncommand="AddAvailableCharset();" >- label="&add.label;" disabled="true"/> >+ label="&add.label;" icon="add" disabled="true"/> > </hbox> > </vbox> > >@@ -87,7 +87,7 @@ > <separator class="thin"/> > <hbox align="center"> > <button id="remove_button" oncommand="RemoveActiveCharset();" >- disabled="true" >+ disabled="true" icon="remove" > label="&remove.label;"/> > </hbox> > </vbox> >--- toolkit/content/customizeToolbar.xul >+++ toolkit/content/customizeToolbar.xul >@@ -73,14 +73,14 @@ > > <checkbox id="smallicons" oncommand="updateIconSize(this.checked);" label="&useSmallIcons.label;"/> > >- <button label="&addNewToolbar.label;" oncommand="addNewToolbar();"/> >- <button label="&restoreDefaultSet.label;" oncommand="restoreDefaultSet();"/> >+ <button label="&addNewToolbar.label;" oncommand="addNewToolbar();" icon="add"/> >+ <button label="&restoreDefaultSet.label;" oncommand="restoreDefaultSet();" icon="refresh"/> > </box> > > <separator class="groove"/> > > <hbox align="center" pack="end"> >- <button label="&saveChanges.label;" oncommand="onAccept();" default="true"/> >+ <button label="&saveChanges.label;" oncommand="onAccept();" default="true" icon="close"/> > </hbox> > </vbox> > >--- toolkit/content/finddialog.xul >+++ toolkit/content/finddialog.xul >@@ -66,8 +66,12 @@ > </vbox> > <vbox flex="1"> > <button id="btnFind" label="&findButton.label;" accesskey="&findButton.accesskey;" >- dlgtype="accept"/> >+ dlgtype="accept" icon="find"/> >+#ifdef XP_UNIX >+ <button label="&closeButton.label;" icon="close" dlgtype="cancel"/> >+#else > <button label="&cancelButton.label;" dlgtype="cancel"/> >+#endif > </vbox> > </hbox> > </dialog> >--- toolkit/locales/en-US/chrome/global/finddialog.dtd >+++ toolkit/locales/en-US/chrome/global/finddialog.dtd >@@ -13,7 +13,7 @@ > <!ENTITY findField.tooltip "Type one or more words to search for"> > <!ENTITY findButton.label "Find Next"> > <!ENTITY findButton.accesskey "F"> >-<!ENTITY cancelButton.label "Cancel"> >+<!ENTITY closeButton.label "Close"> > <!ENTITY up.label "Up"> > <!ENTITY up.accesskey "U"> > <!ENTITY down.label "Down"> >--- toolkit/mozapps/downloads/content/pref-downloads.xul >+++ toolkit/mozapps/downloads/content/pref-downloads.xul >@@ -59,7 +59,7 @@ > <radio id="alwaysAsk" label="&alwaysAsk.label;" value="false"/> > <hbox flex="1"> > <radio id="neverAsk" label="&neverAsk.label;" value="true"/> >- <button id="showFolder" label="&showFolder.label;" oncommand="showFolder();"/> >+ <button id="showFolder" label="&showFolder.label;" oncommand="showFolder();" icon="open"/> > </hbox> > </radiogroup> > </groupbox> >@@ -154,13 +154,13 @@ > <separator class="thin"/> > <hbox> > <button label="&editFileHandler.label;" accesskey="&editFileHandler.accesskey;" >- id="editFileHandler" oncommand="editFileHandler();"/> >+ id="editFileHandler" oncommand="editFileHandler();" icon="properties"/> > <button label="&removeFileHandler.label;" accesskey="&removeFileHandler.accesskey;" >- id="removeFileHandler" oncommand="removeFileHandler();"/> >+ id="removeFileHandler" oncommand="removeFileHandler();" icon="remove"/> > #ifdef MOZ_PHOENIX > <spring flex="1"/> > <button label="&plugins.label;" accesskey="&plugins.accesskey;" >- id="plugins" oncommand="showPlugins();"/> >+ id="plugins" oncommand="showPlugins();" icon="properties"/> > #endif > </hbox> > </vbox> >--- toolkit/mozapps/downloads/content/downloads.js >+++ toolkit/mozapps/downloads/content/downloads.js >@@ -738,6 +738,9 @@ > #ifdef XP_OS2 > return aFolderType == "Desktop" ? "Desk" : "Home"; > #endif >+#ifdef XP_UNIX >+ return aFolderType == "Desktop" ? "Desktop" : "Home"; >+#endif > return "Home"; > } > >--- toolkit/mozapps/downloads/content/pref-downloads.js >+++ toolkit/mozapps/downloads/content/pref-downloads.js >@@ -322,6 +322,9 @@ > #ifdef XP_OS2 > return aFolderType == "Desktop" ? "Desk" : "Home"; > #endif >+#ifdef XP_UNIX >+ return aFolderType == "Desktop" ? "Desktop" : "Home"; >+#endif > return "Home"; > } > >--- toolkit/mozapps/downloads/src/nsHelperAppDlg.js >+++ toolkit/mozapps/downloads/src/nsHelperAppDlg.js >@@ -0,0 +1,905 @@ >+/* >+*/ >+ >+/* This file implements the nsIHelperAppLauncherDialog interface. >+ * >+ * The implementation consists of a JavaScript "class" named nsUnknownContentTypeDialog, >+ * comprised of: >+ * - a JS constructor function >+ * - a prototype providing all the interface methods and implementation stuff >+ * >+ * In addition, this file implements an nsIModule object that registers the >+ * nsUnknownContentTypeDialog component. >+ */ >+ >+ >+/* ctor >+ */ >+function nsUnknownContentTypeDialog() { >+ // Initialize data properties. >+ this.mLauncher = null; >+ this.mContext = null; >+ this.mSourcePath = null; >+ this.chosenApp = null; >+ this.givenDefaultApp = false; >+ this.updateSelf = true; >+ this.mTitle = ""; >+} >+ >+nsUnknownContentTypeDialog.prototype = { >+ nsIMIMEInfo : Components.interfaces.nsIMIMEInfo, >+ >+ // This "class" supports nsIHelperAppLauncherDialog, and nsISupports. >+ QueryInterface: function (iid) { >+ if (!iid.equals(Components.interfaces.nsIHelperAppLauncherDialog) && >+ !iid.equals(Components.interfaces.nsISupports)) { >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ } >+ return this; >+ }, >+ >+ // ---------- nsIHelperAppLauncherDialog methods ---------- >+ >+ // show: Open XUL dialog using window watcher. Since the dialog is not >+ // modal, it needs to be a top level window and the way to open >+ // one of those is via that route). >+ show: function(aLauncher, aContext) { >+ this.mLauncher = aLauncher; >+ this.mContext = aContext; >+ // Display the dialog using the Window Watcher interface. >+ >+ var ir = aContext.QueryInterface(Components.interfaces.nsIInterfaceRequestor); >+ var dwi = ir.getInterface(Components.interfaces.nsIDOMWindowInternal); >+ var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] >+ .getService(Components.interfaces.nsIWindowWatcher); >+ this.mDialog = ww.openWindow(dwi, >+ "chrome://mozapps/content/downloads/unknownContentType.xul", >+ null, >+ "chrome,centerscreen,titlebar,dialog=yes,dependent", >+ null); >+ // Hook this object to the dialog. >+ this.mDialog.dialog = this; >+ >+ // Hook up utility functions. >+ this.getSpecialFolderKey = this.mDialog.getSpecialFolderKey; >+ >+ // Watch for error notifications. >+ this.progressListener.helperAppDlg = this; >+ this.mLauncher.setWebProgressListener(this.progressListener); >+ }, >+ >+ // promptForSaveToFile: Display file picker dialog and return selected file. >+ // This is called by the External Helper App Service >+ // after the ucth dialog calls |saveToDisk| with a null >+ // target filename (no target, therefore user must pick). >+ // >+ // Alternatively, if the user has selected to have all >+ // files download to a specific location, return that >+ // location and don't ask via the dialog. >+ // >+ // Note - this function is called without a dialog, so it cannot access any part >+ // of the dialog XUL as other functions on this object do. >+ promptForSaveToFile: function(aLauncher, aContext, aDefaultFile, aSuggestedFileExtension) { >+ var result = ""; >+ >+ this.mLauncher = aLauncher; >+ >+ // If the user is always downloading to the same location, the default download >+ // folder is stored in preferences. If a value is found stored, use that >+ // automatically and don't ask via a dialog. >+ const kDownloadFolderPref = "browser.download.defaultFolder"; >+ var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); >+ try { >+ result = prefs.getComplexValue(kDownloadFolderPref, Components.interfaces.nsILocalFile); >+ result = this.validateLeafName(result, aDefaultFile, aSuggestedFileExtension); >+ } >+ catch (e) { >+ // If we get here, it's because we have a new profile and the user has never configured download >+ // options, so "browser.download.defaultFolder" is not set yet. If the default is autodownload, >+ // we need to discover the default save location. >+ var autodownload = prefs.getBoolPref("browser.download.useDownloadDir"); >+ if (autodownload) { >+ function getSpecialFolderKey(aFolderType) >+ { >+ return aFolderType == "Desktop" ? "Desktop" : "Home"; >+ return "Home"; >+ } >+ >+ function getDownloadsFolder(aFolder) >+ { >+ var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties); >+ >+ var dir = fileLocator.get(getSpecialFolderKey(aFolder), Components.interfaces.nsILocalFile); >+ >+ var bundle = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService); >+ bundle = bundle.createBundle("chrome://mozapps/locale/downloads/unknownContentType.properties"); >+ >+ var description = bundle.GetStringFromName("myDownloads"); >+ if (aFolder != "Desktop") >+ dir.append(description); >+ >+ return dir; >+ } >+ >+ var defaultFolder = null; >+ switch (prefs.getIntPref("browser.download.folderList")) { >+ case 0: >+ defaultFolder = getDownloadsFolder("Desktop") >+ break; >+ case 1: >+ defaultFolder = getDownloadsFolder("Downloads"); >+ break; >+ case 2: >+ defaultFolder = prefs.getComplexValue("browser.download.dir", Components.interfaces.nsILocalFile); >+ break; >+ } >+ >+ // While we're here, set the pref too so that we don't keep coming back into this less efficient >+ // code block. >+ prefs.setComplexValue("browser.download.defaultFolder", Components.interfaces.nsILocalFile, defaultFolder); >+ >+ result = this.validateLeafName(defaultFolder, aDefaultFile, aSuggestedFileExtension); >+ } >+ } >+ >+ if (!result) { >+ // Use file picker to show dialog. >+ var nsIFilePicker = Components.interfaces.nsIFilePicker; >+ var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); >+ >+ var bundle = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService); >+ bundle = bundle.createBundle("chrome://mozapps/locale/downloads/unknownContentType.properties"); >+ >+ var windowTitle = bundle.GetStringFromName("saveDialogTitle"); >+ var parent = aContext.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindowInternal); >+ picker.init(parent, windowTitle, nsIFilePicker.modeSave); >+ picker.defaultString = aDefaultFile; >+ >+ if (aSuggestedFileExtension) { >+ // aSuggestedFileExtension includes the period, so strip it >+ picker.defaultExtension = aSuggestedFileExtension.substring(1); >+ } >+ else { >+ try { >+ picker.defaultExtension = this.mLauncher.MIMEInfo.primaryExtension; >+ } >+ catch (ex) { } >+ } >+ >+ var wildCardExtension = "*"; >+ if (aSuggestedFileExtension) { >+ wildCardExtension += aSuggestedFileExtension; >+ picker.appendFilter(this.mLauncher.MIMEInfo.Description, wildCardExtension); >+ } >+ >+ picker.appendFilters( nsIFilePicker.filterAll ); >+ >+ // Pull in the user's preferences and get the default download directory. >+ var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); >+ try { >+ var startDir = prefs.getComplexValue("browser.download.dir", Components.interfaces.nsILocalFile); >+ if (startDir.exists()) { >+ picker.displayDirectory = startDir; >+ } >+ } >+ catch(exception) { } >+ >+ var dlgResult = picker.show(); >+ >+ if (dlgResult == nsIFilePicker.returnCancel) { >+ // null result means user cancelled. >+ return null; >+ } >+ >+ >+ // Be sure to save the directory the user chose through the Save As... >+ // dialog as the new browser.download.dir >+ result = picker.file; >+ >+ if (result) { >+ var newDir = result.parent; >+ prefs.setComplexValue("browser.download.dir", Components.interfaces.nsILocalFile, newDir); >+ } >+ } >+ return result; >+ }, >+ >+ validateLeafName: function (aLocalFile, aLeafName, aFileExt) >+ { >+ if (aLeafName == "") >+ aLeafName = "unnamed" + (aFileExt ? "." + aFileExt : ""); >+ aLocalFile.append(aLeafName); >+ >+ this.makeFileUnique(aLocalFile); >+ >+ if (aLocalFile.isExecutable() && !this.mLauncher.targetFile.isExecutable()) { >+ var f = aLocalFile.clone(); >+ aLocalFile.leafName = aLocalFile.leafName + "." + this.mLauncher.MIMEInfo.primaryExtension; >+ >+ f.remove(false); >+ this.makeFileUnique(aLocalFile); >+ } >+ return aLocalFile; >+ }, >+ >+ makeFileUnique: function (aLocalFile) >+ { >+ try { >+ // Since we're automatically downloading, we don't get the file picker's >+ // logic to check for existing files, so we need to do that here. >+ // >+ // Note - this code is identical to that in >+ // browser/base/content/contentAreaUtils.js. >+ // If you are updating this code, update that code too! We can't share code >+ // here since this is called in a js component. >+ while (aLocalFile.exists()) { >+ var parts = /.+-(\d+)(\..*)?$/.exec(aLocalFile.leafName); >+ if (parts) { >+ aLocalFile.leafName = aLocalFile.leafName.replace(/((\d+)\.)|((\d+)$)/, >+ function (str, dot, dotNum, noDot, noDotNum, pos, s) { >+ return (parseInt(str) + 1) + (dot ? "." : ""); >+ }); >+ } >+ else { >+ aLocalFile.leafName = aLocalFile.leafName.replace(/\.|$/, "-1$&"); >+ } >+ } >+ aLocalFile.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0600); >+ } >+ catch (e) { >+ dump("*** exception in validateLeafName: " + e + "\n"); >+ if (aLocalFile.leafName == "" || aLocalFile.isDirectory()) { >+ aLocalFile.append("unnamed"); >+ if (aLocalFile.exists()) >+ aLocalFile.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0600); >+ } >+ } >+ }, >+ >+ // ---------- implementation methods ---------- >+ >+ // Web progress listener so we can detect errors while mLauncher is >+ // streaming the data to a temporary file. >+ progressListener: { >+ // Implementation properties. >+ helperAppDlg: null, >+ >+ // nsIWebProgressListener methods. >+ // Look for error notifications and display alert to user. >+ onStatusChange: function( aWebProgress, aRequest, aStatus, aMessage ) { >+ if ( aStatus != Components.results.NS_OK ) { >+ // Get prompt service. >+ var prompter = Components.classes[ "@mozilla.org/embedcomp/prompt-service;1" ] >+ .getService( Components.interfaces.nsIPromptService ); >+ // Display error alert (using text supplied by back-end). >+ prompter.alert( this.dialog, this.helperAppDlg.mTitle, aMessage ); >+ >+ // Close the dialog. >+ this.helperAppDlg.onCancel(); >+ if ( this.helperAppDlg.mDialog ) { >+ this.helperAppDlg.mDialog.close(); >+ } >+ } >+ }, >+ >+ // Ignore onProgressChange, onStateChange, onLocationChange, and onSecurityChange notifications. >+ onProgressChange: function( aWebProgress, >+ aRequest, >+ aCurSelfProgress, >+ aMaxSelfProgress, >+ aCurTotalProgress, >+ aMaxTotalProgress ) { >+ }, >+ >+ onStateChange: function( aWebProgress, aRequest, aStateFlags, aStatus ) { >+ }, >+ >+ onLocationChange: function( aWebProgress, aRequest, aLocation ) { >+ }, >+ >+ onSecurityChange: function( aWebProgress, aRequest, state ) { >+ } >+ }, >+ >+ // initDialog: Fill various dialog fields with initial content. >+ initDialog : function() { >+ // Put file name in window title. >+ var win = this.dialogElement( "unknownContentType" ); >+ var suggestedFileName = this.mLauncher.suggestedFileName; >+ >+ // Some URIs do not implement nsIURL, so we can't just QI. >+ var url = this.mLauncher.source; >+ var fname = ""; >+ this.mSourcePath = url.prePath; >+ try { >+ url = url.QueryInterface( Components.interfaces.nsIURL ); >+ // A url, use file name from it. >+ fname = url.fileName; >+ this.mSourcePath += url.directory; >+ } catch (ex) { >+ // A generic uri, use path. >+ fname = url.path; >+ this.mSourcePath += url.path; >+ } >+ >+ if (suggestedFileName) >+ fname = suggestedFileName; >+ >+ var displayName = fname.replace(/ +/g, " "); >+ >+ this.mTitle = this.dialogElement("strings").getFormattedString("title", [displayName]); >+ win.setAttribute( "title", this.mTitle ); >+ >+ // Put content type, filename and location into intro. >+ this.initIntro(url, fname, displayName); >+ >+ var iconString = "moz-icon://" + fname + "?size=16&contentType=" + this.mLauncher.MIMEInfo.MIMEType; >+ this.dialogElement("contentTypeImage").setAttribute("src", iconString); >+ >+ this.initAppAndSaveToDiskValues(); >+ >+ // Initialize "always ask me" box. This should always be disabled >+ // and set to true for the ambiguous type application/octet-stream. >+ // We don't also check for application/x-msdownload here since we >+ // want users to be able to autodownload .exe files. >+ var rememberChoice = this.dialogElement("rememberChoice"); >+ >+ var mimeType = this.mLauncher.MIMEInfo.MIMEType; >+ if (mimeType == "application/octet-stream" || >+ mimeType == "application/x-msdownload" || >+ this.mLauncher.targetFile.isExecutable()) { >+ rememberChoice.checked = false; >+ rememberChoice.disabled = true; >+ } >+ else { >+ rememberChoice.checked = !this.mLauncher.MIMEInfo.alwaysAskBeforeHandling; >+ } >+ this.toggleRememberChoice(rememberChoice); >+ >+ // XXXben - menulist won't init properly, hack. >+ var openHandler = this.dialogElement("openHandler"); >+ openHandler.parentNode.removeChild(openHandler); >+ var openHandlerBox = this.dialogElement("openHandlerBox"); >+ openHandlerBox.appendChild(openHandler); >+ >+ this.mDialog.setTimeout("dialog.postShowCallback()", 0); >+ >+ this.mDialog.document.documentElement.getButton("accept").disabled = true; >+ const nsITimer = Components.interfaces.nsITimer; >+ this._timer = Components.classes["@mozilla.org/timer;1"] >+ .createInstance(nsITimer); >+ this._timer.initWithCallback(this, 250, nsITimer.TYPE_ONE_SHOT); >+ }, >+ >+ _timer: null, >+ notify: function (aTimer) { >+ if (!this._blurred) >+ this.mDialog.document.documentElement.getButton('accept').disabled = false; >+ this._delayExpired = true; >+ }, >+ >+ postShowCallback: function () { >+ this.mDialog.sizeToContent(); >+ >+ // Set initial focus >+ this.dialogElement("mode").focus(); >+ }, >+ >+ // initIntro: >+ initIntro: function(url, filename, displayname) { >+ this.dialogElement( "location" ).value = displayname; >+ this.dialogElement( "location" ).setAttribute("realname", filename); >+ this.dialogElement( "location" ).setAttribute("tooltiptext", displayname); >+ >+ // if mSourcePath is a local file, then let's use the pretty path name instead of an ugly >+ // url... >+ var pathString = this.mSourcePath; >+ try >+ { >+ var fileURL = url.QueryInterface(Components.interfaces.nsIFileURL); >+ if (fileURL) >+ { >+ var fileObject = fileURL.file; >+ if (fileObject) >+ { >+ var parentObject = fileObject.parent; >+ if (parentObject) >+ { >+ pathString = parentObject.path; >+ } >+ } >+ } >+ } catch(ex) {} >+ >+ if (pathString == this.mSourcePath) >+ { >+ // wasn't a fileURL >+ var tmpurl = url.clone(); // don't want to change the real url >+ tmpurl.userPass = ""; >+ pathString = tmpurl.prePath; >+ } >+ >+ // Set the location text, which is separate from the intro text so it can be cropped >+ var location = this.dialogElement( "source" ); >+ location.value = pathString; >+ location.setAttribute("tooltiptext", this.mSourcePath); >+ >+ // Show the type of file. >+ var type = this.dialogElement("type"); >+ var mimeInfo = this.mLauncher.MIMEInfo; >+ >+ // 1. Try to use the pretty description of the type, if one is available. >+ var typeString = mimeInfo.Description; >+ >+ if (typeString == "") { >+ // 2. If there is none, use the extension to identify the file, e.g. "ZIP file" >+ var primaryExtension = ""; >+ try { >+ primaryExtension = mimeInfo.primaryExtension; >+ } >+ catch (ex) { >+ } >+ if (primaryExtension != "") >+ typeString = primaryExtension.toUpperCase() + " file"; >+ // 3. If we can't even do that, just give up and show the MIME type. >+ else >+ typeString = mimeInfo.MIMEType; >+ } >+ >+ type.value = typeString; >+ }, >+ >+ _blurred: false, >+ _delayExpired: false, >+ onBlur: function(aEvent) { >+ if (aEvent.target != this.mDialog.document) >+ return; >+ this._blurred = true; >+ this.mDialog.document.documentElement.getButton("accept").disabled = true; >+ }, >+ >+ onFocus: function(aEvent) { >+ if (aEvent.target != this.mDialog.document) >+ return; >+ this._blurred = false; >+ if (this._delayExpired) { >+ var script = "document.documentElement.getButton('accept').disabled = false"; >+ this.mDialog.setTimeout(script, 250); >+ } >+ }, >+ >+ // Returns true if opening the default application makes sense. >+ openWithDefaultOK: function() { >+ var result; >+ >+ // The checking is different on Windows... >+ // On other platforms, default is Ok if there is a default app. >+ // Note that nsIMIMEInfo providers need to ensure that this holds true >+ // on each platform. >+ return this.mLauncher.MIMEInfo.hasDefaultHandler; >+ }, >+ >+ // Set "default" application description field. >+ initDefaultApp: function() { >+ // Use description, if we can get one. >+ var desc = this.mLauncher.MIMEInfo.defaultDescription; >+ if (desc) { >+ var defaultApp = this.dialogElement("strings").getFormattedString("defaultApp", [desc]); >+ this.dialogElement("defaultHandler").label = defaultApp; >+ } >+ else { >+ this.dialogElement("modeDeck").setAttribute("selectedIndex", "1"); >+ // Hide the default handler item too, in case the user picks a >+ // custom handler at a later date which triggers the menulist to show. >+ this.dialogElement("defaultHandler").hidden = true; >+ } >+ }, >+ >+ // getPath: >+ getPath: function (aFile) { >+ return aFile.path; >+ }, >+ >+ // initAppAndSaveToDiskValues: >+ initAppAndSaveToDiskValues: function() { >+ var modeGroup = this.dialogElement("mode"); >+ >+ // We don't let users open .exe files or random binary data directly >+ // from the browser at the moment because of security concerns. >+ var openWithDefaultOK = this.openWithDefaultOK(); >+ var mimeType = this.mLauncher.MIMEInfo.MIMEType; >+ if (this.mLauncher.targetFile.isExecutable() || ( >+ (mimeType == "application/octet-stream" || >+ mimeType == "application/x-msdownload") && >+ !openWithDefaultOK)) { >+ this.dialogElement("open").disabled = true; >+ var openHandler = this.dialogElement("openHandler"); >+ openHandler.disabled = true; >+ openHandler.label = ""; >+ modeGroup.selectedItem = this.dialogElement("save"); >+ return; >+ } >+ >+ // Fill in helper app info, if there is any. >+ this.chosenApp = this.mLauncher.MIMEInfo.preferredApplicationHandler; >+ // Initialize "default application" field. >+ this.initDefaultApp(); >+ >+ var otherHandler = this.dialogElement("otherHandler"); >+ >+ // Fill application name textbox. >+ if (this.chosenApp && this.chosenApp.path) { >+ otherHandler.setAttribute("path", this.getPath(this.chosenApp)); >+ otherHandler.label = this.chosenApp.leafName; >+ otherHandler.hidden = false; >+ } >+ >+ var useDefault = this.dialogElement("useSystemDefault"); >+ var openHandler = this.dialogElement("openHandler"); >+ openHandler.selectedIndex = 0; >+ >+ if (this.mLauncher.MIMEInfo.preferredAction == this.nsIMIMEInfo.useSystemDefault) { >+ // Open (using system default). >+ modeGroup.selectedItem = this.dialogElement("open"); >+ } else if (this.mLauncher.MIMEInfo.preferredAction == this.nsIMIMEInfo.useHelperApp) { >+ // Open with given helper app. >+ modeGroup.selectedItem = this.dialogElement("open"); >+ openHandler.selectedIndex = 1; >+ } else { >+ // Save to disk. >+ modeGroup.selectedItem = this.dialogElement("save"); >+ } >+ >+ // If we don't have a "default app" then disable that choice. >+ if (!openWithDefaultOK) { >+ var useDefault = this.dialogElement("defaultHandler"); >+ var isSelected = useDefault.selected; >+ >+ // Disable that choice. >+ useDefault.hidden = true; >+ // If that's the default, then switch to "save to disk." >+ if (isSelected) { >+ openHandler.selectedIndex = 1; >+ modeGroup.selectedItem = this.dialogElement("save"); >+ } >+ } >+ >+ // otherHandler is always disabled on Mac >+ otherHandler.nextSibling.hidden = otherHandler.nextSibling.nextSibling.hidden = false; >+ this.updateOKButton(); >+ }, >+ >+ // Returns the user-selected application >+ helperAppChoice: function() { >+ return this.chosenApp; >+ }, >+ >+ get saveToDisk() { >+ return this.dialogElement("save").selected; >+ }, >+ >+ get useOtherHandler() { >+ return this.dialogElement("open").selected && this.dialogElement("openHandler").selectedIndex == 1; >+ }, >+ >+ get useSystemDefault() { >+ return this.dialogElement("open").selected && this.dialogElement("openHandler").selectedIndex == 0; >+ }, >+ >+ toggleRememberChoice: function (aCheckbox) { >+ this.dialogElement("settingsChange").hidden = !aCheckbox.checked; >+ this.mDialog.sizeToContent(); >+ }, >+ >+ openHandlerCommand: function () { >+ var openHandler = this.dialogElement("openHandler"); >+ if (openHandler.selectedItem.id == "choose") >+ this.chooseApp(); >+ else >+ openHandler.setAttribute("lastSelectedItemID", openHandler.selectedItem.id); >+ }, >+ >+ updateOKButton: function() { >+ var ok = false; >+ if (this.dialogElement("save").selected) { >+ // This is always OK. >+ ok = true; >+ } >+ else if (this.dialogElement("open").selected) { >+ switch (this.dialogElement("openHandler").selectedIndex) { >+ case 0: >+ // No app need be specified in this case. >+ ok = true; >+ break; >+ case 1: >+ // only enable the OK button if we have a default app to use or if >+ // the user chose an app.... >+ ok = this.chosenApp || /\S/.test(this.dialogElement("otherHandler").getAttribute("path")); >+ break; >+ } >+ } >+ >+ // Enable Ok button if ok to press. >+ this.mDialog.document.documentElement.getButton("accept").disabled = !ok; >+ }, >+ >+ // Returns true iff the user-specified helper app has been modified. >+ appChanged: function() { >+ return this.helperAppChoice() != this.mLauncher.MIMEInfo.preferredApplicationHandler; >+ }, >+ >+ updateMIMEInfo: function() { >+ var needUpdate = false; >+ // If current selection differs from what's in the mime info object, >+ // then we need to update. >+ if (this.saveToDisk) { >+ needUpdate = this.mLauncher.MIMEInfo.preferredAction != this.nsIMIMEInfo.saveToDisk; >+ if (needUpdate) >+ this.mLauncher.MIMEInfo.preferredAction = this.nsIMIMEInfo.saveToDisk; >+ } >+ else if (this.useSystemDefault) { >+ needUpdate = this.mLauncher.MIMEInfo.preferredAction != this.nsIMIMEInfo.useSystemDefault; >+ if (needUpdate) >+ this.mLauncher.MIMEInfo.preferredAction = this.nsIMIMEInfo.useSystemDefault; >+ } >+ else { >+ // For "open with", we need to check both preferred action and whether the user chose >+ // a new app. >+ needUpdate = this.mLauncher.MIMEInfo.preferredAction != this.nsIMIMEInfo.useHelperApp || this.appChanged(); >+ if (needUpdate) { >+ this.mLauncher.MIMEInfo.preferredAction = this.nsIMIMEInfo.useHelperApp; >+ // App may have changed - Update application and description >+ var app = this.helperAppChoice(); >+ this.mLauncher.MIMEInfo.preferredApplicationHandler = app; >+ this.mLauncher.MIMEInfo.applicationDescription = ""; >+ } >+ } >+ // We will also need to update if the "always ask" flag has changed. >+ needUpdate = needUpdate || this.mLauncher.MIMEInfo.alwaysAskBeforeHandling != (!this.dialogElement("rememberChoice").checked); >+ >+ // One last special case: If the input "always ask" flag was false, then we always >+ // update. In that case we are displaying the helper app dialog for the first >+ // time for this mime type and we need to store the user's action in the mimeTypes.rdf >+ // data source (whether that action has changed or not; if it didn't change, then we need >+ // to store the "always ask" flag so the helper app dialog will or won't display >+ // next time, per the user's selection). >+ needUpdate = needUpdate || !this.mLauncher.MIMEInfo.alwaysAskBeforeHandling; >+ >+ // Make sure mime info has updated setting for the "always ask" flag. >+ this.mLauncher.MIMEInfo.alwaysAskBeforeHandling = !this.dialogElement("rememberChoice").checked; >+ >+ return needUpdate; >+ }, >+ >+ // See if the user changed things, and if so, update the >+ // mimeTypes.rdf entry for this mime type. >+ updateHelperAppPref: function() { >+ var ha = new this.mDialog.HelperApps(); >+ ha.updateTypeInfo(this.mLauncher.MIMEInfo); >+ }, >+ >+ // onOK: >+ onOK: function() { >+ // Verify typed app path, if necessary. >+ if (this.useOtherHandler) { >+ var helperApp = this.helperAppChoice(); >+ if (!helperApp || !helperApp.exists()) { >+ // Show alert and try again. >+ var bundle = this.dialogElement("strings"); >+ var msg = bundle.getFormattedString("badApp", [this.dialogElement("otherHandler").path]); >+ var svc = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); >+ svc.alert(this.mDialog, bundle.getString("badApp.title"), msg); >+ >+ // Disable the OK button. >+ this.mDialog.document.documentElement.getButton("accept").disabled = true; >+ this.dialogElement("mode").focus(); >+ >+ // Clear chosen application. >+ this.chosenApp = null; >+ >+ // Leave dialog up. >+ return false; >+ } >+ } >+ >+ // Remove our web progress listener (a progress dialog will be >+ // taking over). >+ this.mLauncher.setWebProgressListener(null); >+ >+ // saveToDisk and launchWithApplication can return errors in >+ // certain circumstances (e.g. The user clicks cancel in the >+ // "Save to Disk" dialog. In those cases, we don't want to >+ // update the helper application preferences in the RDF file. >+ try { >+ var needUpdate = this.updateMIMEInfo(); >+ >+ if (this.dialogElement("save").selected) { >+ // If we're using a default download location, create a path >+ // for the file to be saved to to pass to |saveToDisk| - otherwise >+ // we must ask the user to pick a save name. >+ >+ this.mLauncher.saveToDisk(null, false); >+ } >+ else >+ this.mLauncher.launchWithApplication(null, false); >+ >+ // Update user pref for this mime type (if necessary). We do not >+ // store anything in the mime type preferences for the ambiguous >+ // type application/octet-stream. We do NOT do this for >+ // application/x-msdownload since we want users to be able to >+ // autodownload these to disk. >+ if (needUpdate && this.mLauncher.MIMEInfo.MIMEType != "application/octet-stream") >+ this.updateHelperAppPref(); >+ } catch(e) { } >+ >+ // Unhook dialog from this object. >+ this.mDialog.dialog = null; >+ >+ // Close up dialog by returning true. >+ return true; >+ }, >+ >+ // onCancel: >+ onCancel: function() { >+ // Remove our web progress listener. >+ this.mLauncher.setWebProgressListener(null); >+ >+ // Cancel app launcher. >+ try { >+ this.mLauncher.Cancel(); >+ } catch(exception) { >+ } >+ >+ // Unhook dialog from this object. >+ this.mDialog.dialog = null; >+ >+ // Close up dialog by returning true. >+ return true; >+ }, >+ >+ // dialogElement: Convenience. >+ dialogElement: function(id) { >+ return this.mDialog.document.getElementById(id); >+ }, >+ >+ // chooseApp: Open file picker and prompt user for application. >+ chooseApp: function() { >+ var nsIFilePicker = Components.interfaces.nsIFilePicker; >+ var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); >+ fp.init(this.mDialog, >+ this.dialogElement("strings").getString("chooseAppFilePickerTitle"), >+ nsIFilePicker.modeOpen); >+ >+ fp.appendFilters(nsIFilePicker.filterApps); >+ >+ if (fp.show() == nsIFilePicker.returnOK && fp.file) { >+ // Show the "handler" menulist since we have a (user-specified) >+ // application now. >+ this.dialogElement("modeDeck").setAttribute("selectedIndex", "0"); >+ >+ // Remember the file they chose to run. >+ this.chosenApp = fp.file; >+ // Update dialog. >+ var otherHandler = this.dialogElement("otherHandler"); >+ otherHandler.removeAttribute("hidden"); >+ otherHandler.setAttribute("path", this.getPath(this.chosenApp)); >+ otherHandler.label = this.chosenApp.leafName; >+ this.dialogElement("openHandler").selectedIndex = 1; >+ this.dialogElement("openHandler").setAttribute("lastSelectedItemID", "otherHandler"); >+ >+ this.dialogElement("mode").selectedItem = this.dialogElement("open"); >+ } >+ else { >+ var openHandler = this.dialogElement("openHandler"); >+ var lastSelectedID = openHandler.getAttribute("lastSelectedItemID"); >+ if (!lastSelectedID) >+ lastSelectedID = "defaultHandler"; >+ openHandler.selectedItem = this.dialogElement(lastSelectedID); >+ } >+ }, >+ >+ // Turn this on to get debugging messages. >+ debug: false, >+ >+ // Dump text (if debug is on). >+ dump: function( text ) { >+ if ( this.debug ) { >+ dump( text ); >+ } >+ }, >+ >+ // dumpInfo: >+ doDebug: function() { >+ const nsIProgressDialog = Components.interfaces.nsIProgressDialog; >+ // Open new progress dialog. >+ var progress = Components.classes[ "@mozilla.org/progressdialog;1" ] >+ .createInstance( nsIProgressDialog ); >+ // Show it. >+ progress.open( this.mDialog ); >+ }, >+ >+ // dumpObj: >+ dumpObj: function( spec ) { >+ var val = "<undefined>"; >+ try { >+ val = eval( "this."+spec ).toString(); >+ } catch( exception ) { >+ } >+ this.dump( spec + "=" + val + "\n" ); >+ }, >+ >+ // dumpObjectProperties >+ dumpObjectProperties: function( desc, obj ) { >+ for( prop in obj ) { >+ this.dump( desc + "." + prop + "=" ); >+ var val = "<undefined>"; >+ try { >+ val = obj[ prop ]; >+ } catch ( exception ) { >+ } >+ this.dump( val + "\n" ); >+ } >+ } >+} >+ >+// This Component's module implementation. All the code below is used to get this >+// component registered and accessible via XPCOM. >+var module = { >+ firstTime: true, >+ >+ // registerSelf: Register this component. >+ registerSelf: function (compMgr, fileSpec, location, type) { >+ if (this.firstTime) { >+ this.firstTime = false; >+ throw Components.results.NS_ERROR_FACTORY_REGISTER_AGAIN; >+ } >+ compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar); >+ >+ compMgr.registerFactoryLocation( this.cid, >+ "Unknown Content Type Dialog", >+ this.contractId, >+ fileSpec, >+ location, >+ type ); >+ }, >+ >+ // getClassObject: Return this component's factory object. >+ getClassObject: function (compMgr, cid, iid) { >+ if (!cid.equals(this.cid)) { >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ } >+ >+ if (!iid.equals(Components.interfaces.nsIFactory)) { >+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED; >+ } >+ >+ return this.factory; >+ }, >+ >+ /* CID for this class */ >+ cid: Components.ID("{F68578EB-6EC2-4169-AE19-8C6243F0ABE1}"), >+ >+ /* Contract ID for this class */ >+ contractId: "@mozilla.org/helperapplauncherdialog;1", >+ >+ /* factory object */ >+ factory: { >+ // createInstance: Return a new nsProgressDialog object. >+ createInstance: function (outer, iid) { >+ if (outer != null) >+ throw Components.results.NS_ERROR_NO_AGGREGATION; >+ >+ return (new nsUnknownContentTypeDialog()).QueryInterface(iid); >+ } >+ }, >+ >+ // canUnload: n/a (returns true) >+ canUnload: function(compMgr) { >+ return true; >+ } >+}; >+ >+// NSGetModule: Return the nsIModule object. >+function NSGetModule(compMgr, fileSpec) { >+ return module; >+} >--- toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in >+++ toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in >@@ -148,6 +148,9 @@ > #ifdef XP_OS2 > return aFolderType == "Desktop" ? "Desk" : "Home"; > #endif >+#ifdef XP_UNIX >+ return aFolderType == "Desktop" ? "Desktop" : "Home"; >+#endif > return "Home"; > } > >--- toolkit/mozapps/extensions/content/extensions.js >+++ toolkit/mozapps/extensions/content/extensions.js >@@ -678,7 +678,8 @@ > return !selectedItem || > (selectedItem && > selectedItem.getAttribute("toBeUninstalled") != "true" && >- selectedItem.getAttribute("toBeInstalled") != "true"); >+ selectedItem.getAttribute("toBeInstalled") != "true" && >+ selectedItem.getAttribute("locked") != "true"); > case "cmd_reallyEnable": > // controls whether to show Enable or Disable in extensions' context menu > return selectedItem && >@@ -694,8 +695,7 @@ > case "cmd_disable": > return selectedItem && > !selectedItem.disabled && >- selectedItem.getAttribute("toBeUninstalled") != "true" && >- selectedItem.getAttribute("locked") != "true"; >+ selectedItem.getAttribute("toBeUninstalled") != "true"; > case "cmd_movetop": > return selectedItem && (gExtensionsView.children[0] != selectedItem); > case "cmd_moveup": >--- toolkit/mozapps/extensions/content/extensions.xul >+++ toolkit/mozapps/extensions/content/extensions.xul >@@ -268,9 +268,11 @@ > label="&cmd.uninstall.label;" accesskey="&cmd.uninstall.accesskey;" tooltiptext="&cmd.uninstall.tooltip;" > command="cmd_uninstall"/> > <separator class="commandBarSeparator"/> >+ <!-- > <button id="updateButton" > label="&cmd.update.label;" accesskey="&cmd.update.accesskey;" tooltiptext="&cmd.update.tooltip;" > command="cmd_update"/> >+ --> > <separator class="commandBarSeparator"/> > <button id="optionsButton" > label="&cmd.options.label;" accesskey="&cmd.options.accesskey;" tooltiptext="&cmd.options.tooltip;" >--- toolkit/mozapps/extensions/src/nsExtensionManager.js >+++ toolkit/mozapps/extensions/src/nsExtensionManager.js >@@ -0,0 +1,4609 @@ >+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is the Extension Manager. >+ * >+ * The Initial Developer of the Original Code is Ben Goodger. >+ * Portions created by the Initial Developer are Copyright (C) 2004 >+ * the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * Ben Goodger <ben@bengoodger.com> >+ * Mike Hommey <mh@glandium.org> >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+const nsIExtensionManager = Components.interfaces.nsIExtensionManager; >+const nsIUpdateService = Components.interfaces.nsIUpdateService; >+const nsIUpdateItem = Components.interfaces.nsIUpdateItem; >+ >+const PREF_EM_APP_ID = "app.id"; >+const PREF_EM_APP_VERSION = "app.version"; >+const PREF_EM_APP_EXTENSIONS_VERSION = "app.extensions.version"; >+const PREF_EM_APP_BUILDID = "app.build_id"; >+const PREF_EM_LAST_APP_VERSION = "extensions.lastAppVersion"; >+const PREF_UPDATE_COUNT = "extensions.update.count"; >+const PREF_UPDATE_DEFAULT_URL = "extensions.update.url"; >+const PREF_EM_WASINSAFEMODE = "extensions.wasInSafeMode"; >+const PREF_EM_DISABLEDOBSOLETE = "extensions.disabledObsolete"; >+const PREF_EM_LAST_SELECTED_SKIN = "extensions.lastSelectedSkin"; >+const PREF_EM_EXTENSION_FORMAT = "extensions.%UUID%."; >+const PREF_EM_ITEM_UPDATE_ENABLED = "extensions.%UUID%.update.enabled"; >+const PREF_EM_ITEM_UPDATE_URL = "extensions.%UUID%.update.url"; >+const PREF_EM_DSS_ENABLED = "extensions.dss.enabled"; >+ >+const PREF_GENERAL_SKINS_SELECTEDSKIN = "general.skins.selectedSkin"; >+ >+const DIR_EXTENSIONS = "extensions"; >+const DIR_UNINSTALL = "uninstall"; >+const DIR_TEMP = "temp"; >+const DIR_CHROME = "chrome"; >+const DIR_COMPONENTS = "components"; >+const DIR_DEFAULTS = "defaults"; >+const DIR_DEFAULTS_PREFS = "preferences"; >+const DIR_DEFAULTS_EXTENSIONS = "extensions"; >+const DIR_CR_CHROME = "chrome"; >+const DIR_CR_OVERLAYINFO = "overlayinfo"; >+const FILE_CR_CHROMEDS = "chrome.rdf"; >+const FILE_EXTENSIONS = "Extensions.rdf"; >+const FILE_UNINSTALL_LOG = "Uninstall"; >+const FILE_DEFAULTS = "defaults.ini"; >+const FILE_COMPONENT_MANIFEST = "components.ini"; >+const FILE_COMPAT_MANIFEST = "compatibility.ini"; >+const FILE_INSTALL_MANIFEST = "install.rdf"; >+const FILE_CHROME_MANIFEST = "contents.rdf"; >+const FILE_WASINSAFEMODE = "Safe Mode"; >+const FILE_INSTALLED_EXTENSIONS = "installed-extensions.txt" >+const FILE_INSTALLED_EXTENSIONS_PROCESSED = "installed-extensions-processed.txt" >+ >+const KEY_PROFILEDIR = "ProfD"; >+const KEY_APPDIR = "XCurProcD"; >+const KEY_DEFAULTS = "ProfDefNoLoc"; >+const KEY_DEFAULT_THEME = "classic/1.0"; >+ >+const ERROR_INVALID_VERSION = -1; >+const ERROR_PHONED_HOME = -2; >+const ERROR_EXTENSION_IS_THEME = -3; >+ >+var gPref = null; >+var gRDF = null; >+var gOS = null; >+var gVersionChecker = null; >+ >+function getVersionChecker() >+{ >+ if (!gVersionChecker) { >+ gVersionChecker = Components.classes["@mozilla.org/updates/version-checker;1"] >+ .getService(Components.interfaces.nsIVersionChecker); >+ } >+ return gVersionChecker; >+} >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// Utility Functions >+// >+const EM_NS_PREFIX = "http://www.mozilla.org/2004/em-rdf#"; >+const CHROME_NS_PREFIX = "http://www.mozilla.org/rdf/chrome#"; >+ >+function EM_NS(aProperty) >+{ >+ return EM_NS_PREFIX + aProperty; >+} >+ >+function CHROME_NS(aProperty) >+{ >+ return CHROME_NS_PREFIX + aProperty; >+} >+ >+// Returns the specified directory hierarchy under the special directory >+// specified by aKey, creating directories along the way if necessary. >+function getDir(aKey, aSubDirs) >+{ >+ return getDirInternal(aKey, aSubDirs, true); >+} >+ >+function getDirNoCreate(aKey, aSubDirs) >+{ >+ return getDirInternal(aKey, aSubDirs, false); >+} >+ >+function getDirInternal(aKey, aSubDirs, aCreate) >+{ >+ var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"] >+ .getService(Components.interfaces.nsIProperties); >+ var dir = fileLocator.get(aKey, Components.interfaces.nsIFile); >+ for (var i = 0; i < aSubDirs.length; ++i) { >+ dir.append(aSubDirs[i]); >+ if (aCreate && !dir.exists()) >+ dir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755); >+ } >+ return dir; >+} >+ >+// Returns the file at the appropriate point in a directory hierarchy under >+// the specified key. Does NOT create the file NOR the directories along the >+// way. >+function getFileNoCreateDir(aKey, aPathToFile) >+{ >+ var subdirs = []; >+ for (var i = 0; i < aPathToFile.length - 1; ++i) >+ subdirs.push(aPathToFile[i]); >+ var file = getDirNoCreate(aKey, subdirs); >+ file.append(aPathToFile[aPathToFile.length - 1]); >+ return file; >+} >+ >+// Returns the file at the appropriate point in a directory hierarchy under >+// the specified key, creating directories along the way if necessary. Does >+// NOT create the file. >+function getFile(aKey, aPathToFile) >+{ >+ var subdirs = []; >+ for (var i = 0; i < aPathToFile.length - 1; ++i) >+ subdirs.push(aPathToFile[i]); >+ var file = getDir(aKey, subdirs); >+ file.append(aPathToFile[aPathToFile.length - 1]); >+ return file; >+} >+ >+function getDirKey(aIsProfile) >+{ >+ return aIsProfile ? KEY_PROFILEDIR : KEY_APPDIR; >+} >+ >+function dumpFile(aFile) >+{ >+ dump("*** file = " + aFile.path + ", exists = " + aFile.exists() + "\n"); >+} >+ >+// We use this to force RDF to bypass the cache when loading certain types >+// of files. >+function getRandomFileName(aName, aExtension) >+{ >+ var characters = "abcdefghijklmnopqrstuvwxyz0123456789"; >+ var nameString = aName + "-"; >+ for (var i = 0; i < 3; ++i) { >+ var index = Math.round((Math.random()) * characters.length); >+ nameString += characters.charAt(index); >+ } >+ return nameString + "." + aExtension; >+} >+ >+const PREFIX_EXTENSION = "urn:mozilla:extension:"; >+const PREFIX_THEME = "urn:mozilla:theme:"; >+const ROOT_EXTENSION = "urn:mozilla:extension:root"; >+const ROOT_THEME = "urn:mozilla:theme:root"; >+ >+function getItemPrefix(aItemType) >+{ >+ var prefix = ""; >+ if (aItemType & nsIUpdateItem.TYPE_EXTENSION) >+ prefix = PREFIX_EXTENSION; >+ else if (aItemType & nsIUpdateItem.TYPE_THEME) >+ prefix = PREFIX_THEME; >+ return prefix; >+} >+ >+function getItemRoot(aItemType) >+{ >+ var root = ""; >+ if (aItemType & nsIUpdateItem.TYPE_EXTENSION) >+ root = ROOT_EXTENSION; >+ else if (aItemType & nsIUpdateItem.TYPE_THEME) >+ root = ROOT_THEME; >+ return root; >+} >+ >+function getItemRoots(aItemType) >+{ >+ var roots = []; >+ if (aItemType == nsIUpdateItem.TYPE_ADDON) >+ roots = roots.concat([getItemRoot(nsIUpdateItem.TYPE_EXTENSION), >+ getItemRoot(nsIUpdateItem.TYPE_THEME)]); >+ else >+ roots.push(getItemRoot(aItemType)); >+ return roots; >+} >+ >+function getItemType(aURI) >+{ >+ var type = -1; >+ if (aURI.substr(0, PREFIX_EXTENSION.length) == PREFIX_EXTENSION) >+ type = nsIUpdateItem.TYPE_EXTENSION; >+ else if (aURI.substr(0, PREFIX_THEME.length) == PREFIX_THEME) >+ type = nsIUpdateItem.TYPE_THEME; >+ return type; >+} >+ >+function stripPrefix(aURI, aItemType) >+{ >+ var val = aURI; >+ if (aItemType == nsIUpdateItem.TYPE_ADDON) >+ val = stripPrefix(aURI, getItemType(aURI)); >+ else { >+ var prefix = getItemPrefix(aItemType); >+ if (prefix && aURI.substr(0, prefix.length) == prefix) >+ val = aURI.substr(prefix.length, aURI.length); >+ } >+ return val; >+} >+ >+function stripPropertyPrefix(aProperty, aPrefix) >+{ >+ return aProperty.substr(aPrefix.length, aProperty.length); >+} >+ >+function getURLSpecFromFile(aFile) >+{ >+ var ioServ = Components.classes["@mozilla.org/network/io-service;1"] >+ .getService(Components.interfaces.nsIIOService); >+ var fph = ioServ.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler); >+ return fph.getURLSpecFromFile(aFile); >+} >+ >+function ensureExtensionsFiles(aIsProfile) >+{ >+ try { >+ var extensionsFile = getFile(getDirKey(aIsProfile), >+ [DIR_EXTENSIONS, FILE_EXTENSIONS]); >+ >+ // If the file does not exist at the current location, copy the default >+ // version over so we can access the various roots. >+ // This is a sign also that something may have gone wrong, such as the user >+ // deleting /Extensions so we should remove the relative contents.rdf and >+ // overlayinfo hierarchies too. >+ if (extensionsFile && !extensionsFile.exists()) { >+ var defaultFile = getFile(KEY_DEFAULTS, >+ [DIR_DEFAULTS_EXTENSIONS, FILE_EXTENSIONS]); >+ defaultFile.copyTo(extensionsFile.parent, extensionsFile.leafName); >+ >+ // XXXben - do this only for profile until we have a better protection >+ // mechanism for global items. >+ if (aIsProfile) { >+ try { >+ var chromedsFile = getFile(getDirKey(aIsProfile), [DIR_CR_CHROME, FILE_CR_CHROMEDS]); >+ if (chromedsFile.exists()) >+ chromedsFile.remove(false); >+ var overlayinfoDir = getDir(getDirKey(aIsProfile), [DIR_CR_CHROME, DIR_CR_OVERLAYINFO]); >+ if (overlayinfoDir.exists()) >+ overlayinfoDir.remove(true); >+ } >+ catch (e) { >+ dump("Extension System Warning: failed to remove chrome.rdf/overlay info because: " + e + "\n"); >+ } >+ } >+ } >+ } >+ catch (e) { >+ // Too early in the startup process to use the console, we may yet restart >+ // the app. >+ dump("Extension System Warning: Failed to set up default extensions" + >+ " files probably because you do not have write privileges to this" + >+ " location. While you can run Firefox like this, it is recommended" + >+ " that you run it at least once with privileges that allow it to generate" + >+ " these initial files to improve start performance. Running from a disk" + >+ " image on MacOS X is not recommended."); >+ } >+} >+ >+function stringData(aLiteralOrResource) >+{ >+ try { >+ var obj = aLiteralOrResource.QueryInterface(Components.interfaces.nsIRDFLiteral); >+ return obj.Value; >+ } >+ catch (e) { >+ try { >+ obj = aLiteralOrResource.QueryInterface(Components.interfaces.nsIRDFResource); >+ return obj.Value; >+ } >+ catch (e) {} >+ } >+ return "--"; >+} >+ >+function stackTraceFunctionFormat(aFunctionName) >+{ >+ var classDelimiter = aFunctionName.indexOf("_"); >+ var className = aFunctionName.substr(0, classDelimiter); >+ if (!className) >+ className == "<global>"; >+ var functionName = aFunctionName.substr(classDelimiter + 1, aFunctionName.length); >+ if (!functionName) >+ functionName == "<anonymous>"; >+ return className + "::" + functionName; >+} >+ >+function stackTrace(aArguments, aMaxCount) >+{ >+ dump("=[STACKTRACE]=====================================================\n"); >+ dump("*** at: " + stackTraceFunctionFormat(aArguments.callee.name) + "()\n"); >+ var temp = aArguments.callee.caller; >+ var count = 0; >+ while (temp) { >+ dump("*** " + stackTraceFunctionFormat(temp.name) + "()\n"); >+ >+ temp = temp.arguments.callee.caller; >+ if (aMaxCount > 0 && ++count == aMaxCount) >+ break; >+ } >+ dump("==================================================================\n"); >+} >+ >+/////////////////////////////////////////////////////////////////////////////// >+// Incompatible Item Error Message >+function showIncompatibleError(aDS) >+{ >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var extensionStrings = sbs.createBundle("chrome://mozapps/locale/extensions/extensions.properties"); >+ var params = [extensionStrings.GetStringFromName("extension")]; >+ var title = extensionStrings.formatStringFromName("incompatibleTitle", >+ params, params.length); >+ >+ var brandStrings = sbs.createBundle("chrome://global/locale/brand.properties"); >+ var brandShortName = brandStrings.GetStringFromName("brandShortName"); >+ >+ var message; >+ var metadata = {}; >+ getItemMetadata(aDS, metadata); >+ >+ if (undefined === metadata.minAppVersion) { >+ // getItemMetadata does not fill target application version range properties unless a >+ // matching supported target application is found. >+ params = [metadata.name, metadata.version, brandShortName]; >+ message = extensionStrings.formatStringFromName("incompatibleMessageNoApp", >+ params, params.length); >+ } >+ else if (metadata.minAppVersion == metadata.maxAppVersion) { >+ // If the min target app version and the max target app version are the same, don't show >+ // a message like, "Foo is only compatible with Firefox versions 0.7 to 0.7", rather just >+ // show, "Foo is only compatible with Firefox 0.7" >+ params = [metadata.name, metadata.version, brandShortName, metadata.name, >+ metadata.version, brandShortName, metadata.minAppVersion]; >+ message = extensionStrings.formatStringFromName("incompatibleMessageSingleAppVersion", >+ params, params.length); >+ } >+ else { >+ params = [metadata.name, metadata.version, brandShortName, metadata.name, >+ metadata.version, brandShortName, metadata.minAppVersion, >+ metadata.maxAppVersion]; >+ message = extensionStrings.formatStringFromName("incompatibleMessage", params, params.length); >+ } >+ var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] >+ .getService(Components.interfaces.nsIPromptService); >+ ps.alert(null, title, message); >+} >+ >+function showMalformedError(aFile) >+{ >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var extensionStrings = sbs.createBundle("chrome://mozapps/locale/extensions/extensions.properties"); >+ var title = extensionStrings.GetStringFromName("malformedTitle"); >+ >+ var brandStrings = sbs.createBundle("chrome://global/locale/brand.properties"); >+ var brandShortName = brandStrings.GetStringFromName("brandShortName"); >+ var message = extensionStrings.formatStringFromName("malformedMessage", [brandShortName, aFile], 2); >+ >+ var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] >+ .getService(Components.interfaces.nsIPromptService); >+ ps.alert(null, title, message); >+} >+ >+function showInvalidVersionError(aItemName, aVersion) >+{ >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var extensionStrings = sbs.createBundle("chrome://mozapps/locale/extensions/extensions.properties"); >+ var title = extensionStrings.GetStringFromName("invalidVersionTitle"); >+ >+ var brandStrings = sbs.createBundle("chrome://global/locale/brand.properties"); >+ var brandShortName = brandStrings.GetStringFromName("brandShortName"); >+ var params = [brandShortName, aItemName, aVersion]; >+ var message = extensionStrings.formatStringFromName("invalidVersionMessage", params, params.length); >+ >+ var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] >+ .getService(Components.interfaces.nsIPromptService); >+ ps.alert(null, title, message); >+} >+ >+function showOldThemeError(aDS) >+{ >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var extensionStrings = sbs.createBundle("chrome://mozapps/locale/extensions/extensions.properties"); >+ var params = [extensionStrings.GetStringFromName("theme")]; >+ var title = extensionStrings.formatStringFromName("incompatibleTitle", >+ params, params.length); >+ >+ var brandStrings = sbs.createBundle("chrome://global/locale/brand.properties"); >+ var brandShortName = brandStrings.GetStringFromName("brandShortName"); >+ var appVersion = extensionStrings.GetStringFromName("incompatibleOlder"); >+ >+ try { >+ var rdfc = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ rdfc.Init(aDS, gRDF.GetResource("urn:mozilla:skin:root")); >+ >+ var elts = rdfc.GetElements(); >+ var nameArc = gRDF.GetResource(CHROME_NS("displayName")); >+ while (elts.hasMoreElements()) { >+ var elt = elts.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ themeName = stringData(aDS.GetTarget(elt, nameArc, true)); >+ if (themeName) >+ break; >+ } >+ } >+ catch (e) { >+ themeName = extensionStrings.GetStringFromName("incompatibleThemeName"); >+ } >+ >+ params = [themeName, "", brandShortName, themeName, "", brandShortName, appVersion]; >+ var message = extensionStrings.formatStringFromName("incompatibleMessageSingleAppVersion", >+ params, params.length); >+ var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] >+ .getService(Components.interfaces.nsIPromptService); >+ ps.alert(null, title, message); >+} >+ >+function showMissingFileError(aSourceFile, aMissingFileName) >+{ >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var extensionStrings = sbs.createBundle("chrome://mozapps/locale/extensions/extensions.properties"); >+ var title = extensionStrings.GetStringFromName("missingFileTitle"); >+ >+ var brandStrings = sbs.createBundle("chrome://global/locale/brand.properties"); >+ var brandShortName = brandStrings.GetStringFromName("brandShortName"); >+ var params = [brandShortName, aMissingFileName]; >+ var message = extensionStrings.formatStringFromName("missingFileMessage", params, params.length); >+ >+ var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] >+ .getService(Components.interfaces.nsIPromptService); >+ ps.alert(null, title, message); >+ >+ var consoleService = Components.classes["@mozilla.org/consoleservice;1"] >+ .getService(Components.interfaces.nsIConsoleService); >+ params = [aSourceFile, aMissingFileName]; >+ var consoleMessage = extensionStrings.formatStringFromName("missingFileConsoleMessage", >+ params, params.length); >+ consoleService.logStringMessage(consoleMessage); >+} >+ >+function showMalformedRegistrationError(aCRException) >+{ >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var extensionStrings = sbs.createBundle("chrome://mozapps/locale/extensions/extensions.properties"); >+ var title = extensionStrings.GetStringFromName("malformedRegistrationTitle"); >+ >+ var brandStrings = sbs.createBundle("chrome://global/locale/brand.properties"); >+ var brandShortName = brandStrings.GetStringFromName("brandShortName"); >+ var params = [brandShortName]; >+ var message = extensionStrings.formatStringFromName("malformedRegistrationMessage", >+ params, params.length); >+ var detailsButtonMessage = extensionStrings.GetStringFromName("malformedRegistrationDetailsButton"); >+ >+ var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] >+ .getService(Components.interfaces.nsIPromptService); >+ var flags = (ps.BUTTON_TITLE_IS_STRING * ps.BUTTON_POS_1) + >+ (ps.BUTTON_TITLE_OK * ps.BUTTON_POS_0); >+ var result = ps.confirmEx(null, title, message, flags, null, detailsButtonMessage, null, null, { } ); >+ if (result == 1) { >+ var consoleService = Components.classes["@mozilla.org/consoleservice;1"] >+ .getService(Components.interfaces.nsIConsoleService); >+ params = [aCRException.extensionID, aCRException.functionName, >+ aCRException.chromePath, aCRException.isProfile, ]; >+ var consoleMessage = extensionStrings.formatStringFromName("malformedRegistrationConsoleMessage", >+ params, params.length); >+ consoleService.logStringMessage(consoleMessage); >+ >+ var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] >+ .getService(Components.interfaces.nsIWindowWatcher); >+ ww.openWindow(null, "chrome://global/content/console.xul", >+ "", "chrome,modal,centerscreen,resizable", null); >+ } >+} >+ >+function getItemMetadata(aDS, aResult) >+{ >+ var manifestRoot = gRDF.GetResource("urn:mozilla:install-manifest"); >+ >+ // Extension Name and Version >+ var props = ["name", "version"]; >+ for (var i = 0; i < props.length; ++i) { >+ var prop = gRDF.GetResource(EM_NS(props[i])); >+ aResult[props[i]] = stringData(aDS.GetTarget(manifestRoot, prop, true)); >+ } >+ >+ // Target App Name and Version >+ var appID = gPref.getCharPref(PREF_EM_APP_ID); >+ >+ var targets = aDS.GetTargets(manifestRoot, gRDF.GetResource(EM_NS("targetApplication")), true); >+ var idRes = gRDF.GetResource(EM_NS("id")); >+ var minVersionRes = gRDF.GetResource(EM_NS("minVersion")); >+ var maxVersionRes = gRDF.GetResource(EM_NS("maxVersion")); >+ while (targets.hasMoreElements()) { >+ var targetApp = targets.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var id = stringData(aDS.GetTarget(targetApp, idRes, true)); >+ var minVersion = stringData(aDS.GetTarget(targetApp, minVersionRes, true)); >+ var maxVersion = stringData(aDS.GetTarget(targetApp, maxVersionRes, true)); >+ >+ if (id == appID) { >+ aResult.minAppVersion = minVersion; >+ aResult.maxAppVersion = maxVersion; >+ break; >+ } >+ } >+} >+ >+function getInstallManifest(aFile) >+{ >+ var fileURL = getURLSpecFromFile(aFile); >+ var ds = gRDF.GetDataSourceBlocking(fileURL); >+ var manifestRoot = gRDF.GetResource("urn:mozilla:install-manifest"); >+ var arcs = ds.ArcLabelsOut(manifestRoot); >+ if (!arcs.hasMoreElements()) { >+ ds = null; >+ var uri = Components.classes["@mozilla.org/network/standard-url;1"] >+ .createInstance(Components.interfaces.nsIURI); >+ uri.spec = fileURL; >+ var url = uri.QueryInterface(Components.interfaces.nsIURL); >+ showMalformedError(url.fileName); >+ } >+ return ds; >+} >+ >+function ArrayEnumerator(aItems) >+{ >+ this._index = 0; >+ >+ if (aItems) { >+ for (var i = 0; i < aItems.length; ++i) { >+ if (!aItems[i]) >+ aItems.splice(i, 1); >+ } >+ } >+ >+ this._contents = aItems; >+} >+ >+ArrayEnumerator.prototype = { >+ _index: 0, >+ _contents: [], >+ >+ hasMoreElements: function ArrayEnumerator_hasMoreElements() >+ { >+ return this._index < this._contents.length; >+ }, >+ >+ getNext: function ArrayEnumerator_getNext() >+ { >+ return this._contents[this._index++]; >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsInstallLogBase >+// >+function nsInstallLogBase() >+{ >+} >+ >+nsInstallLogBase.prototype = { >+ CHROME_TYPE_PACKAGE : "package", >+ CHROME_TYPE_SKIN : "skin", >+ CHROME_TYPE_LOCALE : "locale", >+ >+ TOKEN_ADD_FILE : "add", >+ TOKEN_REGISTER_CHROME : "register", >+ TOKEN_PROFILE : "profile", >+ TOKEN_GLOBAL : "global", >+ TOKEN_SKIN : "skin" >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsInstallLogWriter >+// >+function nsInstallLogWriter(aExtensionID, aIsProfile) >+{ >+ this._isProfile = aIsProfile; >+ this._uninstallLog = getDir(getDirKey(aIsProfile), >+ [DIR_EXTENSIONS, aExtensionID, DIR_UNINSTALL]); >+ this._uninstallLog.append(FILE_UNINSTALL_LOG); >+} >+ >+nsInstallLogWriter.prototype = { >+ __proto__ : nsInstallLogBase.prototype, >+ _uninstallLog : null, >+ >+ open: function nsInstallLogWriter_open () >+ { >+ this._fos = Components.classes["@mozilla.org/network/file-output-stream;1"] >+ .createInstance(Components.interfaces.nsIFileOutputStream); >+ const MODE_WRONLY = 0x02; >+ const MODE_CREATE = 0x08; >+ const MODE_TRUNCATE = 0x20; >+ this._fos.init(this._uninstallLog, MODE_WRONLY | MODE_CREATE | MODE_TRUNCATE, 0644, 0); >+ }, >+ >+ close: function nsInstallLogWriter_close () >+ { >+ this._fos.close(); >+ }, >+ >+ addFile: function nsInstallLogWriter_addFile (aFile) >+ { >+ var line = "add\t" + aFile.persistentDescriptor + "\n"; >+ this._fos.write(line, line.length); >+ }, >+ >+ registerChrome: function nsInstallLogWriter_registerChrome (aProviderName, aChromeType, aIsProfile) >+ { >+ var profile = aIsProfile ? "profile" : "global"; >+ // register\tprofile\tpackage\t<provider_name> >+ var line = "register\t" + profile + "\t" + aChromeType + "\t" + aProviderName + "\n"; >+ this._fos.write(line, line.length); >+ }, >+ >+ installSkin: function nsInstallLogWriter_installSkin (aSkinName, aIsProfile) >+ { >+ var profile = aIsProfile ? "profile" : "global"; >+ // register\tprofile\tpackage\t<provider_name> >+ var line = "skin\t" + profile + "\t" + aSkinName + "\n"; >+ this._fos.write(line, line.length); >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsInstallLogReader >+// >+function nsInstallLogReader(aExtensionID, aIsProfile, aListener) >+{ >+ this._isProfile = aIsProfile; >+ this.uninstallLog = getFileNoCreateDir(getDirKey(aIsProfile), >+ [DIR_EXTENSIONS, aExtensionID, >+ DIR_UNINSTALL, FILE_UNINSTALL_LOG]); >+ // If the uninstall Log doesn't exist in profile, let's give a try in >+ // global extension pool. >+ if (aIsProfile && !this.uninstallLog.exists()) { >+ this._isProfile = false; >+ this.uninstallLog = getFileNoCreateDir(getDirKey(false), >+ [DIR_EXTENSIONS, aExtensionID, >+ DIR_UNINSTALL, FILE_UNINSTALL_LOG]); >+ } >+ this._listener = aListener >+} >+ >+nsInstallLogReader.prototype = { >+ __proto__ : nsInstallLogBase.prototype, >+ uninstallLog : null, >+ _listener : null, >+ >+ read: function nsInstallLogReader_read () >+ { >+ if (!this.uninstallLog.exists()) >+ return; >+ >+ var fis = Components.classes["@mozilla.org/network/file-input-stream;1"] >+ .createInstance(Components.interfaces.nsIFileInputStream); >+ fis.init(this.uninstallLog, -1, -1, false); >+ var lis = fis.QueryInterface(Components.interfaces.nsILineInputStream); >+ var line = { value: "" }; >+ var more = false; >+ var lines = []; >+ do { >+ more = lis.readLine(line); >+ lines.push(line.value); >+ } >+ while (more); >+ fis.close(); >+ >+ // Now that we've closed the stream we can remove all the files, unregister >+ // chrome, etc. >+ // >+ // The list of lines we pass to the uninstall handler should be in this >+ // order: >+ // 1) File additions >+ // 2) Chrome Package Registrations >+ // 3) Chrome Skin and Locale Registrations >+ // >+ // They must be in this order since skins and locales rely on packages, and >+ // the packages they rely on is not stored in the registration line so we >+ // simply "deselect" for every package installed by the extension. >+ var dependentLines = []; >+ for (var i = 0; i < lines.length; ++i) { >+ var parts = lines[i].split("\t"); >+ if (parts[1] == this.TOKEN_REGISTER_CHROME && >+ (parts[2] == this.CHROME_TYPE_SKIN || >+ parts[2] == this.CHROME_TYPE_LOCALE)) { >+ dependentLines.push(lines.splice(i, 1)); >+ } >+ } >+ lines.concat(dependentLines); >+ >+ for (var i = 0; i < lines.length; ++i) >+ this._parseLine(lines[i]); >+ }, >+ >+ _parseLine: function nsInstallLogReader__parseLine(aLine) >+ { >+ var parts = aLine.split("\t"); >+ switch (parts[0]) { >+ case this.TOKEN_ADD_FILE: >+ var prefix = this.TOKEN_ADD_FILE + "\t"; >+ var filePD = aLine.substr(prefix.length, aLine.length); >+ var lf = Components.classes["@mozilla.org/file/local;1"] >+ .createInstance(Components.interfaces.nsILocalFile); >+ try { >+ lf.persistentDescriptor = filePD; >+ this._listener.onAddFile(lf); >+ } >+ catch (e) { >+ dump("*** nsInstallLogReader::_parseLine - failed to remove file " + e + "\n"); >+ } >+ break; >+ case this.TOKEN_REGISTER_CHROME: >+ var isProfile = parts[1] == this.TOKEN_PROFILE; >+ try { >+ this._listener.onRegisterChrome(parts[3], lf, parts[2], isProfile); >+ } >+ catch (e) { >+ dump("*** nsInstallLogReader::_parseLine - failed to deregister chrome\n"); >+ } >+ break; >+ case this.TOKEN_SKIN: >+ var isProfile = parts[1] == this.TOKEN_PROFILE; >+ try { >+ this._listener.onInstallSkin(parts[2], isProfile); >+ } >+ catch (e) { >+ dump("*** nsInstallLogReader::_parseLine - failed to uninstall skin\n"); >+ } >+ break; >+ } >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsInstalledExtensionReader >+// >+function nsInstalledExtensionReader(aManager) >+{ >+ this._installedExtensions = getFile(KEY_APPDIR, >+ [DIR_EXTENSIONS, >+ FILE_INSTALLED_EXTENSIONS]); >+ this._installedExtensionsProcessed = getFile(KEY_APPDIR, >+ [DIR_EXTENSIONS, >+ FILE_INSTALLED_EXTENSIONS_PROCESSED]); >+ this._manager = aManager; >+} >+ >+nsInstalledExtensionReader.prototype = { >+ _manager : null, >+ _installedExtensions: null, >+ >+ read: function nsInstalledExtensionReader_read () >+ { >+ if (this._installedExtensionsProcessed.exists()) >+ return; >+ >+ if (!this._installedExtensions.exists()) { >+ var defaultsList = getFile(KEY_DEFAULTS, [DIR_DEFAULTS_EXTENSIONS, FILE_INSTALLED_EXTENSIONS]); >+ defaultsList.copyTo(getDir(KEY_APPDIR, [DIR_EXTENSIONS]), FILE_INSTALLED_EXTENSIONS); >+ } >+ >+ var fis = Components.classes["@mozilla.org/network/file-input-stream;1"] >+ .createInstance(Components.interfaces.nsIFileInputStream); >+ fis.init(this._installedExtensions, -1, -1, false); >+ var lis = fis.QueryInterface(Components.interfaces.nsILineInputStream); >+ var line = { value: "" }; >+ var more = false; >+ var lines = []; >+ do { >+ more = lis.readLine(line); >+ lines.push(line.value); >+ } >+ while (more); >+ fis.close(); >+ >+ // Now that we've closed the stream we can remove all the files >+ for (var i = 0; i < lines.length; ++i) >+ this._parseLine(lines[i]); >+ >+ this._installedExtensions.moveTo(getDir(KEY_APPDIR, [DIR_EXTENSIONS]), >+ FILE_INSTALLED_EXTENSIONS_PROCESSED); >+ }, >+ >+ TOKEN_EXTENSION : "extension", >+ TOKEN_THEME : "theme", >+ >+ _parseLine: function nsInstalledExtensionReader__parseLine (aLine) >+ { >+ // extension,{GUID} or theme,{GUID} >+ var parts = aLine.split(","); >+ var manifest = getFileNoCreateDir(KEY_APPDIR, >+ [DIR_EXTENSIONS, parts[1], FILE_INSTALL_MANIFEST]); >+ if (parts.length != 2) >+ return; >+ >+ if (manifest.exists()) { >+ switch (parts[0]) { >+ case this.TOKEN_EXTENSION: >+ this._manager.ensurePreConfiguredItem(parts[1], nsIUpdateItem.TYPE_EXTENSION, manifest); >+ break; >+ case this.TOKEN_THEME: >+ this._manager.ensurePreConfiguredItem(parts[1], nsIUpdateItem.TYPE_THEME, manifest); >+ break; >+ } >+ } >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsChromeRegistrationException >+// >+function nsChromeRegistrationException(aChromePath, aIsProfile, aFunctionName) >+{ >+ this.chromePath = aChromePath; >+ this.isProfile = aIsProfile; >+ this.functionName = aFunctionName; >+} >+nsChromeRegistrationException.prototype = { >+ chromePath : null, >+ isProfile : true, >+ functionName : null, >+ extensionID : null >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsExtensionInstaller >+// >+function nsExtensionInstaller (aExtensionDS) >+{ >+ this._extensionDS = aExtensionDS; >+ >+ this._provTypePackage = gRDF.GetResource(EM_NS("package")); >+ this._provTypeSkin = gRDF.GetResource(EM_NS("skin")); >+ this._provTypeLocale = gRDF.GetResource(EM_NS("locale")); >+ this._fileProperty = gRDF.GetResource(EM_NS("file")); >+ this._sourceResource = gRDF.GetResource("urn:mozilla:install-manifest"); >+} >+ >+nsExtensionInstaller.prototype = { >+ // Utility services and helpers >+ _rdf : null, >+ _writer : null, >+ >+ // Extension metadata >+ _extensionID : null, >+ _isProfile : true, >+ _extDirKey : KEY_PROFILEDIR, >+ >+ // Source and target datasources >+ _metadataDS : null, >+ _extensionDS : null, >+ >+ // RDF objects and properties >+ _provTypePackage : null, >+ _provTypeSkin : null, >+ _provTypeLocale : null, >+ _sourceResource : null, >+ _fileProperty : null, >+ >+ install: function nsExtensionInstaller_install (aExtensionID, aIsProfile) >+ { >+ // Initialize the installer for this extension >+ this._extensionID = aExtensionID; >+ this._isProfile = aIsProfile; >+ this._extDirKey = getDirKey(this._isProfile); >+ >+ // Create a logger to log install operations for uninstall >+ this._writer = new nsInstallLogWriter(this._extensionID, this._isProfile); >+ this._writer.open(); >+ >+ // Move files from the staging dir into the extension's final home. >+ // This function generates uninstall log files and creates backups of >+ // existing files. >+ // XXXben - would like to add exception handling here to test for file >+ // I/O failures on uninstall log so that if there's a crash >+ // and the uninstall log is incorrectly/incompletely written >+ // we can roll back. It's not critical that we do so right now >+ // since if this throws the extension's chrome is never >+ // registered. >+ this._installExtensionFiles(); >+ >+ // Load the metadata datasource >+ var metadataFile = getFileNoCreateDir(this._extDirKey, >+ [DIR_EXTENSIONS, aExtensionID, FILE_INSTALL_MANIFEST]); >+ >+ this._metadataDS = getInstallManifest(metadataFile); >+ if (!this._metadataDS) return; >+ >+ // Add metadata for the extension to the global extension metadata set >+ this._extensionDS.addItemMetadata(this._extensionID, nsIUpdateItem.TYPE_EXTENSION, >+ this._metadataDS, this._isProfile); >+ >+ // Register chrome packages for files specified in the extension manifest >+ try { >+ this._registerChromeForExtension(); >+ } >+ catch (e) { >+ // Failed to register chrome, for any number of reasons - non-existent >+ // contents.rdf file at the location specified, malformed contents.rdf, >+ // etc. Set the "toBeUninstalled" flag so that the extension is uninstalled >+ // properly during the subsequent uninstall pass in >+ // |nsExtensionManager::_finalizeOperations| >+ >+ this._extensionDS.setItemProperty(this._extensionID, >+ this._extensionDS._emR("toBeUninstalled"), >+ this._extensionDS._emL("true"), this._isProfile, >+ nsIUpdateItem.TYPE_EXTENSION); >+ e.extensionID = this._extensionID; >+ showMalformedRegistrationError(e); >+ } >+ >+ this._writer.close(); >+ >+ // Unset the "toBeInstalled" flag >+ this._extensionDS.setItemProperty(this._extensionID, >+ this._extensionDS._emR("toBeInstalled"), >+ null, this._isProfile, >+ nsIUpdateItem.TYPE_EXTENSION); >+ }, >+ >+ _installExtensionFiles: function nsExtensionInstaller__installExtensionFiles () >+ { >+ var sourceXPI = getFileNoCreateDir(this._extDirKey, >+ [DIR_EXTENSIONS, DIR_TEMP, >+ this._extensionID, >+ this._extensionID + ".xpi"]); >+ if (!sourceXPI.exists()) >+ return; >+ var zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"] >+ .createInstance(Components.interfaces.nsIZipReader); >+ zipReader.init(sourceXPI); >+ zipReader.open(); >+ >+ var entries = zipReader.findEntries("*"); >+ while (entries.hasMoreElements()) { >+ var entry = entries.getNext().QueryInterface(Components.interfaces.nsIZipEntry); >+ >+ var parts = entry.name.split("/"); >+ var subDirs = [DIR_EXTENSIONS, this._extensionID]; >+ for (var i = 0; i < parts.length; ++i) >+ subDirs.push(parts[i]); >+ >+ var fileName = parts[parts.length-1]; >+ if (fileName != "") { >+ var targetFile = getFile(this._extDirKey, subDirs); >+ zipReader.extract(entry.name, targetFile); >+ this._writer.addFile(targetFile.QueryInterface(Components.interfaces.nsILocalFile)); >+ } >+ } >+ zipReader.close(); >+ // Kick off the extraction on a new thread, then join to wait for it to >+ // complete. >+ // (new nsJarFileExtractor(aZipReader.file, dir)).extract(); >+ >+ this._cleanUpStagedXPI(); >+ }, >+ >+ _cleanUpStagedXPI: function nsExtensionInstaller__cleanUpStagedXPI () >+ { >+ var stageDir = getDir(this._extDirKey, >+ [DIR_EXTENSIONS, DIR_TEMP, this._extensionID]); >+ var sourceXPI = stageDir.clone(); >+ sourceXPI.append(this._extensionID + ".xpi"); >+ sourceXPI.remove(false); >+ >+ // Remove the extension's stage dir >+ if (!stageDir.directoryEntries.hasMoreElements()) >+ stageDir.remove(false); >+ >+ // If the parent "temp" dir is empty, remove it. >+ try { // XXXben >+ if (!stageDir.parent.directoryEntries.hasMoreElements()) >+ stageDir.parent.remove(false); >+ } >+ catch (e) { } >+ }, >+ >+ _registerChromeForExtension: function nsExtensionInstaller__registerChromeForExtension () >+ { >+ // Enumerate the metadata datasource files collection and register chrome >+ // for each file, calling _registerChrome for each. >+ var chromeDir = getDir(this._extDirKey, >+ [DIR_EXTENSIONS, this._extensionID, DIR_CHROME]); >+ >+ var files = this._metadataDS.GetTargets(this._sourceResource, this._fileProperty, true); >+ while (files.hasMoreElements()) { >+ var file = files.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var chromeFile = chromeDir.clone(); >+ var fileName = file.Value.substr("urn:mozilla:extension:file:".length, file.Value.length); >+ chromeFile.append(fileName); >+ >+ var providers = [this._provTypePackage, this._provTypeSkin, this._provTypeLocale]; >+ for (var i = 0; i < providers.length; ++i) { >+ var items = this._metadataDS.GetTargets(file, providers[i], true); >+ while (items.hasMoreElements()) { >+ var item = items.getNext().QueryInterface(Components.interfaces.nsIRDFLiteral); >+ this._registerChrome(chromeFile, providers[i], item.Value); >+ } >+ } >+ } >+ }, >+ >+ _registerChrome: function nsExtensionInstaller__registerChrome (aFile, aChromeType, aPath) >+ { >+ var fileURL = getURLSpecFromFile(aFile); >+ if (!aFile.isDirectory()) // .jar files >+ fileURL = "jar:" + fileURL + "!/" + aPath; >+ else // flat chrome hierarchies >+ fileURL = fileURL + aPath; >+ >+ var cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"] >+ .getService(Components.interfaces.nsIXULChromeRegistry); >+ var type; >+ if (aChromeType.EqualsNode(this._provTypePackage)) { >+ try { >+ cr.installPackage(fileURL, this._isProfile); >+ } >+ catch (e) { >+ throw new nsChromeRegistrationException(fileURL, this._isProfile, "installPackage"); >+ } >+ type = this._writer.CHROME_TYPE_PACKAGE; >+ } >+ else if (aChromeType.EqualsNode(this._provTypeSkin)) { >+ try { >+ cr.installSkin(fileURL, this._isProfile, true); // Extension skins can execute scripts >+ } >+ catch (e) { >+ throw new nsChromeRegistrationException(fileURL, this._isProfile, "installSkin"); >+ } >+ type = this._writer.CHROME_TYPE_SKIN; >+ } >+ else if (aChromeType.EqualsNode(this._provTypeLocale)) { >+ try { >+ cr.installLocale(fileURL, this._isProfile); >+ } >+ catch (e) { >+ throw new nsChromeRegistrationException(fileURL, this._isProfile, "installLocale"); >+ } >+ type = this._writer.CHROME_TYPE_LOCALE; >+ } >+ var providerNames = this._getProviderNames(fileURL, type); >+ for (var i = 0; i < providerNames.length; ++i) { >+ this._writer.registerChrome(providerNames[i], type, this._isProfile); >+ >+ // Make sure we enable overlays for this extension so that if it is disabled by >+ // mismatch checking, installing a newer version (as opposed to enabling as a >+ // result of a version compatibility update) makes the extension's overlaid UI >+ // appear immediately. >+ cr.setAllowOverlaysForPackage(providerNames[i], true); >+ } >+ }, >+ >+ _getProviderNames: function nsExtensionInstaller__getProviderNames (aBaseURL, aType) >+ { >+ if (aBaseURL.charAt(aBaseURL.length-1) != "/") >+ aBaseURL += "/"; >+ var manifestURL = aBaseURL + "contents.rdf"; >+ >+ var providerNames = []; >+ >+ try { >+ // Discover the list of provider names to register for the location >+ // specified in the provider arc. >+ // >+ // The contents.rdf file will look like this: >+ // >+ // <RDF:Seq about="urn:mozilla:<type>:root"> >+ // <RDF:li resource="urn:mozilla:<type>:itemName1"/> >+ // <RDF:li resource="urn:mozilla:<type>:itemName2"/> >+ // .. >+ // </RDF:Seq> >+ // >+ // We need to explicitly walk this list here, we don't need to do so >+ // for nsIXULChromeRegistry's |installPackage| method since that does >+ // this same thing itself. >+ >+ var ds = gRDF.GetDataSourceBlocking(manifestURL); >+ >+ var ctr = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ ctr.Init(ds, gRDF.GetResource("urn:mozilla:" + aType + ":root")); >+ >+ var items = ctr.GetElements(); >+ while (items.hasMoreElements()) { >+ var item = items.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ >+ var nameArc = gRDF.GetResource(CHROME_NS("name")); >+ var name; >+ if (ds.hasArcOut(item, nameArc)) >+ name = stringData(ds.GetTarget(item, nameArc, true)); >+ else { >+ var parts = item.Value.split(":"); >+ name = parts[parts.length-1]; >+ } >+ providerNames.push(name); >+ } >+ } >+ catch (e) { } >+ >+ return providerNames; >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsExtensionUninstaller >+// >+function nsExtensionUninstaller(aExtensionDS) >+{ >+ this._cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"] >+ .getService(Components.interfaces.nsIXULChromeRegistry); >+ this._extensionDS = aExtensionDS; >+} >+ >+nsExtensionUninstaller.prototype = { >+ _extensionDS : null, >+ _cr : null, >+ _isProfile : true, >+ _extDirKey : "", >+ _extensionsDir: null, >+ _extensionID : "", >+ >+ uninstall: function nsExtensionUninstaller_uninstall (aExtensionID, aIsProfile) >+ { >+ // Initialize the installer for this extension >+ this._extensionID = aExtensionID; >+ this._isProfile = aIsProfile; >+ this._extDirKey = getDirKey(this._isProfile); >+ this._extensionsDir = getDir(this._extDirKey, [DIR_EXTENSIONS]); >+ >+ // Create a logger to log install operations for uninstall >+ this._reader = new nsInstallLogReader(this._extensionID, >+ this._isProfile, >+ this); >+ try { // XXXben don't let errors stop us. >+ this._reader.read(); >+ >+ // Now remove the uninstall log file. >+ this._removeFile(this._reader.uninstallLog); >+ } >+ catch (e) { >+ dump("******* Failed to remove extension uninstall log, with exception = " + e + "\n"); >+ } >+ >+ // Unset the "toBeUninstalled" flag >+ this._extensionDS.setItemProperty(this._extensionID, >+ this._extensionDS._emR("toBeUninstalled"), >+ null, this._isProfile, >+ nsIUpdateItem.TYPE_EXTENSION); >+ }, >+ >+ /////////////////////////////////////////////////////////////////////////////// >+ // nsIInstallLogReaderListener >+ onAddFile: function nsExtensionUninstaller_onAddFile (aFile) >+ { >+ this._removeFile(aFile); >+ }, >+ >+ _removeFile: function nsExtensionUninstaller__removeFile (aFile) >+ { >+ if (aFile.exists()) { >+ aFile.remove(false); >+ >+ // Clean up the parent hierarchy if possible >+ var parent = aFile.parent; >+ var e = parent.directoryEntries; >+ if (!e.hasMoreElements() && >+ !parent.equals(this._extensionsDir)) // stop at the extensions dir >+ this._removeFile(parent); >+ } >+ }, >+ >+ // XXXben - maybe we should find a way to >+ _packagesForExtension: [], >+ >+ onRegisterChrome: function nsExtensionUninstaller_onRegisterChrome (aProviderName, aFile, aChromeType, aIsProfile) >+ { >+ switch (aChromeType) { >+ case this._reader.CHROME_TYPE_PACKAGE: >+ this._packagesForExtension.push(aProviderName); >+ this._cr.uninstallPackage(aProviderName, aIsProfile) >+ break; >+ case this._reader.CHROME_TYPE_SKIN: >+ for (var i = 0; i < this._packagesForExtension.length; ++i) { >+ this._cr.deselectSkinForPackage(aProviderName, >+ this._packagesForExtension[i], >+ aIsProfile); >+ } >+ // this._cr.uninstallSkin(aProviderName, aIsProfile) >+ break; >+ case this._reader.CHROME_TYPE_LOCALE: >+ for (var i = 0; i < this._packagesForExtension.length; ++i) { >+ this._cr.deselectLocaleForPackage(aProviderName, >+ this._packagesForExtension[i], >+ aIsProfile); >+ } >+ // this._cr.uninstallLocale(aProviderName, aIsProfile) >+ break; >+ } >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsExtensionEnabler >+// >+function nsExtensionEnabler(aExtensionDS) >+{ >+ this._cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"] >+ .getService(Components.interfaces.nsIXULChromeRegistry); >+ this._extensionDS = aExtensionDS; >+} >+ >+nsExtensionEnabler.prototype = { >+ _extensionDS : null, >+ _cr : null, >+ _enable : true, >+ _isProfile : true, >+ _extDirKey : "", >+ _extensionsDir: null, >+ >+ enable: function nsExtensionEnabler_enable (aExtensionID, aIsProfile, aDisable) >+ { >+ // Initialize the installer for this extension >+ this._enable = !aDisable; >+ this._extensionID = aExtensionID; >+ this._isProfile = aIsProfile; >+ this._extDirKey = getDirKey(this._isProfile); >+ this._extensionsDir = getDir(this._extDirKey, [DIR_EXTENSIONS]); >+ >+ // Create a logger to log install operations for uninstall >+ this._reader = new nsInstallLogReader(this._extensionID, >+ this._isProfile, >+ this); >+ this._reader.read(); >+ }, >+ >+ onRegisterChrome: function nsExtensionEnabler_onRegisterChrome (aProviderName, aFile, aChromeType, aIsProfile) >+ { >+ if (aChromeType == this._reader.CHROME_TYPE_PACKAGE) >+ this._cr.setAllowOverlaysForPackage(aProviderName, this._enable); >+ }, >+ >+ onAddFile: function nsExtensionEnabler_onAddFile (aFile) >+ { >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsThemeInstaller >+// >+function nsThemeInstaller(aExtensionDS, aManager) >+{ >+ this._extensionDS = aExtensionDS; >+ this._em = aManager; >+} >+ >+nsThemeInstaller.prototype = { >+ _extensionDS : null, >+ _isProfile : true, >+ _extDirKey : "", >+ >+ install: function nsThemeInstaller_install (aJARFile, aIsProfile) >+ { >+ var extDirKey = getDirKey(aIsProfile); >+ >+ // Since we're installing a "new type" theme, we assume a file layout >+ // within the JAR like so: >+ // foo.jar/ >+ // install.rdf <-- Theme Manager metadata >+ // contents.rdf <-- Chrome Registry metadata >+ // browser/ >+ // global/ >+ // ... >+ var zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"] >+ .createInstance(Components.interfaces.nsIZipReader); >+ zipReader.init(aJARFile); >+ zipReader.open(); >+ >+ try { >+ zipReader.getEntry(FILE_INSTALL_MANIFEST); >+ } >+ catch (e) { >+ // If the zip reader returned an error code here it means that the install.rdf >+ // file was not found in the theme jar file - i.e. it was an old style theme. >+ // There's no reason for people to be installing or maintaining such themes >+ // anymore as there is no practical use for them, so we should throw an error >+ // here and bail. >+ try { >+ zipReader.getEntry(FILE_CHROME_MANIFEST); >+ >+ // Load the contents.rdf file from the .jar file if present and show a detailed >+ // error. >+ var tempChromeManifest = getFile(extDirKey, >+ [DIR_EXTENSIONS, DIR_TEMP, FILE_CHROME_MANIFEST]); >+ zipReader.extract(FILE_CHROME_MANIFEST, tempChromeManifest); >+ var rdfs = Components.classes["@mozilla.org/rdf/rdf-service;1"] >+ .getService(Components.interfaces.nsIRDFService); >+ showOldThemeError(rdfs.GetDataSourceBlocking(getURLSpecFromFile(tempChromeManifest))); >+ tempChromeManifest.remove(false); >+ } >+ catch (e) { >+ showMissingFileError(aJARFile, FILE_CHROME_MANIFEST); >+ } >+ } >+ >+ var themeManifest = getFile(extDirKey, >+ [DIR_EXTENSIONS, DIR_TEMP, getRandomFileName("install", "rdf")]); >+ zipReader.extract(FILE_INSTALL_MANIFEST, themeManifest); >+ >+ var chromeManifest = getFile(extDirKey, >+ [DIR_EXTENSIONS, DIR_TEMP, FILE_CHROME_MANIFEST]); >+ zipReader.extract(FILE_CHROME_MANIFEST, chromeManifest); >+ >+ var themeMetadata = getInstallManifest(themeManifest); >+ if (!themeMetadata) return; >+ var chromeMetadata = gRDF.GetDataSourceBlocking(getURLSpecFromFile(chromeManifest)); >+ >+ // We do a basic version check first just to make sure we somehow weren't >+ // tricked into installing an incompatible theme... >+ this._themeID = this._em.canInstallItem(themeMetadata); >+ if (isNaN(parseInt(this._themeID))) { >+ var canInstall = true; >+ >+ // Copy the file to its final location >+ var destinationDir = getDir(extDirKey, >+ [DIR_EXTENSIONS, this._themeID, DIR_CHROME]); >+ var destinationFile = destinationDir.clone(); >+ destinationFile.append(aJARFile.leafName); >+ if (destinationFile.exists()) >+ destinationFile.remove(false); >+ aJARFile.copyTo(destinationDir, aJARFile.leafName); >+ >+ var nameArc = gRDF.GetResource(CHROME_NS("name")); >+ var ctr = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ ctr.Init(chromeMetadata, gRDF.GetResource("urn:mozilla:skin:root")); >+ >+ var elts = ctr.GetElements(); >+ while (elts.hasMoreElements()) { >+ var elt = elts.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var chromeSkinPrefix = "urn:mozilla:skin:"; >+ if (elt.Value.substr(0, chromeSkinPrefix.length) == chromeSkinPrefix) { >+ var name = chromeMetadata.GetTarget(elt, nameArc, true); >+ >+ // Check to see if the em:internalName property on the theme install >+ // manifest matches the chrome:name property on the theme's CR entry. >+ var manifestRoot = gRDF.GetResource("urn:mozilla:install-manifest"); >+ var internalName = themeMetadata.GetTarget(manifestRoot, >+ gRDF.GetResource(EM_NS("internalName")), >+ true); >+ if (!internalName.EqualsNode(name)) { >+ var consoleService = Components.classes["@mozilla.org/consoleservice;1"] >+ .getService(Components.interfaces.nsIConsoleService); >+ consoleService.logStringMessage("Could not install theme because chrome:name arc in " + >+ "the theme's contents.rdf file (" + stringData(name) + >+ ") does not match the em:internalName arc in the theme's " + >+ "install.rdf file (" + stringData(internalName) + ")"); >+ var fileURL = getURLSpecFromFile(themeManifest); >+ var uri = Components.classes["@mozilla.org/network/standard-url;1"] >+ .createInstance(Components.interfaces.nsIURI); >+ uri.spec = fileURL; >+ var url = uri.QueryInterface(Components.interfaces.nsIURL); >+ showMalformedError(url.fileName); >+ >+ destinationFile.remove(false); >+ destinationDir.remove(true); >+ this._em._cleanDirs(); >+ >+ canInstall = false; >+ } >+ >+ if (canInstall) { >+ name = name.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; >+ >+ // Create a logger to log install operations for uninstall >+ this._writer = new nsInstallLogWriter(this._themeID, aIsProfile); >+ this._writer.open(); >+ this._writer.installSkin(name, aIsProfile); >+ } >+ } >+ } >+ >+ if (canInstall) { >+ this._writer.addFile(destinationFile.QueryInterface(Components.interfaces.nsILocalFile)); >+ this._writer.close(); >+ >+ // Use the Chrome Registry API to install the theme there >+ var filePath = "jar:" + getURLSpecFromFile(destinationFile) + "!/"; >+ var cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"] >+ .getService(Components.interfaces.nsIXULChromeRegistry); >+ cr.installSkin(filePath, aIsProfile, false); >+ >+ // Insert the theme into the theme list. >+ this._extensionDS.insertForthcomingItem(this._themeID, nsIUpdateItem.TYPE_THEME, >+ aIsProfile); >+ >+ // Add metadata for the extension to the global extension metadata set >+ this._extensionDS.addItemMetadata(this._themeID, nsIUpdateItem.TYPE_THEME, >+ themeMetadata, aIsProfile); >+ } >+ >+ this._extensionDS.doneInstallingTheme(this._themeID); >+ } >+ else if (this._themeID == 0) >+ showIncompatibleError(themeMetadata); >+ >+ zipReader.close(); >+ themeManifest.remove(false); >+ chromeManifest.remove(false); >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsThemeUninstaller >+// >+function nsThemeUninstaller(aExtensionDS) >+{ >+ this._cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"] >+ .getService(Components.interfaces.nsIXULChromeRegistry); >+} >+ >+nsThemeUninstaller.prototype = { >+ _extensionsDir : null, >+ >+ uninstall: function nsThemeUninstaller_uninstall (aThemeID, aIsProfile) >+ { >+ this._extensionsDir = getDir(getDirKey(aIsProfile), [DIR_EXTENSIONS]); >+ >+ // Create a logger to log install operations for uninstall >+ this._reader = new nsInstallLogReader(aThemeID, aIsProfile, this); >+ try { // XXXben don't let errors stop us. >+ this._reader.read(); >+ >+ // Now remove the uninstall log file. >+ this._removeFile(this._reader.uninstallLog); >+ } >+ catch (e) { >+ dump("******* Failed to remove theme uninstall log, with exception = " + e + "\n"); >+ } >+ }, >+ >+ /////////////////////////////////////////////////////////////////////////////// >+ // nsIInstallLogReaderListener >+ onAddFile: function nsThemeUninstaller_onAddFile (aFile) >+ { >+ this._removeFile(aFile); >+ }, >+ >+ _removeFile: function nsThemeUninstaller__removeFile (aFile) >+ { >+ if (aFile.exists()) { >+ aFile.remove(false); >+ >+ // Clean up the parent hierarchy if possible >+ var parent = aFile.parent; >+ var e = parent.directoryEntries; >+ if (!e.hasMoreElements() && >+ !parent.equals(this._extensionsDir)) // stop at the extensions dir >+ this._removeFile(parent); >+ } >+ }, >+ >+ onInstallSkin: function nsThemeUninstaller_onInstallSkin (aSkinName, aIsProfile) >+ { >+ this._cr.uninstallSkin(aSkinName, aIsProfile); >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsExtensionManager >+// >+function nsExtensionManager() >+{ >+ gPref = Components.classes["@mozilla.org/preferences-service;1"] >+ .getService(Components.interfaces.nsIPrefBranch); >+ gRDF = Components.classes["@mozilla.org/rdf/rdf-service;1"] >+ .getService(Components.interfaces.nsIRDFService); >+ gOS = Components.classes["@mozilla.org/observer-service;1"] >+ .getService(Components.interfaces.nsIObserverService); >+ >+ gOS.addObserver(this, "xpcom-shutdown", false); >+ >+ ensureExtensionsFiles(false); >+} >+ >+nsExtensionManager.prototype = { >+ _extInstaller : null, >+ _extUninstaller : null, >+ _extEnabler : null, >+ _started : false, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIObserver >+ observe: function nsExtensionManager_observe (aSubject, aTopic, aData) >+ { >+ switch (aTopic) { >+ case "quit-application-requested": >+ if (this._downloadCount > 0) { >+ var result; >+ result = this._confirmCancelDownloads(this._downloadCount, >+ "quitCancelDownloadsAlertTitle", >+ "quitCancelDownloadsAlertMsgMultiple", >+ "quitCancelDownloadsAlertMsg", >+ "dontQuitButtonWin"); >+ if (!result) >+ this._cancelDownloads(); >+ var PRBool = aSubject.QueryInterface(Components.interfaces.nsISupportsPRBool); >+ PRBool.data = result; >+ } >+ break; >+ case "offline-requested": >+ if (this._downloadCount > 0) { >+ result = this._confirmCancelDownloads(this._downloadCount, >+ "offlineCancelDownloadsAlertTitle", >+ "offlineCancelDownloadsAlertMsgMultiple", >+ "offlineCancelDownloadsAlertMsg", >+ "dontGoOfflineButton"); >+ if (!result) >+ this._cancelDownloads(); >+ var PRBool = aSubject.QueryInterface(Components.interfaces.nsISupportsPRBool); >+ PRBool.data = result; >+ } >+ break; >+ case "xpcom-shutdown": >+ gOS.removeObserver(this, "xpcom-shutdown"); >+ >+ // Release strongly held services. >+ gPref = null; >+ gRDF = null; >+ gOS = null; >+ gVersionChecker = null; >+ break; >+ } >+ }, >+ >+ start: function nsExtensionManager_start (aIsDirty) >+ { >+ this._started = true; >+ >+ var needsRestart = false; >+ >+ ensureExtensionsFiles(true); >+ >+ // Somehow the component list went away, and for that reason the new one >+ // generated by this function is going to result in a different compreg. >+ // We must force a restart. >+ var componentList = getFile(KEY_PROFILEDIR, [FILE_COMPONENT_MANIFEST]); >+ if (!componentList.exists()) >+ needsRestart = true; >+ >+ // XXXben - a bit of a hack - clean up any empty dirs that may not have been >+ // properly removed by [un]install... I should really investigate those >+ // cases to see what is stopping these dirs from being removed, but no >+ // time now. >+ this._cleanDirs(); >+ >+ var cmdLineSvc = Components.classes["@mozilla.org/appshell/commandLineService;1"] >+ .getService(Components.interfaces.nsICmdLineService); >+ var safeMode = cmdLineSvc.getCmdLineValue("-safe-mode") != null; >+ if (!safeMode) { >+ var wasInSafeModeFile = getFile(KEY_PROFILEDIR, [DIR_EXTENSIONS, FILE_WASINSAFEMODE]); >+ if (wasInSafeModeFile.exists()) { >+ // Clean up after we were in safe mode >+ var win = this._showProgressWindow(); >+ try { >+ this._ensureDS(); >+ >+ // Retrieve the skin that was selected prior to entering safe mode >+ // and select it. >+ var lastSelectedSkin = KEY_DEFAULT_THEME; >+ try { >+ lastSelectedSkin = gPref.getCharPref(PREF_EM_LAST_SELECTED_SKIN); >+ gPref.clearUserPref(PREF_EM_LAST_SELECTED_SKIN); >+ gPref.setCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN, lastSelectedSkin); >+ } >+ catch (e) { } >+ >+ // Walk the list of extensions and re-activate overlays for packages >+ // that aren't disabled. >+ var items = this._ds.getItemsWithFlagUnset("disabled", nsIUpdateItem.TYPE_EXTENSION); >+ for (var i = 0; i < items.length; ++i) >+ this._finalizeEnableDisable(items[i], false); >+ >+ wasInSafeModeFile.remove(false); >+ >+ this._writeDefaults(true); >+ try { >+ this._writeDefaults(false); >+ } >+ catch (e) { } >+ } >+ catch (e) { >+ dump("*** nsExtensionManager::start - failure, catching exception so finalize window can close = " + e + "\n"); >+ } >+ win.close(); >+ >+ needsRestart = true; >+ } >+ >+ if (aIsDirty) >+ needsRestart = this._finishOperations(); >+ } >+ else { >+ var win = this._showProgressWindow(); >+ try { >+ // Enter safe mode >+ this._ensureDS(); >+ >+ // Save the current theme (assumed to be the theme that styles the global >+ // package) and re-select the default theme ("classic/1.0") >+ if (!gPref.prefHasUserValue(PREF_EM_LAST_SELECTED_SKIN)) { >+ gPref.setCharPref(PREF_EM_LAST_SELECTED_SKIN, >+ gPref.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN)); >+ if (gPref.prefHasUserValue(PREF_GENERAL_SKINS_SELECTEDSKIN)) >+ gPref.clearUserPref(PREF_GENERAL_SKINS_SELECTEDSKIN); >+ } >+ >+ var items = this._ds.getItemList(null, nsIUpdateItem.TYPE_EXTENSION, {}); >+ for (var i = 0; i < items.length; ++i) >+ this._finalizeEnableDisable(items[i].id, true); >+ >+ this._ds.safeMode = true; >+ >+ this._writeDefaults(true); >+ try { >+ this._writeDefaults(false); >+ } >+ catch (e) { } >+ >+ needsRestart = true; >+ >+ var wasInSafeModeFile = getFile(KEY_PROFILEDIR, [DIR_EXTENSIONS, FILE_WASINSAFEMODE]); >+ if (!wasInSafeModeFile.exists()) >+ wasInSafeModeFile.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644); >+ else { >+ // If the "Safe Mode" file already exists, then we are in the second launch of an >+ // app launched with -safe-mode and so we don't want to provoke any further >+ // restarts or re-create the file, just continue starting normally. >+ needsRestart = false; >+ } >+ } >+ catch (e) { >+ dump("*** nsExtensionManager::start - (safe mode) failure, catching exception so finalize window can close = " + e + "\n"); >+ } >+ win.close(); >+ >+ } >+ return needsRestart; >+ }, >+ >+ handleCommandLineArgs: function nsExtensionManager_handleCommandLineArgs () >+ { >+ var cmdLineSvc = Components.classes["@mozilla.org/appshell/commandLineService;1"] >+ .getService(Components.interfaces.nsICmdLineService); >+ var globalExtension = cmdLineSvc.getCmdLineValue("-install-global-extension"); >+ if (globalExtension) >+ this._checkForGlobalInstalls(globalExtension, nsIUpdateItem.TYPE_EXTENSION); >+ >+ var globalTheme = cmdLineSvc.getCmdLineValue("-install-global-theme"); >+ if (globalTheme) >+ this._checkForGlobalInstalls(globalTheme, nsIUpdateItem.TYPE_THEME); >+ >+ var showList = cmdLineSvc.getCmdLineValue("-list-global-items"); >+ if (showList) >+ this._showGlobalItemList(); >+ >+ var locked = cmdLineSvc.getCmdLineValue("-lock-item"); >+ if (locked) { >+ this._ensureDS(); >+ this._ds.lockUnlockItem(locked, true); >+ } >+ >+ var unlocked = cmdLineSvc.getCmdLineValue("-unlock-item"); >+ if (unlocked) { >+ this._ensureDS(); >+ this._ds.lockUnlockItem(unlocked, false); >+ } >+ >+ this._finishOperations(); >+ }, >+ >+ register: function nsExtensionManager_register () >+ { >+ if (!this._started) { >+ // Loads the datasource and installs any pre-configured items. >+ this._ds = new nsExtensionsDataSource(); >+ this._ds.loadExtensions(false); >+ >+ // Write bin/extensions/Extensions.rdf >+ // bin/extensions/installed-extensions-processed.txt >+ (new nsInstalledExtensionReader(this)).read(); >+ >+ // Write bin/components.ini >+ var manifest = getFile(KEY_APPDIR, [FILE_COMPONENT_MANIFEST]); >+ this._writeProfileFile(manifest, this._getComponentsDir, false); >+ >+ // Update the Defaults Manifest >+ this._writeDefaults(false); >+ } >+ }, >+ >+ _cancelDownloads: function nsExtensionManager__cancelDownloads () >+ { >+ for (var i = 0; i < this._transactions.length; ++i) >+ gOS.notifyObservers(this._transactions[i], "xpinstall-progress", "cancel"); >+ gOS.removeObserver(this, "offline-requested"); >+ gOS.removeObserver(this, "quit-application-requested"); >+ >+ this._removeAllDownloads(); >+ }, >+ >+ _confirmCancelDownloads: function nsExtensionManager__confirmCancelDownloads(aCount, >+ aTitle, aCancelMessageMultiple, aCancelMessageSingle, aDontCancelButton) >+ { >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var bundle = sbs.createBundle("chrome://mozapps/locale/downloads/downloads.properties"); >+ var title = bundle.GetStringFromName(aTitle); >+ var message, quitButton; >+ if (aCount > 1) { >+ message = bundle.formatStringFromName(aCancelMessageMultiple, [aCount], 1); >+ quitButton = bundle.formatStringFromName("cancelDownloadsOKTextMultiple", [aCount], 1); >+ } >+ else { >+ message = bundle.GetStringFromName(aCancelMessageSingle); >+ quitButton = bundle.GetStringFromName("cancelDownloadsOKText"); >+ } >+ var dontQuitButton = bundle.GetStringFromName(aDontCancelButton); >+ >+ var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] >+ .getService(Components.interfaces.nsIWindowMediator); >+ var win = wm.getMostRecentWindow("Extension:Manager"); >+ const nsIPromptService = Components.interfaces.nsIPromptService; >+ var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] >+ .getService(nsIPromptService); >+ var flags = (nsIPromptService.BUTTON_TITLE_IS_STRING * nsIPromptService.BUTTON_POS_0) + >+ (nsIPromptService.BUTTON_TITLE_IS_STRING * nsIPromptService.BUTTON_POS_1); >+ var rv = ps.confirmEx(win, title, message, flags, quitButton, dontQuitButton, null, null, { }); >+ return rv == 1; >+ }, >+ >+ // This function checks for and disables any "old-style" extensions >+ // from Firefox 0.8 and earlier created using the "chrome:extension=true" flag. >+ _disableObsoleteExtensions: function nsExtensionManager__disableObsoleteExtensions () >+ { >+ if (!gPref.prefHasUserValue(PREF_EM_DISABLEDOBSOLETE) || !gPref.getBoolPref(PREF_EM_DISABLEDOBSOLETE)) { >+ var win = this._showProgressWindow(); >+ try { >+ var cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"] >+ .getService(Components.interfaces.nsIXULChromeRegistry); >+ var crDS = gRDF.GetDataSource("rdf:chrome"); >+ var disabled = false; >+ var sources = crDS.GetSources(gRDF.GetResource(CHROME_NS("extension")), gRDF.GetLiteral("true"), true); >+ while (sources.hasMoreElements()) { >+ disabled = true; >+ >+ var source = sources.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var name = crDS.GetTarget(source, gRDF.GetResource(CHROME_NS("name")), true); >+ if (name) { >+ name = name.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; >+ cr.setAllowOverlaysForPackage(name, false); >+ } >+ } >+ >+ // Re-select the default theme to prevent any incompatibilities with old-style >+ // themes. >+ cr.selectSkin(KEY_DEFAULT_THEME, true); >+ } >+ catch (e) { >+// dump("*** nsExtensionManager::_disableObsoleteExtensions - failure, catching exception so finalize window can close\n"); >+ } >+ win.close(); >+ >+ if (disabled) { >+ const nsIPromptService = Components.interfaces.nsIPromptService; >+ var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] >+ .getService(nsIPromptService); >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var bundle = sbs.createBundle("chrome://mozapps/locale/extensions/extensions.properties"); >+ var title = bundle.GetStringFromName("disabledObsoleteTitle"); >+ var message = bundle.GetStringFromName("disabledObsoleteMessage"); >+ ps.alert(null, title, message); >+ } >+ >+ gPref.setBoolPref(PREF_EM_DISABLEDOBSOLETE, true); >+ } >+ }, >+ >+ _checkForGlobalInstalls: function nsExtensionManager__checkForGlobalInstalls (aPath, aItemType) >+ { >+ try { >+ var ioServ = Components.classes["@mozilla.org/network/io-service;1"] >+ .getService(Components.interfaces.nsIIOService); >+ var uri = ioServ.newURI(aPath, null, null); >+ aPath = uri.path; >+ } >+ catch (e) { } >+ >+ // First see if the path supplied is a file path >+ var file = Components.classes["@mozilla.org/file/local;1"] >+ .createInstance(Components.interfaces.nsILocalFile); >+ try { >+ file.initWithPath(aPath); >+ } >+ catch (e) { >+ // Try appending the path to the current proc dir. >+ file = getDir(KEY_APPDIR, []); >+ try { >+ file.append(aPath); >+ } >+ catch (e) { /* can't handle this */ } >+ } >+ >+ if (file.exists()) { >+ if (aItemType & nsIUpdateItem.TYPE_EXTENSION) >+ this.installExtension(file, nsIExtensionManager.FLAG_INSTALL_GLOBAL); >+ else if (aItemType & nsIUpdateItem.TYPE_THEME) >+ this.installTheme(file, nsIExtensionManager.FLAG_INSTALL_GLOBAL); >+ } >+ else >+ dump("Invalid XPI/JAR Path: " + aPath + "\n"); >+ }, >+ >+ _showGlobalItemList: function nsExtensionManager__showGlobalItemList () >+ { >+ this._ensureDS(); >+ >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var bundle = sbs.createBundle("chrome://mozapps/locale/extensions/extensions.properties"); >+ >+ dump(bundle.GetStringFromName("globalItemList")); >+ dump(bundle.GetStringFromName("globalItemListExtensions")); >+ var items = this.getItemList(null, nsIUpdateItem.TYPE_EXTENSION, {}); >+ for (var i = 0; i < items.length; ++i) >+ dump(" " + items[i].id + " " + items[i].name + " " + items[i].version + "\n"); >+ dump(bundle.GetStringFromName("globalItemListThemes")); >+ items = this.getItemList(null, nsIUpdateItem.TYPE_THEME, {}); >+ for (var i = 0; i < items.length; ++i) >+ dump(" " + items[i].id + " " + items[i].name + " " + items[i].version + "\n"); >+ >+ dump("\n\n"); >+ }, >+ >+ _finishOperations: function nsExtensionManager__finishOperations () >+ { >+ var win = this._showProgressWindow(); >+ >+ try { >+ // An existing autoreg file is an indication that something major has >+ // happened to the extensions datasource (install/uninstall/enable/disable) >+ // and as such we must load it now and see what needs to happen. >+ this._ensureDS(); >+ >+ // Look for items that need to be installed >+ var items = this._ds.getItemsWithFlagSet("toBeInstalled"); >+ for (var i = 0; i < items.length; ++i) >+ this._finalizeInstall(items[i]); >+ >+ // If there were any install operations, we need to restart (again!) after >+ // the component files have been properly installed are registered... >+ var needsRestart = items.length > 0; >+ >+ // Look for extensions that need to be enabled >+ items = this._ds.getItemsWithFlagSet("toBeEnabled"); >+ for (var i = 0; i < items.length; ++i) >+ this._finalizeEnableDisable(items[i], false); >+ >+ // Look for extensions that need to be disabled >+ items = this._ds.getItemsWithFlagSet("toBeDisabled"); >+ for (var i = 0; i < items.length; ++i) >+ this._finalizeEnableDisable(items[i], true); >+ >+ // Look for extensions that need to be removed. This MUST be done after >+ // the install operations since extensions to be installed may have to be >+ // uninstalled if there are errors during the installation process! >+ items = this._ds.getItemsWithFlagSet("toBeUninstalled"); >+ for (var i = 0; i < items.length; ++i) >+ this._finalizeUninstall(items[i]); >+ >+ // Clean up any helper objects >+ delete this._extInstaller; >+ delete this._extUninstaller; >+ delete this._extEnabler; >+ >+ this._updateManifests(); >+ // If no additional restart is required, it implies that there are >+ // no new components that need registering so we can inform the app >+ // not to do any extra startup checking next time round. >+ this._writeCompatibilityManifest(needsRestart); >+ } >+ catch (e) { >+ dump("*** nsExtensionManager::_finishOperations - failure, catching exception so finalize window can close " + e +"\n"); >+ } >+ win.close(); >+ >+ return needsRestart; >+ }, >+ >+ // XXXben - this is actually a cheap stunt to load all the chrome registry >+ // services required to register/unregister packages... the synchronous >+ // nature of this code ensures the window will never actually appear >+ // on screen. >+ _showProgressWindow: function nsExtensionManager__showProgressWindow () >+ { >+ var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] >+ .getService(Components.interfaces.nsIWindowWatcher); >+ return ww.openWindow(null, "chrome://mozapps/content/extensions/finalize.xul", >+ "", "chrome,centerscreen,dialog", null); >+ }, >+ >+ _loadDefaults: function nsExtensionManager__loadDefaults () >+ { >+ // Load default preferences files for all extensions >+ var defaultsManifest = getFile(KEY_PROFILEDIR, >+ [DIR_EXTENSIONS, FILE_DEFAULTS]); >+ if (defaultsManifest.exists()) { >+ var fis = Components.classes["@mozilla.org/network/file-input-stream;1"] >+ .createInstance(Components.interfaces.nsIFileInputStream); >+ fis.init(defaultsManifest, -1, -1, false); >+ var lis = fis.QueryInterface(Components.interfaces.nsILineInputStream); >+ var line = { value: "" }; >+ var more = false; >+ do { >+ more = lis.readLine(line); >+ var lf = Components.classes["@mozilla.org/file/local;1"] >+ .createInstance(Components.interfaces.nsILocalFile); >+ var path = line.value; >+ if (path) { >+ lf.initWithPath(path); >+ >+ if (lf.exists()) >+ gPref.readUserPrefs(lf); >+ } >+ } >+ while (more); >+ fis.close(); >+ } >+ }, >+ >+ ensurePreConfiguredItem: function nsExtensionManager_ensurePreConfiguredItem (aItemID, aItemType, aManifest) >+ { >+ this._ds.insertForthcomingItem(aItemID, aItemType, false); >+ try { >+ var metadataDS = getInstallManifest(aManifest); >+ } >+ catch(e) { >+ return; >+ } >+ this._ds.addItemMetadata(aItemID, aItemType, metadataDS, false); >+ >+ // Check whether the extension is installable (firefox_version fitting between >+ // em:MaxVersion and em:MinVersion) >+ var extensionID = this.canInstallItem(metadataDS); >+ // |extensionID| must be a GUID string, not a number - a number means failure. >+ if (isNaN(parseInt(extensionID))) { >+ // Do install the extension, meaning we register its chrome and components >+ if (!this._extInstaller) >+ this._extInstaller = new nsExtensionInstaller(this._ds); >+ try { >+ this._extInstaller.install(aItemID, false); >+ } >+ catch (e) { >+ // If the installation failed, we disable the extension in addition >+ // to _not_ uninstalling it (which would fail anyway because it >+ // would be done at launch time... as a user). >+ this._ds.setItemProperty(aItemID, this._ds._emR("toBeUninstalled"), >+ null, false, aItemType); >+ this._ds.setItemProperty(aItemID, this._ds._emR("disabled"), >+ this._ds._emL("true"), false, aItemType); >+ } >+ } else { >+ // disable extensions that aren't installable >+ this._ds.setItemProperty(aItemID, this._ds._emR("disabled"), >+ this._ds._emL("true"), false, aItemType); >+ } >+ // Force locking pre-configured items. >+ this._ds.lockUnlockItem(aItemID, true); >+ }, >+ >+ checkForMismatches: function nsExtensionManager_checkForMismatches () >+ { >+ var needsRestart = false; >+ >+ this._disableObsoleteExtensions(); >+ >+ // Check to see if the version of the application that is being started >+ // now is the same one that was started last time. >+ var currAppVersion = gPref.getCharPref(PREF_EM_APP_EXTENSIONS_VERSION); >+ try { >+ var lastAppVersion = gPref.getCharPref(PREF_EM_LAST_APP_VERSION); >+ } >+ catch (e) {} >+ if (currAppVersion != lastAppVersion) { >+ // Version mismatch, we're have to load the extensions datasource >+ // and do version checking. Time hit here doesn't matter since this >+ // doesn't happen all that often. >+ this._ensureDS(); >+ var currAppID = gPref.getCharPref(PREF_EM_APP_ID); >+ var items = this._ds.getIncompatibleItemList(currAppID, currAppVersion, >+ nsIUpdateItem.TYPE_ADDON); >+ if (items.length > 0) { >+ for (var i = 0; i < items.length; ++i) { >+ // Now disable the extension so it won't hurt anything. >+ var alreadyDisabled = this._ds.getItemProperty(items[i].id, "disabled"); >+ var itemType = getItemType(this._ds._getResourceForItem(items[i].id).Value); >+ if (itemType != -1 && itemType & nsIUpdateItem.TYPE_EXTENSION) >+ if (!alreadyDisabled) this.disableExtension(items[i].id); >+ else if (itemType & nsIUpdateItem.TYPE_THEME) { >+ if (gPref.prefHasUserValue(PREF_GENERAL_SKINS_SELECTEDSKIN)) >+ gPref.clearUserPref(PREF_GENERAL_SKINS_SELECTEDSKIN); >+ if (!alreadyDisabled) this._ds.disableTheme(items[i].id); >+ } >+ } >+ // We want to eliminate locked extensions >+ newitems = []; >+ for (var i = 0; i < items.length; ++i) { >+ if (!this._ds.getItemProperty(items[i].id, "locked")) >+ newitems.push(items[i]); >+ } >+ if (newitems.length > 0) { >+ var updates = Components.classes["@mozilla.org/updates/update-service;1"] >+ .getService(Components.interfaces.nsIUpdateService); >+ updates.checkForUpdates(newitems, newitems.length, nsIUpdateItem.TYPE_ADDON, >+ nsIUpdateService.SOURCE_EVENT_MISMATCH, >+ null); >+ >+ needsRestart = true; >+ } >+ } >+ } >+ >+ // Somehow the component list went away, and for that reason the new one >+ // generated by this function is going to result in a different compreg. >+ // We must force a restart. >+ var componentList = getFile(KEY_PROFILEDIR, [FILE_COMPONENT_MANIFEST]); >+ if (!componentList.exists()) >+ needsRestart = true; >+ >+ // Now update the last app version so we don't do this checking >+ // again. >+ gPref.setCharPref(PREF_EM_LAST_APP_VERSION, currAppVersion); >+ >+ // XXXben - I am not entirely sure this is needed, since components and >+ // defaults manifests are written by the disabling function. Not going to >+ // rock the boat now however. >+ this._updateManifests(); >+ >+ return needsRestart; >+ }, >+ >+ get inSafeMode() >+ { >+ return this._ds.safeMode; >+ }, >+ >+ _updateManifests: function nsExtensionManager__updateManifests () >+ { >+ // Update the components manifests with paths for compatible, enabled, >+ // extensions. >+ try { >+ // Wrap this in try..catch so that if the account is restricted we don't >+ // completely fail here for lack of permissions to write to the bin >+ // dir (and cause apprunner to go into a restart loop). >+ // >+ // This means that making changes to install-dir extensions only possible >+ // for people with write access to bin dir (i.e. uninstall, disable, >+ // enable) >+ this._writeComponentManifest(false); >+ this._writeDefaults(false); >+ } >+ catch (e) { >+// dump("*** ExtensionManager:_updateManifests: no access privileges to application directory, skipping.\n"); >+ }; >+ this._writeComponentManifest(true); >+ this._writeDefaults(true); >+ }, >+ >+ // XXXben write to temporary file then move to final when done. >+ _writeProfileFile: function nsExtensionManager__writeProfileFile (aFile, aGetDirFunc, aIsProfile) >+ { >+ // When an operation is performed that requires a component re-registration >+ // (extension enabled/disabled, installed, uninstalled), we must write the >+ // set of registry-relative paths of components to register to an .autoreg >+ // file which lives in the profile folder. >+ // >+ // To do this we must enumerate all installed extensions and write data >+ // about all valid items to the file. >+ this._ensureDS(); >+ >+ var fos = Components.classes["@mozilla.org/network/file-output-stream;1"] >+ .createInstance(Components.interfaces.nsIFileOutputStream); >+ const MODE_WRONLY = 0x02; >+ const MODE_CREATE = 0x08; >+ const MODE_TRUNCATE = 0x20; >+ fos.init(aFile, MODE_WRONLY | MODE_CREATE | MODE_TRUNCATE, 0644, 0); >+ >+ var extensions = this.getItemList(null, nsIUpdateItem.TYPE_EXTENSION, { }); >+ var validExtensions = []; >+ for (var i = 0; i < extensions.length; ++i) { >+ var extension = extensions[i]; >+ >+ // An extension entry is valid only if it is not disabled, not about to >+ // be disabled, and not about to be uninstalled. >+ var toBeDisabled = this._ds.getItemProperty(extension.id, "toBeDisabled"); >+ var toBeUninstalled = this._ds.getItemProperty(extension.id, "toBeUninstalled"); >+ var toBeInstalled = this._ds.getItemProperty(extension.id, "toBeInstalled"); >+ var disabled = this._ds.getItemProperty(extension.id, "disabled"); >+ if (toBeDisabled == "true" || toBeUninstalled == "true" || >+ disabled == "true" || toBeInstalled == "true") >+ continue; >+ >+ var isProfile = this._ds.isProfileItem(extension.id); >+ var sourceDir = aGetDirFunc(isProfile, extension.id); >+ if (sourceDir.exists() && (aIsProfile == isProfile)) >+ validExtensions.push({ sourceDir: sourceDir, isProfile: isProfile }); >+ } >+ >+ // Debian hook to insert defaults/syspref into defaults.ini >+ if ((aFile.leafName == FILE_DEFAULTS) && aIsProfile == false) { >+ validExtensions.push({ sourceDir: getDirNoCreate(getDirKey(false), [DIR_DEFAULTS, "syspref"]), isProfile: false }); >+ } >+ >+ var lines = ["[Extra Files]\r\n", >+ "Count=" + validExtensions.length + "\r\n"]; >+ for (i = 0; i < lines.length; ++i) >+ fos.write(lines[i], lines[i].length); >+ >+ for (i = 0; i < validExtensions.length; ++i) { >+ var e = validExtensions[i]; >+ var relativeDir = getDir(e.isProfile ? KEY_PROFILEDIR : KEY_APPDIR, []); >+ var lf = e.sourceDir.QueryInterface(Components.interfaces.nsILocalFile); >+ var relDesc = lf.getRelativeDescriptor(relativeDir); >+ var line = "File" + i + "=" + relDesc + "\r\n"; >+ fos.write(line, line.length); >+ } >+ fos.close(); >+ }, >+ >+ _getComponentsDir: function nsExtensionManager__getComponentsDir (aIsProfile, aExtensionID) >+ { >+ return getDirNoCreate(getDirKey(aIsProfile), >+ [DIR_EXTENSIONS, aExtensionID, DIR_COMPONENTS]); >+ }, >+ >+ _getPreferencesDir: function nsExtensionManager__getPreferencesDir (aIsProfile, aExtensionID) >+ { >+ return getDirNoCreate(getDirKey(aIsProfile), >+ [DIR_EXTENSIONS, aExtensionID, >+ DIR_DEFAULTS, DIR_DEFAULTS_PREFS]); >+ }, >+ >+ _writeComponentManifest: function nsExtensionManager__writeComponentManifest (aIsProfile) >+ { >+ var manifest = aIsProfile ? getFile(KEY_PROFILEDIR, [FILE_COMPONENT_MANIFEST]) : >+ getFile(KEY_APPDIR, [FILE_COMPONENT_MANIFEST]); >+ this._writeProfileFile(manifest, this._getComponentsDir, aIsProfile); >+ >+ // Now refresh the compatibility manifest. >+ this._writeCompatibilityManifest(true); >+ }, >+ >+ _writeCompatibilityManifest: function nsExtensionManager__writeCompatibilityManifest (aComponentListUpdated) >+ { >+ var fos = Components.classes["@mozilla.org/network/file-output-stream;1"] >+ .createInstance(Components.interfaces.nsIFileOutputStream); >+ const MODE_WRONLY = 0x02; >+ const MODE_CREATE = 0x08; >+ const MODE_TRUNCATE = 0x20; >+ >+ // The compat file only lives in the Profile dir because we make the >+ // assumption that you can never have extensions prior to profile >+ // startup. >+ var compat = getFile(KEY_PROFILEDIR, [FILE_COMPAT_MANIFEST]); >+ fos.init(compat, MODE_WRONLY | MODE_CREATE | MODE_TRUNCATE, 0644, 0); >+ >+ var currAppBuildID = gPref.getCharPref(PREF_EM_APP_BUILDID); >+ >+ var val = aComponentListUpdated ? 1 : 0; >+ var lines = ["[Compatibility]\r\n", >+ "Build ID=" + currAppBuildID + "\r\n", >+ "Components List Changed=" + val + "\r\n"]; >+ for (var i = 0; i < lines.length; ++i) >+ fos.write(lines[i], lines[i].length); >+ >+ fos.close(); >+ }, >+ >+ _writeDefaults: function nsExtensionManager__writeDefaults (aIsProfile) >+ { >+ var manifest = aIsProfile ? getFile(KEY_PROFILEDIR, [FILE_DEFAULTS]) : >+ getFile(KEY_APPDIR, [FILE_DEFAULTS]); >+ this._writeProfileFile(manifest, this._getPreferencesDir, aIsProfile); >+ }, >+ >+ _cleanDirs: function nsExtensionManager__cleanDirs () >+ { >+ var keys = [KEY_PROFILEDIR, KEY_APPDIR]; >+ for (var i = 0; i < keys.length; ++i) { >+ var extensions = getDir(keys[i], [DIR_EXTENSIONS]); >+ var entries = extensions.directoryEntries; >+ while (entries.hasMoreElements()) { >+ var entry = entries.getNext().QueryInterface(Components.interfaces.nsIFile); >+ if (entry.isDirectory() && !entry.directoryEntries.hasMoreElements()) { >+ try { >+ entry.remove(false); >+ } >+ catch (e) { } >+ } >+ } >+ } >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIExtensionManager >+ installExtension: function nsExtensionManager_installExtension (aXPIFile, aFlags) >+ { >+ // Since we're installing a "new type" extension, we assume a file layout >+ // within the XPI like so: >+ // foo.xpi/ >+ // extension.rdf >+ // chrome/ >+ // components/ >+ // defaults/ >+ // prefs/ >+ var installProfile = aFlags & nsIExtensionManager.FLAG_INSTALL_PROFILE; >+ >+ var tempDir = getDir(getDirKey(installProfile), [DIR_EXTENSIONS, DIR_TEMP]); >+ var fileName = getRandomFileName("temp", "xpi"); >+ aXPIFile.copyTo(tempDir, fileName); >+ var xpiFile = tempDir.clone(); >+ xpiFile.append(fileName); >+ >+ // if the source file was read-only, fix permissions >+ if (!xpiFile.isWritable()) { >+ xpiFile.permissions = 0644; >+ } >+ >+ var zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"] >+ .createInstance(Components.interfaces.nsIZipReader); >+ zipReader.init(xpiFile); >+ zipReader.open(); >+ >+ var tempManifest = getFile(getDirKey(installProfile), >+ [DIR_EXTENSIONS, DIR_TEMP, getRandomFileName("install", "rdf")]); >+ if (!tempManifest.exists()) >+ tempManifest.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644); >+ zipReader.extract(FILE_INSTALL_MANIFEST, tempManifest); >+ >+ var extensionID = this.installExtensionInternal(xpiFile, tempManifest, installProfile); >+ switch (extensionID) { >+ case ERROR_EXTENSION_IS_THEME: >+ this.installTheme(aXPIFile, aFlags); >+ break; >+ case ERROR_INVALID_VERSION: >+ case ERROR_PHONED_HOME: >+ break; >+ default: >+ // Then we stage the extension's XPI into a temporary directory so we >+ // can extract them after the next restart. >+ this._stageExtensionXPI(zipReader, extensionID, installProfile); >+ >+ this._writeComponentManifest(installProfile); >+ } >+ >+ zipReader.close(); >+ tempManifest.remove(false); >+ >+ if (extensionID != ERROR_PHONED_HOME) >+ xpiFile.remove(false); >+ }, >+ >+ installExtensionInternal: function nsExtensionManager_installExtensionInternal (aXPIFile, aManifest, aIsProfile) >+ { >+ var ds = getInstallManifest(aManifest); >+ if (!ds) return; >+ >+ // XXXben - this is a hack until we properly fix xpinstall to be able to install >+ // different chrome types from trusted script. At the moment, when we >+ // call initManagerFromChrome, we can only install extensions, since >+ // the code path that installs themes is not utilized. To minimize the >+ // level of changes happening at the lower level in xpinstall at this >+ // point I am inserting this hack which checks for a theme-only property >+ // in the install manifest. >+ var manifestRoot = gRDF.GetResource("urn:mozilla:install-manifest"); >+ var internalName = gRDF.GetResource(EM_NS("internalName")); >+ if (stringData(ds.GetTarget(manifestRoot, internalName, true)) != "--") >+ return ERROR_EXTENSION_IS_THEME; >+ >+ // We do a basic version check first just to make sure we somehow weren't >+ // tricked into installing an incompatible extension... >+ this._ensureDS(); >+ var extensionID = this.canInstallItem(ds); >+ // |extensionID| must be a GUID string, not a number - a number means failure. >+ if (isNaN(parseInt(extensionID))) >+ this._configureForthcomingItem(ds, extensionID, aIsProfile); >+ else if (extensionID == 0) { >+ var io = new this.IncompatibleObserver(this); >+ var isChecking = io.checkForUpdates(ds, nsIUpdateItem.TYPE_EXTENSION, >+ aXPIFile, aIsProfile); >+ if (!isChecking) >+ showIncompatibleError(ds); >+ else { >+ extensionID = ERROR_PHONED_HOME; // caller uses this to distinguish >+ // phone-home attempt. >+ } >+ } >+ >+ return extensionID; >+ }, >+ >+ IncompatibleObserver: function nsExtensionManager_IncompatibleObserver (aEM) >+ { >+ this._item = null; >+ this._em = aEM; >+ this._ds = null; >+ this._xpi = null; >+ this._extensionID = 0; >+ this._isProfile = true; >+ >+ this.checkForUpdates = function nsExtensionManager__iOcheckForUpdates (aDataSource, aType, >+ aXPIFile, aIsProfile) >+ { >+ // Construct a nsIUpdateItem for this extension... >+ var item = this._em._getItemForIncompatibleID(aDataSource, aType); >+ if (item) { >+ this._item = item; >+ this._ds = aDataSource; >+ this._xpi = aXPIFile; >+ this._isProfile = true; >+ >+ gOS.addObserver(this, "Update:Extension:Started", false); >+ gOS.addObserver(this, "Update:Extension:Item-Ended", false); >+ gOS.addObserver(this, "Update:Extension:Item-Error", false); >+ gOS.addObserver(this, "Update:Extension:Ended", false); >+ >+ this._em.update([item], 1, true); >+ >+ return true; >+ } >+ return false; >+ } >+ >+ this.observe = function nsExtensionManager__iOobserve (aSubject, aTopic, aData) >+ { >+ switch (aTopic) { >+ case "Update:Extension:Started": >+ break; >+ case "Update:Extension:Item-Ended": >+ if (aSubject) { >+ var item = aSubject.QueryInterface(Components.interfaces.nsIUpdateItem); >+ this._em._ds.setTargetApplicationInfo(item.id, >+ item.minAppVersion, >+ item.maxAppVersion, >+ this._ds, >+ this._item.type); >+ this._extensionID = this._em.canInstallItem(this._ds); >+ } >+ break; >+ case "Update:Extension:Item-Error": >+ break; >+ case "Update:Extension:Ended": >+ gOS.removeObserver(this, "Update:Extension:Started"); >+ gOS.removeObserver(this, "Update:Extension:Item-Ended"); >+ gOS.removeObserver(this, "Update:Extension:Item-Error"); >+ gOS.removeObserver(this, "Update:Extension:Ended"); >+ >+ if (isNaN(this._extensionID)) { >+ var zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"] >+ .createInstance(Components.interfaces.nsIZipReader); >+ zipReader.init(this._xpi); >+ zipReader.open(); >+ >+ // Add the item after all >+ this._em._configureForthcomingItem(this._ds, this._extensionID, >+ this._isProfile); >+ this._em._stageExtensionXPI(zipReader, this._extensionID, this._isProfile); >+ this._em._writeComponentManifest(this._isProfile); >+ >+ zipReader.close(); >+ } >+ else >+ showIncompatibleError(this._ds); >+ >+ // Now really delete the temporary XPI file >+ this._xpi.remove(false); >+ break; >+ } >+ } >+ }, >+ >+ _configureForthcomingItem: function nsExtensionManager__configureForthcomingItem (aDataSource, >+ aExtensionID, >+ aIsProfile) >+ { >+ // Clear any "disabled" flags that may have been set by the mismatch >+ // checking code at startup. >+ var props = { toBeDisabled : null, >+ disabled : null, >+ toBeInstalled : this._ds._emL("true"), >+ name : this.getManifestProperty(aDataSource, "name"), >+ version : this.getManifestProperty(aDataSource, "version") }; >+ for (var p in props) { >+ this._ds.setItemProperty(aExtensionID, this._ds._emR(p), >+ props[p], aIsProfile, >+ nsIUpdateItem.TYPE_EXTENSION); >+ } >+ >+ // Insert it into the child list NOW rather than later because: >+ // - extensions installed using the command line need to be a member >+ // of a container during the install phase for the code to be able >+ // to identify profile vs. global >+ // - extensions installed through the UI should show some kind of >+ // feedback to indicate their presence is forthcoming (i.e. they >+ // will be available after a restart). >+ this._ds.insertForthcomingItem(aExtensionID, nsIUpdateItem.TYPE_EXTENSION, >+ aIsProfile); >+ }, >+ >+ _getItemForIncompatibleID: function nsExtensionManager__getItemForID (aDataSource, aType) >+ { >+ var newItem = null; >+ var id, version, targetAppInfo, name, updateURL; >+ var manifestRoot = gRDF.GetResource("urn:mozilla:install-manifest"); >+ try { >+ function getProperty (aDataSource, aSourceResource, aProperty) >+ { >+ var rv; >+ try { >+ var property = gRDF.GetResource(EM_NS(aProperty)); >+ rv = stringData(aDataSource.GetTarget(aSourceResource, property, true)); >+ if (rv == "--") >+ throw Components.results.NS_ERROR_FAILURE; >+ } >+ catch (e) { } >+ return rv; >+ } >+ >+ var root = gRDF.GetResource("urn:mozilla:install-manifest"); >+ id = getProperty(aDataSource, root, "id"); >+ version = getProperty(aDataSource, root, "version"); >+ targetAppInfo = this._ds.getTargetApplicationInfo(id, aDataSource, aType); >+ name = getProperty(aDataSource, root, "name"); >+ updateURL = getProperty(aDataSource, root, "updateURL"); >+ if (updateURL == "--") >+ updateURL = ""; >+ >+ newItem = Components.classes["@mozilla.org/updates/item;1"] >+ .createInstance(Components.interfaces.nsIUpdateItem); >+ newItem.init(id, version, targetAppInfo.minVersion, >+ targetAppInfo.maxVersion, >+ name, -1, "", "", updateURL, aType); >+ } >+ catch (e) { >+ return null; >+ } >+ return newItem; >+ }, >+ >+ canInstallItem: function nsExtensionManager_canInstallItem (aDataSource) >+ { >+ var manifestRoot = gRDF.GetResource("urn:mozilla:install-manifest"); >+ // First make sure the item has a valid "version" property. >+ var version = gRDF.GetResource(EM_NS("version")); >+ var versionLiteral = stringData(aDataSource.GetTarget(manifestRoot, version, true)); >+ if (!getVersionChecker().isValidVersion(versionLiteral)) { >+ var name = gRDF.GetResource(EM_NS("name")); >+ var nameLiteral = stringData(aDataSource.GetTarget(manifestRoot, name, true)); >+ showInvalidVersionError(nameLiteral, versionLiteral); >+ return ERROR_INVALID_VERSION; >+ } >+ >+ // Check the target application range specified by the extension metadata. >+ if (this._ds.isCompatible(aDataSource, manifestRoot)) { >+ var id = gRDF.GetResource(EM_NS("id")); >+ var idLiteral = aDataSource.GetTarget(manifestRoot, id, true); >+ return idLiteral.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; >+ } >+ return 0; >+ }, >+ >+ getManifestProperty: function nsExtensionManager_getManifestProperty (aDataSource, aProperty) >+ { >+ var manifestRoot = gRDF.GetResource("urn:mozilla:install-manifest"); >+ var arc = gRDF.GetResource(EM_NS(aProperty)); >+ return aDataSource.GetTarget(manifestRoot, arc, true); >+ }, >+ >+ _stageExtensionXPI: function nsExtensionManager__stageExtensionXPI (aZipReader, aExtensionID, aInstallProfile) >+ { >+ // Get the staging dir >+ var dir = getDir(getDirKey(aInstallProfile), >+ [DIR_EXTENSIONS, DIR_TEMP, aExtensionID]); >+ var extensionFileName = aExtensionID + ".xpi"; >+ var extensionFile = dir.clone(); >+ extensionFile.append(extensionFileName); >+ if (extensionFile.exists()) >+ extensionFile.remove(false); >+ aZipReader.file.copyTo(dir, extensionFileName); >+ >+ // if the source file was readonly, fix the permissions >+ if (!extensionFile.isWritable()) { >+ extensionFile.permissions = 0644; >+ } >+ }, >+ >+ // This function is called on the next startup >+ _finalizeInstall: function nsExtensionManager__finalizeInstall (aExtensionID) >+ { >+ var isProfile = this._ds.isProfileItem(aExtensionID); >+ if (aExtensionID == 0 || aExtensionID == -1) { >+ this._ds.removeCorruptItem(aExtensionID, >+ nsIUpdateItem.TYPE_EXTENSION, >+ isProfile); >+ return; >+ } >+ >+ if (!this._extInstaller) >+ this._extInstaller = new nsExtensionInstaller(this._ds); >+ >+ this._extInstaller.install(aExtensionID, isProfile); >+ >+ // Update the Components Manifest >+ this._writeComponentManifest(isProfile); >+ >+ // Update the Defaults Manifest >+ this._writeDefaults(isProfile); >+ }, >+ >+ _finalizeEnableDisable: function nsExtensionManager__finalizeEnableDisable (aExtensionID, aDisable) >+ { >+ if (!this._extEnabler) >+ this._extEnabler = new nsExtensionEnabler(this._ds); >+ >+ var isProfile = this._ds.isProfileItem(aExtensionID); >+ this._extEnabler.enable(aExtensionID, true, aDisable); >+ >+ // clear temporary flags >+ this._ds.setItemProperty(aExtensionID, >+ this._ds._emR("toBeEnabled"), >+ null, true, >+ nsIUpdateItem.TYPE_EXTENSION); >+ this._ds.setItemProperty(aExtensionID, >+ this._ds._emR("toBeDisabled"), >+ null, true, >+ nsIUpdateItem.TYPE_EXTENSION); >+ }, >+ >+ _finalizeUninstall: function nsExtensionManager__finalizeUninstall (aExtensionID) >+ { >+ if (!this._extUninstaller) >+ this._extUninstaller = new nsExtensionUninstaller(this._ds); >+ var isProfile = this._ds.isProfileItem(aExtensionID); >+ this._extUninstaller.uninstall(aExtensionID, isProfile); >+ >+ // Clean the extension resource >+ this._ds.removeItemMetadata(aExtensionID, nsIUpdateItem.TYPE_EXTENSION); >+ >+ // Do this LAST since inferences are made about an item based on >+ // what container it's in. >+ this._ds.removeItemFromContainer(aExtensionID, >+ nsIUpdateItem.TYPE_EXTENSION, >+ isProfile); >+ }, >+ >+ uninstallExtension: function nsExtensionManager_uninstallExtension (aExtensionID) >+ { >+ if (!this._ds.isDownloadItem(aExtensionID)) { >+ this._ds.uninstallExtension(aExtensionID); >+ >+ var isProfile = this._ds.isProfileItem(aExtensionID); >+ >+ // Update the Components Manifest >+ this._writeComponentManifest(isProfile); >+ >+ // Update the Defaults Manifest >+ this._writeDefaults(isProfile); >+ } >+ else { >+ // Bad download entry - uri is url, e.g. "http://www.foo.com/test.xpi" >+ // ... just remove it from the list. >+ this._ds.removeCorruptDLItem(aExtensionID, nsIUpdateItem.TYPE_EXTENSION); >+ } >+ }, >+ >+ enableExtension: function nsExtensionManager_enableExtension (aExtensionID) >+ { >+ this._ds.enableExtension(aExtensionID); >+ >+ var isProfile = this._ds.isProfileItem(aExtensionID); >+ >+ // Update the Components Manifest >+ this._writeComponentManifest(isProfile); >+ >+ // Update the Defaults Manifest >+ this._writeDefaults(isProfile); >+ }, >+ >+ disableExtension: function nsExtensionManager_disableExtension (aExtensionID) >+ { >+ this._ds.disableExtension(aExtensionID); >+ >+ var isProfile = this._ds.isProfileItem(aExtensionID); >+ >+ // Update the Components Manifest >+ this._writeComponentManifest(isProfile); >+ >+ // Update the Defaults Manifest >+ this._writeDefaults(isProfile); >+ }, >+ >+ enableTheme: function nsExtensionsDataSource_enableTheme (aThemeID) >+ { >+ this._ds.enableTheme(aThemeID); >+ }, >+ >+ disableTheme: function nsExtensionsDataSource_disableTheme (aThemeID) >+ { >+ this._ds.disableTheme(aThemeID); >+ }, >+ >+ update: function nsExtensionManager_update (aItems, aItemCount, aVersionUpdateOnly) >+ { >+ var appID = gPref.getCharPref(PREF_EM_APP_ID); >+ var appVersion = gPref.getCharPref(PREF_EM_APP_EXTENSIONS_VERSION); >+ >+ if (aItems.length == 0) { >+ var addonType = nsIUpdateItem.TYPE_ADDON; >+ aItems = this.getItemList(null, addonType, { }); >+ } >+ var updater = new nsExtensionItemUpdater(appID, appVersion, this); >+ updater.checkForUpdates(aItems, aItems.length, aVersionUpdateOnly); >+ }, >+ >+ getItemList: function nsExtensionManager_getItemList (aItemID, aType, aCountRef) >+ { >+ this._ensureDS(); >+ return this._ds.getItemList(aItemID, aType, aCountRef); >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // Themes >+ installTheme: function nsExtensionManager_installTheme (aJARFile, aFlags) >+ { >+ this._ensureDS(); >+ >+ var isProfile = aFlags & nsIExtensionManager.FLAG_INSTALL_PROFILE; >+ var installer = new nsThemeInstaller(this._ds, this); >+ installer.install(aJARFile, isProfile); >+ // XPInstall selects the theme, if necessary. >+ }, >+ >+ uninstallTheme: function nsExtensionManager_uninstallTheme (aThemeID) >+ { >+ if (!this._ds.isDownloadItem(aThemeID)) { >+ this._ensureDS(); >+ this._ds.uninstallTheme(aThemeID); >+ } >+ else { >+ // Bad download entry - uri is url, e.g. "http://www.foo.com/test.jar" >+ // ... just remove it from the list. >+ this._ds.removeCorruptDLItem(aThemeID, nsIUpdateItem.TYPE_THEME); >+ } >+ }, >+ >+ moveTop: function nsExtensionManager_moveTop (aItemID) >+ { >+ this._ds.moveTop(aItemID); >+ }, >+ >+ moveUp: function nsExtensionManager_moveUp (aItemID) >+ { >+ this._ds.moveUp(aItemID); >+ }, >+ >+ moveDown: function nsExtensionManager_moveDown (aItemID) >+ { >+ this._ds.moveDown(aItemID); >+ }, >+ >+ get datasource() >+ { >+ this._ensureDS(); >+ return this._ds; >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // Downloads >+ _transactions: [], >+ _downloadCount: 0, >+ addDownloads: function nsExtensionManager_addDownloads (aItems, aItemCount) >+ { >+ this._downloadCount += aItemCount; >+ >+ var txn = new nsItemDownloadTransaction(this); >+ for (var i = 0; i < aItemCount; ++i) { >+ var currItem = aItems[i]; >+ var txnID = Math.round(Math.random() * 100); >+ txn.addDownload(currItem.name, currItem.xpiURL, currItem.iconURL, >+ currItem.type, txnID); >+ this._transactions.push(txn); >+ } >+ >+ // Kick off the download process for this transaction >+ gOS.addObserver(this, "offline-requested", false); >+ gOS.addObserver(this, "quit-application-requested", false); >+ gOS.notifyObservers(txn, "xpinstall-progress", "open"); >+ }, >+ >+ removeDownload: function nsExtensionManager_removeDownload (aURL, aType) >+ { >+ for (var i = 0; i < this._transactions.length; ++i) { >+ if (this._transactions[i].containsURL(aURL)) { >+ this._transactions[i].removeDownload(aURL, aType); >+ return; >+ } >+ } >+ }, >+ >+ _removeAllDownloads: function nsExtensionManager__removeAllDownloads () >+ { >+ for (var i = 0; i < this._transactions.length; ++i) >+ this._transactions[i].removeAllDownloads(); >+ }, >+ >+ // The nsIXPIProgressDialog implementation in the download transaction object >+ // forwards notifications through these methods which we then pass on to any >+ // front end objects implementing nsIExtensionDownloadProgressListener that >+ // are listening. We maintain the master state of download operations HERE, >+ // not in the front end, because if the user closes the extension or theme >+ // managers during the downloads we need to maintain state and not terminate >+ // the download/install process. >+ onStateChange: function nsExtensionManager_onStateChange (aTransaction, aURL, aState, aValue) >+ { >+ if (!(aURL in this._progressData)) >+ this._progressData[aURL] = { }; >+ this._progressData[aURL].state = aState; >+ >+ for (var i = 0; i < this._downloadObservers.length; ++i) >+ this._downloadObservers[i].onStateChange(aURL, aState, aValue); >+ >+ const nsIXPIProgressDialog = Components.interfaces.nsIXPIProgressDialog; >+ switch (aState) { >+ case nsIXPIProgressDialog.INSTALL_DONE: >+ --this._downloadCount; >+ break; >+ case nsIXPIProgressDialog.DIALOG_CLOSE: >+ for (var i = 0; i < this._transactions.length; ++i) { >+ if (this._transactions[i].id == aTransaction.id) { >+ this._transactions.splice(i, 1); >+ delete aTransaction; >+ break; >+ } >+ } >+ break; >+ } >+ }, >+ >+ _progressData: { }, >+ onProgress: function nsExtensionManager_onProgress (aURL, aValue, aMaxValue) >+ { >+ for (var i = 0; i < this._downloadObservers.length; ++i) >+ this._downloadObservers[i].onProgress(aURL, aValue, aMaxValue); >+ >+ if (!(aURL in this._progressData)) >+ this._progressData[aURL] = { }; >+ this._progressData[aURL].progress = Math.round((aValue / aMaxValue) * 100); >+ }, >+ >+ _downloadObservers: [], >+ addDownloadObserver: function nsExtensionManager_addDownloadObserver (aXPIProgressDialog) >+ { >+ for (var i = 0; i < this._downloadObservers.length; ++i) { >+ if (this._downloadObservers[i] == aXPIProgressDialog) >+ return i; >+ } >+ this._downloadObservers.push(aXPIProgressDialog); >+ return this._downloadObservers.length - 1; >+ }, >+ >+ removeDownloadObserverAt: function nsExtensionManager_removeDownloadObserverAt (aIndex) >+ { >+ this._downloadObservers.splice(aIndex, 1); >+ if (this._downloadCount != 0) >+ this._ds.flushProgressInfo(this._progressData); >+ }, >+ >+ // >+ _ds: null, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // Other >+ >+ // This should NOT be called until after the window is shown! >+ _ensureDS: function nsExtensionManager__ensureDS () >+ { >+ if (!this._ds) { >+ dump("*** loading the extensions datasource\n"); >+ this._ds = new nsExtensionsDataSource(); >+ if (this._ds) { >+ this._ds.loadExtensions(false); >+ this._ds.loadExtensions(true); >+ } >+ >+ // Ensure any pre-configured items are initialized. >+ (new nsInstalledExtensionReader(this)).read(); >+ } >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIClassInfo >+ getInterfaces: function nsExtensionManager_getInterfaces (aCount) >+ { >+ var interfaces = [Components.interfaces.nsIExtensionManager, >+ Components.interfaces.nsIXPIProgressDialog, >+ Components.interfaces.nsIObserver]; >+ aCount.value = interfaces.length; >+ return interfaces; >+ }, >+ >+ getHelperForLanguage: function nsExtensionManager_getHelperForLanguage (aLanguage) >+ { >+ return null; >+ }, >+ >+ get contractID() >+ { >+ return "@mozilla.org/extensions/manager;1"; >+ }, >+ >+ get classDescription() >+ { >+ return "Extension Manager"; >+ }, >+ >+ get classID() >+ { >+ return Components.ID("{8A115FAA-7DCB-4e8f-979B-5F53472F51CF}"); >+ }, >+ >+ get implementationLanguage() >+ { >+ return Components.interfaces.nsIProgrammingLanguage.JAVASCRIPT; >+ }, >+ >+ get flags() >+ { >+ return Components.interfaces.nsIClassInfo.SINGLETON; >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsISupports >+ QueryInterface: function nsExtensionManager_QueryInterface (aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIExtensionManager) && >+ !aIID.equals(Components.interfaces.nsIObserver) && >+ !aIID.equals(Components.interfaces.nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsItemDownloadTransaction >+// >+// This object implements nsIXPIProgressDialog and represents a collection of >+// XPI/JAR download and install operations. There is one >+// nsItemDownloadTransaction per back-end XPInstallManager object. We maintain >+// a collection of separate transaction objects because it's possible to have >+// multiple separate XPInstall download/install operations going on >+// simultaneously, each with its own XPInstallManager instance. For instance >+// you could start downloading two extensions and then download a theme. Each >+// of these operations would open the appropriate FE and have to be able to >+// track each operation independently. >+// >+function nsItemDownloadTransaction(aManager) >+{ >+ this._manager = aManager; >+ this._downloads = []; >+} >+ >+nsItemDownloadTransaction.prototype = { >+ _manager : null, >+ _downloads : [], >+ id : -1, >+ >+ addDownload: function nsItemDownloadTransaction_addDownload (aName, aURL, aIconURL, aItemType, aID) >+ { >+ this._downloads.push({ url: aURL, type: aItemType, waiting: true }); >+ this._manager._ds.addDownload(aName, aURL, aIconURL, aItemType); >+ this.id = aID; >+ }, >+ >+ removeDownload: function nsItemDownloadTransaction_removeDownload (aURL, aItemType) >+ { >+ this._manager._ds.removeDownload(aURL, aItemType); >+ }, >+ >+ removeAllDownloads: function nsItemDownloadTransaction_removeAllDownloads () >+ { >+ for (var i = 0; i < this._downloads.length; ++i) >+ this.removeDownload(this._downloads[i].url, this._downloads[i].type); >+ }, >+ >+ containsURL: function nsItemDownloadTransaction_containsURL (aURL) >+ { >+ for (var i = 0; i < this._downloads.length; ++i) { >+ if (this._downloads[i].url == aURL) >+ return true; >+ } >+ return false; >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIXPIProgressDialog >+ onStateChange: function nsItemDownloadTransaction_onStateChange (aIndex, aState, aValue) >+ { >+ this._manager.onStateChange(this, this._downloads[aIndex].url, aState, aValue); >+ }, >+ >+ onProgress: function nsItemDownloadTransaction_onProgress (aIndex, aValue, aMaxValue) >+ { >+ this._manager.onProgress(this._downloads[aIndex].url, aValue, aMaxValue); >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsISupports >+ QueryInterface: function nsItemDownloadTransaction_QueryInterface (aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIXPIProgressDialog) && >+ !aIID.equals(Components.interfaces.nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsExtensionItemUpdater >+// >+function nsExtensionItemUpdater(aTargetAppID, aTargetAppVersion, aEM) >+{ >+ this._appID = aTargetAppID; >+ this._appVersion = aTargetAppVersion; >+ this._emDS = aEM._ds; >+ this._em = aEM; >+ >+ getVersionChecker(); >+} >+ >+nsExtensionItemUpdater.prototype = { >+ _appID : "", >+ _appVersion : "", >+ _emDS : null, >+ _em : null, >+ _versionUpdateOnly : 0, >+ _items : [], >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIExtensionItemUpdater >+ // >+ // When we check for updates to an item, there are two pieces of information >+ // that are returned - 1) info about the newest available version, if any, >+ // and 2) info about the currently installed version. The latter is provided >+ // primarily to inform the client of changes to the application compatibility >+ // metadata for the current item. Depending on the situation, either 2 or >+ // 1&2 may be what is required. >+ // >+ // Callers: >+ // 1 - nsUpdateService.js, user event >+ // User clicked on the update icon to invoke an update check, >+ // user clicked on an Extension/Theme and clicked "Update". In this >+ // case we want to update compatibility metadata about the installed >+ // version, and look for newer versions to offer. >+ // 2 - nsUpdateService.js, background event >+ // Timer fired, background update is being performed. In this case >+ // we also want to update compatibility metadata and look for newer >+ // versions. >+ // 3 - Mismatch >+ // User upgraded to a newer version of the app, update compatibility >+ // metadata and look for newer versions. >+ // 4 - Install Phone Home >+ // User installed an item that was deemed incompatible based only >+ // on the information provided in the item's install.rdf manifest, >+ // we look ONLY for compatibility updates in this case to determine >+ // whether or not the item can be installed. >+ // >+ checkForUpdates: function nsExtensionItemUpdater_checkForUpdates (aItems, aItemCount, >+ aVersionUpdateOnly) >+ { >+ gOS.notifyObservers(null, "Update:Extension:Started", ""); >+ this._versionUpdateOnly = aVersionUpdateOnly; >+ this._items = aItems; >+ this._responseCount = aItemCount; >+ >+ // This is the number of extensions/themes/etc that we found updates for. >+ this._updateCount = 0; >+ >+ for (var i = 0; i < aItemCount; ++i) { >+ var e = this._items[i]; >+ gOS.notifyObservers(e, "Update:Extension:Item-Started", ""); >+ (new nsRDFItemUpdater(this)).checkForUpdates(e, aVersionUpdateOnly); >+ } >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsExtensionItemUpdater >+ _applyVersionUpdates: function nsExtensionItemUpdater__applyVersionUpdates (aLocalItem, aRemoteItem) >+ { >+ var r = this._emDS._getResourceForItem(aLocalItem.id); >+ if (!r) return; >+ var targetAppInfo = this._emDS.getTargetApplicationInfo(aLocalItem.id, this._emDS, >+ getItemType(r.Value)); >+ if (gVersionChecker.compare(targetAppInfo.maxVersion, aRemoteItem.maxAppVersion) < 0) { >+ // Remotely specified maxVersion is newer than the maxVersion >+ // for the installed Extension. Apply that change to the datasource. >+ this._emDS.setTargetApplicationInfo(aLocalItem.id, >+ aRemoteItem.minAppVersion, >+ aRemoteItem.maxAppVersion, >+ null, aLocalItem.type); >+ >+ // If we got here through |checkForMismatches|, this extension has >+ // already been disabled, re-enable it. >+ if (this._emDS.getItemProperty(aLocalItem.id, "disabled") == "true") >+ this._em.enableExtension(aLocalItem.id); >+ } >+ }, >+ >+ _isValidUpdate: function nsExtensionItemUpdater__isValidUpdate (aLocalItem, aRemoteItem) >+ { >+ var appExtensionsVersion = gPref.getCharPref(PREF_EM_APP_EXTENSIONS_VERSION); >+ >+ // Check if the update will only run on a newer version of Firefox. >+ if (aRemoteItem.minAppVersion && >+ gVersionChecker.compare(appExtensionsVersion, aRemoteItem.minAppVersion) < 0) >+ return false; >+ >+ // Check if the update will only run on an older version of Firefox. >+ if (aRemoteItem.maxAppVersion && >+ gVersionChecker.compare(appExtensionsVersion, aRemoteItem.maxAppVersion) > 0) >+ return false; >+ >+ return true; >+ }, >+ >+ _checkForDone: function nsExtensionItemUpdater__checkForDone () >+ { >+ if (--this._responseCount == 0) { >+ if (!this._versionUpdateOnly) >+ gPref.setIntPref(PREF_UPDATE_COUNT, this._updateCount); >+ >+ gOS.notifyObservers(null, "Update:Extension:Ended", ""); >+ } >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsISupports >+ QueryInterface: function nsExtensionItemUpdater_QueryInterface (aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIExtensionItemUpdater) && >+ !aIID.equals(Components.interfaces.nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ } >+}; >+ >+function nsRDFItemUpdater(aUpdater) >+{ >+ this._updater = aUpdater; >+} >+ >+nsRDFItemUpdater.prototype = { >+ _updater : null, >+ _versionUpdateOnly : 0, >+ _item : null, >+ >+ checkForUpdates: function (aItem, aVersionUpdateOnly) >+ { >+ // A preference setting can disable updating for this item >+ // We'll also skip locked items. >+ try { >+ if (this._updater._emDS.getItemProperty(aItem.id, "locked") || >+ !gPref.getBoolPref(PREF_EM_ITEM_UPDATE_ENABLED.replace(/%UUID%/, aItem.id))) { >+ gOS.notifyObservers(null, "Update:Extension:Item-Ended", ""); >+ this._updater._checkForDone(); >+ return; >+ } >+ } >+ catch (e) { } >+ >+ this._versionUpdateOnly = aVersionUpdateOnly; >+ this._item = aItem; >+ >+ // Look for a custom update URI: 1) supplied by a pref, 2) supplied by the >+ // install manifest, 3) the default configuration >+ try { >+ var dsURI = gPref.getComplexValue(PREF_EM_ITEM_UPDATE_URL.replace(/%UUID%/, aItem.id), >+ Components.interfaces.nsIPrefLocalizedString).data; >+ } >+ catch (e) { } >+ if (!dsURI) >+ dsURI = aItem.updateRDF; >+ if (!dsURI) { >+ dsURI = gPref.getComplexValue(PREF_UPDATE_DEFAULT_URL, >+ Components.interfaces.nsIPrefLocalizedString).data; >+ } >+ dsURI = dsURI.replace(/%ITEM_ID%/g, aItem.id); >+ dsURI = dsURI.replace(/%ITEM_VERSION%/g, aItem.version); >+ dsURI = dsURI.replace(/%ITEM_MAXAPPVERSION%/g, aItem.maxAppVersion); >+ dsURI = dsURI.replace(/%APP_ID%/g, this._updater._appID); >+ dsURI = dsURI.replace(/%APP_VERSION%/g, this._updater._appVersion); >+ dsURI = dsURI.replace(/%REQ_VERSION%/g, 1); >+ >+ // escape() does not properly encode + symbols in any embedded FVF strings. >+ dsURI = dsURI.replace(/\+/g, "%2B"); >+ >+ var ds = gRDF.GetDataSource(dsURI); >+ var rds = ds.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource) >+ if (rds.loaded) >+ this.onDatasourceLoaded(ds, aItem); >+ else { >+ var sink = ds.QueryInterface(Components.interfaces.nsIRDFXMLSink); >+ sink.addXMLSinkObserver(this); >+ } >+ }, >+ >+ onDatasourceLoaded: function nsExtensionItemUpdater_onDatasourceLoaded (aDatasource, aLocalItem) >+ { >+ /////////////////////////////////////////////////////////////////////////// >+ // The extension update RDF file looks something like this: >+ // >+ // <RDF:Description about="urn:mozilla:extension:{GUID}"> >+ // <em:updates> >+ // <RDF:Seq> >+ // <RDF:li resource="urn:mozilla:extension:{GUID}:4.9"/> >+ // <RDF:li resource="urn:mozilla:extension:{GUID}:5.0"/> >+ // </RDF:Seq> >+ // </em:updates> >+ // <!-- the version of the extension being offered --> >+ // <em:version>5.0</em:version> >+ // <em:updateLink>http://www.mysite.com/myext-50.xpi</em:updateLink> >+ // </RDF:Description> >+ // >+ // <RDF:Description about="urn:mozilla:extension:{GUID}:4.9"> >+ // <em:version>4.9</em:version> >+ // <em:targetApplication> >+ // <RDF:Description> >+ // <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> >+ // <em:minVersion>0.9</em:minVersion> >+ // <em:maxVersion>1.0</em:maxVersion> >+ // <em:updateLink>http://www.mysite.com/myext-49.xpi</em:updateLink> >+ // </RDF:Description> >+ // </em:targetApplication> >+ // </RDF:Description> >+ // >+ // If we get here because the following happened: >+ // 1) User was using Firefox 0.9 with ExtensionX 0.5 (minVersion 0.8, >+ // maxVersion 0.9 for Firefox) >+ // 2) User upgraded Firefox to 1.0 >+ // 3) |checkForMismatches| deems ExtensionX 0.5 incompatible with this >+ // new version of Firefox on the basis of its maxVersion >+ // 4) ** We reach this point ** >+ // >+ // If the version of ExtensionX (0.5) matches that provided by the >+ // server, then this is a cue that the author updated the rdf file >+ // or central repository to say "0.5 is ALSO compatible with Firefox 1.0, >+ // no changes are necessary." In this event, the local metadata for >+ // installed ExtensionX (0.5) is freshened with the new maxVersion, >+ // and we advance to the next item WITHOUT any download/install >+ // updates. >+ >+ // Parse the response RDF >+ function UpdateData() {}; >+ UpdateData.prototype = { version: "0.0", updateLink: null, >+ minVersion: "0.0", maxVersion: "0.0" }; >+ >+ var versionUpdate = new UpdateData(); >+ var newestUpdate = new UpdateData(); >+ >+ var newerItem, sameItem; >+ >+ // Firefox 1.0PR+ update.rdf format >+ if (!this._versionUpdateOnly) { >+ // Look for newer versions of this item, we only do this in "normal" >+ // mode... see comment by nsExtensionItemUpdater_checkForUpdates >+ // about how we do this in all cases but Install Phone Home - which >+ // only needs to do a version check. >+ this._parseV20UpdateInfo(aDatasource, aLocalItem, newestUpdate, false); >+ if (!newestUpdate.updateLink) { >+ // Firefox 0.9 update.rdf format - does not contain any metadata >+ // that can be used for version updates, so performed in the "all updates" >+ // mode only. >+ this._parseV10UpdateInfo(aDatasource, aLocalItem, newestUpdate); >+ } >+ >+ newerItem = Components.classes["@mozilla.org/updates/item;1"] >+ .createInstance(Components.interfaces.nsIUpdateItem); >+ newerItem.init(aLocalItem.id, >+ newestUpdate.version, >+ newestUpdate.minVersion, >+ newestUpdate.maxVersion, >+ aLocalItem.name, >+ -1, newestUpdate.updateLink, "", "", >+ aLocalItem.type); >+ if (this._updater._isValidUpdate(aLocalItem, newerItem)) >+ ++this._updater._updateCount; >+ else >+ newerItem = null; >+ } >+ >+ // Now look for updated version compatibility metadata for the currently >+ // installed version... >+ this._parseV20UpdateInfo(aDatasource, aLocalItem, versionUpdate, true); >+ >+ var result = gVersionChecker.compare(versionUpdate.version, >+ aLocalItem.version); >+ if (result == 0) { >+ // Local version exactly matches the "Version Update" remote version, >+ // Apply changes into local datasource. >+ sameItem = Components.classes["@mozilla.org/updates/item;1"] >+ .createInstance(Components.interfaces.nsIUpdateItem); >+ sameItem.init(aLocalItem.id, >+ versionUpdate.version, >+ versionUpdate.minVersion, >+ versionUpdate.maxVersion, >+ aLocalItem.name, >+ -1, "", "", "", >+ aLocalItem.type); >+ if (!this._versionUpdateOnly) { >+ if (this._updater._isValidUpdate(aLocalItem, sameItem)) { >+ // Install-time updates are not written to the DS because there is no >+ // entry yet, EM just uses the notifications to ascertain (by hand) >+ // whether or not there is a remote maxVersion tweak that makes the >+ // item being installed compatible. >+ this._updater._applyVersionUpdates(aLocalItem, sameItem); >+ } >+ else >+ sameItem = null; >+ } >+ } >+ >+ gOS.notifyObservers(!this._versionUpdateOnly ? newerItem : sameItem, >+ "Update:Extension:Item-Ended", ""); >+ >+ // Only one call of this._updater._checkForDone is needed for RDF >+ // responses, since there is only one response per item. >+ this._updater._checkForDone(); >+ }, >+ >+ // Parses Firefox 0.9 update.rdf format >+ _parseV10UpdateInfo: function nsExtensionItemUpdater__parseV10UpdateInfo (aDataSource, aLocalItem, aUpdateData) >+ { >+ var extensionRes = gRDF.GetResource(getItemPrefix(aLocalItem.type) + aLocalItem.id); >+ >+ aUpdateData.version = this._getPropertyFromResource(aDataSource, extensionRes, >+ "version", aLocalItem); >+ aUpdateData.updateLink = this._getPropertyFromResource(aDataSource, extensionRes, >+ "updateLink", aLocalItem); >+ }, >+ >+ // Get a compulsory property from a resource. Reports an error if the >+ // property was not present. >+ _getPropertyFromResource: function nsExtensionItemUpdater__getPropertyFromResource (aDataSource, >+ aSourceResource, >+ aProperty, >+ aLocalItem) >+ { >+ var rv; >+ try { >+ var property = gRDF.GetResource(EM_NS(aProperty)); >+ rv = stringData(aDataSource.GetTarget(aSourceResource, property, true)); >+ if (rv == "--") >+ throw Components.results.NS_ERROR_FAILURE; >+ } >+ catch (e) { >+ // XXXben show console message "aProperty" not found on aSourceResource. >+ return null; >+ } >+ return rv; >+ }, >+ >+ // Parses Firefox 1.0RC1+ update.rdf format >+ _parseV20UpdateInfo: function nsExtensionItemUpdater__parseV20UpdateInfo (aDataSource, >+ aLocalItem, >+ aUpdateData, >+ aVersionUpdatesOnly) >+ { >+ var extensionRes = gRDF.GetResource(getItemPrefix(aLocalItem.type) + aLocalItem.id); >+ >+ var updatesArc = gRDF.GetResource(EM_NS("updates")); >+ var updates = aDataSource.GetTarget(extensionRes, updatesArc, true); >+ >+ try { >+ updates = updates.QueryInterface(Components.interfaces.nsIRDFResource); >+ } >+ catch (e) { return; } >+ >+ var cu = Components.classes["@mozilla.org/rdf/container-utils;1"] >+ .getService(Components.interfaces.nsIRDFContainerUtils); >+ if (cu.IsContainer(aDataSource, updates)) { >+ var c = Components.classes["@mozilla.org/rdf/container;1"] >+ .getService(Components.interfaces.nsIRDFContainer); >+ c.Init(aDataSource, updates); >+ >+ // In "all update types" mode, we look for newer versions, starting with the >+ // current installed version. >+ if (!aVersionUpdatesOnly) >+ aUpdateData.version = aLocalItem.version; >+ >+ var versions = c.GetElements(); >+ while (versions.hasMoreElements()) { >+ // There are two different methodologies for collecting version >+ // information depending on whether or not we've bene invoked in >+ // "version updates only" mode or "version+newest" mode. >+ var version = versions.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ this._parseV20Update(aDataSource, version, aLocalItem, aUpdateData, aVersionUpdatesOnly); >+ if (aVersionUpdatesOnly && aUpdateData.updateLink) >+ break; >+ } >+ } >+ }, >+ >+ _parseV20Update: function nsExtensionItemUpdater__parseV20Update (aDataSource, >+ aUpdateResource, >+ aLocalItem, >+ aUpdateData, >+ aVersionUpdatesOnly) >+ { >+ var version = this._getPropertyFromResource(aDataSource, aUpdateResource, >+ "version", aLocalItem); >+ var taArc = gRDF.GetResource(EM_NS("targetApplication")); >+ var targetApps = aDataSource.GetTargets(aUpdateResource, taArc, true); >+ while (targetApps.hasMoreElements()) { >+ var targetApp = targetApps.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var id = this._getPropertyFromResource(aDataSource, targetApp, "id", aLocalItem); >+ if (id != this._updater._appID) >+ continue; >+ >+ var result = gVersionChecker.compare(version, aLocalItem.version); >+ if (aVersionUpdatesOnly ? result == 0 : result > 0) { >+ aUpdateData.version = version; >+ aUpdateData.updateLink = this._getPropertyFromResource(aDataSource, targetApp, "updateLink", aLocalItem); >+ aUpdateData.minVersion = this._getPropertyFromResource(aDataSource, targetApp, "minVersion", aLocalItem); >+ aUpdateData.maxVersion = this._getPropertyFromResource(aDataSource, targetApp, "maxVersion", aLocalItem); >+ } >+ } >+ }, >+ >+ onDatasourceError: function nsExtensionItemUpdater_onDatasourceError (aItem, aError) >+ { >+ gOS.notifyObservers(aItem, "Update:Extension:Item-Error", aError); >+ this._updater._checkForDone(); >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIRDFXMLSinkObserver >+ onBeginLoad: function(aSink) >+ { >+ }, >+ onInterrupt: function(aSink) >+ { >+ }, >+ onResume: function(aSink) >+ { >+ }, >+ >+ onEndLoad: function(aSink) >+ { >+ try { >+ aSink.removeXMLSinkObserver(this); >+ >+ var ds = aSink.QueryInterface(Components.interfaces.nsIRDFDataSource); >+ this.onDatasourceLoaded(ds, this._item); >+ } >+ catch (e) { } >+ }, >+ >+ onError: function(aSink, aStatus, aErrorMsg) >+ { >+ try { >+ aSink.removeXMLSinkObserver(this); >+ >+ this.onDatasourceError(this._item, aStatus.toString()); >+ } >+ catch (e) { } >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// >+// nsExtensionsDataSource >+// >+function nsExtensionsDataSource() >+{ >+} >+ >+nsExtensionsDataSource.prototype = { >+ _appExtensions : null, >+ _profileExtensions : null, >+ _composite : null, >+ safeMode : false, >+ >+ _emR: function nsExtensionsDataSource__emR (aProperty) >+ { >+ return gRDF.GetResource(EM_NS(aProperty)); >+ }, >+ >+ _emL: function nsExtensionsDataSource__emL (aLiteral) >+ { >+ return gRDF.GetLiteral(aLiteral); >+ }, >+ >+ isCompatible: function nsExtensionsDataSource__isCompatible (aDS, aSource) >+ { >+ // XXXben - cheap hack. Our bundled items are always compatible. >+ if (aSource.EqualsNode(gRDF.GetResource(getItemPrefix(nsIUpdateItem.TYPE_THEME) + "{972ce4c6-7e08-4474-a285-3208198ce6fd}")) || >+ aSource.EqualsNode(gRDF.GetResource(getItemPrefix(nsIUpdateItem.TYPE_EXTENSION) + "{641d8d09-7dda-4850-8228-ac0ab65e2ac9}"))) >+ return true; >+ >+ var appVersion = gPref.getCharPref(PREF_EM_APP_EXTENSIONS_VERSION); >+ var appID = gPref.getCharPref(PREF_EM_APP_ID); >+ >+ var targets = aDS.GetTargets(aSource, this._emR("targetApplication"), true); >+ var idRes = this._emR("id"); >+ var minVersionRes = this._emR("minVersion"); >+ var maxVersionRes = this._emR("maxVersion"); >+ while (targets.hasMoreElements()) { >+ var targetApp = targets.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var id = stringData(aDS.GetTarget(targetApp, idRes, true)); >+ var minVersion = stringData(aDS.GetTarget(targetApp, minVersionRes, true)); >+ var maxVersion = stringData(aDS.GetTarget(targetApp, maxVersionRes, true)); >+ >+ if (id == appID) { >+ var versionChecker = getVersionChecker(); >+ return ((versionChecker.compare(appVersion, minVersion) >= 0) && >+ (versionChecker.compare(appVersion, maxVersion) <= 0)); >+ } >+ } >+ return false; >+ }, >+ >+ getIncompatibleItemList: function nsExtensionsDataSource_getIncompatibleItemList (aAppID, aAppVersion, aItemType) >+ { >+ var items = []; >+ var roots = getItemRoots(aItemType); >+ for (var i = 0; i < roots.length; ++i) { >+ var ctr = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ ctr.Init(this._composite, gRDF.GetResource(roots[i])); >+ >+ var elements = ctr.GetElements(); >+ while (elements.hasMoreElements()) { >+ var e = elements.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var itemType = getItemType(e.Value); >+ if (itemType != -1 && !this.isCompatible(this, e)) >+ items.push(this.getItemForID(stripPrefix(e.Value, itemType))); >+ } >+ } >+ return items; >+ }, >+ >+ getItemList: function nsExtensionsDataSource_getItemList(aItemID, aType, aCountRef) >+ { >+ var items = []; >+ if (aItemID) >+ items.push(this.getItemForID(aItemID)); >+ else { >+ var roots = getItemRoots(aType); >+ for (var i = 0; i < roots.length; ++i) { >+ var ctr = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ ctr.Init(this, gRDF.GetResource(roots[i])); >+ >+ var elements = ctr.GetElements(); >+ while (elements.hasMoreElements()) { >+ var e = elements.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var itemType = getItemType(e.Value); >+ if (itemType != -1) >+ items.push(this.getItemForID(stripPrefix(e.Value, itemType))); >+ } >+ } >+ } >+ aCountRef.value = items.length; >+ return items; >+ }, >+ >+ // XXXben this function is a little weird since it returns an array of strings, not >+ // an array of nsIUpdateItems... >+ getItemsWithFlagSet: function nsExtensionsDataSource_getItemsWithFlagSet (aFlag) >+ { >+ var items = []; >+ var sources = this.GetSources(this._emR(aFlag), this._emL("true"), true); >+ while (sources.hasMoreElements()) { >+ var e = sources.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ >+ items.push(stripPrefix(e.Value, getItemType(e.Value))); >+ } >+ return items; >+ }, >+ >+ getItemsWithFlagUnset: function nsExtensionsDataSource_getItemsWithFlagUnset (aFlag, aItemType) >+ { >+ var items = []; >+ >+ var roots = getItemRoots(aItemType); >+ for (var i = 0; i < roots.length; ++i) { >+ var ctr = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ ctr.Init(this, gRDF.GetResource(roots[i])); >+ >+ var elements = ctr.GetElements(); >+ while (elements.hasMoreElements()) { >+ var e = elements.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ if (getItemType(e.Value) != -1) { >+ var value = this.GetTarget(e, this._emR(aFlag), true); >+ if (!value) >+ items.push(stripPrefix(e.Value, getItemType(e.Value))); >+ } >+ } >+ } >+ return items; >+ }, >+ >+ getItemForID: function nsExtensionsDataSource_getItemForID (aItemID) >+ { >+ var item = Components.classes["@mozilla.org/updates/item;1"] >+ .createInstance(Components.interfaces.nsIUpdateItem); >+ >+ var r = this._getResourceForItem(aItemID); >+ if (!r) >+ return null; >+ >+ var targetAppInfo = this.getTargetApplicationInfo(aItemID, this, getItemType(r.Value)); >+ item.init(aItemID, >+ this.getItemProperty(aItemID, "version"), >+ targetAppInfo ? targetAppInfo.minVersion : "", >+ targetAppInfo ? targetAppInfo.maxVersion : "", >+ this.getItemProperty(aItemID, "name"), >+ -1, >+ "", /* XPI Update URL */ >+ this.getItemProperty(aItemID, "iconURL"), >+ this.getItemProperty(aItemID, "updateURL"), >+ getItemType(r.Value)); >+ return item; >+ }, >+ >+ isProfileItem: function nsExtensionsDataSource_isProfileItem (aItemID) >+ { >+ return this.getItemProperty(aItemID, "installLocation") == "profile"; >+ }, >+ >+ _setProperty: function nsExtensionsDataSource__setProperty (aDS, aSource, aProperty, aNewValue) >+ { >+ var oldValue = aDS.GetTarget(aSource, aProperty, true); >+ if (oldValue) { >+ if (aNewValue) >+ aDS.Change(aSource, aProperty, oldValue, aNewValue); >+ else >+ aDS.Unassert(aSource, aProperty, oldValue); >+ } >+ else if (aNewValue) >+ aDS.Assert(aSource, aProperty, aNewValue, true); >+ }, >+ >+ // Given a GUID, get the RDF resource representing the item. This >+ // will be of the form urn:mozilla:extension:{GUID} or >+ // urn:mozilla:theme:{GUID} depending on the item type. >+ _getResourceForItem: function nsExtensionsDataSource__getResourceForItem(aItemID) >+ { >+ var res = null; >+ >+ // We can try and infer the resource URI from presence in one of the >+ // item lists. >+ var rdfc = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ rdfc.Init(this, gRDF.GetResource(ROOT_EXTENSION)); >+ res = gRDF.GetResource(PREFIX_EXTENSION + aItemID); >+ if (rdfc.IndexOf(res) != -1) >+ return res; >+ >+ rdfc.Init(this, gRDF.GetResource(ROOT_THEME)); >+ res = gRDF.GetResource(PREFIX_THEME + aItemID); >+ if (rdfc.IndexOf(res) != -1) >+ return res; >+ >+ return null; >+ }, >+ >+ getTargetApplicationInfo: function nsExtensionsDataSource_getTargetApplicationInfo (aExtensionID, aDataSource, aType) >+ { >+ var internalName = this.getItemProperty(aExtensionID, "internalName"); >+ // The default theme is always compatible. >+ if (internalName == KEY_DEFAULT_THEME) { >+ var ver = gPref.getCharPref(PREF_EM_APP_EXTENSIONS_VERSION); >+ return { minVersion: ver, maxVersion: ver }; >+ } >+ >+ var appID = gPref.getCharPref(PREF_EM_APP_ID); >+ var r = gRDF.GetResource(getItemPrefix(aType) + aExtensionID); >+ var targetApps = aDataSource.GetTargets(r, this._emR("targetApplication"), true); >+ if (!targetApps.hasMoreElements()) { >+ r = gRDF.GetResource("urn:mozilla:install-manifest"); >+ targetApps = aDataSource.GetTargets(r, this._emR("targetApplication"), true); >+ } >+ while (targetApps.hasMoreElements()) { >+ var targetApp = targetApps.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ if (targetApp) { >+ try { >+ var id = stringData(aDataSource.GetTarget(targetApp, this._emR("id"), true)); >+ if (id != appID) // Different target application >+ continue; >+ >+ return { minVersion: stringData(aDataSource.GetTarget(targetApp, this._emR("minVersion"), true)), >+ maxVersion: stringData(aDataSource.GetTarget(targetApp, this._emR("maxVersion"), true)) }; >+ } >+ catch (e) { >+ continue; >+ } >+ } >+ } >+ return null; >+ }, >+ >+ setTargetApplicationInfo: function nsExtensionsDataSource_setTargetApplicationInfo(aExtensionID, aMinVersion, >+ aMaxVersion, aDataSource, aType) >+ { >+ var targetDataSource = aDataSource; >+ if (!targetDataSource) >+ targetDataSource = this; >+ >+ var appID = gPref.getCharPref(PREF_EM_APP_ID); >+ var r = gRDF.GetResource(getItemPrefix(aType) + aExtensionID); >+ var targetApps = targetDataSource.GetTargets(r, this._emR("targetApplication"), true); >+ if (!targetApps.hasMoreElements()) { >+ r = gRDF.GetResource("urn:mozilla:install-manifest"); >+ targetApps = aDataSource.GetTargets(r, this._emR("targetApplication"), true); >+ } >+ while (targetApps.hasMoreElements()) { >+ var targetApp = targetApps.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ if (targetApp) { >+ var id = stringData(targetDataSource.GetTarget(targetApp, this._emR("id"), true)); >+ if (id != appID) // Different target application >+ continue; >+ >+ if (!aDataSource) { >+ var isProfile = this.isProfileItem(aExtensionID); >+ targetDataSource = isProfile ? this._profileExtensions : this._appExtensions; >+ } >+ this._setProperty(targetDataSource, targetApp, this._emR("minVersion"), this._emL(aMinVersion)); >+ this._setProperty(targetDataSource, targetApp, this._emR("maxVersion"), this._emL(aMaxVersion)); >+ >+ if (!aDataSource) >+ this._flush(isProfile); >+ } >+ } >+ }, >+ >+ getItemProperty: function nsExtensionsDataSource_getItemProperty (aItemID, aProperty) >+ { >+ var item = this._getResourceForItem(aItemID); >+ if (!item) { >+ dump("*** getItemProperty failing for lack of an item. This means getResourceForItem \ >+ failed to locate a resource for aItemID (item ID = " + aItemID + ", property = " + aProperty + ")\n"); >+ } >+ else >+ return this._getItemProperty(item, aProperty); >+ return undefined; >+ }, >+ >+ _getItemProperty: function nsExtensionsDataSource__getItemProperty (aItemResource, aProperty) >+ { >+ try { >+ return this.GetTarget(aItemResource, this._emR(aProperty), true).QueryInterface(Components.interfaces.nsIRDFLiteral).Value; >+ } >+ catch (e) {} >+ return ""; >+ }, >+ >+ setItemProperty: function nsExtensionsDataSource_setItemProperty( >+ aItemID, aPropertyArc, aPropertyValue, aIsProfile, aItemType) >+ { >+ var item = gRDF.GetResource(getItemPrefix(aItemType) + aItemID); >+ var ds = aIsProfile ? this._profileExtensions : this._appExtensions; >+ this._setProperty(ds, item, aPropertyArc, aPropertyValue); >+ >+ this._flush(aIsProfile); >+ }, >+ >+ insertForthcomingItem: function nsExtensionsDataSource_insertForthcomingItem (aItemID, aItemType, aIsProfile) >+ { >+ // Get the target container and resource >+ var targetDS = aIsProfile ? this._profileExtensions : this._appExtensions; >+ var ctr = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ ctr.Init(targetDS, gRDF.GetResource(getItemRoot(aItemType))); >+ >+ var targetRes = gRDF.GetResource(getItemPrefix(aItemType) + aItemID); >+ // Don't bother adding the extension to the list if it's already there. >+ // (i.e. we're upgrading) >+ var oldIndex = ctr.IndexOf(targetRes); >+ if (oldIndex == -1) >+ ctr.AppendElement(targetRes); >+ >+ this._flush(aIsProfile); >+ }, >+ >+ removeItemFromContainer: function nsExtensionsDataSource_removeItemFromContainer(aItemID, aItemType, aIsProfile) >+ { >+ var targetDS = aIsProfile ? this._profileExtensions : this._appExtensions; >+ var ctr = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ ctr.Init(targetDS, gRDF.GetResource(getItemRoot(aItemType))); >+ >+ var item = gRDF.GetResource(getItemPrefix(aItemType) + aItemID); >+ ctr.RemoveElement(item, true); >+ >+ this._flush(aIsProfile); >+ }, >+ >+ // Removes a corrupt item entry from the extension list added due to >+ // buggy code in previous EM versions! >+ removeCorruptItem: function nsExtensionsDataSource_removeCorruptItem (aItemID, aItemType, aIsProfile) >+ { >+ this.removeItemMetadata(aItemID, aItemType); >+ this.removeItemFromContainer(aItemID, aItemType, aIsProfile); >+ }, >+ >+ // Removes a corrupt download entry from the list. >+ removeCorruptDLItem: function nsExtensionsDataSource_removeCorruptDLItem (aItemURI, aItemType) >+ { >+ var itemResource = gRDF.GetResource(aItemURI); >+ var itemRoot = gRDF.GetResource(getItemRoot(aItemType)); >+ var dses = [this._profileExtensions, this._appExtensions]; >+ var isProfile = [true, false]; >+ for (var i = 0; i < dses.length; ++i) { >+ var ctr = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ ctr.Init(dses[i], itemRoot); >+ if (ctr.IndexOf(itemResource) != -1) { >+ ctr.RemoveElement(itemResource, true); >+ this._cleanResource(itemResource, dses[i]); >+ this._flush(isProfile[i]); >+ break; >+ } >+ } >+ }, >+ >+ addItemMetadata: function nsExtensionsDataSource_addItemMetadata (aItemID, aItemType, aSourceDS, aIsProfile) >+ { >+ var targetDS = aIsProfile ? this._profileExtensions : this._appExtensions; >+ var targetRes = gRDF.GetResource(getItemPrefix(aItemType) + aItemID); >+ >+ // Copy the assertions over from the source datasource. >+ >+ // Assert properties with single values >+ var singleProps = ["version", "name", "description", "creator", "homepageURL", >+ "updateURL", "updateService", "optionsURL", "aboutURL", >+ "iconURL", "internalName"]; >+ >+ // Global extensions and themes can also be locked (can't be removed or disabled). >+ if (!aIsProfile) >+ singleProps = singleProps.concat(["locked"]); >+ var sourceRes = gRDF.GetResource("urn:mozilla:install-manifest"); >+ for (var i = 0; i < singleProps.length; ++i) { >+ var property = this._emR(singleProps[i]); >+ var literal = aSourceDS.GetTarget(sourceRes, property, true); >+ if (!literal) >+ continue; // extension didn't specify this property, no big deal, continue. >+ >+ var val = literal.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; >+ >+ var oldValue = targetDS.GetTarget(targetRes, property, true); >+ if (!oldValue) >+ targetDS.Assert(targetRes, property, literal, true); >+ else >+ targetDS.Change(targetRes, property, oldValue, literal); >+ } >+ >+ // Assert properties with multiple values >+ var manyProps = ["contributor"]; >+ for (var i = 0; i < singleProps.length; ++i) { >+ var property = this._emR(manyProps[i]); >+ var literals = aSourceDS.GetTargets(sourceRes, property, true); >+ >+ var oldValues = targetDS.GetTargets(targetRes, property, true); >+ while (oldValues.hasMoreElements()) { >+ var oldValue = oldValues.getNext().QueryInterface(Components.interfaces.nsIRDFNode); >+ targetDS.Unassert(targetRes, property, oldValue); >+ } >+ while (literals.hasMoreElements()) { >+ var literal = literals.getNext().QueryInterface(Components.interfaces.nsIRDFNode); >+ targetDS.Assert(targetRes, property, literal, true); >+ } >+ } >+ >+ // Version/Dependency Info >+ var versionProps = ["targetApplication", "requires"]; >+ var idRes = this._emR("id"); >+ var minVersionRes = this._emR("minVersion"); >+ var maxVersionRes = this._emR("maxVersion"); >+ for (var i = 0; i < versionProps.length; ++i) { >+ var property = this._emR(versionProps[i]); >+ var newVersionInfos = aSourceDS.GetTargets(sourceRes, property, true); >+ >+ var oldVersionInfos = targetDS.GetTargets(targetRes, property, true); >+ while (oldVersionInfos.hasMoreElements()) { >+ var oldVersionInfo = oldVersionInfos.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ this._cleanResource(oldVersionInfo, targetDS); >+ targetDS.Unassert(targetRes, property, oldVersionInfo); >+ } >+ while (newVersionInfos.hasMoreElements()) { >+ var newVersionInfo = newVersionInfos.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var anon = gRDF.GetAnonymousResource(); >+ targetDS.Assert(anon, idRes, aSourceDS.GetTarget(newVersionInfo, idRes, true), true); >+ targetDS.Assert(anon, minVersionRes, aSourceDS.GetTarget(newVersionInfo, minVersionRes, true), true); >+ targetDS.Assert(anon, maxVersionRes, aSourceDS.GetTarget(newVersionInfo, maxVersionRes, true), true); >+ targetDS.Assert(targetRes, property, anon, true); >+ } >+ } >+ >+ this._flush(aIsProfile); >+ }, >+ >+ lockUnlockItem: function nsExtensionsDataSource_lockUnlockItem (aItemID, aLocked) >+ { >+ var item = this._getResourceForItem(aItemID); >+ if (item) { >+ var val = aLocked ? this._emL("true") : this._emL("false"); >+ this.setItemProperty(aItemID, this._emR("locked"), val, false, getItemType(item.Value)); >+ this._flush(false); >+ } >+ }, >+ >+ enableExtension: function nsExtensionsDataSource_enableExtension (aExtensionID) >+ { >+ this.setItemProperty(aExtensionID, this._emR("toBeEnabled"), >+ this._emL("true"), true, >+ nsIUpdateItem.TYPE_EXTENSION); >+ this.setItemProperty(aExtensionID, this._emR("toBeDisabled"), >+ null, true, >+ nsIUpdateItem.TYPE_EXTENSION); >+ this.setItemProperty(aExtensionID, this._emR("disabled"), >+ null, true, >+ nsIUpdateItem.TYPE_EXTENSION); >+ }, >+ >+ disableExtension: function nsExtensionsDataSource_disableExtension (aExtensionID) >+ { >+ this.setItemProperty(aExtensionID, this._emR("toBeDisabled"), >+ this._emL("true"), true, >+ nsIUpdateItem.TYPE_EXTENSION); >+ this.setItemProperty(aExtensionID, this._emR("toBeEnabled"), >+ null, true, >+ nsIUpdateItem.TYPE_EXTENSION); >+ this.setItemProperty(aExtensionID, this._emR("disabled"), >+ this._emL("true"), true, >+ nsIUpdateItem.TYPE_EXTENSION); >+ }, >+ >+ uninstallExtension: function nsExtensionsDataSource_uninstallExtension (aExtensionID) >+ { >+ // We have to do this check BEFORE we unhook all the metadata from this >+ // extension's resource, otherwise we'll think it's a global extension. >+ var isProfile = this.isProfileItem(aExtensionID); >+ >+ this.setItemProperty(aExtensionID, this._emR("toBeInstalled"), >+ null, isProfile, >+ nsIUpdateItem.TYPE_EXTENSION); >+ this.setItemProperty(aExtensionID, this._emR("toBeUninstalled"), >+ this._emL("true"), isProfile, >+ nsIUpdateItem.TYPE_EXTENSION); >+ this._flush(isProfile); >+ }, >+ >+ doneInstallingTheme: function nsExtensionsDataSource_doneInstallingTheme (aThemeID) >+ { >+ // Notify observers of a change in the iconURL property to cause the UI to >+ // refresh. >+ var theme = this._getResourceForItem(aThemeID); >+ var iconURLArc = this._emR("iconURL"); >+ var iconURL = this.GetTarget(theme, iconURLArc, true); >+ if (theme, iconURLArc, iconURL) { >+ for (var i = 0; i < this._observers.length; ++i) >+ this._observers[i].onAssert(this, theme, iconURLArc, iconURL); >+ } >+ }, >+ >+ enableTheme: function nsExtensionsDataSource_enableTheme (aThemeID) >+ { >+ this.setItemProperty(aThemeID, this._emR("disabled"), >+ null, this.isProfileItem(aThemeID), >+ nsIUpdateItem.TYPE_THEME); >+ }, >+ >+ disableTheme: function nsExtensionsDataSource_disableTheme (aThemeID) >+ { >+ this.setItemProperty(aThemeID, this._emR("disabled"), >+ this._emL("true"), this.isProfileItem(aThemeID), >+ nsIUpdateItem.TYPE_THEME); >+ }, >+ >+ uninstallTheme: function nsExtensionsDataSource_uninstallTheme(aThemeID) >+ { >+ // We have to do this check BEFORE we unhook all the metadata from this >+ // extension's resource, otherwise we'll think it's a global extension. >+ var isProfile = this.isProfileItem(aThemeID); >+ >+ // Clean the extension resource >+ this.removeItemMetadata(aThemeID, nsIUpdateItem.TYPE_THEME); >+ >+ var uninstaller = new nsThemeUninstaller(this); >+ uninstaller.uninstall(aThemeID, isProfile); >+ >+ // Do this LAST since inferences are made about an item based on >+ // what container it's in. >+ this.removeItemFromContainer(aThemeID, nsIUpdateItem.TYPE_THEME, isProfile); >+ }, >+ >+ // Cleans the resource of all its assertionss >+ removeItemMetadata: function nsExtensionsDataSource_removeItemMetadata (aItemID, aItemType) >+ { >+ var item = gRDF.GetResource(getItemPrefix(aItemType) + aItemID); >+ var isProfile = this.isProfileItem(aItemID); >+ var ds = isProfile ? this._profileExtensions : this._appExtensions; >+ >+ var resources = ["targetApplication", "requires"]; >+ for (var i = 0; i < resources.length; ++i) { >+ var targetApps = ds.GetTargets(item, this._emR(resources[i]), true); >+ while (targetApps.hasMoreElements()) { >+ var targetApp = targetApps.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ this._cleanResource(targetApp, ds); >+ } >+ } >+ >+ this._cleanResource(item, ds); >+ }, >+ >+ _cleanResource: function nsExtensionsDataSource__cleanResource (aResource, aDS) >+ { >+ // Remove outward arcs >+ var arcs = aDS.ArcLabelsOut(aResource); >+ while (arcs.hasMoreElements()) { >+ var arc = arcs.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var value = aDS.GetTarget(aResource, arc, true); >+ if (value) >+ aDS.Unassert(aResource, arc, value); >+ } >+ }, >+ >+ moveTop: function nsExtensionsDataSource_moveTop (aItemID) >+ { >+ var extensions = gRDF.GetResource("urn:mozilla:extension:root"); >+ var item = this._getResourceForItem(aItemID); >+ var ds = this._getTargetDSFromSource(item); >+ var container = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ container.Init(ds, extensions); >+ >+ var index = container.IndexOf(item); >+ if (index > 1) { >+ container.RemoveElement(item, false); >+ container.InsertElementAt(item, 1, true); >+ } >+ this._flush(this.isProfileItem(aItemID)); >+ }, >+ >+ moveUp: function nsExtensionsDataSource_moveUp (aItemID) >+ { >+ var extensions = gRDF.GetResource("urn:mozilla:extension:root"); >+ var item = this._getResourceForItem(aItemID); >+ var ds = this._getTargetDSFromSource(item); >+ var container = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ container.Init(ds, extensions); >+ >+ var item = this._getResourceForItem(aItemID); >+ var index = container.IndexOf(item); >+ if (index > 1) { >+ container.RemoveElement(item, false); >+ container.InsertElementAt(item, index - 1, true); >+ } >+ this._flush(this.isProfileItem(aItemID)); >+ }, >+ >+ moveDown: function nsExtensionsDataSource_moveDown (aItemID) >+ { >+ var extensions = gRDF.GetResource("urn:mozilla:extension:root"); >+ var item = this._getResourceForItem(aItemID); >+ var ds = this._getTargetDSFromSource(item); >+ var container = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ container.Init(ds, extensions); >+ >+ var item = this._getResourceForItem(aItemID); >+ var index = container.IndexOf(item); >+ var count = container.GetCount(); >+ if (index < count) { >+ container.RemoveElement(item, true); >+ container.InsertElementAt(item, index + 1, true); >+ } >+ this._flush(this.isProfileItem(aItemID)); >+ }, >+ >+ isDownloadItem: function nsExtensionsDataSource_isDownloadItem (aItemID) >+ { >+ return this.getItemProperty(aItemID, "downloadURL") != ""; >+ }, >+ >+ addDownload: function nsExtensionsDataSource_addDownload (aName, aURL, aIconURL, aItemType) >+ { >+ var root = gRDF.GetResource(getItemRoot(aItemType)); >+ >+ var res = gRDF.GetResource(aURL); >+ this._setProperty(this._profileExtensions, res, >+ this._emR("name"), >+ gRDF.GetLiteral(aName)) >+ this._setProperty(this._profileExtensions, res, >+ this._emR("version"), >+ gRDF.GetLiteral(" ")); >+ this._setProperty(this._profileExtensions, res, >+ this._emR("iconURL"), >+ gRDF.GetLiteral(aIconURL)); >+ this._setProperty(this._profileExtensions, res, >+ this._emR("downloadURL"), >+ gRDF.GetLiteral(aURL)); >+ >+ var ctr = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ ctr.Init(this._profileExtensions, root); >+ if (ctr.IndexOf(res) == -1) >+ ctr.InsertElementAt(res, 1, true); >+ >+ this._flush(true); >+ }, >+ >+ removeDownload: function nsExtensionsDataSource_removeDownload (aURL, aItemType) >+ { >+ var root = gRDF.GetResource(getItemRoot(aItemType)); >+ var res = gRDF.GetResource(aURL); >+ var ctr = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ ctr.Init(this._profileExtensions, root); >+ ctr.RemoveElement(res, true); >+ this._cleanResource(res, this._profileExtensions); >+ >+ this._flush(true); >+ }, >+ >+ flushProgressInfo: function nsExtensionsDataSource_flushProgressInfo (aData) >+ { >+ for (var url in aData) { >+ var res = gRDF.GetResource(url); >+ this._setProperty(this._profileExtensions, res, >+ this._emR("state"), >+ gRDF.GetIntLiteral(aData[url].state)); >+ this._setProperty(this._profileExtensions, res, >+ this._emR("progress"), >+ gRDF.GetIntLiteral(aData[url].progress)); >+ } >+ this._flush(true); >+ }, >+ >+ loadExtensions: function nsExtensionsDataSource_loadExtensions (aProfile) >+ { >+ var extensionsFile = getFile(getDirKey(aProfile), >+ [DIR_EXTENSIONS, FILE_EXTENSIONS]); >+ ensureExtensionsFiles(aProfile); >+ >+ var ds = gRDF.GetDataSourceBlocking(getURLSpecFromFile(extensionsFile)); >+ if (aProfile) { >+ this._profileExtensions = ds; >+ if (!this._composite) >+ this._composite = Components.classes["@mozilla.org/rdf/datasource;1?name=composite-datasource"] >+ .createInstance(Components.interfaces.nsIRDFDataSource); >+ if (this._appExtensions) >+ this._composite.RemoveDataSource(this._appExtensions); >+ this._composite.AddDataSource(this._profileExtensions); >+ if (this._appExtensions) >+ this._composite.AddDataSource(this._appExtensions); >+ } >+ else { >+ this._appExtensions = ds; >+ >+ if (!this._composite) >+ this._composite = Components.classes["@mozilla.org/rdf/datasource;1?name=composite-datasource"] >+ .createInstance(Components.interfaces.nsIRDFCompositeDataSource); >+ this._composite.AddDataSource(this._appExtensions); >+ } >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIRDFDataSource >+ get URI() >+ { >+ return "rdf:extensions"; >+ }, >+ >+ GetSource: function nsExtensionsDataSource_GetSource (aProperty, aTarget, aTruthValue) >+ { >+ return this._composite.GetSource(aProperty, aTarget, aTruthValue); >+ }, >+ >+ GetSources: function nsExtensionsDataSource_GetSources (aProperty, aTarget, aTruthValue) >+ { >+ return this._composite.GetSources(aProperty, aTarget, aTruthValue); >+ }, >+ >+ _getThemeJARURL: function nsExtensionsDataSource__getThemeJARURL (aSource, aFileName, aFallbackURL) >+ { >+ var id = stripPrefix(aSource.Value, nsIUpdateItem.TYPE_THEME); >+ var chromeDir = getDir(this.isProfileItem(id) ? KEY_PROFILEDIR : KEY_APPDIR, >+ [DIR_EXTENSIONS, id, DIR_CHROME]); >+ >+ var jarFile = null; >+ // XXXben hack for pre-configured classic.jar >+ if ((!chromeDir.exists() || !chromeDir.directoryEntries.hasMoreElements()) && >+ aSource.EqualsNode(gRDF.GetResource("urn:mozilla:theme:{972ce4c6-7e08-4474-a285-3208198ce6fd}"))) >+ jarFile = getFile(KEY_APPDIR, ["chrome", "classic.jar"]); >+ if (chromeDir.directoryEntries.hasMoreElements() || jarFile) { >+ if (!jarFile) >+ jarFile = chromeDir.directoryEntries.getNext().QueryInterface(Components.interfaces.nsIFile); >+ >+ if (jarFile.exists()) { >+ var zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"] >+ .createInstance(Components.interfaces.nsIZipReader); >+ zipReader.init(jarFile); >+ zipReader.open(); >+ var url = aFallbackURL; >+ try { >+ zipReader.getEntry(aFileName); >+ url = "jar:" + getURLSpecFromFile(jarFile) + "!/" + aFileName; >+ } >+ catch (e) { } >+ zipReader.close(); >+ >+ if (url) >+ return gRDF.GetResource(url); >+ } >+ } >+ return null; >+ }, >+ >+ GetTarget: function nsExtensionsDataSource_GetTarget(aSource, aProperty, aTruthValue) >+ { >+ if (!aSource) >+ return null; >+ >+ if (aProperty.EqualsNode(this._emR("iconURL"))) { >+ var itemType = getItemType(aSource.Value); >+ if (itemType != -1 && itemType & nsIUpdateItem.TYPE_EXTENSION) { >+ var hasIconURL = this._composite.hasArcOut(aSource, aProperty); >+ // If the download entry doesn't have a IconURL property, use a >+ // generic icon URL instead. >+ if (!hasIconURL) >+ return gRDF.GetResource("chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png"); >+ else { >+ var iconURL = this._composite.GetTarget(aSource, aProperty, true); >+ iconURL = iconURL.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; >+ var cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"] >+ .getService(Components.interfaces.nsIChromeRegistry); >+ var ioServ = Components.classes["@mozilla.org/network/io-service;1"] >+ .getService(Components.interfaces.nsIIOService); >+ var uri = ioServ.newURI(iconURL, null, null); >+ try { >+ cr.convertChromeURL(uri); >+ } >+ catch(e) { >+ // bogus URI, supply a generic icon. >+ return gRDF.GetResource("chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png"); >+ } >+ } >+ } >+ else if (itemType != -1 && itemType & nsIUpdateItem.TYPE_THEME) { >+ var res = this._getThemeJARURL(aSource, "icon.png", "chrome://mozapps/skin/extensions/themeGeneric.png"); >+ if (res) >+ return res; >+ } >+ } >+ else if (aProperty.EqualsNode(this._emR("previewImage"))) { >+ var itemType = getItemType(aSource.Value); >+ if (itemType != -1 && itemType & nsIUpdateItem.TYPE_THEME) { >+ var res = this._getThemeJARURL(aSource, "preview.png", null); >+ if (res) >+ return res; >+ } >+ } >+ else if (aProperty.EqualsNode(this._emR("installLocation"))) { >+ var arcs = this._profileExtensions.ArcLabelsOut(aSource); >+ return arcs.hasMoreElements() ? this._emL("profile") : this._emL("global"); >+ } >+ else if (aProperty.EqualsNode(this._emR("disabled"))) { >+ if (this.safeMode) >+ return this._emL("true"); >+ // fall through to default. >+ } >+ else if (aProperty.EqualsNode(this._emR("itemType"))) { >+ // We can try and infer the type from presence in one of the >+ // item lists. >+ var rdfc = Components.classes["@mozilla.org/rdf/container;1"] >+ .createInstance(Components.interfaces.nsIRDFContainer); >+ rdfc.Init(this, gRDF.GetResource(ROOT_EXTENSION)); >+ if (rdfc.IndexOf(aSource) != -1) >+ return this._emL("extension"); >+ >+ rdfc.Init(this, gRDF.GetResource(ROOT_THEME)); >+ if (rdfc.IndexOf(aSource) != -1) >+ return this._emL("theme"); >+ } >+ else if (aProperty.EqualsNode(this._emR("compatible"))) { >+ var type = getItemType(aSource.Value); >+ var id = stripPrefix(aSource.Value, type); >+ var targetAppInfo = this.getTargetApplicationInfo(id, this, type); >+ if (!targetAppInfo) >+ return this._emL("false"); >+ getVersionChecker(); >+ >+ var appVersion = gPref.getCharPref(PREF_EM_APP_EXTENSIONS_VERSION); >+ if (gVersionChecker.compare(targetAppInfo.maxVersion, appVersion) < 0 || >+ gVersionChecker.compare(appVersion, targetAppInfo.minVersion) < 0) { >+ // OK, this item is incompatible. >+ return this._emL("false"); >+ } >+ return this._emL("true"); >+ } >+ else if (aProperty.EqualsNode(this._emR("displayDescription"))) { >+ // We have a separate property for the description of the extension items >+ // which is displayed in the EM list - because we overload this value with >+ // alternative messages when the extension is disabled because of >+ // incompatibility. >+ var disabled = this.getItemProperty(stripPrefix(aSource.Value, getItemType(aSource.Value)), >+ "disabled"); >+ if (disabled == "true") { >+ // See if this item was disabled because it was incompatible. >+ // XXXben potential visual-glitch bug here with extensions whose install.rdf >+ // manifests state that they are incompatible but when phone home checking >+ // reveals that they are compatible and they are installed the >+ // incompatible metadata is written anyway and will remain in the ds >+ // until the next background update check corrects it - this means that >+ // when a compatible extension is installed in this manner it is >+ // likely that when it is disabled it will show this special-case >+ // error message. >+ var compatible = this.getItemProperty(stripPrefix(aSource.Value, getItemType(aSource.Value)), >+ "compatible"); >+ if (compatible != "true") { >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var extensionStrings = sbs.createBundle("chrome://mozapps/locale/extensions/extensions.properties"); >+ var brandStrings = sbs.createBundle("chrome://global/locale/brand.properties"); >+ var brandShortName = brandStrings.GetStringFromName("brandShortName"); >+ var appVersion = gPref.getCharPref(PREF_EM_APP_VERSION); >+ var incompatibleMessage = extensionStrings.formatStringFromName("incompatibleExtension", >+ [brandShortName, appVersion], 2); >+ return this._emL(incompatibleMessage); >+ } >+ } >+ // Use the "description" property. >+ return this.GetTarget(aSource, this._emR("description"), aTruthValue); >+ } >+ else if (aProperty.EqualsNode(this._emR("name")) || >+ aProperty.EqualsNode(this._emR("description")) || >+ aProperty.EqualsNode(this._emR("creator")) || >+ aProperty.EqualsNode(this._emR("homepageURL"))) { >+ // These are localizable properties that a language pack supplied by the >+ // Extension may override. >+ var prefName = PREF_EM_EXTENSION_FORMAT.replace(/%UUID%/, >+ stripPrefix(aSource.Value, >+ nsIUpdateItem.TYPE_EXTENSION)) + >+ stripPropertyPrefix(aProperty.Value, EM_NS_PREFIX); >+ try { >+ var value = gPref.getComplexValue(prefName, >+ Components.interfaces.nsIPrefLocalizedString); >+ if (value.data) >+ return this._emL(value.data); >+ } >+ catch (e) { >+ } >+ } >+ >+ return this._composite.GetTarget(aSource, aProperty, aTruthValue); >+ }, >+ >+ GetTargets: function nsExtensionsDataSource_GetTargets (aSource, aProperty, aTruthValue) >+ { >+ if (aProperty.EqualsNode(this._emR("name")) || >+ aProperty.EqualsNode(this._emR("contributor"))) { >+ // These are localizable properties that a language pack supplied by the >+ // Extension may override. >+ var contributors = []; >+ var prefName = PREF_EM_EXTENSION_FORMAT.replace(/%UUID%/, >+ stripPrefix(aSource.Value, >+ nsIUpdateItem.TYPE_EXTENSION)) + >+ stripPropertyPrefix(aProperty.Value, EM_NS_PREFIX); >+ var i = 0; >+ do { >+ try { >+ var value = gPref.getComplexValue(prefName + "." + ++i, >+ Components.interfaces.nsIPrefLocalizedString); >+ if (value.data) >+ contributors.push(this._emL(value.data)); >+ } >+ catch (e) { >+ try { >+ var value = gPref.getComplexValue(prefName, >+ Components.interfaces.nsIPrefLocalizedString); >+ if (value.data) >+ contributors.push(this._emL(value.data)); >+ } >+ catch (e) { >+ } >+ break; >+ } >+ } >+ while (1); >+ if (contributors.length > 0) >+ return new ArrayEnumerator(contributors); >+ } >+ return this._composite.GetTargets(aSource, aProperty, aTruthValue); >+ }, >+ >+ _getTargetDSFromSource: function nsExtensionsDataSource__getTargetDSFromSource (aSource) >+ { >+ var itemID = stripPrefix(aSource.Value, nsIUpdateItem.TYPE_ADDON); >+ return this.isProfileItem(itemID) ? this._profileExtensions : this._appExtensions; >+ }, >+ >+ Assert: function nsExtensionsDataSource_Assert (aSource, aProperty, aTarget, aTruthValue) >+ { >+ var targetDS = this._getTargetDSFromSource(aSource); >+ targetDS.Assert(aSource, aProperty, aTarget, aTruthValue); >+ }, >+ >+ Unassert: function nsExtensionsDataSource_Unassert (aSource, aProperty, aTarget) >+ { >+ var targetDS = this._getTargetDSFromSource(aSource); >+ targetDS.Unassert(aSource, aProperty, aTarget); >+ }, >+ >+ Change: function nsExtensionsDataSource_Change (aSource, aProperty, aOldTarget, aNewTarget) >+ { >+ var targetDS = this._getTargetDSFromSource(aSource); >+ targetDS.Change(aSource, aProperty, aOldTarget, aNewTarget); >+ }, >+ >+ Move: function nsExtensionsDataSource_Move (aSource, aNewSource, aProperty, aTarget) >+ { >+ var targetDS = this._getTargetDSFromSource(aSource); >+ targetDS.Move(aSource, aNewSource, aProperty, aTarget); >+ }, >+ >+ HasAssertion: function nsExtensionsDataSource_HasAssertion (aSource, aProperty, aTarget, aTruthValue) >+ { >+ if (!aSource || !aProperty || !aTarget) >+ return false; >+ return this._composite.HasAssertion(aSource, aProperty, aTarget, aTruthValue); >+ }, >+ >+ _observers: [], >+ AddObserver: function nsExtensionsDataSource_AddObserver (aObserver) >+ { >+ for (var i = 0; i < this._observers.length; ++i) { >+ if (this._observers[i] == aObserver) >+ return; >+ } >+ this._observers.push(aObserver); >+ this._composite.AddObserver(aObserver); >+ }, >+ >+ RemoveObserver: function nsExtensionsDataSource_RemoveObserver (aObserver) >+ { >+ for (var i = 0; i < this._observers.length; ++i) { >+ if (this._observers[i] == aObserver) >+ this._observers.splice(i, 1); >+ } >+ this._composite.RemoveObserver(aObserver); >+ }, >+ >+ ArcLabelsIn: function nsExtensionsDataSource_ArcLabelsIn (aNode) >+ { >+ return this._composite.ArcLabelsIn(aNode); >+ }, >+ >+ ArcLabelsOut: function nsExtensionsDataSource_ArcLabelsOut (aSource) >+ { >+ return this._composite.ArcLabelsOut(aSource); >+ }, >+ >+ GetAllResources: function nsExtensionsDataSource_GetAllResources () >+ { >+ return this._composite.GetAllResources(); >+ }, >+ >+ IsCommandEnabled: function nsExtensionsDataSource_IsCommandEnabled (aSources, aCommand, aArguments) >+ { >+ return this._composite.IsCommandEnabled(aSources, aCommand, aArguments); >+ }, >+ >+ DoCommand: function nsExtensionsDataSource_DoCommand (aSources, aCommand, aArguments) >+ { >+ this._composite.DoCommand(aSources, aCommand, aArguments); >+ }, >+ >+ GetAllCmds: function nsExtensionsDataSource_GetAllCmds (aSource) >+ { >+ return this._composite.GetAllCmds(aSource); >+ }, >+ >+ hasArcIn: function nsExtensionsDataSource_hasArcIn (aNode, aArc) >+ { >+ return this._composite.hasArcIn(aNode, aArc); >+ }, >+ >+ hasArcOut: function nsExtensionsDataSource_hasArcOut (aSource, aArc) >+ { >+ return this._composite.hasArcOut(aSource, aArc); >+ }, >+ >+ beginUpdateBatch: function nsExtensionsDataSource_beginUpdateBatch () >+ { >+ return this._composite.beginUpdateBatch(); >+ }, >+ >+ endUpdateBatch: function nsExtensionsDataSource_endUpdateBatch () >+ { >+ return this._composite.endUpdateBatch(); >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIRDFRemoteDataSource >+ >+ get loaded() >+ { >+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED; >+ }, >+ >+ Init: function nsExtensionsDataSource_Init (aURI) >+ { >+ }, >+ >+ Refresh: function nsExtensionsDataSource_Refresh (aBlocking) >+ { >+ }, >+ >+ Flush: function nsExtensionsDataSource_Flush () >+ { >+ this._flush(false); >+ this._flush(true); >+ }, >+ >+ FlushTo: function nsExtensionsDataSource_FlushTo (aURI) >+ { >+ }, >+ >+ _flush: function nsExtensionsDataSource__flush (aIsProfile) >+ { >+ var ds = aIsProfile ? this._profileExtensions : this._appExtensions; >+ var rds = ds.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); >+ rds.Flush(); >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsISupports >+ QueryInterface: function nsExtensionsDataSource_QueryInterface (aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIRDFDataSource) && >+ !aIID.equals(Components.interfaces.nsIRDFRemoteDataSource) && >+ !aIID.equals(Components.interfaces.nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ } >+}; >+ >+ >+var gModule = { >+ _firstTime: true, >+ >+ registerSelf: function (aComponentManager, aFileSpec, aLocation, aType) >+ { >+ if (this._firstTime) { >+ this._firstTime = false; >+ throw Components.results.NS_ERROR_FACTORY_REGISTER_AGAIN; >+ } >+ aComponentManager = aComponentManager.QueryInterface(Components.interfaces.nsIComponentRegistrar); >+ >+ for (var key in this._objects) { >+ var obj = this._objects[key]; >+ aComponentManager.registerFactoryLocation(obj.CID, obj.className, obj.contractID, >+ aFileSpec, aLocation, aType); >+ } >+ >+/* >+ // Make the Extension Manager a startup observer >+ var categoryManager = Components.classes["@mozilla.org/categorymanager;1"] >+ .getService(Components.interfaces.nsICategoryManager); >+ categoryManager.addCategoryEntry("app-startup", this._objects.manager.className, >+ "service," + this._objects.manager.contractID, >+ true, true, null); >+ */ >+ }, >+ >+ getClassObject: function (aComponentManager, aCID, aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIFactory)) >+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED; >+ >+ for (var key in this._objects) { >+ if (aCID.equals(this._objects[key].CID)) >+ return this._objects[key].factory; >+ } >+ >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ }, >+ >+ _objects: { >+ manager: { CID : nsExtensionManager.prototype.classID, >+ contractID : nsExtensionManager.prototype.contractID, >+ className : nsExtensionManager.prototype.classDescription, >+ factory : { >+ createInstance: function (aOuter, aIID) >+ { >+ if (aOuter != null) >+ throw Components.results.NS_ERROR_NO_AGGREGATION; >+ >+ return (new nsExtensionManager()).QueryInterface(aIID); >+ } >+ } >+ } >+ }, >+ >+ canUnload: function (aComponentManager) >+ { >+ return true; >+ } >+}; >+ >+function NSGetModule(compMgr, fileSpec) >+{ >+ return gModule; >+} >--- toolkit/mozapps/extensions/src/nsExtensionManager.js.in >+++ toolkit/mozapps/extensions/src/nsExtensionManager.js.in >@@ -20,6 +20,7 @@ > * > * Contributor(s): > * Ben Goodger <ben@bengoodger.com> >+ * Mike Hommey <mh@glandium.org> > * > * Alternatively, the contents of this file may be used under the terms of > * either the GNU General Public License Version 2 or later (the "GPL"), or >@@ -144,6 +145,19 @@ > } > > // Returns the file at the appropriate point in a directory hierarchy under >+// the specified key. Does NOT create the file NOR the directories along the >+// way. >+function getFileNoCreateDir(aKey, aPathToFile) >+{ >+ var subdirs = []; >+ for (var i = 0; i < aPathToFile.length - 1; ++i) >+ subdirs.push(aPathToFile[i]); >+ var file = getDirNoCreate(aKey, subdirs); >+ file.append(aPathToFile[aPathToFile.length - 1]); >+ return file; >+} >+ >+// Returns the file at the appropriate point in a directory hierarchy under > // the specified key, creating directories along the way if necessary. Does > // NOT create the file. > function getFile(aKey, aPathToFile) >@@ -675,9 +689,17 @@ > function nsInstallLogReader(aExtensionID, aIsProfile, aListener) > { > this._isProfile = aIsProfile; >- this.uninstallLog = getFile(getDirKey(aIsProfile), >+ this.uninstallLog = getFileNoCreateDir(getDirKey(aIsProfile), > [DIR_EXTENSIONS, aExtensionID, > DIR_UNINSTALL, FILE_UNINSTALL_LOG]); >+ // If the uninstall Log doesn't exist in profile, let's give a try in >+ // global extension pool. >+ if (aIsProfile && !this.uninstallLog.exists()) { >+ this._isProfile = false; >+ this.uninstallLog = getFileNoCreateDir(getDirKey(false), >+ [DIR_EXTENSIONS, aExtensionID, >+ DIR_UNINSTALL, FILE_UNINSTALL_LOG]); >+ } > this._listener = aListener > } > >@@ -829,26 +851,20 @@ > { > // extension,{GUID} or theme,{GUID} > var parts = aLine.split(","); >- var manifest = getFile(KEY_APPDIR, >+ var manifest = getFileNoCreateDir(KEY_APPDIR, > [DIR_EXTENSIONS, parts[1], FILE_INSTALL_MANIFEST]); > if (parts.length != 2) > return; > >- if (!manifest.exists()) { >- defaultManifest = defaultFile = getFile(KEY_DEFAULTS, >- [DIR_DEFAULTS_EXTENSIONS, parts[1], FILE_INSTALL_MANIFEST]); >- var extensionDir = getDir(KEY_APPDIR, [DIR_EXTENSIONS, parts[1]]); >- defaultManifest.copyTo(extensionDir, FILE_INSTALL_MANIFEST); >- manifest = getFile(KEY_APPDIR, >- [DIR_EXTENSIONS, parts[1], FILE_INSTALL_MANIFEST]); >- } >- switch (parts[0]) { >- case this.TOKEN_EXTENSION: >- this._manager.ensurePreConfiguredItem(parts[1], nsIUpdateItem.TYPE_EXTENSION, manifest); >- break; >- case this.TOKEN_THEME: >- this._manager.ensurePreConfiguredItem(parts[1], nsIUpdateItem.TYPE_THEME, manifest); >- break; >+ if (manifest.exists()) { >+ switch (parts[0]) { >+ case this.TOKEN_EXTENSION: >+ this._manager.ensurePreConfiguredItem(parts[1], nsIUpdateItem.TYPE_EXTENSION, manifest); >+ break; >+ case this.TOKEN_THEME: >+ this._manager.ensurePreConfiguredItem(parts[1], nsIUpdateItem.TYPE_THEME, manifest); >+ break; >+ } > } > } > }; >@@ -929,7 +945,7 @@ > this._installExtensionFiles(); > > // Load the metadata datasource >- var metadataFile = getFile(this._extDirKey, >+ var metadataFile = getFileNoCreateDir(this._extDirKey, > [DIR_EXTENSIONS, aExtensionID, FILE_INSTALL_MANIFEST]); > > this._metadataDS = getInstallManifest(metadataFile); >@@ -969,10 +985,12 @@ > > _installExtensionFiles: function nsExtensionInstaller__installExtensionFiles () > { >- var sourceXPI = getFile(this._extDirKey, >+ var sourceXPI = getFileNoCreateDir(this._extDirKey, > [DIR_EXTENSIONS, DIR_TEMP, > this._extensionID, > this._extensionID + ".xpi"]); >+ if (!sourceXPI.exists()) >+ return; > var zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"] > .createInstance(Components.interfaces.nsIZipReader); > zipReader.init(sourceXPI); >@@ -1752,6 +1770,9 @@ > // Write bin/components.ini > var manifest = getFile(KEY_APPDIR, [FILE_COMPONENT_MANIFEST]); > this._writeProfileFile(manifest, this._getComponentsDir, false); >+ >+ // Update the Defaults Manifest >+ this._writeDefaults(false); > } > }, > >@@ -1823,7 +1844,7 @@ > cr.selectSkin(KEY_DEFAULT_THEME, true); > } > catch (e) { >- dump("*** nsExtensionManager::_disableObsoleteExtensions - failure, catching exception so finalize window can close\n"); >+// dump("*** nsExtensionManager::_disableObsoleteExtensions - failure, catching exception so finalize window can close\n"); > } > win.close(); > >@@ -2000,8 +2021,41 @@ > ensurePreConfiguredItem: function nsExtensionManager_ensurePreConfiguredItem (aItemID, aItemType, aManifest) > { > this._ds.insertForthcomingItem(aItemID, aItemType, false); >- var metadataDS = getInstallManifest(aManifest); >+ try { >+ var metadataDS = getInstallManifest(aManifest); >+ } >+ catch(e) { >+ return; >+ } > this._ds.addItemMetadata(aItemID, aItemType, metadataDS, false); >+ >+ // Check whether the extension is installable (firefox_version fitting between >+ // em:MaxVersion and em:MinVersion) >+ var extensionID = this.canInstallItem(metadataDS); >+ // |extensionID| must be a GUID string, not a number - a number means failure. >+ if (isNaN(parseInt(extensionID))) { >+ // Do install the extension, meaning we register its chrome and components >+ if (!this._extInstaller) >+ this._extInstaller = new nsExtensionInstaller(this._ds); >+ try { >+ this._extInstaller.install(aItemID, false); >+ } >+ catch (e) { >+ // If the installation failed, we disable the extension in addition >+ // to _not_ uninstalling it (which would fail anyway because it >+ // would be done at launch time... as a user). >+ this._ds.setItemProperty(aItemID, this._ds._emR("toBeUninstalled"), >+ null, false, aItemType); >+ this._ds.setItemProperty(aItemID, this._ds._emR("disabled"), >+ this._ds._emL("true"), false, aItemType); >+ } >+ } else { >+ // disable extensions that aren't installable >+ this._ds.setItemProperty(aItemID, this._ds._emR("disabled"), >+ this._ds._emL("true"), false, aItemType); >+ } >+ // Force locking pre-configured items. >+ this._ds.lockUnlockItem(aItemID, true); > }, > > checkForMismatches: function nsExtensionManager_checkForMismatches () >@@ -2028,22 +2082,31 @@ > if (items.length > 0) { > for (var i = 0; i < items.length; ++i) { > // Now disable the extension so it won't hurt anything. >+ var alreadyDisabled = this._ds.getItemProperty(items[i].id, "disabled"); > var itemType = getItemType(this._ds._getResourceForItem(items[i].id).Value); > if (itemType != -1 && itemType & nsIUpdateItem.TYPE_EXTENSION) >- this.disableExtension(items[i].id); >+ if (!alreadyDisabled) this.disableExtension(items[i].id); > else if (itemType & nsIUpdateItem.TYPE_THEME) { > if (gPref.prefHasUserValue(PREF_GENERAL_SKINS_SELECTEDSKIN)) > gPref.clearUserPref(PREF_GENERAL_SKINS_SELECTEDSKIN); >- this._ds.disableTheme(items[i].id); >+ if (!alreadyDisabled) this._ds.disableTheme(items[i].id); > } > } >- var updates = Components.classes["@mozilla.org/updates/update-service;1"] >- .getService(Components.interfaces.nsIUpdateService); >- updates.checkForUpdates(items, items.length, nsIUpdateItem.TYPE_ADDON, >- nsIUpdateService.SOURCE_EVENT_MISMATCH, >- null); >+ // We want to eliminate locked extensions >+ newitems = []; >+ for (var i = 0; i < items.length; ++i) { >+ if (!this._ds.getItemProperty(items[i].id, "locked")) >+ newitems.push(items[i]); >+ } >+ if (newitems.length > 0) { >+ var updates = Components.classes["@mozilla.org/updates/update-service;1"] >+ .getService(Components.interfaces.nsIUpdateService); >+ updates.checkForUpdates(newitems, newitems.length, nsIUpdateItem.TYPE_ADDON, >+ nsIUpdateService.SOURCE_EVENT_MISMATCH, >+ null); > >- needsRestart = true; >+ needsRestart = true; >+ } > } > } > >@@ -2087,7 +2150,7 @@ > this._writeDefaults(false); > } > catch (e) { >- dump("*** ExtensionManager:_updateManifests: no access privileges to application directory, skipping.\n"); >+// dump("*** ExtensionManager:_updateManifests: no access privileges to application directory, skipping.\n"); > }; > this._writeComponentManifest(true); > this._writeDefaults(true); >@@ -2133,6 +2196,11 @@ > validExtensions.push({ sourceDir: sourceDir, isProfile: isProfile }); > } > >+ // Debian hook to insert defaults/syspref into defaults.ini >+ if ((aFile.leafName == FILE_DEFAULTS) && aIsProfile == false) { >+ validExtensions.push({ sourceDir: getDirNoCreate(getDirKey(false), [DIR_DEFAULTS, "syspref"]), isProfile: false }); >+ } >+ > var lines = ["[Extra Files]\r\n", > "Count=" + validExtensions.length + "\r\n"]; > for (i = 0; i < lines.length; ++i) >@@ -2545,16 +2613,16 @@ > this._extEnabler = new nsExtensionEnabler(this._ds); > > var isProfile = this._ds.isProfileItem(aExtensionID); >- this._extEnabler.enable(aExtensionID, isProfile, aDisable); >+ this._extEnabler.enable(aExtensionID, true, aDisable); > > // clear temporary flags > this._ds.setItemProperty(aExtensionID, > this._ds._emR("toBeEnabled"), >- null, isProfile, >+ null, true, > nsIUpdateItem.TYPE_EXTENSION); > this._ds.setItemProperty(aExtensionID, > this._ds._emR("toBeDisabled"), >- null, isProfile, >+ null, true, > nsIUpdateItem.TYPE_EXTENSION); > }, > >@@ -3090,8 +3158,10 @@ > checkForUpdates: function (aItem, aVersionUpdateOnly) > { > // A preference setting can disable updating for this item >+ // We'll also skip locked items. > try { >- if (!gPref.getBoolPref(PREF_EM_ITEM_UPDATE_ENABLED.replace(/%UUID%/, aItem.id))) { >+ if (this._updater._emDS.getItemProperty(aItem.id, "locked") || >+ !gPref.getBoolPref(PREF_EM_ITEM_UPDATE_ENABLED.replace(/%UUID%/, aItem.id))) { > gOS.notifyObservers(null, "Update:Extension:Item-Ended", ""); > this._updater._checkForDone(); > return; >@@ -3557,7 +3627,7 @@ > > isProfileItem: function nsExtensionsDataSource_isProfileItem (aItemID) > { >- return this.getItemProperty(aItemID, "installLocation") != "global"; >+ return this.getItemProperty(aItemID, "installLocation") == "profile"; > }, > > _setProperty: function nsExtensionsDataSource__setProperty (aDS, aSource, aProperty, aNewValue) >@@ -3845,26 +3915,26 @@ > enableExtension: function nsExtensionsDataSource_enableExtension (aExtensionID) > { > this.setItemProperty(aExtensionID, this._emR("toBeEnabled"), >- this._emL("true"), this.isProfileItem(aExtensionID), >+ this._emL("true"), true, > nsIUpdateItem.TYPE_EXTENSION); > this.setItemProperty(aExtensionID, this._emR("toBeDisabled"), >- null, this.isProfileItem(aExtensionID), >+ null, true, > nsIUpdateItem.TYPE_EXTENSION); > this.setItemProperty(aExtensionID, this._emR("disabled"), >- null, this.isProfileItem(aExtensionID), >+ null, true, > nsIUpdateItem.TYPE_EXTENSION); > }, > > disableExtension: function nsExtensionsDataSource_disableExtension (aExtensionID) > { > this.setItemProperty(aExtensionID, this._emR("toBeDisabled"), >- this._emL("true"), this.isProfileItem(aExtensionID), >+ this._emL("true"), true, > nsIUpdateItem.TYPE_EXTENSION); > this.setItemProperty(aExtensionID, this._emR("toBeEnabled"), >- null, this.isProfileItem(aExtensionID), >+ null, true, > nsIUpdateItem.TYPE_EXTENSION); > this.setItemProperty(aExtensionID, this._emR("disabled"), >- this._emL("true"), this.isProfileItem(aExtensionID), >+ this._emL("true"), true, > nsIUpdateItem.TYPE_EXTENSION); > }, > >--- toolkit/mozapps/update/src/nsUpdateService.js.in >+++ toolkit/mozapps/update/src/nsUpdateService.js.in >@@ -178,9 +178,10 @@ > if (aRequestedTypes & nsIUpdateItem.TYPE_THEME) > types |= nsIUpdateItem.TYPE_THEME; > } >- if (appUpdateEnabled && >- (aRequestedTypes & nsIUpdateItem.TYPE_APP)) >- types |= nsIUpdateItem.TYPE_APP; >+ // Disable application updates >+ //if (appUpdateEnabled && >+ // (aRequestedTypes & nsIUpdateItem.TYPE_APP)) >+ // types |= nsIUpdateItem.TYPE_APP; > > return types; > }, >--- toolkit/mozapps/update/src/nsUpdateService.js >+++ toolkit/mozapps/update/src/nsUpdateService.js >@@ -0,0 +1,1265 @@ >+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is the Update Service. >+ * >+ * The Initial Developer of the Original Code is Ben Goodger. >+ * Portions created by the Initial Developer are Copyright (C) 2004 >+ * the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * Ben Goodger <ben@bengoodger.com> >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+const PREF_APP_ID = "app.id"; >+const PREF_APP_VERSION = "app.version"; >+const PREF_UPDATE_APP_ENABLED = "app.update.enabled"; >+const PREF_UPDATE_APP_AUTOUPDATEENABLED = "app.update.autoUpdateEnabled"; >+const PREF_UPDATE_APP_URI = "app.update.url"; >+const PREF_UPDATE_APP_UPDATESAVAILABLE = "app.update.updatesAvailable"; >+const PREF_UPDATE_APP_INTERVAL = "app.update.interval"; >+const PREF_UPDATE_APP_LASTUPDATEDATE = "app.update.lastUpdateDate"; >+const PREF_UPDATE_APP_PERFORMED = "app.update.performed"; >+ >+const PREF_UPDATE_EXTENSIONS_ENABLED = "extensions.update.enabled"; >+const PREF_UPDATE_EXTENSIONS_AUTOUPDATEENABLED = "extensions.update.autoUpdateEnabled"; >+const PREF_UPDATE_EXTENSIONS_AUTOUPDATE = "extensions.update.autoUpdate"; >+const PREF_UPDATE_EXTENSIONS_COUNT = "extensions.update.count"; >+const PREF_UPDATE_EXTENSIONS_INTERVAL = "extensions.update.interval"; >+const PREF_UPDATE_EXTENSIONS_LASTUPDATEDATE = "extensions.update.lastUpdateDate"; >+const PREF_UPDATE_EXTENSIONS_SEVERITY_THRESHOLD = "extensions.update.severity.threshold"; >+ >+const PREF_UPDATE_INTERVAL = "update.interval"; >+const PREF_UPDATE_SEVERITY = "update.severity"; >+const PREF_UPDATE_SHOW_SLIDING_NOTIFICATION = "update.showSlidingNotification"; >+ >+const nsIExtensionManager = Components.interfaces.nsIExtensionManager; >+const nsIUpdateService = Components.interfaces.nsIUpdateService; >+const nsIUpdateItem = Components.interfaces.nsIUpdateItem; >+ >+const UPDATED_EXTENSIONS = 0x01; >+const UPDATED_APP = 0x02; >+ >+function APP_NS(aProperty) >+{ >+ return "http://www.mozilla.org/2004/app-rdf#" + aProperty; >+} >+ >+function getOSKey() >+{ >+ return "linux"; >+} >+ >+function stackTraceFunctionFormat(aFunctionName) >+{ >+ var classDelimiter = aFunctionName.indexOf("_"); >+ var className = aFunctionName.substr(0, classDelimiter); >+ if (!className) >+ className == "<global>"; >+ var functionName = aFunctionName.substr(classDelimiter + 1, aFunctionName.length); >+ if (!functionName) >+ functionName == "<anonymous>"; >+ return className + "::" + functionName; >+} >+ >+function stackTrace(aArguments, aMaxCount) >+{ >+ dump("=[STACKTRACE]=====================================================\n"); >+ dump("*** at: " + stackTraceFunctionFormat(aArguments.callee.name) + "()\n"); >+ var temp = aArguments.callee.caller; >+ var count = 0; >+ while (temp) { >+ dump("*** " + stackTraceFunctionFormat(temp.name) + ")\n"); >+ temp = temp.arguments.callee.caller; >+ if (aMaxCount > 0 && ++count == aMaxCount) >+ break; >+ } >+ dump("==================================================================\n"); >+} >+ >+var gPref = null; >+var gOS = null; >+var gRDF = null; >+ >+function nsUpdateService() >+{ >+ gPref = Components.classes["@mozilla.org/preferences-service;1"] >+ .getService(Components.interfaces.nsIPrefBranch); >+ gOS = Components.classes["@mozilla.org/observer-service;1"] >+ .getService(Components.interfaces.nsIObserverService); >+ gRDF = Components.classes["@mozilla.org/rdf/rdf-service;1"] >+ .getService(Components.interfaces.nsIRDFService); >+ >+ this.watchForUpdates(); >+ >+ var pbi = gPref.QueryInterface(Components.interfaces.nsIPrefBranchInternal); >+ pbi.addObserver(PREF_UPDATE_APP_AUTOUPDATEENABLED, this, false); >+ pbi.addObserver(PREF_UPDATE_APP_ENABLED, this, false); >+ pbi.addObserver(PREF_UPDATE_EXTENSIONS_AUTOUPDATEENABLED, this, false); >+ pbi.addObserver(PREF_UPDATE_EXTENSIONS_ENABLED, this, false); >+ pbi.addObserver(PREF_UPDATE_INTERVAL, this, false); >+ pbi.addObserver(PREF_UPDATE_APP_INTERVAL, this, false); >+ pbi.addObserver(PREF_UPDATE_EXTENSIONS_INTERVAL, this, false); >+ >+ // Observe xpcom-shutdown to unhook pref branch observers above to avoid >+ // shutdown leaks. >+ gOS.addObserver(this, "xpcom-shutdown", false); >+ >+ // Reset update state from previous session if an app update was installed. >+ if (gPref.prefHasUserValue(PREF_UPDATE_APP_PERFORMED)) >+ gPref.clearUserPref(PREF_UPDATE_APP_PERFORMED); >+} >+ >+nsUpdateService.prototype = { >+ _updateObserver: null, >+ _appAutoUpdateEnabled: true, >+ _extAutoUpdateEnabled: true, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIUpdateService >+ watchForUpdates: function nsUpdateService_watchForUpdates () >+ { >+ // This is called when the app starts, so check to see if the time interval >+ // expired between now and the last time an automated update was performed. >+ // now is the same one that was started last time. >+ this._appAutoUpdateEnabled = gPref.getBoolPref(PREF_UPDATE_APP_AUTOUPDATEENABLED); >+ this._extAutoUpdateEnabled = gPref.getBoolPref(PREF_UPDATE_EXTENSIONS_AUTOUPDATEENABLED); >+ if (!this._appAutoUpdateEnabled && !this._extAutoUpdateEnabled) >+ return; >+ >+ this._makeTimer(gPref.getIntPref(PREF_UPDATE_INTERVAL)); >+ }, >+ >+ _getAllowedTypes: function nsUpdateService__getAllowedTypes(aRequestedTypes) >+ { >+ // Figure out what types we're allowed to update. These options >+ // differ from PREF_UPDATE_*_AUTOUPDATEENABLED since they effectively >+ // shut down the update UI if the administrator/distributor has configured >+ // a build to have disallowed these types of update. >+ var extUpdateEnabled = gPref.getBoolPref(PREF_UPDATE_EXTENSIONS_ENABLED); >+ var appUpdateEnabled = gPref.getBoolPref(PREF_UPDATE_APP_ENABLED); >+ >+ var types = 0; >+ if (extUpdateEnabled) { >+ if (aRequestedTypes & nsIUpdateItem.TYPE_EXTENSION) >+ types |= nsIUpdateItem.TYPE_EXTENSION; >+ if (aRequestedTypes & nsIUpdateItem.TYPE_THEME) >+ types |= nsIUpdateItem.TYPE_THEME; >+ } >+ if (appUpdateEnabled && >+ (aRequestedTypes & nsIUpdateItem.TYPE_APP)) >+ types |= nsIUpdateItem.TYPE_APP; >+ >+ return types; >+ }, >+ >+ checkForUpdates: function nsUpdateService_checkForUpdates (aItems, aItemCount, aUpdateTypes, aSourceEvent, aParentWindow) >+ { >+ var types = this._getAllowedTypes(aUpdateTypes); >+ >+ // Nothing to update >+ if (!types) { >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var bundle = sbs.createBundle("chrome://mozapps/locale/update/update.properties"); >+ var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] >+ .getService(Components.interfaces.nsIPromptService); >+ ps.alert(aParentWindow, >+ bundle.GetStringFromName("updatesdisabledtitle"), >+ bundle.GetStringFromName("updatesdisabledmessage")); >+ return; >+ } >+ >+ switch (aSourceEvent) { >+ case nsIUpdateService.SOURCE_EVENT_MISMATCH: >+ case nsIUpdateService.SOURCE_EVENT_USER: >+ if (aSourceEvent == nsIUpdateService.SOURCE_EVENT_USER && >+ gPref.getBoolPref(PREF_UPDATE_APP_PERFORMED)) { >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var bundle = sbs.createBundle("chrome://mozapps/locale/update/update.properties"); >+ var brandBundle = sbs.createBundle("chrome://global/locale/brand.properties"); >+ var brandShortName = brandBundle.GetStringFromName("brandShortName"); >+ var message = bundle.formatStringFromName("appupdateperformedmessage", >+ [brandShortName, brandShortName], 2); >+ var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] >+ .getService(Components.interfaces.nsIPromptService); >+ ps.alert(aParentWindow, >+ bundle.GetStringFromName("appupdateperformedtitle"), >+ message); >+ return; >+ } >+ >+ var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] >+ .getService(Components.interfaces.nsIWindowMediator); >+ var wizard = wm.getMostRecentWindow("Update:Wizard"); >+ if (wizard) >+ wizard.focus(); >+ else { >+ var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] >+ .getService(Components.interfaces.nsIWindowWatcher); >+ var ary = Components.classes["@mozilla.org/supports-array;1"] >+ .createInstance(Components.interfaces.nsISupportsArray); >+ var updateTypes = Components.classes["@mozilla.org/supports-PRUint8;1"] >+ .createInstance(Components.interfaces.nsISupportsPRUint8); >+ updateTypes.data = types; >+ ary.AppendElement(updateTypes); >+ var sourceEvent = Components.classes["@mozilla.org/supports-PRUint8;1"] >+ .createInstance(Components.interfaces.nsISupportsPRUint8); >+ sourceEvent.data = aSourceEvent; >+ ary.AppendElement(sourceEvent); >+ for (var i = 0; i < aItems.length; ++i) >+ ary.AppendElement(aItems[i]); >+ >+ var features = "chrome,centerscreen"; >+ if (aSourceEvent == nsIUpdateService.SOURCE_EVENT_MISMATCH) { >+ features += ",modal"; // Must block in mismatch mode since there's >+ // no main evt loop yet. >+ } >+ // This *must* be modal so as not to break startup! This code is invoked before >+ // the main event loop is initiated (via checkForMismatches). >+ ww.openWindow(aParentWindow, "chrome://mozapps/content/update/update.xul", >+ "", features, ary); >+ } >+ break; >+ case nsIUpdateService.SOURCE_EVENT_BACKGROUND: >+ // Rather than show a UI, call the checkForUpdates function directly here. >+ // The Browser's inline front end update notification system listens for the >+ // updates that this function broadcasts. >+ this.checkForUpdatesInternal([], 0, types, aSourceEvent); >+ >+ break; >+ } >+ }, >+ >+ _canUpdate: function (aPreference, aSourceEvent, aUpdateTypes) >+ { >+ // Always can update if the autoupdate preference is set, otherwise, >+ // allow updates only when not in backround update mode, i.e. when the user >+ // explicitly asked. >+ return aPreference ? true >+ : aSourceEvent != nsIUpdateService.SOURCE_EVENT_BACKGROUND; >+ }, >+ >+ checkForUpdatesInternal: function nsUpdateService_checkForUpdatesInternal (aItems, aItemCount, aUpdateTypes, aSourceEvent) >+ { >+ var types = this._getAllowedTypes(aUpdateTypes); >+ >+ // Listen for notifications sent out by the app updater (implemented here) and the >+ // extension updater (implemented in nsExtensionItemUpdater) >+ var canUpdate; >+ this._updateObserver = new nsUpdateObserver(types, aSourceEvent, this); >+ var os = Components.classes["@mozilla.org/observer-service;1"] >+ .getService(Components.interfaces.nsIObserverService); >+ if (types & nsIUpdateItem.TYPE_APP) { >+ if (this._canUpdate(this._appAutoUpdateEnabled, aSourceEvent, types)) { >+ gOS.addObserver(this._updateObserver, "Update:App:Ended", false); >+ >+ this._currentVersion = new nsAppUpdateInfo(); >+ this._newestVersion = new nsAppUpdateInfo(); >+ >+ if (!this._updateObserver.appUpdater) { >+ this._updateObserver.appUpdater = new nsAppUpdater(this); >+ this._updateObserver.appUpdater.checkForUpdates(); >+ } >+ } >+ } >+ if (types & nsIUpdateItem.TYPE_ADDON) { // TYPE_EXTENSION, TYPE_ANY, etc. >+ if (this._canUpdate(this._extAutoUpdateEnabled, aSourceEvent, types)) { >+ gOS.addObserver(this._updateObserver, "Update:Extension:Started", false); >+ gOS.addObserver(this._updateObserver, "Update:Extension:Item-Ended", false); >+ gOS.addObserver(this._updateObserver, "Update:Extension:Ended", false); >+ >+ var em = Components.classes["@mozilla.org/extensions/manager;1"] >+ .getService(Components.interfaces.nsIExtensionManager); >+ em.update(aItems, aItems.length, false); >+ } >+ } >+ >+ if (aSourceEvent == nsIUpdateService.SOURCE_EVENT_BACKGROUND && >+ (this._appAutoUpdateEnabled || this._extAutoUpdateEnabled)) { >+ if (types & nsIUpdateItem.TYPE_ADDON) >+ gPref.setIntPref(PREF_UPDATE_EXTENSIONS_LASTUPDATEDATE, this._nowInMilliseconds / 1000); >+ if (types & nsIUpdateItem.TYPE_APP) >+ gPref.setIntPref(PREF_UPDATE_APP_LASTUPDATEDATE, this._nowInMilliseconds / 1000); >+ } >+ }, >+ >+ get updateCount() >+ { >+ // The number of available updates is the number of extension/theme/other >+ // updates + 1 for an application update, if one is available. >+ var updateCount = this.extensionUpdatesAvailable; >+ if (this.appUpdatesAvailable) >+ ++updateCount; >+ return updateCount; >+ }, >+ >+ get updateSeverity() >+ { >+ return gPref.getIntPref(PREF_UPDATE_SEVERITY); >+ }, >+ >+ _appUpdatesAvailable: undefined, >+ get appUpdatesAvailable() >+ { >+ if (this._appUpdatesAvailable === undefined) { >+ return (gPref.prefHasUserValue(PREF_UPDATE_APP_UPDATESAVAILABLE) && >+ gPref.getBoolPref(PREF_UPDATE_APP_UPDATESAVAILABLE)); >+ } >+ return this._appUpdatesAvailable; >+ }, >+ set appUpdatesAvailable(aValue) >+ { >+ this._appUpdatesAvailable = aValue; >+ return aValue; >+ }, >+ >+ _extensionUpdatesAvailable: undefined, >+ get extensionUpdatesAvailable() >+ { >+ if (this._extensionUpdatesAvailable === undefined) >+ return gPref.getIntPref(PREF_UPDATE_EXTENSIONS_COUNT); >+ return this._extensionUpdatesAvailable; >+ }, >+ set extensionUpdatesAvailable(aValue) >+ { >+ this._extensionUpdatesAvailable = aValue; >+ return aValue; >+ }, >+ >+ _newestVersion: null, >+ get newestVersion() >+ { >+ return this._newestVersion; >+ }, >+ _currentVersion: null, >+ get currentVersion() >+ { >+ return this._currentVersion; >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsITimerCallback >+ _shouldUpdate: function nsUpdateService__shouldUpdate (aIntervalPref, aLastCheckPref) >+ { >+ var interval = gPref.getIntPref(aIntervalPref); >+ var lastUpdateTime = gPref.getIntPref(aLastCheckPref); >+ return ((Math.round(this._nowInMilliseconds/1000) - lastUpdateTime) > Math.round(interval/1000)); >+ }, >+ >+ notify: function nsUpdateService_notify (aTimer) >+ { >+ var types = 0; >+ if (this._shouldUpdate(PREF_UPDATE_EXTENSIONS_INTERVAL, >+ PREF_UPDATE_EXTENSIONS_LASTUPDATEDATE)) { >+ types |= nsIUpdateItem.TYPE_ADDON; >+ } >+ if (this._shouldUpdate(PREF_UPDATE_APP_INTERVAL, >+ PREF_UPDATE_APP_LASTUPDATEDATE)) { >+ types |= nsIUpdateItem.TYPE_APP; >+ } >+ if (types) >+ this.checkForUpdatesInternal([], 0, types, >+ nsIUpdateService.SOURCE_EVENT_BACKGROUND); >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIObserver >+ observe: function nsUpdateService_observe (aSubject, aTopic, aData) >+ { >+ switch (aTopic) { >+ case "nsPref:changed": >+ var needsNotification = false; >+ switch (aData) { >+ case PREF_UPDATE_APP_AUTOUPDATEENABLED: >+ case PREF_UPDATE_APP_ENABLED: >+ this._appAutoUpdateEnabled = gPref.getBoolPref(PREF_UPDATE_APP_AUTOUPDATEENABLED); >+ if (!this._appAutoUpdateEnabled) { >+ this._clearAppUpdatePrefs(); >+ needsNotification = true; >+ } >+ else { >+ // Do an initial check NOW to update any FE components and kick off the >+ // timer. >+ this.checkForUpdatesInternal([], 0, nsIUpdateItem.TYPE_APP, >+ nsIUpdateService.SOURCE_EVENT_BACKGROUND); >+ } >+ break; >+ case PREF_UPDATE_EXTENSIONS_AUTOUPDATEENABLED: >+ case PREF_UPDATE_EXTENSIONS_ENABLED: >+ this._extAutoUpdateEnabled = gPref.getBoolPref(PREF_UPDATE_EXTENSIONS_AUTOUPDATEENABLED); >+ if (!this._extAutoUpdateEnabled) { >+ // Unset prefs used by the update service to signify extension updates >+ if (gPref.prefHasUserValue(PREF_UPDATE_EXTENSIONS_COUNT)) >+ gPref.clearUserPref(PREF_UPDATE_EXTENSIONS_COUNT); >+ needsNotification = true; >+ } >+ else { >+ // Do an initial check NOW to update any FE components and kick off the >+ // timer. >+ this.checkForUpdatesInternal([], 0, nsIUpdateItem.TYPE_ADDON, >+ nsIUpdateService.SOURCE_EVENT_BACKGROUND); >+ } >+ break; >+ case PREF_UPDATE_INTERVAL: >+ case PREF_UPDATE_APP_INTERVAL: >+ case PREF_UPDATE_EXTENSIONS_INTERVAL: >+ this._makeTimer(gPref.getIntPref(PREF_UPDATE_INTERVAL)); >+ break; >+ } >+ >+ if (needsNotification) { >+ var os = Components.classes["@mozilla.org/observer-service;1"] >+ .getService(Components.interfaces.nsIObserverService); >+ var backgroundEvt = Components.interfaces.nsIUpdateService.SOURCE_EVENT_BACKGROUND; >+ gOS.notifyObservers(null, "Update:Ended", backgroundEvt.toString()); >+ } >+ break; >+ case "xpcom-shutdown": >+ gOS.removeObserver(this, "xpcom-shutdown"); >+ >+ // Clean up held observers etc to avoid leaks. >+ var pbi = gPref.QueryInterface(Components.interfaces.nsIPrefBranchInternal); >+ pbi.removeObserver(PREF_UPDATE_APP_AUTOUPDATEENABLED, this); >+ pbi.removeObserver(PREF_UPDATE_APP_ENABLED, this); >+ pbi.removeObserver(PREF_UPDATE_EXTENSIONS_AUTOUPDATEENABLED, this); >+ pbi.removeObserver(PREF_UPDATE_EXTENSIONS_ENABLED, this); >+ pbi.removeObserver(PREF_UPDATE_INTERVAL, this); >+ pbi.removeObserver(PREF_UPDATE_EXTENSIONS_INTERVAL, this); >+ >+ // Release strongly held services. >+ gPref = null; >+ gRDF = null; >+ gOS = null; >+ if (this._timer) { >+ this._timer.cancel(); >+ this._timer = null; >+ } >+ break; >+ } >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsUpdateService >+ _timer: null, >+ _makeTimer: function nsUpdateService__makeTimer (aDelay) >+ { >+ if (!this._timer) >+ this._timer = Components.classes["@mozilla.org/timer;1"] >+ .createInstance(Components.interfaces.nsITimer); >+ this._timer.cancel(); >+ this._timer.initWithCallback(this, aDelay, >+ Components.interfaces.nsITimer.TYPE_REPEATING_SLACK); >+ }, >+ >+ get _nowInMilliseconds () >+ { >+ var d = new Date(); >+ return Date.UTC(d.getUTCFullYear(), >+ d.getUTCMonth(), >+ d.getUTCDay(), >+ d.getUTCHours(), >+ d.getUTCMinutes(), >+ d.getUTCSeconds(), >+ d.getUTCMilliseconds()); >+ }, >+ >+ _clearAppUpdatePrefs: function nsUpdateService__clearAppUpdatePrefs () >+ { >+ // Unset prefs used by the update service to signify application updates >+ if (gPref.prefHasUserValue(PREF_UPDATE_APP_UPDATESAVAILABLE)) >+ gPref.clearUserPref(PREF_UPDATE_APP_UPDATESAVAILABLE); >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsISupports >+ QueryInterface: function nsUpdateService_QueryInterface (aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIUpdateService) && >+ !aIID.equals(Components.interfaces.nsIObserver) && >+ !aIID.equals(Components.interfaces.nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ } >+}; >+ >+function nsUpdateObserver(aUpdateTypes, aSourceEvent, aService) >+{ >+ this._updateTypes = aUpdateTypes; >+ this._sourceEvent = aSourceEvent; >+ this._service = aService; >+} >+ >+nsUpdateObserver.prototype = { >+ _updateTypes: 0, >+ _sourceEvent: 0, >+ _updateState: 0, >+ _endedTimer : null, >+ >+ appUpdater: null, >+ >+ get _doneUpdating() >+ { >+ var notBackground = this._sourceEvent != nsIUpdateService.SOURCE_EVENT_BACKGROUND; >+ var canUpdateApp = this._service._appAutoUpdateEnabled || >+ (notBackground ? gPref.getBoolPref(PREF_UPDATE_APP_ENABLED) >+ : false); >+ var canUpdateExt = this._service._extAutoUpdateEnabled || >+ (notBackground ? gPref.getBoolPref(PREF_UPDATE_EXTENSIONS_ENABLED) >+ : false); >+ >+ var test = 0; >+ var updatingApp = (this._updateTypes & nsIUpdateItem.TYPE_APP) && >+ canUpdateApp; >+ var updatingExt = (this._updateTypes & nsIUpdateItem.TYPE_ADDON) && >+ canUpdateExt; >+ >+ if (updatingApp) >+ test |= UPDATED_APP; >+ if (updatingExt) >+ test |= UPDATED_EXTENSIONS; >+ >+ return (this._updateState & test) == test; >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIObserver >+ observe: function nsUpdateObserver_observe (aSubject, aTopic, aData) >+ { >+ switch (aTopic) { >+ case "Update:Extension:Started": >+ // Reset the count >+ gPref.setIntPref(PREF_UPDATE_EXTENSIONS_COUNT, 0); >+ break; >+ case "Update:Extension:Item-Ended": >+ var newCount = gPref.getIntPref(PREF_UPDATE_EXTENSIONS_COUNT) + 1; >+ gPref.setIntPref(PREF_UPDATE_EXTENSIONS_COUNT, newCount); >+ var threshold = gPref.getIntPref(PREF_UPDATE_EXTENSIONS_SEVERITY_THRESHOLD); >+ if (this._service.updateSeverity < nsIUpdateService.SEVERITY_HIGH) { >+ if (newCount > threshold) >+ gPref.setIntPref(PREF_UPDATE_SEVERITY, nsIUpdateService.SEVERITY_MEDIUM); >+ else >+ gPref.setIntPref(PREF_UPDATE_SEVERITY, nsIUpdateService.SEVERITY_LOW); >+ } >+ break; >+ case "Update:Extension:Ended": >+ this._updateState |= UPDATED_EXTENSIONS; >+ break; >+ case "Update:App:Ended": >+ this._updateState |= UPDATED_APP; >+ >+ this.appUpdater.destroy(); >+ this.appUpdater = null; >+ break; >+ } >+ >+ if (this._doneUpdating) { >+ // Do the finalize stuff on a timer to let other observers have a chance to >+ // handle >+ if (this._endedTimer) >+ this._endedTimer.cancel(); >+ this._endedTimer = Components.classes["@mozilla.org/timer;1"] >+ .createInstance(Components.interfaces.nsITimer); >+ this._endedTimer.initWithCallback(this, 0, >+ Components.interfaces.nsITimer.TYPE_ONE_SHOT); >+ } >+ }, >+ >+ notify: function nsUpdateObserver_notify (aTimer) >+ { >+ // The Inline Browser Update UI uses this notification to refresh its update >+ // UI if necessary. >+ gOS.notifyObservers(null, "Update:Ended", this._sourceEvent.toString()); >+ >+ // Show update notification UI if: >+ // We were updating any types and any item was found >+ // We were updating extensions and an extension update was found. >+ // We were updating app and an app update was found. >+ var updatesAvailable = (((this._updateTypes & nsIUpdateItem.TYPE_EXTENSION) || >+ (this._updateTypes & nsIUpdateItem.TYPE_ANY)) && >+ gPref.getIntPref(PREF_UPDATE_EXTENSIONS_COUNT) != 0); >+ if (!updatesAvailable) { >+ updatesAvailable = ((this._updateTypes & nsIUpdateItem.TYPE_APP) || >+ (this._updateTypes & nsIUpdateItem.TYPE_ANY)) && >+ gPref.getBoolPref(PREF_UPDATE_APP_UPDATESAVAILABLE); >+ } >+ >+ var showNotification = gPref.getBoolPref(PREF_UPDATE_SHOW_SLIDING_NOTIFICATION); >+ if (showNotification && updatesAvailable && >+ this._sourceEvent == nsIUpdateService.SOURCE_EVENT_BACKGROUND) { >+ var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"] >+ .getService(Components.interfaces.nsIStringBundleService); >+ var bundle = sbs.createBundle("chrome://mozapps/locale/update/update.properties"); >+ >+ var alertTitle = bundle.GetStringFromName("updatesAvailableTitle"); >+ var alertText = bundle.GetStringFromName("updatesAvailableText"); >+ >+ var alerts = Components.classes["@mozilla.org/alerts-service;1"] >+ .getService(Components.interfaces.nsIAlertsService); >+ alerts.showAlertNotification("chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png", >+ alertTitle, alertText, true, "", this); >+ } >+ >+ this.destroy(); >+ }, >+ >+ destroy: function nsUpdateObserver_destroy () >+ { >+ try { gOS.removeObserver(this, "Update:Extension:Started"); } catch (e) { } >+ try { gOS.removeObserver(this, "Update:Extension:Item-Ended"); } catch (e) { } >+ try { gOS.removeObserver(this, "Update:Extension:Ended"); } catch (e) { } >+ try { gOS.removeObserver(this, "Update:App:Ended"); } catch (e) { } >+ >+ if (this._endedTimer) { >+ this._endedTimer.cancel(); >+ this._endedTimer = null; >+ } >+ }, >+ >+ //////////////////////////////////////////////////////////////////////////// >+ // nsIAlertListener >+ onAlertFinished: function nsUpdateObserver_onAlertFinished () >+ { >+ }, >+ >+ onAlertClickCallback: function nsUpdateObserver_onAlertClickCallback (aCookie) >+ { >+ var updates = Components.classes["@mozilla.org/updates/update-service;1"] >+ .getService(Components.interfaces.nsIUpdateService); >+ updates.checkForUpdates([], 0, Components.interfaces.nsIUpdateItem.TYPE_ANY, >+ Components.interfaces.nsIUpdateService.SOURCE_EVENT_USER, >+ null); >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsISupports >+ QueryInterface: function nsUpdateObserver_QueryInterface (aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIObserver) && >+ !aIID.equals(Components.interfaces.nsIAlertListener) && >+ !aIID.equals(Components.interfaces.nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ } >+}; >+ >+/////////////////////////////////////////////////////////////////////////////// >+// App Updater >+function nsAppUpdater(aUpdateService) >+{ >+ this._service = aUpdateService; >+} >+ >+nsAppUpdater.prototype = { >+ _service : null, >+ >+ checkForUpdates: function () >+ { >+ var dsURI = gPref.getComplexValue(PREF_UPDATE_APP_URI, >+ Components.interfaces.nsIPrefLocalizedString).data; >+ dsURI += "?" + Math.round(Math.random() * 1000); >+ this._ds = gRDF.GetDataSource(dsURI); >+ var rds = this._ds.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource) >+ if (rds.loaded) >+ this.onDatasourceLoaded(this._ds); >+ else { >+ var sink = this._ds.QueryInterface(Components.interfaces.nsIRDFXMLSink); >+ >+ // Creates a strong ref that holds this object past when it falls out of >+ // scope in the calling function >+ sink.addXMLSinkObserver(this); >+ } >+ }, >+ >+ destroy: function () >+ { >+ var sink = this._ds.QueryInterface(Components.interfaces.nsIRDFXMLSink); >+ sink.removeXMLSinkObserver(this); >+ this._service = null; >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // >+ _ncR: function nsUpdateService__ncR (aProperty) >+ { >+ return gRDF.GetResource("http://home.netscape.com/NC-rdf#" + aProperty); >+ }, >+ >+ _getPropertyFromResource: function nsAppUpdater__getPropertyFromResource (aDataSource, >+ aSourceResource, >+ aProperty) >+ { >+ var rv; >+ try { >+ var property = gRDF.GetResource(APP_NS(aProperty)); >+ rv = this._stringData(aDataSource.GetTarget(aSourceResource, property, true)); >+ if (rv == "--") >+ throw Components.results.NS_ERROR_FAILURE; >+ } >+ catch (e) { >+ return null; >+ } >+ return rv; >+ }, >+ >+ _stringData: function nsAppUpdater__stringData (aLiteralOrResource) >+ { >+ try { >+ var obj = aLiteralOrResource.QueryInterface(Components.interfaces.nsIRDFLiteral); >+ return obj.Value; >+ } >+ catch (e) { >+ try { >+ obj = aLiteralOrResource.QueryInterface(Components.interfaces.nsIRDFResource); >+ return obj.Value; >+ } >+ catch (e) {} >+ } >+ return "--"; >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // >+ onDatasourceLoaded: function nsAppUpdater_onDatasourceLoaded (aDataSource) >+ { >+ var appID = gPref.getCharPref(PREF_APP_ID); >+ var appVersion = gPref.getCharPref(PREF_APP_VERSION); >+ >+ var appResource = gRDF.GetResource("urn:mozilla:app:" + appID); >+ var updatesArc = gRDF.GetResource(APP_NS("updates")); >+ var updatesResource = aDataSource.GetTarget(appResource, updatesArc, true); >+ >+ try { >+ updatesResource = updatesResource.QueryInterface(Components.interfaces.nsIRDFResource); >+ } >+ catch (e) { >+ gOS.notifyObservers(null, "Update:App:Error", ""); >+ gOS.notifyObservers(null, "Update:App:Ended", ""); >+ return; >+ } >+ >+ var cu = Components.classes["@mozilla.org/rdf/container-utils;1"] >+ .getService(Components.interfaces.nsIRDFContainerUtils); >+ if (cu.IsContainer(aDataSource, updatesResource)) { >+ var c = Components.classes["@mozilla.org/rdf/container;1"] >+ .getService(Components.interfaces.nsIRDFContainer); >+ c.Init(aDataSource, updatesResource); >+ >+ var versionChecker = Components.classes["@mozilla.org/updates/version-checker;1"] >+ .getService(Components.interfaces.nsIVersionChecker); >+ >+ var newestVersionObj = { version: appVersion, resource: null }; >+ var updates = c.GetElements(); >+ while (updates.hasMoreElements()) { >+ var update = updates.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var version = this._getPropertyFromResource(aDataSource, update, "version"); >+ if (!version) >+ continue; >+ if (versionChecker.compare(appVersion, version) == 0) >+ this._parseVersionData(aDataSource, update, this._service._currentVersion); >+ else if (versionChecker.compare(newestVersionObj.version, version) < 0) { >+ newestVersionObj.version = version; >+ newestVersionObj.resource = update; >+ } >+ } >+ if (newestVersionObj.resource) >+ this._parseVersionData(aDataSource, newestVersionObj.resource, this._service._newestVersion); >+ >+ // There is a newer version of the app available or there are any critical >+ // patches available update the severity and available updates preferences. >+ // XXXben also note if there are langpacks available that match the user's >+ // preference if they previously installed an app update when a >+ // langpack for their language was not available and they used another >+ // in the meantime. >+ var haveLanguage = false; >+ var patches = this._service._currentVersion.patches; >+ var languages = this._service._newestVersion.languages; >+ if (languages) { >+ var cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"] >+ .getService(Components.interfaces.nsIXULChromeRegistry); >+ var selectedLocale = cr.getSelectedLocale("global"); >+ for (var i = 0; i < languages.length; ++i) { >+ if (languages[i].internalName == selectedLocale) >+ haveLanguage = true; >+ } >+ } >+ >+ if ((haveLanguage && (newestVersionObj.version != appVersion)) || >+ (patches && patches.length > 0)) { >+ gPref.setIntPref(PREF_UPDATE_SEVERITY, 2); >+ gPref.setBoolPref(PREF_UPDATE_APP_UPDATESAVAILABLE, true); >+ } >+ else >+ gPref.setBoolPref(PREF_UPDATE_APP_UPDATESAVAILABLE, false); >+ >+ if (!gPref.getBoolPref(PREF_UPDATE_APP_UPDATESAVAILABLE)) { >+ this._service._clearAppUpdatePrefs(); >+ >+ // Lower the severity to reflect the fact that there are now only Extension/ >+ // Theme updates available >+ var newCount = gPref.getIntPref(PREF_UPDATE_EXTENSIONS_COUNT); >+ var threshold = gPref.getIntPref(PREF_UPDATE_EXTENSIONS_SEVERITY_THRESHOLD); >+ if (newCount >= threshold) >+ gPref.setIntPref(PREF_UPDATE_SEVERITY, nsIUpdateService.SEVERITY_MEDIUM); >+ else >+ gPref.setIntPref(PREF_UPDATE_SEVERITY, nsIUpdateService.SEVERITY_LOW); >+ } >+ } >+ >+ // The Update Wizard uses this notification to determine that the application >+ // update process is now complete. >+ gOS.notifyObservers(null, "Update:App:Ended", ""); >+ }, >+ >+ _parseVersionData: function nsAppUpdater__parseVersionData (aDataSource, >+ aUpdateResource, >+ aTargetObj) >+ { >+ aTargetObj.updateVersion = this._getPropertyFromResource(aDataSource, aUpdateResource, "version"); >+ aTargetObj.updateDisplayVersion = this._getPropertyFromResource(aDataSource, aUpdateResource, "displayVersion"); >+ if (!aTargetObj.updateDisplayVersion) >+ aTargetObj.updateDisplayVersion = this._getPropertyFromResource(aDataSource, aUpdateResource, "version"); >+ aTargetObj.updateInfoURL = this._getPropertyFromResource(aDataSource, aUpdateResource, "infoURL"); >+ >+ aTargetObj.features = this._parseUpdateCollection(aDataSource, aUpdateResource, "features"); >+ aTargetObj.files = this._parseUpdateCollection(aDataSource, aUpdateResource, "files"); >+ aTargetObj.optional = this._parseUpdateCollection(aDataSource, aUpdateResource, "optional"); >+ aTargetObj.languages = this._parseUpdateCollection(aDataSource, aUpdateResource, "languages"); >+ aTargetObj.patches = this._parseUpdateCollection(aDataSource, aUpdateResource, "patches"); >+ }, >+ >+ _parseUpdateCollection: function nsAppUpdater__parseUpdateCollection (aDataSource, >+ aUpdateResource, >+ aCollectionName) >+ { >+ if (!aUpdateResource) >+ return null; >+ >+ var result = []; >+ >+ var collectionArc = gRDF.GetResource(APP_NS(aCollectionName)); >+ var collectionResource = aDataSource.GetTarget(aUpdateResource, collectionArc, true); >+ >+ try { >+ collectionResource = collectionResource.QueryInterface(Components.interfaces.nsIRDFResource); >+ } >+ catch (e) { return null; } >+ >+ var cu = Components.classes["@mozilla.org/rdf/container-utils;1"] >+ .getService(Components.interfaces.nsIRDFContainerUtils); >+ if (cu.IsContainer(aDataSource, collectionResource)) { >+ var c = Components.classes["@mozilla.org/rdf/container;1"] >+ .getService(Components.interfaces.nsIRDFContainer); >+ c.Init(aDataSource, collectionResource); >+ >+ var elements = c.GetElements(); >+ var fileArc = gRDF.GetResource(APP_NS("file")); >+ var platform = getOSKey(); >+ while (elements.hasMoreElements()) { >+ var element = elements.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ var info = new nsAppUpdateInfoItem(); >+ info.name = this._getPropertyFromResource(aDataSource, element, "name"); >+ info.internalName = this._getPropertyFromResource(aDataSource, element, "internalName"); >+ >+ // Each Component has a set of app:file arcs out, which reference resources with two >+ // properties: app:platform and app:URL. If we find a resource whose app:platform value >+ // matches the platform we're running on, we use the app:URL property on that resource >+ // as the XPI URL, otherwise we use the default app:URL property on the Component >+ // resource. (It must be a cross-platform piece, e.g. a language pack) >+ // XXXben - what to do when platform not supported? We need some way to abort >+ // and tell the app that this update is not available. >+ var files = aDataSource.GetTargets(element, fileArc, true); >+ while (files.hasMoreElements()) { >+ var file = files.getNext().QueryInterface(Components.interfaces.nsIRDFResource); >+ if (platform == this._getPropertyFromResource(aDataSource, file, "platform")) { >+ info.URL = this._getPropertyFromResource(aDataSource, file, "URL"); >+ break; >+ } >+ } >+ if (!info.URL) >+ info.URL = this._getPropertyFromResource(aDataSource, element, "URL"); >+ info.infoURL = this._getPropertyFromResource(aDataSource, element, "infoURL"); >+ info.description = this._getPropertyFromResource(aDataSource, element, "description"); >+ result.push(info); >+ } >+ } >+ >+ return result; >+ }, >+ >+ onDatasourceError: function (aStatus, aErrorMsg) >+ { >+ gOS.notifyObservers(null, "Update:App:Error", ""); >+ gOS.notifyObservers(null, "Update:App:Ended", ""); >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIRDFXMLSinkObserver >+ onBeginLoad: function(aSink) >+ { >+ }, >+ onInterrupt: function(aSink) >+ { >+ }, >+ onResume: function(aSink) >+ { >+ }, >+ >+ onEndLoad: function(aSink) >+ { >+ try { >+ this._ds = aSink.QueryInterface(Components.interfaces.nsIRDFDataSource); >+ this.onDatasourceLoaded(this._ds); >+ } >+ catch (e) { } >+ }, >+ >+ onError: function(aSink, aStatus, aErrorMsg) >+ { >+ try { >+ this._ds = aSink.QueryInterface(Components.interfaces.nsIRDFDataSource); >+ this.onDatasourceError(aStatus, aErrorMsg); >+ } >+ catch (e) { } >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsISupports >+ QueryInterface: function nsAppUpdater_QueryInterface (aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIRDFXMLSinkObserver) && >+ !aIID.equals(Components.interfaces.nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ } >+} >+ >+function UpdateItem () >+{ >+} >+ >+UpdateItem.prototype = { >+ init: function UpdateItem_init (aID, >+ aVersion, >+ aMinAppVersion, >+ aMaxAppVersion, >+ aName, >+ aRow, >+ aXPIURL, >+ aIconURL, >+ aUpdateRDF, >+ aType) >+ { >+ this._id = aID; >+ this._version = aVersion; >+ this._minAppVersion = aMinAppVersion; >+ this._maxAppVersion = aMaxAppVersion; >+ this._name = aName; >+ this._row = aRow; >+ this._xpiURL = aXPIURL; >+ this._iconURL = aIconURL; >+ this._updateRDF = aUpdateRDF; >+ this._type = aType; >+ }, >+ >+ get id() { return this._id; }, >+ get version() { return this._version; }, >+ get minAppVersion() { return this._minAppVersion; }, >+ get maxAppVersion() { return this._maxAppVersion; }, >+ get name() { return this._name; }, >+ get row() { return this._row; }, >+ get xpiURL() { return this._xpiURL; }, >+ get iconURL() { return this._iconURL }, >+ get updateRDF() { return this._updateRDF; }, >+ get type() { return this._type; }, >+ >+ get objectSource() >+ { >+ return { id : this._id, >+ version : this._version, >+ minAppVersion : this._minAppVersion, >+ maxAppVersion : this._maxAppVersion, >+ name : this._name, >+ row : this._row, >+ xpiURL : this._xpiURL, >+ iconURL : this._iconURL, >+ updateRDF : this._updateRDF, >+ type : this._type >+ }.toSource(); >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsISupports >+ QueryInterface: function UpdateItem_QueryInterface (aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIUpdateItem) && >+ !aIID.equals(Components.interfaces.nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ } >+}; >+ >+function nsAppUpdateInfoItem () >+{ >+} >+nsAppUpdateInfoItem.prototype = { >+ internalName: "", >+ name : "", >+ URL : "", >+ infoURL : "", >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsISupports >+ QueryInterface: function nsAppUpdater_QueryInterface (aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIAppUpdateInfo) && >+ !aIID.equals(Components.interfaces.nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ } >+}; >+ >+function nsAppUpdateInfo () >+{ >+} >+nsAppUpdateInfo.prototype = { >+ updateVersion : "", >+ updateDisplayVersion: "", >+ updateInfoURL : "", >+ >+ features : [], >+ files : [], >+ optional : [], >+ languages : [], >+ patches : [], >+ >+ getCollection: function (aCollectionName, aItemCount) >+ { >+ var collection = aCollectionName in this ? this[aCollectionName] : null; >+ aItemCount.value = collection ? collection.length : 0; >+ return collection; >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsISupports >+ QueryInterface: function nsAppUpdater_QueryInterface (aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIAppUpdateInfoCollection) && >+ !aIID.equals(Components.interfaces.nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ } >+}; >+ >+function Version(aMajor, aMinor, aRelease, aBuild, aPlus) >+{ >+ this.major = aMajor || 0; >+ this.minor = aMinor || 0; >+ this.release = aRelease || 0; >+ this.build = aBuild || 0; >+ this.plus = aPlus || 0; >+} >+ >+Version.prototype = { >+ toString: function Version_toString() >+ { >+ return this.major + "." + this.minor + "." + this.subminor + "." + this.release + (this.plus ? "+" : ""); >+ }, >+ >+ compare: function (aVersion) >+ { >+ var fields = ["major", "minor", "release", "build", "plus"]; >+ >+ for (var i = 0; i < fields.length; ++i) { >+ var field = fields[i]; >+ if (aVersion[field] > this[field]) >+ return -1; >+ else if (aVersion[field] < this[field]) >+ return 1; >+ } >+ return 0; >+ } >+} >+ >+function nsVersionChecker() >+{ >+} >+ >+nsVersionChecker.prototype = { >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsIVersionChecker >+ >+ // -ve if B is newer >+ // equal if A == B >+ // +ve if A is newer >+ compare: function nsVersionChecker_compare (aVersionA, aVersionB) >+ { >+ var a = this._decomposeVersion(aVersionA); >+ var b = this._decomposeVersion(aVersionB); >+ >+ return a.compare(b); >+ }, >+ >+ _decomposeVersion: function nsVersionChecker__decomposeVersion (aVersion) >+ { >+ var plus = 0; >+ if (aVersion.charAt(aVersion.length-1) == "+") { >+ aVersion = aVersion.substr(0, aVersion.length-1); >+ plus = 1; >+ } >+ >+ var parts = aVersion.split("."); >+ >+ return new Version(this._getValidInt(parts[0]), >+ this._getValidInt(parts[1]), >+ this._getValidInt(parts[2]), >+ this._getValidInt(parts[3]), >+ plus); >+ }, >+ >+ _getValidInt: function nsVersionChecker__getValidInt (aPartString) >+ { >+ var integer = parseInt(aPartString); >+ if (isNaN(integer)) >+ return 0; >+ return integer; >+ }, >+ >+ isValidVersion: function nsVersionChecker_isValidVersion (aVersion) >+ { >+ var parts = aVersion.split("."); >+ if (parts.length == 0) >+ return false; >+ for (var i = 0; i < parts.length; ++i) { >+ var part = parts[i]; >+ if (i == parts.length - 1) { >+ if (part.lastIndexOf("+") != -1) >+ parts[i] = part.substr(0, part.length - 1); >+ } >+ var integer = parseInt(part); >+ if (isNaN(integer)) >+ return false; >+ } >+ return true; >+ }, >+ >+ ///////////////////////////////////////////////////////////////////////////// >+ // nsISupports >+ QueryInterface: function nsVersionChecker_QueryInterface (aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIVersionChecker) && >+ !aIID.equals(Components.interfaces.nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ } >+}; >+ >+var gModule = { >+ _firstTime: true, >+ >+ registerSelf: function (aComponentManager, aFileSpec, aLocation, aType) >+ { >+ if (this._firstTime) { >+ this._firstTime = false; >+ throw Components.results.NS_ERROR_FACTORY_REGISTER_AGAIN; >+ } >+ aComponentManager = aComponentManager.QueryInterface(Components.interfaces.nsIComponentRegistrar); >+ >+ for (var key in this._objects) { >+ var obj = this._objects[key]; >+ aComponentManager.registerFactoryLocation(obj.CID, obj.className, obj.contractID, >+ aFileSpec, aLocation, aType); >+ } >+ }, >+ >+ getClassObject: function (aComponentManager, aCID, aIID) >+ { >+ if (!aIID.equals(Components.interfaces.nsIFactory)) >+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED; >+ >+ for (var key in this._objects) { >+ if (aCID.equals(this._objects[key].CID)) >+ return this._objects[key].factory; >+ } >+ >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ }, >+ >+ _objects: { >+ manager: { CID: Components.ID("{B3C290A6-3943-4B89-8BBE-C01EB7B3B311}"), >+ contractID: "@mozilla.org/updates/update-service;1", >+ className: "Update Service", >+ factory: { >+ createInstance: function (aOuter, aIID) >+ { >+ if (aOuter != null) >+ throw Components.results.NS_ERROR_NO_AGGREGATION; >+ >+ return (new nsUpdateService()).QueryInterface(aIID); >+ } >+ } >+ }, >+ version: { CID: Components.ID("{9408E0A5-509E-45E7-80C1-0F35B99FF7A9}"), >+ contractID: "@mozilla.org/updates/version-checker;1", >+ className: "Version Checker", >+ factory: { >+ createInstance: function (aOuter, aIID) >+ { >+ if (aOuter != null) >+ throw Components.results.NS_ERROR_NO_AGGREGATION; >+ >+ return (new nsVersionChecker()).QueryInterface(aIID); >+ } >+ } >+ }, >+ item: { CID: Components.ID("{F3294B1C-89F4-46F8-98A0-44E1EAE92518}"), >+ contractID: "@mozilla.org/updates/item;1", >+ className: "Extension Item", >+ factory: { >+ createInstance: function (aOuter, aIID) >+ { >+ if (aOuter != null) >+ throw Components.results.NS_ERROR_NO_AGGREGATION; >+ >+ return new UpdateItem().QueryInterface(aIID); >+ } >+ } >+ } >+ }, >+ >+ canUnload: function (aComponentManager) >+ { >+ return true; >+ } >+}; >+ >+function NSGetModule(compMgr, fileSpec) >+{ >+ return gModule; >+} >+ >--- toolkit/mozapps/jar.mn >+++ toolkit/mozapps/jar.mn >@@ -22,7 +22,6 @@ > * content/mozapps/extensions/finalize.xul (extensions/content/finalize.xul) > * content/mozapps/update/update.xul (update/content/update.xul) > * content/mozapps/update/update.js (update/content/update.js) >-* content/mozapps/update/updates.xml (update/content/updates.xml) > * content/mozapps/update/update.css (update/content/update.css) > * content/mozapps/update/errors.xul (update/content/errors.xul) > * content/mozapps/shared/richview.xml (shared/content/richview.xml) >--- toolkit/themes/gnomestripe/global/button.css >+++ toolkit/themes/gnomestripe/global/button.css >@@ -162,3 +162,86 @@ > list-style-image: url("chrome://global/skin/tree/twisty-open.png"); > } > >+/* >+ * GNOME Stock Icon Styles >+ */ >+ >+button[icon="accept"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-ok?size=button"); >+} >+ >+button[icon="cancel"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-cancel?size=button"); >+} >+ >+button[icon="help"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-help?size=button"); >+} >+ >+button[icon="open"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-open?size=button"); >+} >+ >+button[icon="save"] .button-icon { >+ list-style-image: url(moz-icon://stock/gtk-save?size=button); >+} >+ >+button[icon="find"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-find?size=button"); >+} >+ >+button[icon="clear"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-clear?size=button"); >+} >+ >+button[icon="yes"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-yes?size=button"); >+} >+ >+button[icon="no"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-no?size=button"); >+} >+ >+button[icon="apply"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-apply?size=button"); >+} >+ >+button[icon="close"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-close?size=button"); >+} >+ >+button[icon="print"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-print?size=button"); >+} >+ >+button[icon="add"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-add?size=button"); >+} >+ >+button[icon="remove"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-remove?size=button"); >+} >+ >+button[icon="refresh"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-refresh?size=button"); >+} >+ >+button[icon="go-forward"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-go-forward?size=button"); >+} >+ >+button[icon="go-back"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-go-back?size=button"); >+} >+ >+button[icon="properties"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-properties?size=button"); >+} >+ >+button[icon="select-font"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-select-font?size=button"); >+} >+ >+button[icon="network"] .button-icon { >+ list-style-image: url("moz-icon://stock/gtk-network?size=button"); >+} >--- toolkit/xre/nsXREDirProvider.cpp >+++ toolkit/xre/nsXREDirProvider.cpp >@@ -287,6 +287,10 @@ > rv = mProfileDir->Clone(getter_AddRefs(file)); > rv |= file->AppendNative(nsDependentCString("chrome")); > } >+ else if (!strcmp(aProperty, NS_APP_USER_SEARCH_50_DIR)) { >+ rv = mProfileDir->Clone(getter_AddRefs(file)); >+ rv |= file->AppendNative(NS_LITERAL_CSTRING("search")); >+ } > else if (!strcmp(aProperty, NS_APP_LOCALSTORE_50_FILE)) { > rv = mProfileDir->Clone(getter_AddRefs(file)); > rv |= file->AppendNative(nsDependentCString("localstore.rdf")); >@@ -314,11 +318,6 @@ > rv = mProfileDir->Clone(getter_AddRefs(file)); > rv |= file->AppendNative(nsDependentCString("downloads.rdf")); > } >- else if (!strcmp(aProperty, NS_APP_SEARCH_50_FILE)) { >- rv = mProfileDir->Clone(getter_AddRefs(file)); >- rv |= file->AppendNative(nsDependentCString("search.rdf")); >- EnsureProfileFileExists(file); >- } > else if (!strcmp(aProperty, NS_APP_MAIL_50_DIR)) { > rv = mProfileDir->Clone(getter_AddRefs(file)); > rv |= file->AppendNative(nsDependentCString("Mail")); >--- toolkit/xre/nsAppRunner.cpp >+++ toolkit/xre/nsAppRunner.cpp >@@ -1522,6 +1522,11 @@ > }; > #endif > >+#ifdef MOZ_WIDGET_GTK2 >+#include "prlink.h" >+typedef void (*_g_set_application_name_fn)(const gchar *application_name); >+#endif >+ > int xre_main(int argc, char* argv[], const nsXREAppData* aAppData) > { > nsresult rv; >@@ -1650,6 +1655,19 @@ > #endif > gtk_init(&gArgc, &gArgv); > >+#if defined(MOZ_WIDGET_GTK2) >+ // g_set_application_name is only defined in glib2.2 and higher >+ PRLibrary *glib2; >+ _g_set_application_name_fn _g_set_application_name = >+ (_g_set_application_name_fn)PR_FindFunctionSymbolAndLibrary("g_set_application_name", &glib2); >+ if (_g_set_application_name) { >+ _g_set_application_name(gAppData->appName); >+ } >+ if (glib2) { >+ PR_UnloadLibrary(glib2); >+ } >+#endif >+ > gtk_widget_set_default_visual(gdk_rgb_get_visual()); > gtk_widget_set_default_colormap(gdk_rgb_get_cmap()); > #endif /* MOZ_WIDGET_GTK || MOZ_WIDGET_GTK2 */ >--- extensions/cookie/resources/content/cookieAcceptDialog.js >+++ extensions/cookie/resources/content/cookieAcceptDialog.js >@@ -62,6 +62,12 @@ > document.getElementById("cancel").label = dialog.getAttribute("cancelLabel"); > document.getElementById("cancel").accessKey = dialog.getAttribute("cancelKey"); > >+ // hook up GNOME stock icons where implemented >+ document.getElementById("ok").setAttribute("icon","accept"); >+ document.getElementById("cancel").setAttribute("icon","cancel"); >+ document.getElementById("Button2").setAttribute("icon","accept"); >+ document.getElementById("disclosureButton").setAttribute("icon","properties"); >+ > if (!gDateService) { > const nsScriptableDateFormat_CONTRACTID = "@mozilla.org/intl/scriptabledateformat;1"; > const nsIScriptableDateFormat = Components.interfaces.nsIScriptableDateFormat; >--- extensions/typeaheadfind/public/Makefile.in >+++ extensions/typeaheadfind/public/Makefile.in >@@ -31,11 +31,11 @@ > > include $(DEPTH)/config/autoconf.mk > >-MODULE=typeaheadfind >-XPIDL_MODULE=typeaheadfind >+MODULE=typeaheadfindsea >+XPIDL_MODULE=typeaheadfindsea > GRE_MODULE = 1 > >-XPIDLSRCS= ./nsITypeAheadFind.idl \ >+XPIDLSRCS= ./nsITypeAheadFindSea.idl \ > $(NULL) > > >--- extensions/typeaheadfind/public/nsITypeAheadFindSea.idl >+++ extensions/typeaheadfind/public/nsITypeAheadFindSea.idl >@@ -0,0 +1,88 @@ >+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is mozilla.org code. >+ * >+ * The Initial Developer of the Original Code is >+ * Netscape Communications Corporation. >+ * Portions created by the Initial Developer are Copyright (C) 1998 >+ * the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * Original Author: Aaron Leventhal (aaronl@netscape.com) >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+#include "nsISupports.idl" >+#include "domstubs.idl" >+#include "nsISupportsPrimitives.idl" >+ >+%{ C++ >+ #include "nsIDOMEvent.h" >+ >+ #define NS_TYPEAHEADFINDSEA_CID \ >+ {0x46590685, 0xbc00, 0x4aac, {0xab, 0xed, 0x2c, 0x10, 0xa5, 0xb9, 0x45, 0xa4}} >+ >+ #define NS_TYPEAHEADFINDSEA_CONTRACTID "@mozilla.org/typeaheadfindsea;1" >+%} >+ >+interface nsIDOMEvent; >+ >+[scriptable, uuid(a565f6e0-d521-4ffe-8cea-569fbb163cd1)] >+interface nsITypeAheadFindSea : nsISupports >+{ >+ /** Is type ahead find mode currently on? */ >+ readonly attribute boolean isActive; >+ >+ /** Manually start type ahead find mode */ >+ void startNewFind(in nsIDOMWindow aWindow, in boolean aLinksOnly); >+ >+ /** Manually cancel type ahead find mode */ >+ void cancelFind(); >+ >+ /** >+ * Will find as you type start automatically if the user >+ * types with the focus on page content other than a textfield or select? >+ * If autostart is off, the startNewFind() method can be used to enact >+ * type ahead find, as well as cmd_findTypeLinks or cmd_findTypeText. >+ */ >+ void setAutoStart(in nsIDOMWindow aWindow, in boolean aIsAutoStartOn); >+ boolean getAutoStart(in nsIDOMWindow aWindow); >+ >+ /** >+ * Find next recurrence if typeaheadfind was the last used find, >+ * as opposed to regular find. Returns false in nsISupportsPRBool if we >+ * don't handle the request. >+ */ >+ void findNext(in boolean aReverse, in nsISupportsInterfacePointer aCallerWindowSupports); >+ >+ /* >+ * Go back and remove one character from find string >+ * Returns true if backspace used >+ */ >+ boolean backOneChar(); >+}; >+ >--- extensions/typeaheadfind/resources/content/prefs/typeaheadfind.js >+++ extensions/typeaheadfind/resources/content/prefs/typeaheadfind.js >@@ -36,7 +36,7 @@ > * > * ***** END LICENSE BLOCK ***** */ > >-pref("accessibility.typeaheadfind", true); >-pref("accessibility.typeaheadfind.linksonly", true); >-pref("accessibility.typeaheadfind.startlinksonly", false); >-pref("accessibility.typeaheadfind.timeout", 5000); >+pref("accessibility.typeaheadfindsea", false); >+pref("accessibility.typeaheadfindsea.linksonly", true); >+pref("accessibility.typeaheadfindsea.startlinksonly", false); >+pref("accessibility.typeaheadfindsea.timeout", 5000); >--- extensions/typeaheadfind/resources/locale/en-US/typeaheadfindsea.properties >+++ extensions/typeaheadfind/resources/locale/en-US/typeaheadfindsea.properties >@@ -0,0 +1,13 @@ >+openparen = ( >+closeparen = ) >+textfound = Text found: " >+textnotfound = Text not found: " >+linkfound = Link found: " >+linknotfound = Link not found: " >+closequote = " >+stopfind = Find stopped. >+starttextfind = Starting -- find text as you type >+startlinkfind = Starting -- find links as you type >+repeated = repeated >+nextmatch = - next match >+prevmatch = - previous match >--- extensions/typeaheadfind/resources/jar.mn >+++ extensions/typeaheadfind/resources/jar.mn >@@ -1,5 +1,5 @@ > en-US.jar: >- locale/en-US/global/typeaheadfind.properties (locale/en-US/typeaheadfind.properties) >+ locale/en-US/global/typeaheadfindsea.properties (locale/en-US/typeaheadfindsea.properties) > > toolkit.jar: > content/global/notfound.wav (content/notfound.wav) >--- extensions/typeaheadfind/src/Makefile.in >+++ extensions/typeaheadfind/src/Makefile.in >@@ -31,14 +31,14 @@ > > include $(DEPTH)/config/autoconf.mk > >-MODULE = typeaheadfind >-LIBRARY_NAME = typeaheadfind >+MODULE = typeaheadfindsea >+LIBRARY_NAME = typeaheadfindsea > ifneq ($(OS_ARCH),WINNT) >-SHORT_LIBNAME = typahead >+SHORT_LIBNAME = typaheadsea > endif > GRE_MODULE = 1 > >-PACKAGE_FILE = typeaheadfind.pkg >+PACKAGE_FILE = typeaheadfindsea.pkg > > REQUIRES = appcomps \ > embedcomponents \ >@@ -66,7 +66,7 @@ > > EXPORT_LIBRARY = 1 > IS_COMPONENT = 1 >-MODULE_NAME = nsTypeAheadFind >+MODULE_NAME = nsTypeAheadFindSea > > CPPSRCS = \ > nsTypeAheadFind.cpp \ >--- extensions/typeaheadfind/src/nsTypeAheadFind.cpp >+++ extensions/typeaheadfind/src/nsTypeAheadFind.cpp >@@ -117,8 +117,8 @@ > //////////////////////////////////////////////////////////////////////// > > >-NS_INTERFACE_MAP_BEGIN(nsTypeAheadFind) >- NS_INTERFACE_MAP_ENTRY(nsITypeAheadFind) >+NS_INTERFACE_MAP_BEGIN(nsTypeAheadFindSea) >+ NS_INTERFACE_MAP_ENTRY(nsITypeAheadFindSea) > NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) > NS_INTERFACE_MAP_ENTRY(nsITimerCallback) > NS_INTERFACE_MAP_ENTRY(nsIScrollPositionListener) >@@ -131,8 +131,8 @@ > NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEventListener, nsIDOMKeyListener) > NS_INTERFACE_MAP_END > >-NS_IMPL_ADDREF(nsTypeAheadFind) >-NS_IMPL_RELEASE(nsTypeAheadFind) >+NS_IMPL_ADDREF(nsTypeAheadFindSea) >+NS_IMPL_RELEASE(nsTypeAheadFindSea) > > static NS_DEFINE_IID(kRangeCID, NS_RANGE_CID); > static NS_DEFINE_CID(kStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID); >@@ -141,11 +141,11 @@ > > #define NS_FIND_CONTRACTID "@mozilla.org/embedcomp/rangefind;1" > >-nsTypeAheadFind* nsTypeAheadFind::sInstance = nsnull; >-PRInt32 nsTypeAheadFind::sAccelKey = -1; // magic value of -1 when unitialized >+nsTypeAheadFindSea* nsTypeAheadFindSea::sInstance = nsnull; >+PRInt32 nsTypeAheadFindSea::sAccelKey = -1; // magic value of -1 when unitialized > > >-nsTypeAheadFind::nsTypeAheadFind(): >+nsTypeAheadFindSea::nsTypeAheadFindSea(): > mIsFindAllowedInWindow(PR_FALSE), mAutoStartPref(PR_FALSE), > mLinksOnlyPref(PR_FALSE), mStartLinksOnlyPref(PR_FALSE), > mLinksOnly(PR_FALSE), mIsTypeAheadOn(PR_FALSE), mCaretBrowsingOn(PR_FALSE), >@@ -164,25 +164,25 @@ > static PRInt32 gInstanceCount; > ++gInstanceCount; > NS_ASSERTION(gInstanceCount == 1, >- "There should be only 1 instance of nsTypeAheadFind!"); >+ "There should be only 1 instance of nsTypeAheadFindSea!"); > #endif > } > > >-nsTypeAheadFind::~nsTypeAheadFind() >+nsTypeAheadFindSea::~nsTypeAheadFindSea() > { > RemoveDocListeners(); > mTimer = nsnull; > > nsCOMPtr<nsIPrefBranchInternal> prefInternal(do_GetService(NS_PREFSERVICE_CONTRACTID)); > if (prefInternal) { >- prefInternal->RemoveObserver("accessibility.typeaheadfind", this); >+ prefInternal->RemoveObserver("accessibility.typeaheadfindsea", this); > prefInternal->RemoveObserver("accessibility.browsewithcaret", this); > } > } > > nsresult >-nsTypeAheadFind::Init() >+nsTypeAheadFindSea::Init() > { > nsresult rv = NS_NewISupportsArray(getter_AddRefs(mManualFindWindows)); > NS_ENSURE_SUCCESS(rv, rv); >@@ -199,7 +199,7 @@ > } > > // ----------- Listen to prefs ------------------ >- rv = prefInternal->AddObserver("accessibility.typeaheadfind", this, PR_FALSE); >+ rv = prefInternal->AddObserver("accessibility.typeaheadfindsea", this, PR_FALSE); > NS_ENSURE_SUCCESS(rv, rv); > > rv = prefInternal->AddObserver("accessibility.browsewithcaret", this, PR_FALSE); >@@ -220,11 +220,11 @@ > return rv; > } > >-nsTypeAheadFind * >-nsTypeAheadFind::GetInstance() >+nsTypeAheadFindSea * >+nsTypeAheadFindSea::GetInstance() > { > if (!sInstance) { >- sInstance = new nsTypeAheadFind(); >+ sInstance = new nsTypeAheadFindSea(); > if (!sInstance) > return nsnull; > >@@ -244,14 +244,14 @@ > > > void >-nsTypeAheadFind::ReleaseInstance() >+nsTypeAheadFindSea::ReleaseInstance() > { > NS_IF_RELEASE(sInstance); > } > > > void >-nsTypeAheadFind::Shutdown() >+nsTypeAheadFindSea::Shutdown() > { > // Application shutdown > mTimer = nsnull; >@@ -267,14 +267,14 @@ > // ------- Pref Callbacks (2) --------------- > > nsresult >-nsTypeAheadFind::PrefsReset() >+nsTypeAheadFindSea::PrefsReset() > { > nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID)); > NS_ENSURE_TRUE(prefBranch, NS_ERROR_FAILURE); > > PRBool wasTypeAheadOn = mIsTypeAheadOn; > >- prefBranch->GetBoolPref("accessibility.typeaheadfind", &mIsTypeAheadOn); >+ prefBranch->GetBoolPref("accessibility.typeaheadfindsea", &mIsTypeAheadOn); > > if (mIsTypeAheadOn != wasTypeAheadOn) { > if (!mIsTypeAheadOn) { >@@ -294,7 +294,7 @@ > do_GetService(kStringBundleServiceCID); > > if (stringBundleService) >- stringBundleService->CreateBundle(TYPEAHEADFIND_BUNDLE_URL, >+ stringBundleService->CreateBundle(TYPEAHEADFINDSEA_BUNDLE_URL, > getter_AddRefs(mStringBundle)); > > // Observe find again commands. We'll handle them if we were the last find >@@ -309,34 +309,34 @@ > } > > PRBool oldAutoStartPref = mAutoStartPref; >- prefBranch->GetBoolPref("accessibility.typeaheadfind.autostart", >+ prefBranch->GetBoolPref("accessibility.typeaheadfindsea.autostart", > &mAutoStartPref); > if (mAutoStartPref != oldAutoStartPref) { > ResetGlobalAutoStart(mAutoStartPref); > } > >- prefBranch->GetBoolPref("accessibility.typeaheadfind.linksonly", >+ prefBranch->GetBoolPref("accessibility.typeaheadfindsea.linksonly", > &mLinksOnlyPref); > >- prefBranch->GetBoolPref("accessibility.typeaheadfind.startlinksonly", >+ prefBranch->GetBoolPref("accessibility.typeaheadfindsea.startlinksonly", > &mStartLinksOnlyPref); > > PRBool isSoundEnabled = PR_TRUE; >- prefBranch->GetBoolPref("accessibility.typeaheadfind.enablesound", >+ prefBranch->GetBoolPref("accessibility.typeaheadfindsea.enablesound", > &isSoundEnabled); > nsXPIDLCString soundStr; > if (isSoundEnabled) { >- prefBranch->GetCharPref("accessibility.typeaheadfind.soundURL", >+ prefBranch->GetCharPref("accessibility.typeaheadfindsea.soundURL", > getter_Copies(soundStr)); > } > mNotFoundSoundURL = soundStr; > > PRBool isTimeoutEnabled; >- prefBranch->GetBoolPref("accessibility.typeaheadfind.enabletimeout", >+ prefBranch->GetBoolPref("accessibility.typeaheadfindsea.enabletimeout", > &isTimeoutEnabled); > PRInt32 timeoutLength = 0; > if (isTimeoutEnabled) { >- prefBranch->GetIntPref("accessibility.typeaheadfind.timeout", >+ prefBranch->GetIntPref("accessibility.typeaheadfindsea.timeout", > &timeoutLength); > } > mTimeoutLength = timeoutLength; >@@ -352,7 +352,7 @@ > // ------- nsITimer Methods (1) --------------- > > NS_IMETHODIMP >-nsTypeAheadFind::Notify(nsITimer *timer) >+nsTypeAheadFindSea::Notify(nsITimer *timer) > { > CancelFind(); > return NS_OK; >@@ -361,7 +361,7 @@ > // ----------- nsIObserver Methods (1) ------------------- > > NS_IMETHODIMP >-nsTypeAheadFind::Observe(nsISupports *aSubject, const char *aTopic, >+nsTypeAheadFindSea::Observe(nsISupports *aSubject, const char *aTopic, > const PRUnichar *aData) > { > PRBool isOpening; >@@ -475,7 +475,7 @@ > > > nsresult >-nsTypeAheadFind::UseInWindow(nsIDOMWindow *aDOMWin) >+nsTypeAheadFindSea::UseInWindow(nsIDOMWindow *aDOMWin) > { > NS_ENSURE_ARG_POINTER(aDOMWin); > >@@ -528,7 +528,7 @@ > // ------- nsIDOMEventListener Methods (1) --------------- > > NS_IMETHODIMP >-nsTypeAheadFind::HandleEvent(nsIDOMEvent* aEvent) >+nsTypeAheadFindSea::HandleEvent(nsIDOMEvent* aEvent) > { > nsAutoString eventType; > aEvent->GetType(eventType); >@@ -588,21 +588,21 @@ > // ------- nsIDOMKeyListener Methods (3) --------------- > > NS_IMETHODIMP >-nsTypeAheadFind::KeyDown(nsIDOMEvent* aEvent) >+nsTypeAheadFindSea::KeyDown(nsIDOMEvent* aEvent) > { > return NS_OK; > } > > > NS_IMETHODIMP >-nsTypeAheadFind::KeyUp(nsIDOMEvent* aEvent) >+nsTypeAheadFindSea::KeyUp(nsIDOMEvent* aEvent) > { > return NS_OK; > } > > > NS_IMETHODIMP >-nsTypeAheadFind::KeyPress(nsIDOMEvent* aEvent) >+nsTypeAheadFindSea::KeyPress(nsIDOMEvent* aEvent) > { > if (!mIsTypeAheadOn || mIsMenuBarActive || mIsMenuPopupActive) { > return NS_OK; >@@ -725,14 +725,15 @@ > return NS_OK; > } > >- aEvent->StopPropagation(); // We're using this key, no one else should >+ // We're using this key, no one else should >+ aEvent->PreventDefault(); > > return HandleChar(charCode); > } > > > NS_IMETHODIMP >-nsTypeAheadFind::BackOneChar(PRBool *aIsBackspaceUsed) >+nsTypeAheadFindSea::BackOneChar(PRBool *aIsBackspaceUsed) > { > if (!mFocusedDocSelection) { > *aIsBackspaceUsed = PR_FALSE; >@@ -862,7 +863,7 @@ > > > nsresult >-nsTypeAheadFind::HandleChar(PRUnichar aChar) >+nsTypeAheadFindSea::HandleChar(PRUnichar aChar) > { > // Add a printable char to mTypeAheadBuffer, then search for buffer contents > >@@ -1027,7 +1028,7 @@ > > > void >-nsTypeAheadFind::SaveFind() >+nsTypeAheadFindSea::SaveFind() > { > // Store find string for find-next > mFindNextBuffer = mTypeAheadBuffer; >@@ -1055,7 +1056,7 @@ > > > void >-nsTypeAheadFind::PlayNotFoundSound() >+nsTypeAheadFindSea::PlayNotFoundSound() > { > if (mNotFoundSoundURL.IsEmpty()) // no sound > return; >@@ -1085,7 +1086,7 @@ > > > NS_IMETHODIMP >-nsTypeAheadFind::HandleText(nsIDOMEvent* aTextEvent) >+nsTypeAheadFindSea::HandleText(nsIDOMEvent* aTextEvent) > { > // This is called multiple times in the middle of an > // IME composition >@@ -1133,7 +1134,7 @@ > > > NS_IMETHODIMP >-nsTypeAheadFind::HandleStartComposition(nsIDOMEvent* aCompositionEvent) >+nsTypeAheadFindSea::HandleStartComposition(nsIDOMEvent* aCompositionEvent) > { > // This is called once at the start of an IME composition > >@@ -1155,7 +1156,7 @@ > > > NS_IMETHODIMP >-nsTypeAheadFind::HandleEndComposition(nsIDOMEvent* aCompositionEvent) >+nsTypeAheadFindSea::HandleEndComposition(nsIDOMEvent* aCompositionEvent) > { > // This is called once at the end of an IME composition > >@@ -1186,21 +1187,21 @@ > > > NS_IMETHODIMP >-nsTypeAheadFind::HandleQueryComposition(nsIDOMEvent* aCompositionEvent) >+nsTypeAheadFindSea::HandleQueryComposition(nsIDOMEvent* aCompositionEvent) > { > return NS_OK; > } > > > NS_IMETHODIMP >-nsTypeAheadFind::HandleQueryReconversion(nsIDOMEvent* aCompositionEvent) >+nsTypeAheadFindSea::HandleQueryReconversion(nsIDOMEvent* aCompositionEvent) > { > return NS_OK; > } > > > nsresult >-nsTypeAheadFind::FindItNow(nsIPresShell *aPresShell, >+nsTypeAheadFindSea::FindItNow(nsIPresShell *aPresShell, > PRBool aIsRepeatingSameChar, PRBool aIsLinksOnly, > PRBool aIsFirstVisiblePreferred) > { >@@ -1225,7 +1226,7 @@ > > nsCOMPtr<nsISupports> startingContainer = presContext->GetContainer(); > nsCOMPtr<nsIDocShellTreeItem> treeItem(do_QueryInterface(startingContainer)); >- NS_ASSERTION(treeItem, "Bug 175321 Crashes with Type Ahead Find [@ nsTypeAheadFind::FindItNow]"); >+ NS_ASSERTION(treeItem, "Bug 175321 Crashes with Type Ahead Find [@ nsTypeAheadFindSea::FindItNow]"); > if (!treeItem) { > return NS_ERROR_FAILURE; > } >@@ -1450,7 +1451,7 @@ > > > nsresult >-nsTypeAheadFind::GetSearchContainers(nsISupports *aContainer, >+nsTypeAheadFindSea::GetSearchContainers(nsISupports *aContainer, > PRBool aIsRepeatingSameChar, > PRBool aIsFirstVisiblePreferred, > PRBool aCanUseDocSelection, >@@ -1561,7 +1562,7 @@ > > > void >-nsTypeAheadFind::RangeStartsInsideLink(nsIDOMRange *aRange, >+nsTypeAheadFindSea::RangeStartsInsideLink(nsIDOMRange *aRange, > nsIPresShell *aPresShell, > PRBool *aIsInsideLink, > PRBool *aIsStartingLink) >@@ -1673,7 +1674,7 @@ > > > NS_IMETHODIMP >-nsTypeAheadFind::ScrollPositionWillChange(nsIScrollableView *aView, >+nsTypeAheadFindSea::ScrollPositionWillChange(nsIScrollableView *aView, > nscoord aX, nscoord aY) > { > return NS_OK; >@@ -1681,7 +1682,7 @@ > > > NS_IMETHODIMP >-nsTypeAheadFind::ScrollPositionDidChange(nsIScrollableView *aScrollableView, >+nsTypeAheadFindSea::ScrollPositionDidChange(nsIScrollableView *aScrollableView, > nscoord aX, nscoord aY) > { > if (!mIsFindingText) >@@ -1692,7 +1693,7 @@ > > > NS_IMETHODIMP >-nsTypeAheadFind::NotifySelectionChanged(nsIDOMDocument *aDoc, >+nsTypeAheadFindSea::NotifySelectionChanged(nsIDOMDocument *aDoc, > nsISelection *aSel, short aReason) > { > if (!mIsFindingText) { >@@ -1709,10 +1710,10 @@ > } > > >-// ---------------- nsITypeAheadFind -------------------- >+// ---------------- nsITypeAheadFindSea -------------------- > > NS_IMETHODIMP >-nsTypeAheadFind::FindNext(PRBool aFindBackwards, nsISupportsInterfacePointer *aCallerWindowSupports) >+nsTypeAheadFindSea::FindNext(PRBool aFindBackwards, nsISupportsInterfacePointer *aCallerWindowSupports) > { > NS_ENSURE_TRUE(aCallerWindowSupports, NS_ERROR_FAILURE); > >@@ -1826,7 +1827,7 @@ > > > NS_IMETHODIMP >-nsTypeAheadFind::GetIsActive(PRBool *aIsActive) >+nsTypeAheadFindSea::GetIsActive(PRBool *aIsActive) > { > *aIsActive = mLinksOnlyManuallySet || !mTypeAheadBuffer.IsEmpty(); > >@@ -1839,7 +1840,7 @@ > */ > > NS_IMETHODIMP >-nsTypeAheadFind::StartNewFind(nsIDOMWindow *aWindow, PRBool aLinksOnly) >+nsTypeAheadFindSea::StartNewFind(nsIDOMWindow *aWindow, PRBool aLinksOnly) > { > if (!mFind || !mIsTypeAheadOn || !aWindow) > return NS_ERROR_FAILURE; // Type Ahead Find not correctly initialized >@@ -1872,7 +1873,7 @@ > } > > void >-nsTypeAheadFind::ResetGlobalAutoStart(PRBool aAutoStart) >+nsTypeAheadFindSea::ResetGlobalAutoStart(PRBool aAutoStart) > { > // Enumerate through the current top level windows > // and either attach or remove window listeners >@@ -1910,7 +1911,7 @@ > > > NS_IMETHODIMP >-nsTypeAheadFind::SetAutoStart(nsIDOMWindow *aDOMWin, PRBool aAutoStartOn) >+nsTypeAheadFindSea::SetAutoStart(nsIDOMWindow *aDOMWin, PRBool aAutoStartOn) > { > if (!aDOMWin) { > return NS_ERROR_FAILURE; >@@ -1940,7 +1941,7 @@ > > > NS_IMETHODIMP >-nsTypeAheadFind::GetAutoStart(nsIDOMWindow *aDOMWin, PRBool *aIsAutoStartOn) >+nsTypeAheadFindSea::GetAutoStart(nsIDOMWindow *aDOMWin, PRBool *aIsAutoStartOn) > { > *aIsAutoStartOn = PR_FALSE; > >@@ -2008,7 +2009,7 @@ > > > NS_IMETHODIMP >-nsTypeAheadFind::CancelFind() >+nsTypeAheadFindSea::CancelFind() > { > // Stop current find if: > // 1. Escape pressed >@@ -2065,7 +2066,7 @@ > // ------- Helper Methods --------------- > > void >-nsTypeAheadFind::GetTopContentPresShell(nsIDocShellTreeItem *aDocShellTreeItem, >+nsTypeAheadFindSea::GetTopContentPresShell(nsIDocShellTreeItem *aDocShellTreeItem, > nsIPresShell **aPresShell) > { > *aPresShell = nsnull; >@@ -2081,7 +2082,7 @@ > } > > void >-nsTypeAheadFind::GetStartWindow(nsIDOMWindow *aWindow, nsIDOMWindow **aStartWindow) >+nsTypeAheadFindSea::GetStartWindow(nsIDOMWindow *aWindow, nsIDOMWindow **aStartWindow) > { > // Return the root ancestor content window of aWindow > >@@ -2113,7 +2114,7 @@ > } > > nsresult >-nsTypeAheadFind::GetWebBrowserFind(nsIDOMWindow *aWin, >+nsTypeAheadFindSea::GetWebBrowserFind(nsIDOMWindow *aWin, > nsIWebBrowserFind **aWebBrowserFind) > { > NS_ENSURE_ARG_POINTER(aWin); >@@ -2138,7 +2139,7 @@ > > > void >-nsTypeAheadFind::StartTimeout() >+nsTypeAheadFindSea::StartTimeout() > { > if (mTimeoutLength) { > if (!mTimer) { >@@ -2154,7 +2155,7 @@ > } > > void >-nsTypeAheadFind::SetSelectionLook(nsIPresShell *aPresShell, >+nsTypeAheadFindSea::SetSelectionLook(nsIPresShell *aPresShell, > PRBool aChangeColor, > PRBool aEnabled) > { >@@ -2210,7 +2211,7 @@ > > > void >-nsTypeAheadFind::RemoveDocListeners() >+nsTypeAheadFindSea::RemoveDocListeners() > { > nsCOMPtr<nsIPresShell> presShell(do_QueryReferent(mFocusedWeakShell)); > nsIViewManager* vm = nsnull; >@@ -2244,7 +2245,7 @@ > > > void >-nsTypeAheadFind::AttachDocListeners(nsIPresShell *aPresShell) >+nsTypeAheadFindSea::AttachDocListeners(nsIPresShell *aPresShell) > { > if (!aPresShell) { > return; >@@ -2274,7 +2275,7 @@ > > > void >-nsTypeAheadFind::RemoveWindowListeners(nsIDOMWindow *aDOMWin) >+nsTypeAheadFindSea::RemoveWindowListeners(nsIDOMWindow *aDOMWin) > { > nsCOMPtr<nsIDOMEventTarget> chromeEventHandler; > GetChromeEventHandler(aDOMWin, getter_AddRefs(chromeEventHandler)); >@@ -2331,7 +2332,7 @@ > > > void >-nsTypeAheadFind::AttachWindowListeners(nsIDOMWindow *aDOMWin) >+nsTypeAheadFindSea::AttachWindowListeners(nsIDOMWindow *aDOMWin) > { > nsCOMPtr<nsIDOMEventTarget> chromeEventHandler; > GetChromeEventHandler(aDOMWin, getter_AddRefs(chromeEventHandler)); >@@ -2384,7 +2385,7 @@ > > > void >-nsTypeAheadFind::GetChromeEventHandler(nsIDOMWindow *aDOMWin, >+nsTypeAheadFindSea::GetChromeEventHandler(nsIDOMWindow *aDOMWin, > nsIDOMEventTarget **aChromeTarget) > { > nsCOMPtr<nsPIDOMWindow> privateDOMWindow(do_QueryInterface(aDOMWin)); >@@ -2400,7 +2401,7 @@ > } > > PRBool >-nsTypeAheadFind::IsTargetContentOkay(nsIContent *aContent) >+nsTypeAheadFindSea::IsTargetContentOkay(nsIContent *aContent) > { > if (!aContent) { > return PR_FALSE; >@@ -2438,7 +2439,7 @@ > > > nsresult >-nsTypeAheadFind::GetTargetIfTypeAheadOkay(nsIDOMEvent *aEvent, >+nsTypeAheadFindSea::GetTargetIfTypeAheadOkay(nsIDOMEvent *aEvent, > nsIContent **aTargetContent, > nsIPresShell **aTargetPresShell) > { >@@ -2524,7 +2525,7 @@ > > > void >-nsTypeAheadFind::GetSelection(nsIPresShell *aPresShell, >+nsTypeAheadFindSea::GetSelection(nsIPresShell *aPresShell, > nsISelectionController **aSelCon, > nsISelection **aDOMSel) > { >@@ -2548,7 +2549,7 @@ > > > PRBool >-nsTypeAheadFind::IsRangeVisible(nsIPresShell *aPresShell, >+nsTypeAheadFindSea::IsRangeVisible(nsIPresShell *aPresShell, > nsIPresContext *aPresContext, > nsIDOMRange *aRange, PRBool aMustBeInViewPort, > PRBool aGetTopVisibleLeaf, >@@ -2703,7 +2704,7 @@ > > > nsresult >-nsTypeAheadFind::GetTranslatedString(const nsAString& aKey, >+nsTypeAheadFindSea::GetTranslatedString(const nsAString& aKey, > nsAString& aStringOut) > { > nsXPIDLString xsValue; >@@ -2721,7 +2722,7 @@ > > > void >-nsTypeAheadFind::DisplayStatus(PRBool aSuccess, nsIContent *aFocusedContent, >+nsTypeAheadFindSea::DisplayStatus(PRBool aSuccess, nsIContent *aFocusedContent, > PRBool aClearStatus, const PRUnichar *aText) > { > // pres shell -> pres context -> container -> tree item -> >@@ -2869,7 +2870,7 @@ > // Make sure we're not focused on a text field, listbox > // or other form control that needs typeahead keystrokes > if (focusedContent) { >- *aResult = nsTypeAheadFind::IsTargetContentOkay(focusedContent); >+ *aResult = nsTypeAheadFindSea::IsTargetContentOkay(focusedContent); > return NS_OK; > } > >@@ -2934,8 +2935,8 @@ > EnsureContentWindow(domWinInternal, getter_AddRefs(startContentWin)); > NS_ENSURE_TRUE(startContentWin, NS_ERROR_FAILURE); > >- nsCOMPtr<nsITypeAheadFind> typeAhead = >- do_GetService(NS_TYPEAHEADFIND_CONTRACTID); >+ nsCOMPtr<nsITypeAheadFindSea> typeAhead = >+ do_GetService(NS_TYPEAHEADFINDSEA_CONTRACTID); > NS_ENSURE_TRUE(typeAhead, NS_ERROR_FAILURE); > > return typeAhead->StartNewFind(startContentWin, isLinkSearch); >--- extensions/typeaheadfind/src/nsTypeAheadFind.h >+++ extensions/typeaheadfind/src/nsTypeAheadFind.h >@@ -62,13 +62,13 @@ > #include "nsIDOMRange.h" > #include "nsIDOMWindow.h" > #include "nsIDocShellTreeItem.h" >-#include "nsITypeAheadFind.h" >+#include "nsITypeAheadFindSea.h" > #include "nsIStringBundle.h" > #include "nsISupportsArray.h" > #include "nsISound.h" > >-#define TYPEAHEADFIND_BUNDLE_URL \ >- "chrome://global/locale/typeaheadfind.properties" >+#define TYPEAHEADFINDSEA_BUNDLE_URL \ >+ "chrome://global/locale/typeaheadfindsea.properties" > #define TYPEAHEADFIND_NOTFOUND_WAV_URL \ > "chrome://global/content/notfound.wav" > >@@ -82,7 +82,7 @@ > > const int kMaxBadCharsBeforeCancel = 3; > >-class nsTypeAheadFind : public nsITypeAheadFind, >+class nsTypeAheadFindSea : public nsITypeAheadFindSea, > public nsIDOMKeyListener, > public nsIDOMTextListener, > public nsIDOMCompositionListener, >@@ -93,13 +93,13 @@ > public nsSupportsWeakReference > { > public: >- nsTypeAheadFind(); >- virtual ~nsTypeAheadFind(); >+ nsTypeAheadFindSea(); >+ virtual ~nsTypeAheadFindSea(); > >- NS_DEFINE_STATIC_CID_ACCESSOR(NS_TYPEAHEADFIND_CID); >+ NS_DEFINE_STATIC_CID_ACCESSOR(NS_TYPEAHEADFINDSEA_CID); > > NS_DECL_ISUPPORTS >- NS_DECL_NSITYPEAHEADFIND >+ NS_DECL_NSITYPEAHEADFINDSEA > NS_DECL_NSIOBSERVER > NS_DECL_NSIDOMEVENTLISTENER > NS_DECL_NSISELECTIONLISTENER >@@ -127,7 +127,7 @@ > // ----- nsITimerCallback ----------------------------- > NS_DECL_NSITIMERCALLBACK > >- static nsTypeAheadFind *GetInstance(); >+ static nsTypeAheadFindSea *GetInstance(); > static void ReleaseInstance(void); > static PRBool IsTargetContentOkay(nsIContent *aContent); > >@@ -185,7 +185,7 @@ > nsresult GetTranslatedString(const nsAString& aKey, nsAString& aStringOut); > > // Used by GetInstance and ReleaseInstance >- static nsTypeAheadFind *sInstance; >+ static nsTypeAheadFindSea *sInstance; > > // Current find state > nsString mTypeAheadBuffer; >--- extensions/typeaheadfind/src/nsTypeAheadFindRegistration.cpp >+++ extensions/typeaheadfind/src/nsTypeAheadFindRegistration.cpp >@@ -55,7 +55,7 @@ > > // This function is called at component registration time > static NS_METHOD >-nsTypeAheadFindRegistrationProc(nsIComponentManager *aCompMgr, nsIFile *aPath, >+nsTypeAheadFindSeaRegistrationProc(nsIComponentManager *aCompMgr, nsIFile *aPath, > const char *registryLocation, > const char *componentType, > const nsModuleComponentInfo *info) >@@ -72,9 +72,9 @@ > > if (NS_SUCCEEDED(rv)) { > rv = categoryManager->AddCategoryEntry(APPSTARTUP_CATEGORY, >- "Type Ahead Find", >+ "Type Ahead Find Sea", > "service," >- NS_TYPEAHEADFIND_CONTRACTID, >+ NS_TYPEAHEADFINDSEA_CONTRACTID, > PR_TRUE, PR_TRUE, nsnull); > } > >@@ -82,22 +82,22 @@ > } > > >-NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsTypeAheadFind, >- nsTypeAheadFind::GetInstance) >+NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsTypeAheadFindSea, >+ nsTypeAheadFindSea::GetInstance) > > static void PR_CALLBACK >-TypeAheadFindModuleDtor(nsIModule* self) >+TypeAheadFindSeaModuleDtor(nsIModule* self) > { >- nsTypeAheadFind::ReleaseInstance(); >+ nsTypeAheadFindSea::ReleaseInstance(); > } > > static const nsModuleComponentInfo components[] = > { >- { "TypeAheadFind Component", NS_TYPEAHEADFIND_CID, >- NS_TYPEAHEADFIND_CONTRACTID, nsTypeAheadFindConstructor, >- nsTypeAheadFindRegistrationProc, nsnull // Unregistration proc >+ { "TypeAheadFindSea Component", NS_TYPEAHEADFINDSEA_CID, >+ NS_TYPEAHEADFINDSEA_CONTRACTID, nsTypeAheadFindSeaConstructor, >+ nsTypeAheadFindSeaRegistrationProc, nsnull // Unregistration proc > } > }; > >-NS_IMPL_NSGETMODULE_WITH_DTOR(nsTypeAheadFind, components, >- TypeAheadFindModuleDtor) >+NS_IMPL_NSGETMODULE_WITH_DTOR(nsTypeAheadFindSea, components, >+ TypeAheadFindSeaModuleDtor) >--- extensions/typeaheadfind/src/typeaheadfindsea.pkg >+++ extensions/typeaheadfind/src/typeaheadfindsea.pkg >@@ -0,0 +1,9 @@ >+# why not ship this with GRE/embedding, if we're building it? >+ >+[xpfe-browser browser] >+#if SHARED_LIBRARY >+dist/bin/components/@SHARED_LIBRARY@ >+#else >+!staticcomp @LIBRARY@ @MODULE_NAME@ >+#endif >+!xpt dist/bin/components/typeaheadfind.xpt >--- extensions/typeaheadfind/Makefile.in >+++ extensions/typeaheadfind/Makefile.in >@@ -31,7 +31,7 @@ > > include $(DEPTH)/config/autoconf.mk > >-MODULE = typeaheadfind >+MODULE = typeaheadfindsea > DIRS = public src resources > > include $(topsrcdir)/config/rules.mk >--- caps/src/nsScriptSecurityManager.cpp >+++ caps/src/nsScriptSecurityManager.cpp >@@ -1233,6 +1233,7 @@ > // to increase performance > { "http", AllowProtocol }, > { "chrome", ChromeProtocol }, >+ { "moz-icon", ChromeProtocol }, > { "file", PrefControlled }, > { "https", AllowProtocol }, > { "mailbox", DenyProtocol }, >@@ -1366,9 +1367,13 @@ > } > > NS_IMETHODIMP >-nsScriptSecurityManager::CheckLoadURIStr(const char* aSourceURIStr, const char* aTargetURIStr, >+nsScriptSecurityManager::CheckLoadURIStr(const char* aSourceURIStr, >+ const char* aTargetURIStr, > PRUint32 aFlags) > { >+ NS_ENSURE_ARG_POINTER(aSourceURIStr); >+ NS_ENSURE_ARG_POINTER(aTargetURIStr); >+ > nsCOMPtr<nsIURI> source; > nsresult rv = NS_NewURI(getter_AddRefs(source), > nsDependentCString(aSourceURIStr), >--- config/mkdepend/imakemdep.h >+++ config/mkdepend/imakemdep.h >@@ -277,6 +277,9 @@ > # ifdef __i386__ > "-D__i386__", > # endif >+# ifdef __x86_64__ >+ "-D__x86_64__", >+# endif > # ifdef __GNUC__ > "-traditional", > # endif >--- config/autoconf.mk.in >+++ config/autoconf.mk.in >@@ -32,13 +32,13 @@ > prefix = @prefix@ > exec_prefix = @exec_prefix@ > bindir = @bindir@ >-includedir = @includedir@/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) >+includedir = @includedir@/mozilla-firefox > libdir = @libdir@ > datadir = @datadir@ > mandir = @mandir@ >-idldir = @datadir@/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) >+idldir = @datadir@/idl/mozilla-firefox > >-mozappdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) >+mozappdir = $(libdir)/mozilla-firefox > mredir = $(libdir)/mre/mre-$(MOZ_APP_VERSION) > mrelibdir = $(mredir)/lib > >@@ -165,8 +165,14 @@ > endif > endif > MOZ_LIBART_LIBS = @MOZ_LIBART_LIBS@ >+ > MOZ_CAIRO_LIBS = @MOZ_CAIRO_LIBS@ > >+MOZ_ENABLE_GNOMEUI = @MOZ_ENABLE_GNOMEUI@ >+MOZ_GNOMEUI_CFLAGS = @MOZ_GNOMEUI_CFLAGS@ >+MOZ_GNOMEUI_LIBS = @MOZ_GNOMEUI_LIBS@ >+ >+ > MOZ_GNOMEVFS_CFLAGS = @MOZ_GNOMEVFS_CFLAGS@ > MOZ_GNOMEVFS_LIBS = @MOZ_GNOMEVFS_LIBS@ > >@@ -388,6 +394,10 @@ > MOZ_XFT_LIBS = @MOZ_XFT_LIBS@ > MOZ_ENABLE_COREXFONTS = @MOZ_ENABLE_COREXFONTS@ > >+MOZ_ENABLE_PANGO = @MOZ_ENABLE_PANGO@ >+MOZ_PANGO_CFLAGS = @MOZ_PANGO_CFLAGS@ >+MOZ_PANGO_LIBS = @MOZ_PANGO_LIBS@ >+ > MOZ_EXTRA_X11CONVERTERS = @MOZ_EXTRA_X11CONVERTERS@ > > MOZ_ENABLE_XINERAMA = @MOZ_ENABLE_XINERAMA@ >--- config/rules.mk >+++ config/rules.mk >@@ -455,7 +455,7 @@ > > ifeq ($(OS_ARCH),Linux) > ifneq (,$(filter mips mipsel,$(OS_TEST))) >-ifeq ($(MODULE),layout) >+ifneq (,$(filter layout content xul xuldoc xultmpl svg_doc view dom jsurl,$(MODULE))) > OS_CFLAGS += -Wa,-xgot > OS_CXXFLAGS += -Wa,-xgot > endif >--- embedding/browser/gtk/src/EmbedWindow.cpp >+++ embedding/browser/gtk/src/EmbedWindow.cpp >@@ -366,6 +366,19 @@ > > // nsITooltipListener > >+static gint >+tooltips_paint_window(GtkWidget *window) >+{ >+ // draw tooltip style border around the text >+ gtk_paint_flat_box(window->style, window->window, >+ GTK_STATE_NORMAL, GTK_SHADOW_OUT, >+ NULL, window, "tooltip", >+ 0, 0, >+ window->allocation.width, window->allocation.height); >+ >+ return FALSE; >+} >+ > NS_IMETHODIMP > EmbedWindow::OnShowTooltip(PRInt32 aXCoords, PRInt32 aYCoords, > const PRUnichar *aTipText) >@@ -416,12 +429,15 @@ > // realize the widget > gtk_widget_realize(sTipWindow); > >+ gtk_signal_connect(GTK_OBJECT(sTipWindow), "expose_event", >+ GTK_SIGNAL_FUNC(tooltips_paint_window), NULL); >+ > // set up the label for the tooltip > GtkWidget *label = gtk_label_new(tipString); > // wrap automatically > gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); > gtk_container_add(GTK_CONTAINER(sTipWindow), label); >- gtk_container_set_border_width(GTK_CONTAINER(sTipWindow), 3); >+ gtk_container_set_border_width(GTK_CONTAINER(sTipWindow), 4); > // set the coords for the widget > gtk_widget_set_uposition(sTipWindow, aXCoords + root_x, > aYCoords + root_y); >@@ -429,13 +445,6 @@ > // and show it. > gtk_widget_show_all(sTipWindow); > >- // draw tooltip style border around the text >- gtk_paint_flat_box(sTipWindow->style, sTipWindow->window, >- GTK_STATE_NORMAL, GTK_SHADOW_OUT, >- NULL, GTK_WIDGET(sTipWindow), "tooltip", >- 0, 0, >- sTipWindow->allocation.width, sTipWindow->allocation.height); >- > #ifdef MOZ_WIDGET_GTK > gtk_widget_popup(sTipWindow, aXCoords + root_x, aYCoords + root_y); > #endif /* MOZ_WIDGET_GTK */ >--- embedding/browser/gtk/src/GtkPromptService.cpp >+++ embedding/browser/gtk/src/GtkPromptService.cpp >@@ -75,6 +75,8 @@ > const PRUnichar* aDialogText, > const PRUnichar* aCheckMsg, PRBool* aCheckValue) > { >+ NS_ENSURE_ARG_POINTER(aCheckValue); >+ > EmbedPrompter prompter; > prompter.SetTitle(aDialogTitle ? aDialogTitle : NS_LITERAL_STRING("Alert").get()); > prompter.SetMessageText(aDialogText); >@@ -109,6 +111,8 @@ > const PRUnichar* aCheckMsg, > PRBool* aCheckValue, PRBool* aConfirm) > { >+ NS_ENSURE_ARG_POINTER(aCheckValue); >+ > EmbedPrompter prompter; > prompter.SetTitle(aDialogTitle ? aDialogTitle : NS_LITERAL_STRING("Confirm").get()); > prompter.SetMessageText(aDialogText); >@@ -171,10 +175,11 @@ > prompter.SetTitle(aDialogTitle ? aDialogTitle : NS_LITERAL_STRING("Prompt").get()); > prompter.SetMessageText(aDialogText); > prompter.SetTextValue(*aValue); >- if (aCheckMsg) { >+ if (aCheckMsg) > prompter.SetCheckMessage(aCheckMsg); >+ if (aCheckValue) > prompter.SetCheckValue(*aCheckValue); >- } >+ > prompter.Create(EmbedPrompter::TYPE_PROMPT, > GetGtkWindowForDOMWindow(aParent)); > prompter.Run(); >@@ -204,10 +209,11 @@ > prompter.SetMessageText(aDialogText); > prompter.SetUser(*aUsername); > prompter.SetPassword(*aPassword); >- if (aCheckMsg) { >+ if (aCheckMsg) > prompter.SetCheckMessage(aCheckMsg); >+ if (aCheckValue) > prompter.SetCheckValue(*aCheckValue); >- } >+ > prompter.Create(EmbedPrompter::TYPE_PROMPT_USER_PASS, > GetGtkWindowForDOMWindow(aParent)); > prompter.Run(); >@@ -238,10 +244,11 @@ > prompter.SetTitle(aDialogTitle ? aDialogTitle : NS_LITERAL_STRING("Prompt").get()); > prompter.SetMessageText(aDialogText); > prompter.SetPassword(*aPassword); >- if (aCheckMsg) { >+ if (aCheckMsg) > prompter.SetCheckMessage(aCheckMsg); >+ if (aCheckValue) > prompter.SetCheckValue(*aCheckValue); >- } >+ > prompter.Create(EmbedPrompter::TYPE_PROMPT_PASS, > GetGtkWindowForDOMWindow(aParent)); > prompter.Run(); >--- js/src/jsstr.c >+++ js/src/jsstr.c >@@ -1378,11 +1378,17 @@ > JSBool ok; > > /* >- * Save the rightContext from the current regexp, since it >- * gets stuck at the end of the replacement string and may >- * be clobbered by a RegExp usage in the lambda function. >+ * Save the regExpStatics from the current regexp, since they may be >+ * clobbered by a RegExp usage in the lambda function. Note that all >+ * members of JSRegExpStatics are JSSubStrings, so not GC roots, save >+ * input, which is rooted otherwise via argv[-1] in str_replace. >+ * >+ * We need to clear moreParens in the top-of-stack cx->regExpStatics >+ * to it won't be possibly realloc'ed, leaving the bottom-of-stack >+ * moreParens pointing to freed memory. > */ >- JSSubString saveRightContext = cx->regExpStatics.rightContext; >+ JSRegExpStatics save = cx->regExpStatics; >+ cx->regExpStatics.moreParens = NULL; > > /* > * In the lambda case, not only do we find the replacement string's >@@ -1460,7 +1466,9 @@ > > lambda_out: > js_FreeStack(cx, mark); >- cx->regExpStatics.rightContext = saveRightContext; >+ if (cx->regExpStatics.moreParens) >+ JS_free(cx, cx->regExpStatics.moreParens); >+ cx->regExpStatics = save; > return ok; > } > #endif /* JS_HAS_REPLACE_LAMBDA */ >--- netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp >+++ netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp >@@ -1051,22 +1051,25 @@ > mResponseMsg = ""; > > if (mAnonymous) { >- char* anonPassword = nsnull; >- PRBool useRealEmail = PR_FALSE; >- nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID); >- if (prefs) { >- rv = prefs->GetBoolPref("advanced.mailftp", &useRealEmail); >- if (NS_SUCCEEDED(rv) && useRealEmail) >- prefs->GetCharPref("network.ftp.anonymous_password", &anonPassword); >- } >- if (useRealEmail && anonPassword && *anonPassword != '\0') { >- passwordStr.Append(anonPassword); >- nsMemory::Free(anonPassword); >- } >- else { >- // We need to default to a valid email address - bug 101027 >- // example.com is reserved (rfc2606), so use that >- passwordStr.Append("mozilla@example.com"); >+ if (!mPassword.IsEmpty()) { >+ // XXX Is UTF-8 the best choice? >+ AppendUTF16toUTF8(mPassword, passwordStr); >+ } else { >+ nsXPIDLCString anonPassword; >+ PRBool useRealEmail = PR_FALSE; >+ nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID); >+ if (prefs) { >+ rv = prefs->GetBoolPref("advanced.mailftp", &useRealEmail); >+ if (NS_SUCCEEDED(rv) && useRealEmail) >+ prefs->GetCharPref("network.ftp.anonymous_password", getter_Copies(anonPassword)); >+ } >+ if (!anonPassword.IsEmpty()) { >+ passwordStr.Append(anonPassword); >+ } else { >+ // We need to default to a valid email address - bug 101027 >+ // example.com is reserved (rfc2606), so use that >+ passwordStr.Append("mozilla@example.com"); >+ } > } > } else { > if (mPassword.IsEmpty() || mRetryPass) { >@@ -1146,6 +1149,12 @@ > } > } > >+ // If the login was anonymous, and it failed, try again with a username >+ if (mAnonymous) { >+ mAnonymous = PR_FALSE; >+ return FTP_S_USER; >+ } >+ > mRetryPass = PR_TRUE; > return FTP_ERROR; > } >--- netwerk/protocol/http/src/nsHttpHandler.cpp >+++ netwerk/protocol/http/src/nsHttpHandler.cpp >@@ -669,8 +669,22 @@ > if (ret >= 0) { > nsCString buf; > buf = (char*)name.sysname; >- buf += ' '; >- buf += (char*)name.machine; >+ >+ if (strcmp(name.machine, "x86_64") == 0 && >+ sizeof(long) == sizeof(PRInt32)) { >+ // We're running 32-bit code on x86_64. Make this browser >+ // look like it's running on i686 hardware, but append " >+ // (x86_64)" to the end of the oscpu identifier to be able >+ // to differentiate this from someone running 64-bit code >+ // on x86_64.. >+ >+ buf += " i686 (x86_64)"; >+ } else { >+ buf += ' '; >+ >+ buf += (char*)name.machine; >+ } >+ > mOscpu.Assign(buf); > } > #endif >--- netwerk/necko-config.h >+++ netwerk/necko-config.h >@@ -0,0 +1,58 @@ >+/* netwerk/necko-config.h. Generated automatically by configure. */ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: NPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Netscape Public License >+ * Version 1.1 (the "License"); you may not use this file except in >+ * compliance with the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/NPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is mozilla.org code. >+ * >+ * The Initial Developer of the Original Code is >+ * Netscape Communications Corporation. >+ * Portions created by the Initial Developer are Copyright (C) 2003 >+ * the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the NPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the NPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+#ifndef _NECKO_CONFIG_H_ >+#define _NECKO_CONFIG_H_ >+ >+#define NECKO_DISK_CACHE 1 >+ >+/* #undef NECKO_SMALL_BUFFERS */ >+ >+#define NECKO_COOKIES 1 >+ >+#define NECKO_PROTOCOL_about 1 >+#define NECKO_PROTOCOL_data 1 >+#define NECKO_PROTOCOL_file 1 >+#define NECKO_PROTOCOL_ftp 1 >+#define NECKO_PROTOCOL_gopher 1 >+#define NECKO_PROTOCOL_http 1 >+#define NECKO_PROTOCOL_jar 1 >+#define NECKO_PROTOCOL_keyword 1 >+#define NECKO_PROTOCOL_res 1 >+#define NECKO_PROTOCOL_viewsource 1 >+ >+#endif >--- profile/dirserviceprovider/public/nsProfileDirServiceProvider.h >+++ profile/dirserviceprovider/public/nsProfileDirServiceProvider.h >@@ -107,6 +107,7 @@ > static nsIAtom* sApp_PreferencesFile50; > static nsIAtom* sApp_UserProfileDirectory50; > static nsIAtom* sApp_UserChromeDirectory; >+ static nsIAtom* sApp_UserSearchDirectory50; > static nsIAtom* sApp_LocalStore50; > static nsIAtom* sApp_History50; > static nsIAtom* sApp_UsersPanels50; >--- profile/dirserviceprovider/src/nsProfileDirServiceProvider.cpp >+++ profile/dirserviceprovider/src/nsProfileDirServiceProvider.cpp >@@ -56,13 +56,13 @@ > > #define PREFS_FILE_50_NAME NS_LITERAL_CSTRING("prefs.js") > #define USER_CHROME_DIR_50_NAME NS_LITERAL_CSTRING("chrome") >+#define USER_SEARCH_DIR_50_NAME NS_LITERAL_CSTRING("search") > #define LOCAL_STORE_FILE_50_NAME NS_LITERAL_CSTRING("localstore.rdf") > #define HISTORY_FILE_50_NAME NS_LITERAL_CSTRING("history.dat") > #define PANELS_FILE_50_NAME NS_LITERAL_CSTRING("panels.rdf") > #define MIME_TYPES_FILE_50_NAME NS_LITERAL_CSTRING("mimeTypes.rdf") > #define BOOKMARKS_FILE_50_NAME NS_LITERAL_CSTRING("bookmarks.html") > #define DOWNLOADS_FILE_50_NAME NS_LITERAL_CSTRING("downloads.rdf") >-#define SEARCH_FILE_50_NAME NS_LITERAL_CSTRING("search.rdf" ) > #define MAIL_DIR_50_NAME NS_LITERAL_CSTRING("Mail") > #define IMAP_MAIL_DIR_50_NAME NS_LITERAL_CSTRING("ImapMail") > #define NEWS_DIR_50_NAME NS_LITERAL_CSTRING("News") >@@ -74,6 +74,7 @@ > nsIAtom* nsProfileDirServiceProvider::sApp_PreferencesFile50; > nsIAtom* nsProfileDirServiceProvider::sApp_UserProfileDirectory50; > nsIAtom* nsProfileDirServiceProvider::sApp_UserChromeDirectory; >+nsIAtom* nsProfileDirServiceProvider::sApp_UserSearchDirectory50; > nsIAtom* nsProfileDirServiceProvider::sApp_LocalStore50; > nsIAtom* nsProfileDirServiceProvider::sApp_History50; > nsIAtom* nsProfileDirServiceProvider::sApp_UsersPanels50; >@@ -261,6 +262,11 @@ > if (NS_SUCCEEDED(rv)) > rv = localFile->AppendNative(USER_CHROME_DIR_50_NAME); > } >+ else if (inAtom == sApp_UserSearchDirectory50) { >+ rv = domainDir->Clone(getter_AddRefs(localFile)); >+ if (NS_SUCCEEDED(rv)) >+ rv = localFile->AppendNative(USER_SEARCH_DIR_50_NAME); >+ } > else if (inAtom == sApp_LocalStore50) { > rv = domainDir->Clone(getter_AddRefs(localFile)); > if (NS_SUCCEEDED(rv)) { >@@ -303,14 +309,6 @@ > if (NS_SUCCEEDED(rv)) > rv = localFile->AppendNative(DOWNLOADS_FILE_50_NAME); > } >- else if (inAtom == sApp_SearchFile50) { >- rv = domainDir->Clone(getter_AddRefs(localFile)); >- if (NS_SUCCEEDED(rv)) { >- rv = localFile->AppendNative(SEARCH_FILE_50_NAME); >- if (NS_SUCCEEDED(rv)) >- rv = EnsureProfileFileExists(localFile, domainDir); >- } >- } > else if (inAtom == sApp_MailDirectory50) { > rv = domainDir->Clone(getter_AddRefs(localFile)); > if (NS_SUCCEEDED(rv)) >@@ -370,13 +368,13 @@ > { NS_APP_PREFS_50_FILE, &sApp_PreferencesFile50 }, > { NS_APP_USER_PROFILE_50_DIR, &sApp_UserProfileDirectory50 }, > { NS_APP_USER_CHROME_DIR, &sApp_UserChromeDirectory }, >+ { NS_APP_USER_SEARCH_50_DIR, &sApp_UserSearchDirectory50 }, > { NS_APP_LOCALSTORE_50_FILE, &sApp_LocalStore50 }, > { NS_APP_HISTORY_50_FILE, &sApp_History50 }, > { NS_APP_USER_PANELS_50_FILE, &sApp_UsersPanels50 }, > { NS_APP_USER_MIMETYPES_50_FILE, &sApp_UsersMimeTypes50 }, > { NS_APP_BOOKMARKS_50_FILE, &sApp_BookmarksFile50 }, > { NS_APP_DOWNLOADS_50_FILE, &sApp_DownloadsFile50 }, >- { NS_APP_SEARCH_50_FILE, &sApp_SearchFile50 }, > { NS_APP_MAIL_50_DIR, &sApp_MailDirectory50 }, > { NS_APP_IMAP_MAIL_50_DIR, &sApp_ImapMailDirectory50 }, > { NS_APP_NEWS_50_DIR, &sApp_NewsDirectory50 }, >@@ -534,13 +532,13 @@ > (void) directoryService->Undefine(NS_APP_PREFS_50_FILE); > (void) directoryService->Undefine(NS_APP_USER_PROFILE_50_DIR); > (void) directoryService->Undefine(NS_APP_USER_CHROME_DIR); >+ (void) directoryService->Undefine(NS_APP_USER_SEARCH_50_DIR); > (void) directoryService->Undefine(NS_APP_LOCALSTORE_50_FILE); > (void) directoryService->Undefine(NS_APP_HISTORY_50_FILE); > (void) directoryService->Undefine(NS_APP_USER_PANELS_50_FILE); > (void) directoryService->Undefine(NS_APP_USER_MIMETYPES_50_FILE); > (void) directoryService->Undefine(NS_APP_BOOKMARKS_50_FILE); > (void) directoryService->Undefine(NS_APP_DOWNLOADS_50_FILE); >- (void) directoryService->Undefine(NS_APP_SEARCH_50_FILE); > (void) directoryService->Undefine(NS_APP_MAIL_50_DIR); > (void) directoryService->Undefine(NS_APP_IMAP_MAIL_50_DIR); > (void) directoryService->Undefine(NS_APP_NEWS_50_DIR); >--- uriloader/exthandler/unix/nsGNOMERegistry.cpp >+++ uriloader/exthandler/unix/nsGNOMERegistry.cpp >@@ -283,6 +283,11 @@ > > gchar *nativeCommand = g_filename_from_utf8(handlerApp->command, > -1, NULL, NULL, NULL); >+ >+ // Some versions of the mime stuff will add whitespace to the end or >+ // beginning of the command >+ nativeCommand = g_strstrip(nativeCommand); >+ > if (!nativeCommand) { > NS_ERROR("Could not convert helper app command to filesystem encoding"); > _gnome_vfs_mime_application_free(handlerApp); >--- xpcom/io/nsDirectoryService.cpp >+++ xpcom/io/nsDirectoryService.cpp >@@ -400,6 +400,7 @@ > nsIAtom* nsDirectoryService::sLocalDirectory = nsnull; > nsIAtom* nsDirectoryService::sLibDirectory = nsnull; > nsIAtom* nsDirectoryService::sHomeDirectory = nsnull; >+nsIAtom* nsDirectoryService::sDesktopDirectory = nsnull; > #elif defined (XP_OS2) > nsIAtom* nsDirectoryService::sSystemDirectory = nsnull; > nsIAtom* nsDirectoryService::sOS2Directory = nsnull; >@@ -509,6 +510,7 @@ > { NS_UNIX_LOCAL_DIR, &nsDirectoryService::sLocalDirectory }, > { NS_UNIX_LIB_DIR, &nsDirectoryService::sLibDirectory }, > { NS_UNIX_HOME_DIR, &nsDirectoryService::sHomeDirectory }, >+ { NS_UNIX_DESKTOP_DIR, &nsDirectoryService::sDesktopDirectory }, > #elif defined (XP_OS2) > { NS_OS_SYSTEM_DIR, &nsDirectoryService::sSystemDirectory }, > { NS_OS2_DIR, &nsDirectoryService::sOS2Directory }, >@@ -1098,6 +1100,10 @@ > { > rv = GetSpecialSystemDirectory(Unix_HomeDirectory, getter_AddRefs(localFile)); > } >+ else if (inAtom == nsDirectoryService::sDesktopDirectory) >+ { >+ rv = GetSpecialSystemDirectory(Unix_DesktopDirectory, getter_AddRefs(localFile)); >+ } > #elif defined (XP_OS2) > else if (inAtom == nsDirectoryService::sSystemDirectory) > { >--- xpcom/io/nsAppDirectoryServiceDefs.h >+++ xpcom/io/nsAppDirectoryServiceDefs.h >@@ -75,8 +75,10 @@ > #define NS_APP_CHROME_DIR "AChrom" > #define NS_APP_PLUGINS_DIR "APlugns" // Deprecated - use NS_APP_PLUGINS_DIR_LIST > #define NS_APP_SEARCH_DIR "SrchPlugns" >+#define NS_USER_SEARCH_DIR "UsrSrchPlugns" > > #define NS_APP_PLUGINS_DIR_LIST "APluginsDL" >+#define NS_APP_SEARCH_DIR_LIST "ASearchDL" > > // -------------------------------------------------------------------------------------- > // Files and directories which exist on a per-profile basis >@@ -108,7 +110,7 @@ > > #define NS_APP_DOWNLOADS_50_FILE "DLoads" > >-#define NS_APP_SEARCH_50_FILE "SrchF" >+#define NS_APP_USER_SEARCH_50_DIR "USrchD" > > #define NS_APP_MAIL_50_DIR "MailD" > #define NS_APP_IMAP_MAIL_50_DIR "IMapMD" >--- xpcom/io/nsAppFileLocationProvider.cpp >+++ xpcom/io/nsAppFileLocationProvider.cpp >@@ -252,6 +252,12 @@ > if (NS_SUCCEEDED(rv)) > rv = localFile->AppendRelativeNativePath(SEARCH_DIR_NAME); > } >+ else if (nsCRT::strcmp(prop, NS_USER_SEARCH_DIR) == 0) >+ { >+ rv = GetProductDirectory(getter_AddRefs(localFile)); >+ if (NS_SUCCEEDED(rv)) >+ rv = localFile->AppendRelativeNativePath(SEARCH_DIR_NAME); >+ } > else if (nsCRT::strcmp(prop, NS_APP_INSTALL_CLEANUP_DIR) == 0) > { > // This is cloned so that embeddors will have a hook to override >@@ -589,5 +595,16 @@ > NS_IF_ADDREF(*_retval); > rv = *_retval ? NS_OK : NS_ERROR_OUT_OF_MEMORY; > } >+ if (!nsCRT::strcmp(prop, NS_APP_SEARCH_DIR_LIST)) >+ { >+ static const char* keys[] = { nsnull, NS_USER_SEARCH_DIR, NS_APP_SEARCH_DIR, nsnull }; >+ if (!keys[0] && !(keys[0] = PR_GetEnv("MOZ_SEARCH_ENGINE_PATH"))) { >+ static const char nullstr = 0; >+ keys[0] = &nullstr; >+ } >+ *_retval = new nsPathsDirectoryEnumerator(this, keys); >+ NS_IF_ADDREF(*_retval); >+ rv = *_retval ? NS_OK : NS_ERROR_OUT_OF_MEMORY; >+ } > return rv; > } >--- xpcom/io/SpecialSystemDirectory.cpp >+++ xpcom/io/SpecialSystemDirectory.cpp >@@ -567,6 +567,18 @@ > PR_TRUE, > aFile); > >+ case Unix_DesktopDirectory: >+ { >+ nsCAutoString desktopDir(PR_GetEnv("HOME")); >+ if (!desktopDir.IsEmpty() || !(desktopDir.Equals("/"))) >+ { >+ desktopDir.Append("/Desktop"); >+ } else { >+ desktopDir = ""; >+ } >+ return NS_NewNativeLocalFile(desktopDir, PR_TRUE, aFile); >+ } >+ > case Unix_HomeDirectory: > #ifdef VMS > { >--- xpcom/io/SpecialSystemDirectory.h >+++ xpcom/io/SpecialSystemDirectory.h >@@ -96,6 +96,7 @@ > Unix_LocalDirectory = 301, > Unix_LibDirectory = 302, > Unix_HomeDirectory = 303, >+ Unix_DesktopDirectory = 304, > > BeOS_SettingsDirectory = 401, > BeOS_HomeDirectory = 402, >--- xpcom/io/nsDirectoryService.h >+++ xpcom/io/nsDirectoryService.h >@@ -157,6 +157,7 @@ > static nsIAtom *sLocalDirectory; > static nsIAtom *sLibDirectory; > static nsIAtom *sHomeDirectory; >+ static nsIAtom *sDesktopDirectory; > #elif defined (XP_OS2) > static nsIAtom *sSystemDirectory; > static nsIAtom *sOS2Directory; >--- xpcom/io/nsDirectoryServiceDefs.h >+++ xpcom/io/nsDirectoryServiceDefs.h >@@ -178,6 +178,7 @@ > #define NS_UNIX_LOCAL_DIR "Locl" > #define NS_UNIX_LIB_DIR "LibD" > #define NS_UNIX_HOME_DIR "Home" >+ #define NS_UNIX_DESKTOP_DIR "Desktop" > #elif defined (XP_OS2) > #define NS_OS2_DIR "OS2Dir" > #define NS_OS2_HOME_DIR "Home" >--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_mips.cpp >+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_mips.cpp >@@ -21,7 +21,7 @@ > * Contributor(s): > * Stuart Parmenter <pavlov@netscape.com> > * Brendan Eich <brendan@mozilla.org> >- * >+ * Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de> > */ > > /* This code is for MIPS using the O32 ABI. */ >@@ -37,10 +37,8 @@ > // Count a word for a0 even though it's never stored or loaded > // We do this only for alignment of register pairs. > PRUint32 result = 1; >- for (PRUint32 i = 0; i < paramCount; i++, s++) >+ for (PRUint32 i = 0; i < paramCount; i++, result++, s++) > { >- result++; >- > if (s->IsPtrData()) > continue; > >@@ -53,6 +51,9 @@ > result++; > result++; > break; >+ >+ default: >+ break; > } > } > return (result + 1) & ~(PRUint32)1; >@@ -73,8 +74,6 @@ > continue; > } > >- *((void**)d) = s->val.p; >- > switch(s->type) > { > case nsXPTType::T_I64 : >@@ -89,6 +88,9 @@ > if ((PRWord)d & 4) d++; > *((double*) d) = s->val.d; d++; > break; >+ default: >+ *((void**)d) = s->val.p; >+ break; > } > } > } >@@ -103,5 +105,4 @@ > PRUint32 paramCount, nsXPTCVariant* params) > { > return _XPTC_InvokeByIndex(that, methodIndex, paramCount, params); >-} >- >+} >--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_alpha.cpp >+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_alpha.cpp >@@ -20,6 +20,7 @@ > * the Initial Developer. All Rights Reserved. > * > * Contributor(s): >+ * Glen Nakamura <glen@imodulo.com> > * > * Alternatively, the contents of this file may be used under the terms of > * either the GNU General Public License Version 2 or later (the "GPL"), or >@@ -37,8 +38,6 @@ > > /* Platform specific code to invoke XPCOM methods on native objects */ > >-/* contributed by Glen Nakamura <glen.nakamura@usa.net> */ >- > #include "xptcprivate.h" > > /* Prototype specifies unmangled function name and disables unused warning */ >@@ -163,7 +162,11 @@ > "bis $16,$16,$1\n\t" /* load "this" */ > "ldq $2,16($15)\n\t" /* load "methodIndex" */ > "ldq $1,0($1)\n\t" /* load vtable */ >+#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */ >+ "s8addq $2,$31,$2\n\t" /* vtable index = "methodIndex" * 8 */ >+#else /* not G++ V3 ABI */ > "s8addq $2,16,$2\n\t" /* vtable index = "methodIndex" * 8 + 16 */ >+#endif /* G++ V3 ABI */ > "addq $1,$2,$1\n\t" > "ldq $27,0($1)\n\t" /* load address of function */ > "jsr $26,($27),0\n\t" /* call virtual function */ >@@ -176,4 +179,3 @@ > "ret $31,($26),1\n\t" > ".end XPTC_InvokeByIndex" > ); >- >--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_alpha.cpp >+++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_alpha.cpp >@@ -20,6 +20,7 @@ > * the Initial Developer. All Rights Reserved. > * > * Contributor(s): >+ * Glen Nakamura <glen@imodulo.com> > * > * Alternatively, the contents of this file may be used under the terms of > * either the GNU General Public License Version 2 or later (the "GPL"), or >@@ -37,8 +38,6 @@ > > /* Implement shared vtbl methods. */ > >-/* contributed by Glen Nakamura <glen.nakamura@usa.net> */ >- > #include "xptcprivate.h" > > /* Prototype specifies unmangled function name and disables unused warning */ >@@ -188,23 +187,45 @@ > * nsresult nsXPTCStubBase::Stub##n() > * Sets register $1 to "methodIndex" and jumps to SharedStub. > */ >+#define STUB_MANGLED_ENTRY(n, symbol) \ >+ "#### Stub"#n" ####" "\n\t" \ >+ ".text" "\n\t" \ >+ ".align 5" "\n\t" \ >+ ".globl " symbol "\n\t" \ >+ ".ent " symbol "\n" \ >+symbol ":" "\n\t" \ >+ ".frame $30,0,$26,0" "\n\t" \ >+ "ldgp $29,0($27)" "\n" \ >+"$" symbol "..ng:" "\n\t" \ >+ ".prologue 1" "\n\t" \ >+ "lda $1,"#n "\n\t" \ >+ "br $31,$SharedStub..ng" "\n\t" \ >+ ".end " symbol >+ >+#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */ >+ >+#define STUB_ENTRY(n) \ >+__asm__( \ >+ ".if "#n" < 10" "\n\t" \ >+ STUB_MANGLED_ENTRY(n, "_ZN14nsXPTCStubBase5Stub"#n"Ev") "\n\t" \ >+ ".elseif "#n" < 100" "\n\t" \ >+ STUB_MANGLED_ENTRY(n, "_ZN14nsXPTCStubBase6Stub"#n"Ev") "\n\t" \ >+ ".elseif "#n" < 1000" "\n\t" \ >+ STUB_MANGLED_ENTRY(n, "_ZN14nsXPTCStubBase7Stub"#n"Ev") "\n\t" \ >+ ".else" "\n\t" \ >+ ".err \"Stub"#n" >= 1000 not yet supported.\"" "\n\t" \ >+ ".endif" \ >+ ); >+ >+#else /* not G++ V3 ABI */ >+ > #define STUB_ENTRY(n) \ > __asm__( \ >- "#### Stub"#n" ####\n" \ >-".text\n\t" \ >- ".align 5\n\t" \ >- ".globl Stub"#n"__14nsXPTCStubBase\n\t" \ >- ".ent Stub"#n"__14nsXPTCStubBase\n" \ >-"Stub"#n"__14nsXPTCStubBase:\n\t" \ >- ".frame $30,0,$26,0\n\t" \ >- "ldgp $29,0($27)\n" \ >-"$Stub"#n"__14nsXPTCStubBase..ng:\n\t" \ >- ".prologue 1\n\t" \ >- "lda $1,"#n"\n\t" \ >- "br $31,$SharedStub..ng\n\t" \ >- ".end Stub"#n"__14nsXPTCStubBase" \ >+ STUB_MANGLED_ENTRY(n, "Stub"#n"__14nsXPTCStubBase") \ > ); > >+#endif /* G++ V3 ABI */ >+ > #define SENTINEL_ENTRY(n) \ > nsresult nsXPTCStubBase::Sentinel##n() \ > { \ >@@ -213,4 +234,3 @@ > } > > #include "xptcstubsdef.inc" >- >--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s >+++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s >@@ -0,0 +1,142 @@ >+/* -*- Mode: asm; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- >+ * Version: MPL 1.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is mozilla.org code. >+ * >+ * The Initial Developer of the Original Code is >+ * Netscape Communications Corp, Inc. >+ * Portions created by the Initial Developer are Copyright (C) 2001 >+ * the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * Stuart Parmenter <pavlov@netscape.com> >+ * Chris Waterson <waterson@netscape.com> >+ * Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de> >+ */ >+ >+/* This code is for MIPS using the O32 ABI. */ >+ >+#include <sys/regdef.h> >+#include <sys/asm.h> >+ >+# NARGSAVE is the argument space in the callers frame, including extra >+# 'shadowed' space for the argument registers. The minimum of 4 >+# argument slots is sometimes predefined in the header files. >+#ifndef NARGSAVE >+#define NARGSAVE 4 >+#endif >+ >+#define LOCALSZ 2 /* gp, ra */ >+#define FRAMESZ ((((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK) >+ >+#define RAOFF (FRAMESZ - (1*SZREG)) >+#define GPOFF (FRAMESZ - (2*SZREG)) >+ >+#define A0OFF (FRAMESZ + (0*SZREG)) >+#define A1OFF (FRAMESZ + (1*SZREG)) >+#define A2OFF (FRAMESZ + (2*SZREG)) >+#define A3OFF (FRAMESZ + (3*SZREG)) >+ >+ .text >+ >+#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */ >+#define STUB_ENTRY(x) \ >+ .if x < 10; \ >+ .globl _ZN14nsXPTCStubBase5Stub ##x ##Ev; \ >+ .type _ZN14nsXPTCStubBase5Stub ##x ##Ev,@function; \ >+ .aent _ZN14nsXPTCStubBase5Stub ##x ##Ev,0; \ >+_ZN14nsXPTCStubBase5Stub ##x ##Ev:; \ >+ SETUP_GP; \ >+ li t0,x; \ >+ b sharedstub; \ >+ .elseif x < 100; \ >+ .globl _ZN14nsXPTCStubBase6Stub ##x ##Ev; \ >+ .type _ZN14nsXPTCStubBase6Stub ##x ##Ev,@function; \ >+ .aent _ZN14nsXPTCStubBase6Stub ##x ##Ev,0; \ >+_ZN14nsXPTCStubBase6Stub ##x ##Ev:; \ >+ SETUP_GP; \ >+ li t0,x; \ >+ b sharedstub; \ >+ .elseif x < 1000; \ >+ .globl _ZN14nsXPTCStubBase7Stub ##x ##Ev; \ >+ .type _ZN14nsXPTCStubBase7Stub ##x ##Ev,@function; \ >+ .aent _ZN14nsXPTCStubBase7Stub ##x ##Ev,0; \ >+_ZN14nsXPTCStubBase7Stub ##x ##Ev:; \ >+ SETUP_GP; \ >+ li t0,x; \ >+ b sharedstub; \ >+ .else; \ >+ .err; \ >+ .endif >+#else /* not G++ V3 ABI */ >+#define STUB_ENTRY(x) \ >+ .globl Stub ##x ##__14nsXPTCStubBase; \ >+ .type Stub ##x ##__14nsXPTCStubBase,@function; \ >+ .aent Stub ##x ##__14nsXPTCStubBase,0; \ >+Stub ##x ##__14nsXPTCStubBase:; \ >+ SETUP_GP; \ >+ li t0,x; \ >+ b sharedstub >+#endif /* G++ V3 ABI */ >+ >+# SENTINEL_ENTRY is handled in the cpp file. >+#define SENTINEL_ENTRY(x) >+ >+# >+# open a dummy frame for the function entries >+# >+ .align 2 >+ .type dummy,@function >+ .ent dummy, 0 >+ .frame sp, FRAMESZ, ra >+dummy: >+ SETUP_GP >+ >+#include "xptcstubsdef.inc" >+ >+sharedstub: >+ subu sp, FRAMESZ >+ >+ # specify the save register mask for gp, ra, a0-a3 >+ .mask 0x900000F0, RAOFF-FRAMESZ >+ >+ sw ra, RAOFF(sp) >+ SAVE_GP(GPOFF) >+ >+ # Micro-optimization: a0 is already loaded, and its slot gets >+ # ignored by PrepareAndDispatch, so no need to save it here. >+ # sw a0, A0OFF(sp) >+ sw a1, A1OFF(sp) >+ sw a2, A2OFF(sp) >+ sw a3, A3OFF(sp) >+ >+ la t9, PrepareAndDispatch >+ >+ # t0 is methodIndex >+ move a1, t0 >+ # have a2 point to the begin of the argument space on stack >+ addiu a2, sp, FRAMESZ >+ >+ # PrepareAndDispatch(that, methodIndex, args) >+ jalr t9 >+ >+ # Micro-optimization: Using jalr explicitly has the side-effect >+ # of not triggering .cprestore. This is ok because we have no >+ # gp reference below this point. It also allows better >+ # instruction sscheduling. >+ # lw gp, GPOFF(fp) >+ >+ lw ra, RAOFF(sp) >+ addiu sp, FRAMESZ >+ j ra >+ END(dummy) >--- xpcom/reflect/xptcall/src/md/unix/Makefile.in >+++ xpcom/reflect/xptcall/src/md/unix/Makefile.in >@@ -210,11 +210,7 @@ > ifneq (,$(findstring mips, $(OS_TEST))) > CPPSRCS := xptcinvoke_mips.cpp xptcstubs_mips.cpp > ASFILES := xptcinvoke_asm_mips.s xptcstubs_asm_mips.s >-#xptcstubs_mips.cpp >-# xptcstubs_asm_mips.s >-ifdef GNU_CC >-ASFLAGS += $(INCLUDES) -x assembler-with-cpp -D__GNUC__ >-endif >+AS := $(CC) $(CFLAGS) $(INCLUDES) -c -x assembler-with-cpp > endif > endif > >@@ -359,10 +355,8 @@ > > ifeq ($(OS_ARCH),Linux) > ifneq (,$(findstring mips, $(OS_TEST))) >-xptcstubs_asm_mips.o: xptcstubs_asm_mips.s.m4 $(PUBLIC)/xptcstubsdef.inc >- m4 $(INCLUDES) $< > ./xptcstubs_asm_mips.s && \ >- $(AS) -o $@ $(ASFLAGS) $(AS_DASH_C_FLAG) ./xptcstubs_asm_mips.s >- $(RM) -f ./xptcstubs_asm_mips.s >+xptcstubs_asm_mips.o: xptcstubs_asm_mips.s $(PUBLIC)/xptcstubsdef.inc >+ $(AS) -o $@ $< > endif > endif > >--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips.s >+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips.s >@@ -21,6 +21,7 @@ > * Contributor(s): > * Brendan Eich <brendan@mozilla.org> > * Stuart Parmenter <pavlov@netscape.com> >+ * Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de> > */ > > /* This code is for MIPS using the O32 ABI. */ >@@ -28,139 +29,123 @@ > #include <sys/regdef.h> > #include <sys/asm.h> > >-.text >-.globl invoke_count_words >-.globl invoke_copy_to_stack >- >-# We need a variable number of words allocated from the stack for copies of >-# the params, and this space must come between the high frame (where ra, gp, >-# and s0 are saved) and the low frame (where a0-a3 are saved by the callee >-# functions we invoke). >- >-LOCALSZ=4 # s0, s1, ra, gp >-NARGSAVE=4 # a0, a1, a2, a3 >-HIFRAMESZ=(LOCALSZ*SZREG) >-LOFRAMESZ=(NARGSAVE*SZREG) >-FRAMESZ=(HIFRAMESZ+LOFRAMESZ+ALSZ)&ALMASK >- >-# XXX these 2*SZREG, etc. are very magic -- we *know* that ALSZ&ALMASK cause >-# FRAMESZ to be 0 mod 8, in this case to be 16 and not 12. >-RAOFF=FRAMESZ - (2*SZREG) >-GPOFF=FRAMESZ - (3*SZREG) >-S0OFF=FRAMESZ - (4*SZREG) >-S1OFF=FRAMESZ - (5*SZREG) >- >-# These are not magic -- they are just our argsave slots in the caller frame. >-A0OFF=FRAMESZ >-A1OFF=FRAMESZ + (1*SZREG) >-A2OFF=FRAMESZ + (2*SZREG) >-A3OFF=FRAMESZ + (3*SZREG) >- >- # >- # _XPTC_InvokeByIndex(that, methodIndex, paramCount, params) >- # a0 a1 a2 a3 >- >-NESTED(_XPTC_InvokeByIndex, FRAMESZ, ra) >- >- .set noreorder >- .cpload t9 >- .set reorder >- >+# NARGSAVE is the argument space in the callers frame, including extra >+# 'shadowed' space for the argument registers. The minimum of 4 >+# argument slots is sometimes predefined in the header files. >+#ifndef NARGSAVE >+#define NARGSAVE 4 >+#endif >+ >+#define LOCALSZ 3 /* gp, fp, ra */ >+#define FRAMESZ ((((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK) >+ >+#define RAOFF (FRAMESZ - (1*SZREG)) >+#define FPOFF (FRAMESZ - (2*SZREG)) >+#define GPOFF (FRAMESZ - (3*SZREG)) >+ >+#define A0OFF (FRAMESZ + (0*SZREG)) >+#define A1OFF (FRAMESZ + (1*SZREG)) >+#define A2OFF (FRAMESZ + (2*SZREG)) >+#define A3OFF (FRAMESZ + (3*SZREG)) >+ >+ .text >+ >+# >+# _XPTC_InvokeByIndex(that, methodIndex, paramCount, params) >+# a0 a1 a2 a3 >+ >+ .globl _XPTC_InvokeByIndex >+ .align 2 >+ .type _XPTC_InvokeByIndex,@function >+ .ent _XPTC_InvokeByIndex,0 >+ .frame fp, FRAMESZ, ra >+_XPTC_InvokeByIndex: >+ SETUP_GP > subu sp, FRAMESZ > >- # specify the save register mask -- XXX do we want the a0-a3 here, given >- # our "split" frame where the args are saved below a dynamicly allocated >- # region under the high frame? >- # >- # 10010000000000010000000011110000 >- .mask 0x900100F0, -((NARGSAVE+LOCALSZ)*SZREG) >- >- # thou shalt not use .cprestore if yer frame has variable size... >- # .cprestore GPOFF >- >- REG_S ra, RAOFF(sp) >- >- # this happens automatically with .cprestore, but we cannot use that op... >- REG_S gp, GPOFF(sp) >- REG_S s0, S0OFF(sp) >- REG_S s1, S1OFF(sp) >- >- REG_S a0, A0OFF(sp) >- REG_S a1, A1OFF(sp) >- REG_S a2, A2OFF(sp) >- REG_S a3, A3OFF(sp) >+ # specify the save register mask for gp, fp, ra, a3 - a0 >+ .mask 0xD00000F0, RAOFF-FRAMESZ > >- # invoke_count_words(paramCount, params) >- move a0, a2 >- move a1, a3 >+ sw ra, RAOFF(sp) >+ sw fp, FPOFF(sp) > >- jal invoke_count_words >- lw gp, GPOFF(sp) >+ # we can't use .cprestore in a variable stack frame >+ sw gp, GPOFF(sp) > >- # save the old sp so we can pop the param area and any "low frame" >- # needed as an argsave area below the param block for callees that >- # we invoke. >- move s0, sp >- >- REG_L a1, A2OFF(sp) # a1 = paramCount >- REG_L a2, A3OFF(sp) # a2 = params >- >- # we define a word as 4 bytes, period end of story! >- sll v0, 2 # 4 bytes * result of invoke_copy_words >- subu v0, LOFRAMESZ # but we take back the argsave area built into >- # our stack frame -- SWEET! >- subu sp, sp, v0 # make room >- move a0, sp # a0 = param stack address >- move s1, a0 # save it for later -- it should be safe here >- >- # the old sp is still saved in s0, but we now need another argsave >- # area ("low frame") for the invoke_copy_to_stack call. >- subu sp, sp, LOFRAMESZ >+ sw a0, A0OFF(sp) >+ sw a1, A1OFF(sp) >+ sw a2, A2OFF(sp) >+ sw a3, A3OFF(sp) >+ >+ # save bottom of fixed frame >+ move fp, sp >+ >+ # extern "C" uint32 >+ # invoke_count_words(PRUint32 paramCount, nsXPTCVariant* s); >+ la t9, invoke_count_words >+ move a0, a2 >+ move a1, a3 >+ jalr t9 >+ lw gp, GPOFF(fp) > >- # copy the param into the stack areas >+ # allocate variable stack, with a size of: >+ # wordsize (of 4 bytes) * result (already aligned to dword) >+ # but a minimum of 16 byte >+ sll v0, 2 >+ slt t0, v0, 16 >+ beqz t0, 1f >+ li v0, 16 >+1: subu sp, v0 >+ >+ # let a0 point to the bottom of the variable stack, allocate >+ # another fixed stack for: >+ # extern "C" void > # invoke_copy_to_stack(PRUint32* d, PRUint32 paramCount, >- # nsXPTCVariant* s) >- jal invoke_copy_to_stack >- lw gp, GPOFF(s0) >- >- move sp, s0 # get orig sp back, popping params and argsave >- >- REG_L a0, A0OFF(sp) # a0 = set "that" to be "this" >- REG_L a1, A1OFF(sp) # a1 = methodIndex >- >- # t1 = methodIndex * 4 >- # (use shift instead of mult) >- sll t1, a1, 2 >- >- # calculate the function we need to jump to, >- # which must then be saved in t9 >+ # nsXPTCVariant* s); >+ la t9, invoke_copy_to_stack >+ move a0, sp >+ lw a1, A2OFF(fp) >+ lw a2, A3OFF(fp) >+ subu sp, 16 >+ jalr t9 >+ lw gp, GPOFF(fp) >+ >+ # back to the variable stack frame >+ addu sp, 16 >+ >+ # calculate the function we need to jump to, which must then be >+ # stored in t9 >+ lw a0, A0OFF(fp) # a0 = set "that" to be "this" >+ lw t0, A1OFF(fp) # a1 = methodIndex > lw t9, 0(a0) >- addu t9, t9, t1 >- lw t9, 8(t9) >- >- # a1..a3 and f13..f14 should now be set to what >- # invoke_copy_to_stack told us. skip a0 and f12 >- # because that is the "this" pointer >- >- REG_L a1, 1*SZREG(s1) >- REG_L a2, 2*SZREG(s1) >- REG_L a3, 3*SZREG(s1) >- >- l.d $f13, 8(s1) >- l.d $f14, 16(s1) >- >- # Create the stack pointer for the function, which must have 4 words >- # of space for callee-saved args. invoke_count_words allocated space >- # for a0 starting at s1, so we just move s1 into sp. >- move sp, s1 >+ # t0 = methodIndex << PTRLOG >+ sll t0, t0, PTRLOG >+ addu t9, t0 >+#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */ >+ lw t9, (t9) >+#else /* not G++ V3 ABI */ >+ lw t9, 2*PTRSIZE(t9) >+#endif /* G++ V3 ABI */ >+ >+ # Set a1-a3 to what invoke_copy_to_stack told us. a0 is already >+ # the "this" pointer. We don't have to care about floating >+ # point arguments, the non-FP "this" pointer as first argument >+ # means they'll never be used. >+ lw a1, 1*SZREG(sp) >+ lw a2, 2*SZREG(sp) >+ lw a3, 3*SZREG(sp) >+ >+ jalr t9 >+ # Micro-optimization: There's no gp usage below this point, so >+ # we don't reload. >+ # lw gp, GPOFF(fp) > >- jalr ra, t9 >- lw gp, GPOFF(s0) >+ # leave variable stack frame >+ move sp, fp > >- move sp, s0 >+ lw ra, RAOFF(sp) >+ lw fp, FPOFF(sp) > >- REG_L ra, RAOFF(sp) >- REG_L s0, S0OFF(sp) >- addu sp, FRAMESZ >+ addiu sp, FRAMESZ > j ra >-.end _XPTC_InvokeByIndex >+END(_XPTC_InvokeByIndex) >--- xpcom/xpcom-private.h >+++ xpcom/xpcom-private.h >@@ -0,0 +1,32 @@ >+/* xpcom/xpcom-private.h. Generated automatically by configure. */ >+/* The following defines are only used by the xpcom implementation */ >+ >+#ifndef _XPCOM_PRIVATE_H_ >+#define _XPCOM_PRIVATE_H_ >+ >+/* Define to build the static component loader */ >+#define ENABLE_STATIC_COMPONENT_LOADER 1 >+ >+/* Define if getpagesize() is available */ >+#define HAVE_GETPAGESIZE 1 >+ >+/* Define if iconv() is available */ >+#define HAVE_ICONV 1 >+ >+/* Define if iconv() supports const input */ >+/* #undef HAVE_ICONV_WITH_CONST_INPUT */ >+ >+/* Define if mbrtowc() is available */ >+#define HAVE_MBRTOWC 1 >+ >+/* Define if <sys/mount.h> is present */ >+#define HAVE_SYS_MOUNT_H 1 >+ >+/* Define if <sys/vfs.h> is present */ >+#define HAVE_SYS_VFS_H 1 >+ >+/* Define if wcrtomb() is available */ >+#define HAVE_WCRTOMB 1 >+ >+#endif /* _XPCOM_PRIVATE_H_ */ >+ >--- xpcom/xpcom-config.h >+++ xpcom/xpcom-config.h >@@ -0,0 +1,66 @@ >+/* xpcom/xpcom-config.h. Generated automatically by configure. */ >+/* Global defines needed by xpcom clients */ >+ >+#ifndef _XPCOM_CONFIG_H_ >+#define _XPCOM_CONFIG_H_ >+ >+/* Define this to throw() if the compiler complains about >+ * constructors returning NULL >+ */ >+#define CPP_THROW_NEW throw() >+ >+/* Define if the c++ compiler supports a 2-byte wchar_t */ >+#define HAVE_CPP_2BYTE_WCHAR_T 1 >+ >+/* Define if the c++ compiler supports changing access with |using| */ >+#define HAVE_CPP_ACCESS_CHANGING_USING 1 >+ >+/* Define if the c++ compiler can resolve ambiguity with |using| */ >+#define HAVE_CPP_AMBIGUITY_RESOLVING_USING 1 >+ >+/* Define if the c++ compiler has builtin Bool type */ >+/* #undef HAVE_CPP_BOOL */ >+ >+/* Define if a dyanmic_cast to void* gives the most derived object */ >+#define HAVE_CPP_DYNAMIC_CAST_TO_VOID_PTR 1 >+ >+/* Define if the c++ compiler supports the |explicit| keyword */ >+#define HAVE_CPP_EXPLICIT 1 >+ >+/* Define if the c++ compiler supports the modern template >+ * specialization syntax >+ */ >+#define HAVE_CPP_MODERN_SPECIALIZE_TEMPLATE_SYNTAX 1 >+ >+/* Define if the c++ compiler supports the |std| namespace */ >+#define HAVE_CPP_NAMESPACE_STD 1 >+ >+/* Define if the c++ compiler supports reinterpret_cast */ >+#define HAVE_CPP_NEW_CASTS 1 >+ >+/* Define if the c++ compiler supports partial template specialization */ >+#define HAVE_CPP_PARTIAL_SPECIALIZATION 1 >+ >+/* Define if the c++ compiler has trouble comparing a constant >+ * reference to a templatized class to zero >+ */ >+/* #undef HAVE_CPP_TROUBLE_COMPARING_TO_ZERO */ >+ >+/* Define if the c++ compiler supports the |typename| keyword */ >+#define HAVE_CPP_TYPENAME 1 >+ >+/* Define if the stanard template operator!=() is ambiguous */ >+#define HAVE_CPP_UNAMBIGUOUS_STD_NOTEQUAL 1 >+ >+/* Define if statvfs() is available */ >+#define HAVE_STATVFS 1 >+ >+/* Define if the c++ compiler requires implementations of >+ * unused virtual methods >+ */ >+#define NEED_CPP_UNUSED_IMPLEMENTATIONS 1 >+ >+/* Define to either <new> or <new.h> */ >+#define NEW_H <new> >+ >+#endif /* _XPCOM_CONFIG_H_ */ >--- xpinstall/packager/unix/browser.jst >+++ xpinstall/packager/unix/browser.jst >@@ -77,35 +77,18 @@ > logComment("dirCreate() returned: " + ignoreErr); > > var cf = getFolder("Chrome"); >- registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"toolkit.jar"),"content/global-platform/"); >- registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/communicator-platform/"); >- registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/navigator-platform/"); >- >- registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"toolkit.jar"),"content/global-region/"); >- registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/communicator-region/"); >- registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/editor-region/"); >- registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/navigator-region/"); >- > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"toolkit.jar"),"content/global/"); > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/autoconfig/"); > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/cookie/"); > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/wallet/"); > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"content-packs.jar"),"content/content-packs/"); > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/communicator/"); >- registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/editor/"); > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/navigator/"); > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/necko/"); > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/mozldap/"); > registerChrome(SKIN | DELAYED_CHROME, getFolder(cf,"classic.jar"),"skin/classic/communicator/"); >- registerChrome(SKIN | DELAYED_CHROME, getFolder(cf,"classic.jar"),"skin/classic/editor/"); > registerChrome(SKIN | DELAYED_CHROME, getFolder(cf,"classic.jar"),"skin/classic/global/"); >- registerChrome(SKIN | DELAYED_CHROME, getFolder(cf,"classic.jar"),"skin/classic/messenger/"); > registerChrome(SKIN | DELAYED_CHROME, getFolder(cf,"classic.jar"),"skin/classic/navigator/"); >- registerChrome(SKIN | DELAYED_CHROME, getFolder(cf,"modern.jar"),"skin/modern/communicator/"); >- registerChrome(SKIN | DELAYED_CHROME, getFolder(cf,"modern.jar"),"skin/modern/editor/"); >- registerChrome(SKIN | DELAYED_CHROME, getFolder(cf,"modern.jar"),"skin/modern/global/"); >- registerChrome(SKIN | DELAYED_CHROME, getFolder(cf,"modern.jar"),"skin/modern/messenger/"); >- registerChrome(SKIN | DELAYED_CHROME, getFolder(cf,"modern.jar"),"skin/modern/navigator/"); > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"help.jar"),"content/help/"); > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/xbl-marquee/"); > registerChrome(CONTENT | DELAYED_CHROME, getFolder(cf,"comm.jar"),"content/p3p/"); >--- content/events/src/nsEventStateManager.cpp >+++ content/events/src/nsEventStateManager.cpp >@@ -22,6 +22,9 @@ > * Contributor(s): > * Makoto Kato <m_kato@ga2.so-net.ne.jp> > * Dean Tessman <dean_tessman@hotmail.com> >+ * Andrew Wellington <proton@wiretapped.net> >+ * Graham Dennis <u3952328@anu.edu.au> >+ * Thomas Kleffel <thomas.kleffel@maintech.de> > * > * Alternatively, the contents of this file may be used under the terms of > * either the GNU General Public License Version 2 or later (the "GPL"), or >@@ -1981,6 +1984,109 @@ > } > } > break; >+ case NS_USER_DEFINED_EVENT: // In reality an extended mouse event >+ { >+ nsExtendedMouseEventStatus *eMEStatus; >+ nsMouseEvent *mEvent = (nsMouseEvent* )aEvent; >+ eMEStatus = (nsExtendedMouseEventStatus *)&mEvent->clickCount; >+ nsresult rv; >+ char ourbutton=0; >+ char *string, *suffix, *straction, *strnumlines; >+ PRInt32 action; >+ PRInt32 numLines; >+ >+ rv = getPrefBranch(); >+ if (NS_FAILED(rv)) return rv; >+ >+ // adding 2 below so the maximum number of mouse buttons we can >+ // support is 99 but to represent the buttons in buttonlist >+ // we're going to map 10->35 onto 'a'->'z' >+ // the storage actually supports 256 >+ if(eMEStatus->button > 35) break; >+ if(eMEStatus->button > 9) >+ ourbutton = 'a' + eMEStatus->button -9; >+ else >+ ourbutton = '0' + eMEStatus->button; >+ mPrefBranch->GetCharPref("mousebuttonsextended.buttonlist", &string); >+ if(!string) break; >+ if(!strchr(string, ourbutton)) { >+ free(string); >+ break; >+ } >+ free(string); >+ switch(eMEStatus->event) >+ { >+ case nsExtendedMouseEventStatus_up: >+ suffix=strdup(".up"); >+ break; >+ >+ case nsExtendedMouseEventStatus_down: >+ suffix=strdup(".down"); >+ break; >+ default: >+ return NS_OK; >+ } >+ straction= (char *)memset(malloc(100), 0, 100); >+ strnumlines=(char *)memset(malloc(100), 0, 100); >+ >+ strcpy(straction, "mousebuttonsextended.buttons.X.action"); >+ strcpy(strnumlines, "mousebuttonsextended.buttons.X.numlines"); >+ strcpy(straction+strlen(straction), suffix); >+ strcpy(strnumlines+strlen(strnumlines), suffix); >+ >+ string = strchr(straction, 'X'); *string = ourbutton; >+ string = strchr(strnumlines, 'X'); *string = ourbutton; >+ >+ mPrefBranch->GetIntPref(straction, &action); >+ mPrefBranch->GetIntPref(strnumlines, &numLines); >+ >+ switch (action) { >+ >+#if 0 // Because we would have to create a msEvent >+ case MOUSE_SCROLL_N_LINES: >+ case MOUSE_SCROLL_PAGE: >+ { >+ DoWheelScroll(aPresContext, aTargetFrame, msEvent, numLines, >+ (msEvent->scrollFlags & nsMouseScrollEvent::kIsHorizontal), >+ (action == MOUSE_SCROLL_PAGE), PR_FALSE); >+ >+ } >+ break; >+#endif >+ case MOUSE_SCROLL_HISTORY: >+ { >+ nsCOMPtr<nsISupports> pcContainer; >+ pcContainer = mPresContext->GetContainer(); >+ if (pcContainer) { >+ nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(pcContainer)); >+ if (webNav) { >+ if (numLines < 0) >+ webNav->GoBack(); >+ else >+ webNav->GoForward(); >+ } >+ } >+ } >+ break; >+ >+ case MOUSE_SCROLL_TEXTSIZE: >+ { >+ // Exclude form controls and XUL content. >+ nsIContent* content = aTargetFrame->GetContent(); >+ if (content && >+ !content->IsContentOfType(nsIContent::eHTML_FORM_CONTROL) && >+ !content->IsContentOfType(nsIContent::eXUL)) >+ { >+ ChangeTextSize((numLines > 0) ? 1 : -1); >+ } >+ } >+ break; >+ >+ default: // Including -1 (do nothing) >+ break; >+ } >+ } >+ break; > case NS_MOUSE_SCROLL: > if (nsEventStatus_eConsumeNoDefault != *aStatus) { > nsresult rv; >--- dom/src/base/nsJSEnvironment.cpp >+++ dom/src/base/nsJSEnvironment.cpp >@@ -459,7 +459,7 @@ > > NS_NAMED_LITERAL_STRING(title, "Script warning"); > NS_NAMED_MULTILINE_LITERAL_STRING(msg, >- NS_L("A script on this page is causing mozilla to ") >+ NS_L("A script on this page is causing Firefox to ") > NS_L("run slowly. If it continues to run, your ") > NS_L("computer may become unresponsive.\n\nDo you ") > NS_L("want to abort the script?")); >--- gfx/idl/Makefile.in >+++ gfx/idl/Makefile.in >@@ -39,14 +39,19 @@ > nsIPrintOptions.idl \ > nsIPrintSettings.idl \ > nsIPrintSettingsService.idl \ >- nsIFontCatalogService.idl \ >- nsIFreeType2.idl \ > nsIPrintSession.idl \ > gfxIFormats.idl \ > gfxIImageFrame.idl \ > gfxtypes.idl \ > $(NULL) > >+ifdef MOZ_ENABLE_FREETYPE2 >+XPIDLSRCS += \ >+ nsIFontCatalogService.idl \ >+ nsIFreeType2.idl \ >+ $(NULL) >+endif >+ > ifneq (,$(filter mac cocoa,$(MOZ_GFX_TOOLKIT))) > XPIDLSRCS += nsIPrintSettingsX.idl \ > nsIPrintSessionX.idl \ >--- gfx/public/nsIRenderingContext.h >+++ gfx/public/nsIRenderingContext.h >@@ -824,6 +824,66 @@ > NS_IMETHOD DrawTile(imgIContainer *aImage, > nscoord aXImageStart, nscoord aYImageStart, > const nsRect * aTargetRect) = 0; >+ >+ /** >+ * Get cluster details for a chunk of text. >+ * >+ * This will fill in the aClusterStarts array with information about >+ * what characters are the start of clusters for display. >+ * >+ * @param aText Text on which to get details. >+ * @param aLength Length of the text. >+ * @param aClusterStarts Array of ints that will be populated >+ * with information about which characters are the starts >+ * of clusters. >+ * >+ */ >+ NS_IMETHOD GetClusterInfo(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 *aClusterStarts) = 0; >+ >+ /** >+ * Find the closest cursor position for a given x coordinate. >+ * >+ * This will find the closest byte index for a given x coordinate. >+ * This takes into account grapheme clusters and bidi text. >+ * >+ * @param aText Text on which to operate. >+ * @param aLength Length of the text. >+ * @param aCoord The distance into the string to check. >+ * @param aInx Index of character where the cursor falls - note that >+ * this can be after the last character if the cursor happens to >+ * the right of the last character in the text! >+ * >+ */ >+ NS_IMETHOD GetPosition(const PRUnichar *aText, >+ PRUint32 aLength, >+ nscoord aCoord, >+ PRUint32 &aInx) = 0; >+ >+ /** >+ * Get the width for the specific range of a given string. >+ * >+ * This function is similar to other GetWidth functions, except that >+ * it gets the width for a part of the string instead of the entire >+ * string. This is useful when you're interested in finding out the >+ * length of a chunk in the middle of the string. Lots of languages >+ * require you to include surrounding information to accurately >+ * determine the length of a substring. >+ * >+ * @param aText Text on which to operate >+ * @param aLength Length of the text >+ * @param aStart Start index into the string >+ * @param aEnd End index into the string (inclusive) >+ * @param aWidth Returned with in app coordinates >+ * >+ */ >+ NS_IMETHOD GetRangeWidth(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, >+ PRUint32 &aWidth) = 0; >+ > }; > > //modifiers for text rendering >@@ -866,6 +926,18 @@ > */ > #define NS_RENDERING_HINT_FAST_MEASURE 0x10 > >+/** >+ * This bit, when set, indicates that the gfx supports describing >+ * cluster information in a string >+ */ >+#define NS_RENDERING_HINT_TEXT_CLUSTERS 0x20 >+ >+/** >+ * This bit, when set, indicates that gfx renders runs with character or word >+ * spacing in a single operation, not character by character >+ */ >+#define NS_RENDERING_HINT_SPACING_RUNS 0x40 >+ > //flags for copy CopyOffScreenBits > > //when performing the blit, use the region, if any, >--- gfx/src/gtk/Makefile.in >+++ gfx/src/gtk/Makefile.in >@@ -66,13 +66,18 @@ > # Code shared between GTK+, Xlib and Xprint gfx modules > X11SHARED_LCPPSRCS = \ > nsAntiAliasedGlyph.cpp \ >- nsFontFreeType.cpp \ >- nsFT2FontNode.cpp \ >- nsFT2FontCatalog.cpp \ > nsX11AlphaBlend.cpp \ > nsXFontAAScaledBitmap.cpp \ > nsXFontNormal.cpp \ > $(NULL) >+ >+ifdef MOZ_ENABLE_FREETYPE2 >+X11SHARED_LCPPSRCS += \ >+ nsFontFreeType.cpp \ >+ nsFT2FontNode.cpp \ >+ nsFT2FontCatalog.cpp \ >+ $(NULL) >+endif > > CPPSRCS = \ > nsDeviceContextGTK.cpp \ >@@ -102,6 +107,12 @@ > nsFontMetricsXft.cpp > endif > >+ifdef MOZ_ENABLE_PANGO >+CPPSRCS += \ >+ nsFontMetricsPango.cpp \ >+ mozilla-decoder.cpp >+endif >+ > ifdef MOZ_ENABLE_GTK > CPPSRCS += \ > nsRegionGTK.cpp \ >@@ -155,10 +166,10 @@ > endif > > ifdef MOZ_ENABLE_XFT >-libs:: fontEncoding.properties >+libs:: fontEncoding.properties pangoFontEncoding.properties > $(INSTALL) $^ $(DIST)/bin/res/fonts > >-install:: fontEncoding.properties >+install:: fontEncoding.properties pangoFontEncoding.properties > $(SYSINSTALL) $(IFLAGS1) $^ $(DESTDIR)$(mozappdir)/res/fonts > endif > >@@ -208,13 +219,13 @@ > -I$(srcdir)/. \ > -I$(srcdir)/.. \ > -I$(srcdir)/../shared \ >- -I$(srcdir)/../freetype \ > -I$(srcdir)/../x11shared \ > $(MOZ_XFT_CFLAGS) \ > $(NULL) > > ifdef MOZ_ENABLE_FREETYPE2 > INCLUDES += $(FT2_CFLAGS) >+LOCAL_INCLUDES += -I$(srcdir)/../freetype > endif > > ifdef MOZ_ENABLE_XPRINT >--- gfx/src/gtk/fontEncoding.properties >+++ gfx/src/gtk/fontEncoding.properties >@@ -54,8 +54,8 @@ > # font, you do need them. > > # Symbol font >-#encoding.symbol.ttf = Adobe-Symbol-Encoding >-#encoding.symbol.ftcmap = mac_roman >+encoding.symbol.ttf = Adobe-Symbol-Encoding >+encoding.symbol.ftcmap = mac_roman > > # TeX's Computer Modern fonts (Roman, Math Italic, Symbol and Extension) > >--- gfx/src/gtk/gfxgtk.pkg >+++ gfx/src/gtk/gfxgtk.pkg >@@ -7,3 +7,6 @@ > #if MOZ_ENABLE_XFT > dist/bin/res/fonts/fontEncoding.properties > #endif >+#if MOZ_ENABLE_PANGO >+dist/bin/res/fonts/pangoFontEncoding.properties >+#endif >--- gfx/src/gtk/nsFontMetricsGTK.cpp >+++ gfx/src/gtk/nsFontMetricsGTK.cpp >@@ -62,8 +62,10 @@ > #include "nsAString.h" > #include "nsXPIDLString.h" > #include "nsFontDebug.h" >+#ifdef MOZ_ENABLE_FREETYPE2 > #include "nsFT2FontNode.h" > #include "nsFontFreeType.h" >+#endif > #include "nsXFontNormal.h" > #include "nsX11AlphaBlend.h" > #include "nsXFontAAScaledBitmap.h" >@@ -102,6 +104,10 @@ > #undef NOISY_FONTS > #undef REALLY_NOISY_FONTS > >+#ifndef MOZ_ENABLE_FREETYPE2 >+static PRUint32 gFontDebug = 0 | NS_FONT_DEBUG_FONT_SCAN; >+#endif >+ > struct nsFontCharSetMap; > struct nsFontFamilyName; > struct nsFontPropertyName; >@@ -114,8 +120,10 @@ > const char* mCharSet; > nsFontCharSetConverter Convert; > PRUint8 mSpecialUnderline; >+#ifdef MOZ_ENABLE_FREETYPE2 > PRInt32 mCodeRange1Bits; > PRInt32 mCodeRange2Bits; >+#endif > PRUint16* mCCMap; > nsIUnicodeEncoder* mConverter; > nsIAtom* mLangGroup; >@@ -220,6 +228,7 @@ > static nsFontCharSetInfo Unknown = { nsnull }; > static nsFontCharSetInfo Special = { nsnull }; > >+#ifdef MOZ_ENABLE_FREETYPE2 > static nsFontCharSetInfo USASCII = > { "us-ascii", SingleByteConvert, 0, > TT_OS2_CPR1_LATIN1 | TT_OS2_CPR1_MAC_ROMAN, >@@ -425,7 +434,160 @@ > { "x-mathematica4", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; > static nsFontCharSetInfo Mathematica5 = > { "x-mathematica5", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; >-#endif >+#endif /* MATHML */ >+ >+#else >+ >+static nsFontCharSetInfo USASCII = >+ { "us-ascii", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO88591 = >+ { "ISO-8859-1", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO88592 = >+ { "ISO-8859-2", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO88593 = >+ { "ISO-8859-3", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO88594 = >+ { "ISO-8859-4", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO88595 = >+ { "ISO-8859-5", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO88596 = >+ { "ISO-8859-6", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO885968x = >+ { "x-iso-8859-6-8-x", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO8859616 = >+ { "x-iso-8859-6-16", SingleByteConvert, 0 }; >+static nsFontCharSetInfo IBM1046 = >+ { "x-IBM1046", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO88597 = >+ { "ISO-8859-7", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO88598 = >+ { "ISO-8859-8", SingleByteConvert, 0 }; >+// change from >+// { "ISO-8859-8", SingleByteConvertReverse, 0, 0, 0 }; >+// untill we fix the layout and ensure we only call this with pure RTL text >+static nsFontCharSetInfo ISO88599 = >+ { "ISO-8859-9", SingleByteConvert, 0 }; >+// no support for iso-8859-10 (Nordic/Icelandic) currently >+// static nsFontCharSetInfo ISO885910 = >+// { "ISO-8859-10", SingleByteConvert, 0, >+// 0, TT_OS2_CPR2_NORDIC | TT_OS2_CPR2_ICELANDIC }; >+// no support for iso-8859-12 (Vietnamese) currently >+// static nsFontCharSetInfo ISO885912 = >+// { "ISO-8859-12", SingleByteConvert, 0, >+// TT_OS2_CPR1_VIETNAMESE, 0 }; >+static nsFontCharSetInfo ISO885913 = >+ { "ISO-8859-13", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO885915 = >+ { "ISO-8859-15", SingleByteConvert, 0 }; >+static nsFontCharSetInfo JISX0201 = >+ { "jis_0201", SingleByteConvert, 1 }; >+static nsFontCharSetInfo KOI8R = >+ { "KOI8-R", SingleByteConvert, 0 }; >+static nsFontCharSetInfo KOI8U = >+ { "KOI8-U", SingleByteConvert, 0 }; >+static nsFontCharSetInfo TIS6202 = >+/* Added to support thai context sensitive shaping if >+ * CTL extension is is in force */ >+#ifdef SUNCTL >+ { "tis620-2", SingleByteConvert, 0 }; >+#else >+ { "windows-874", SingleByteConvert, 0 }; >+#endif /* SUNCTL */ >+static nsFontCharSetInfo TIS620 = >+ { "TIS-620", SingleByteConvert, 0 }; >+static nsFontCharSetInfo ISO885911 = >+ { "ISO-8859-11", SingleByteConvert, 0 }; >+static nsFontCharSetInfo Big5 = >+ { "x-x-big5", DoubleByteConvert, 1 }; >+// a kludge to distinguish zh-TW only fonts in Big5 (such as hpbig5-) >+// from zh-TW/zh-HK common fonts in Big5 (such as big5-1) >+static nsFontCharSetInfo Big5TWHK = >+ { "x-x-big5", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo CNS116431 = >+ { "x-cns-11643-1", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo CNS116432 = >+ { "x-cns-11643-2", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo CNS116433 = >+ { "x-cns-11643-3", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo CNS116434 = >+ { "x-cns-11643-4", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo CNS116435 = >+ { "x-cns-11643-5", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo CNS116436 = >+ { "x-cns-11643-6", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo CNS116437 = >+ { "x-cns-11643-7", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo GB2312 = >+ { "gb_2312-80", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo GB18030_0 = >+ { "gb18030.2000-0", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo GB18030_1 = >+ { "gb18030.2000-1", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo GBK = >+ { "x-gbk-noascii", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo HKSCS = >+ { "hkscs-1", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo JISX0208 = >+ { "jis_0208-1983", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo JISX0212 = >+ { "jis_0212-1990", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo KSC5601 = >+ { "ks_c_5601-1987", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo X11Johab = >+ { "x-x11johab", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo JohabNoAscii = >+ { "x-johab-noascii", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo JamoTTF = >+ { "x-koreanjamo-0", DoubleByteConvert, 1 }; >+static nsFontCharSetInfo TamilTTF = >+ { "x-tamilttf-0", DoubleByteConvert, 0 }; >+static nsFontCharSetInfo CP1250 = >+ { "windows-1250", SingleByteConvert, 0 }; >+static nsFontCharSetInfo CP1251 = >+ { "windows-1251", SingleByteConvert, 0 }; >+static nsFontCharSetInfo CP1252 = >+ { "windows-1252", SingleByteConvert, 0 }; >+static nsFontCharSetInfo CP1253 = >+ { "windows-1253", SingleByteConvert, 0 }; >+static nsFontCharSetInfo CP1257 = >+ { "windows-1257", SingleByteConvert, 0 }; >+ >+#ifdef SUNCTL >+/* Hindi range currently unsupported in FT2 range. Change TT* once we >+ arrive at a way to identify hindi */ >+static nsFontCharSetInfo SunIndic = >+ { "x-sun-unicode-india-0", DoubleByteConvert, 0 }; >+#endif /* SUNCTL */ >+ >+static nsFontCharSetInfo ISO106461 = >+ { nsnull, ISO10646Convert, 1}; >+ >+static nsFontCharSetInfo AdobeSymbol = >+ { "Adobe-Symbol-Encoding", SingleByteConvert, 0 }; >+static nsFontCharSetInfo AdobeEuro = >+ { "x-adobe-euro", SingleByteConvert, 0 }; >+ >+#ifdef MOZ_MATHML >+static nsFontCharSetInfo CMCMEX = >+ { "x-t1-cmex", SingleByteConvert, 0}; >+static nsFontCharSetInfo CMCMSY = >+ { "x-t1-cmsy", SingleByteConvert, 0}; >+static nsFontCharSetInfo CMCMR = >+ { "x-t1-cmr", SingleByteConvert, 0}; >+static nsFontCharSetInfo CMCMMI = >+ { "x-t1-cmmi", SingleByteConvert, 0}; >+static nsFontCharSetInfo Mathematica1 = >+ { "x-mathematica1", SingleByteConvert, 0}; >+static nsFontCharSetInfo Mathematica2 = >+ { "x-mathematica2", SingleByteConvert, 0}; >+static nsFontCharSetInfo Mathematica3 = >+ { "x-mathematica3", SingleByteConvert, 0}; >+static nsFontCharSetInfo Mathematica4 = >+ { "x-mathematica4", SingleByteConvert, 0}; >+static nsFontCharSetInfo Mathematica5 = >+ { "x-mathematica5", SingleByteConvert, 0}; >+#endif /* MATHML */ >+#endif /* FREETYPE2 */ > > static nsFontLangGroup FLG_WESTERN = { "x-western", nsnull }; > static nsFontLangGroup FLG_RUSSIAN = { "x-cyrillic", nsnull }; >@@ -821,7 +983,9 @@ > > gInitialized = 0; > >+#ifdef MOZ_ENABLE_FREETYPE2 > nsFT2FontNode::FreeGlobals(); >+#endif > > #ifdef ENABLE_X_FONT_BANNING > if (gFontRejectRegEx) { >@@ -1221,11 +1385,13 @@ > } > #endif /* ENABLE_X_FONT_BANNING */ > >+#ifdef MOZ_ENABLE_FREETYPE2 > rv = nsFT2FontNode::InitGlobals(); > if (NS_FAILED(rv)) { > FreeGlobals(); > return NS_ERROR_OUT_OF_MEMORY; > } >+#endif > > gInitialized = 1; > >@@ -1557,6 +1723,7 @@ > float f; > f = mDeviceContext->DevUnitsToAppUnits(); > >+#ifdef MOZ_ENABLE_FREETYPE2 > if (mWesternFont->IsFreeTypeFont()) { > nsFreeTypeFont *ft = (nsFreeTypeFont *)mWesternFont; > if (!ft) >@@ -1565,7 +1732,6 @@ > // and TrueType fonts) there should be a common set of methods > // to get the metrics info from the font object. These methods > // probably should be virtual functions defined in nsFontGTK. >-#if (defined(MOZ_ENABLE_FREETYPE2)) > int lineSpacing = ft->ascent() + ft->descent(); > if (lineSpacing > mWesternFont->mSize) { > mLeading = nscoord((lineSpacing - mWesternFont->mSize) * f); >@@ -1637,8 +1803,8 @@ > mStrikeoutSize = mUnderlineSize; > > return; >-#endif /* (defined(MOZ_ENABLE_FREETYPE2)) */ > } >+#endif > nsXFont *xFont = mWesternFont->GetXFont(); > XFontStruct *fontInfo = xFont->GetXFontStruct(); > f = mDeviceContext->DevUnitsToAppUnits(); >@@ -3255,6 +3421,8 @@ > nsFontMetricsGTK::PickASizeAndLoad(nsFontStretch* aStretch, > nsFontCharSetInfo* aCharSet, PRUint32 aChar, const char *aName) > { >+ >+#ifdef MOZ_ENABLE_FREETYPE2 > if (aStretch->mFreeTypeFaceID) { > //FREETYPE_FONT_PRINTF(("mFreeTypeFaceID = 0x%p", aStretch->mFreeTypeFaceID)); > nsFreeTypeFont *ftfont = nsFreeTypeFont::NewFont(aStretch->mFreeTypeFaceID, >@@ -3287,6 +3455,7 @@ > // SURROGATE is only supported by FreeType > return nsnull; > } >+#endif > > PRBool use_scaled_font = PR_FALSE; > PRBool have_nearly_rightsized_bitmap = PR_FALSE; >@@ -4600,6 +4769,40 @@ > return mCurrentFont->GetGDKFont(); > } > >+nsresult >+nsFontMetricsGTK::SetRightToLeftText(PRBool aIsRTL) >+{ >+ return NS_OK; >+} >+ >+nsresult >+nsFontMetricsGTK::GetClusterInfo(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 *aClusterStarts) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+nsresult >+nsFontMetricsGTK::GetPosition(const PRUnichar *aText, >+ PRUint32 aLength, >+ nscoord aCoord, >+ PRUint32 &aInx) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+ >+nsresult >+nsFontMetricsGTK::GetRangeWidth(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, >+ PRUint32 &aWidth) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ > PR_BEGIN_EXTERN_C > static int > CompareSizes(const void* aArg1, const void* aArg2, void *data) >@@ -5195,8 +5398,10 @@ > } > #endif > >+#ifdef MOZ_ENABLE_FREETYPE2 > // get FreeType fonts > nsFT2FontNode::GetFontNames(aPattern, aNodes); >+#endif > > nsCAutoString previousNodeName; > nsHashtable* node_hash; >@@ -6569,6 +6774,7 @@ > return charSetMap; > } > >+#ifdef MOZ_ENABLE_FREETYPE2 > void > CharSetNameToCodeRangeBits(const char *aCharset, > PRUint32 *aCodeRange1, PRUint32 *aCodeRange2) >@@ -6579,4 +6785,5 @@ > *aCodeRange1 = charSetInfo->mCodeRange1Bits; > *aCodeRange2 = charSetInfo->mCodeRange2Bits; > } >+#endif > >--- gfx/src/gtk/nsFontMetricsGTK.h >+++ gfx/src/gtk/nsFontMetricsGTK.h >@@ -52,7 +52,9 @@ > #include "nsICharRepresentable.h" > #include "nsCompressedCharMap.h" > #include "nsIFontMetricsGTK.h" >+#ifdef MOZ_ENABLE_FREETYPE2 > #include "nsIFontCatalogService.h" >+#endif > > #include <gdk/gdk.h> > #include <gdk/gdkx.h> >@@ -92,7 +94,9 @@ > char* mScalable; > PRBool mOutlineScaled; > nsVoidArray mScaledFonts; >+#ifdef MOZ_ENABLE_FREETYPE2 > nsITrueTypeFontCatalogEntry* mFreeTypeFaceID; >+#endif > }; > > struct nsFontStyle >@@ -344,6 +348,23 @@ > > virtual GdkFont* GetCurrentGDKFont(void); > >+ virtual nsresult SetRightToLeftText(PRBool aIsRTL); >+ >+ virtual nsresult GetClusterInfo(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 *aClusterStarts); >+ >+ virtual nsresult GetPosition(const PRUnichar *aText, >+ PRUint32 aLength, >+ nscoord aCoord, >+ PRUint32 &aInx); >+ >+ virtual nsresult GetRangeWidth(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, >+ PRUint32 &aWidth); >+ > static nsresult FamilyExists(nsIDeviceContext *aDevice, const nsString& aName); > static PRUint32 GetHints(void); > >@@ -411,7 +432,9 @@ > class nsHashKey; > PRBool FreeNode(nsHashKey* aKey, void* aData, void* aClosure); > nsFontCharSetInfo *GetCharSetInfo(const char *aCharSetName); >+#ifdef MOZ_ENABLE_FREETYPE2 > void CharSetNameToCodeRangeBits(const char*, PRUint32*, PRUint32*); >+#endif > nsFontCharSetMap *GetCharSetMap(const char *aCharSetName); > > >--- gfx/src/gtk/nsFontMetricsUtils.cpp >+++ gfx/src/gtk/nsFontMetricsUtils.cpp >@@ -50,11 +50,20 @@ > #include "nsFontMetricsGTK.h" > #endif > >+#ifdef MOZ_ENABLE_PANGO >+#include "nsFontMetricsPango.h" >+#endif >+ > #include "nsFontMetricsUtils.h" > > PRUint32 > NS_FontMetricsGetHints(void) > { >+#ifdef MOZ_ENABLE_PANGO >+ if (NS_IsPangoEnabled()) { >+ return nsFontMetricsPango::GetHints(); >+ } >+#endif > #ifdef MOZ_ENABLE_XFT > if (NS_IsXftEnabled()) { > return nsFontMetricsXft::GetHints(); >@@ -69,6 +78,11 @@ > nsresult > NS_FontMetricsFamilyExists(nsIDeviceContext *aDevice, const nsString &aName) > { >+#ifdef MOZ_ENABLE_PANGO >+ if (NS_IsPangoEnabled()) { >+ return nsFontMetricsPango::FamilyExists(aDevice, aName); >+ } >+#endif > #ifdef MOZ_ENABLE_XFT > // try to fall through to the core fonts if xft fails > if (NS_IsXftEnabled()) { >@@ -121,3 +135,17 @@ > } > > #endif /* MOZ_ENABLE_XFT */ >+ >+#ifdef MOZ_ENABLE_PANGO >+ >+PRBool >+NS_IsPangoEnabled(void) >+{ >+ char *val = PR_GetEnv("MOZ_ENABLE_PANGO"); >+ if (val) >+ return TRUE; >+ >+ return FALSE; >+} >+ >+#endif >--- gfx/src/gtk/nsFontMetricsUtils.h >+++ gfx/src/gtk/nsFontMetricsUtils.h >@@ -42,9 +42,12 @@ > extern PRUint32 NS_FontMetricsGetHints (void); > extern nsresult NS_FontMetricsFamilyExists(nsIDeviceContext *aDevice, > const nsString &aName); >- > #ifdef MOZ_ENABLE_XFT > extern PRBool NS_IsXftEnabled(void); > #endif > >+#ifdef MOZ_ENABLE_PANGO >+extern PRBool NS_IsPangoEnabled(void); >+#endif >+ > #endif /* __nsFontMetricsUtils_h */ >--- gfx/src/gtk/nsFontMetricsXft.h >+++ gfx/src/gtk/nsFontMetricsXft.h >@@ -202,6 +202,23 @@ > > virtual GdkFont* GetCurrentGDKFont(void); > >+ virtual nsresult SetRightToLeftText(PRBool aIsRTL); >+ >+ virtual nsresult GetClusterInfo(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 *aClusterStarts); >+ >+ virtual nsresult GetPosition(const PRUnichar *aText, >+ PRUint32 aLength, >+ nscoord aCoord, >+ PRUint32 &aInx); >+ >+ virtual nsresult GetRangeWidth(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, >+ PRUint32 &aWidth); >+ > // get hints for the font > static PRUint32 GetHints (void); > >--- gfx/src/gtk/nsGCCache.cpp >+++ gfx/src/gtk/nsGCCache.cpp >@@ -232,98 +232,42 @@ > // We have old GC, reuse it and check what > // we have to change > >- XGCValues xvalues; >- unsigned long xvalues_mask=0; >+ GdkGCValues xvalues; >+ int xvalues_mask = 0; > > if (entry->clipRegion) { > // set it to none here and then set the clip region with > // gdk_gc_set_clip_region in GetGC() > xvalues.clip_mask = None; >- xvalues_mask |= GCClipMask; >+ xvalues_mask |= GDK_GC_CLIP_MASK; > gdk_region_destroy(entry->clipRegion); > entry->clipRegion = NULL; > } > > if (entry->gcv.foreground.pixel != gcv->foreground.pixel) { >- xvalues.foreground = gcv->foreground.pixel; >- xvalues_mask |= GCForeground; >+ xvalues.foreground.pixel = gcv->foreground.pixel; >+ xvalues_mask |= GDK_GC_FOREGROUND; > } > > if (entry->gcv.function != gcv->function) { >- switch (gcv->function) { >- case GDK_COPY: >- xvalues.function = GXcopy; >- break; >- case GDK_INVERT: >- xvalues.function = GXinvert; >- break; >- case GDK_XOR: >- xvalues.function = GXxor; >- break; >- case GDK_CLEAR: >- xvalues.function = GXclear; >- break; >- case GDK_AND: >- xvalues.function = GXand; >- break; >- case GDK_AND_REVERSE: >- xvalues.function = GXandReverse; >- break; >- case GDK_AND_INVERT: >- xvalues.function = GXandInverted; >- break; >- case GDK_NOOP: >- xvalues.function = GXnoop; >- break; >- case GDK_OR: >- xvalues.function = GXor; >- break; >- case GDK_EQUIV: >- xvalues.function = GXequiv; >- break; >- case GDK_OR_REVERSE: >- xvalues.function = GXorReverse; >- break; >- case GDK_COPY_INVERT: >- xvalues.function = GXcopyInverted; >- break; >- case GDK_OR_INVERT: >- xvalues.function = GXorInverted; >- break; >- case GDK_NAND: >- xvalues.function = GXnand; >- break; >- case GDK_SET: >- xvalues.function = GXset; >- break; >- } >- xvalues_mask |= GCFunction; >+ xvalues.function = gcv->function; >+ xvalues_mask |= GDK_GC_FUNCTION; > } > > if(entry->gcv.font != gcv->font && flags & GDK_GC_FONT) { >- xvalues.font = ((XFontStruct *)GDK_FONT_XFONT(gcv->font))->fid; >- xvalues_mask |= GCFont; >+ xvalues.font = gcv->font; >+ xvalues_mask |= GDK_GC_FONT; > } > > if (entry->gcv.line_style != gcv->line_style) { >- switch (gcv->line_style) { >- case GDK_LINE_SOLID: >- xvalues.line_style = LineSolid; >- break; >- case GDK_LINE_ON_OFF_DASH: >- xvalues.line_style = LineOnOffDash; >- break; >- case GDK_LINE_DOUBLE_DASH: >- xvalues.line_style = LineDoubleDash; >- break; >- } >- xvalues_mask |= GCLineStyle; >+ xvalues.line_style = gcv->line_style; >+ xvalues_mask |= GDK_GC_LINE_STYLE; > } > > if (xvalues_mask != 0) { >- XChangeGC(GDK_GC_XDISPLAY(entry->gc), GDK_GC_XGC(entry->gc), >- xvalues_mask, &xvalues); >+ gdk_gc_set_values(entry->gc, &xvalues, (GdkGCValuesMask)xvalues_mask); > } >+ > entry->flags = flags; > entry->gcv = *gcv; > } >--- gfx/src/gtk/nsGfxFactoryGTK.cpp >+++ gfx/src/gtk/nsGfxFactoryGTK.cpp >@@ -62,6 +62,9 @@ > #ifdef NATIVE_THEME_SUPPORT > #include "nsNativeThemeGTK.h" > #endif >+#ifdef MOZ_ENABLE_PANGO >+#include "nsFontMetricsPango.h" >+#endif > #ifdef MOZ_ENABLE_XFT > #include "nsFontMetricsXft.h" > #endif >@@ -71,8 +74,10 @@ > #include "nsFontMetricsUtils.h" > #include "nsPrintSession.h" > #include "gfxImageFrame.h" >+#ifdef MOZ_ENABLE_FREETYPE2 > #include "nsFT2FontCatalog.h" > #include "nsFreeType.h" >+#endif > > // objects that just require generic constructors > >@@ -92,8 +97,8 @@ > #endif > NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSession, Init) > NS_GENERIC_FACTORY_CONSTRUCTOR(gfxImageFrame) >-NS_GENERIC_FACTORY_CONSTRUCTOR(nsFT2FontCatalog) > #ifdef MOZ_ENABLE_FREETYPE2 >+NS_GENERIC_FACTORY_CONSTRUCTOR(nsFT2FontCatalog) > NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsFreeType2, Init) > #endif > >@@ -112,6 +117,13 @@ > if (aOuter) > return NS_ERROR_NO_AGGREGATION; > >+#ifdef MOZ_ENABLE_PANGO >+ if (NS_IsPangoEnabled()) { >+ result = new nsFontMetricsPango(); >+ if (!result) >+ return NS_ERROR_OUT_OF_MEMORY; >+ } else { >+#endif > #ifdef MOZ_ENABLE_XFT > if (NS_IsXftEnabled()) { > result = new nsFontMetricsXft(); >@@ -127,6 +139,9 @@ > #ifdef MOZ_ENABLE_XFT > } > #endif >+#ifdef MOZ_ENABLE_PANGO >+ } >+#endif > > NS_ADDREF(result); > nsresult rv = result->QueryInterface(aIID, aResult); >@@ -148,6 +163,13 @@ > if (aOuter) > return NS_ERROR_NO_AGGREGATION; > >+#ifdef MOZ_ENABLE_PANGO >+ if (NS_IsPangoEnabled()) { >+ result = new nsFontEnumeratorPango(); >+ if (!result) >+ return NS_ERROR_OUT_OF_MEMORY; >+ } else { >+#endif > #ifdef MOZ_ENABLE_XFT > if (NS_IsXftEnabled()) { > result = new nsFontEnumeratorXft(); >@@ -163,6 +185,9 @@ > #ifdef MOZ_ENABLE_XFT > } > #endif >+#ifdef MOZ_ENABLE_PANGO >+ } >+#endif > > NS_ADDREF(result); > nsresult rv = result->QueryInterface(aIID, aResult); >@@ -291,11 +316,11 @@ > NS_PRINTSESSION_CID, > "@mozilla.org/gfx/printsession;1", > nsPrintSessionConstructor }, >+#ifdef MOZ_ENABLE_FREETYPE2 > { "TrueType Font Catalog Service", > NS_FONTCATALOGSERVICE_CID, > "@mozilla.org/gfx/xfontcatalogservice;1", > nsFT2FontCatalogConstructor }, >-#ifdef MOZ_ENABLE_FREETYPE2 > { "FreeType2 routines", > NS_FREETYPE2_CID, > NS_FREETYPE2_CONTRACTID, >--- gfx/src/gtk/nsIFontMetricsGTK.h >+++ gfx/src/gtk/nsIFontMetricsGTK.h >@@ -121,6 +121,24 @@ > // particular handle. > virtual GdkFont* GetCurrentGDKFont(void) = 0; > >+ // Set the direction of the text rendering >+ virtual nsresult SetRightToLeftText(PRBool aIsRTL) = 0; >+ >+ virtual nsresult GetClusterInfo(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 *aClusterStarts) = 0; >+ >+ virtual nsresult GetPosition(const PRUnichar *aText, >+ PRUint32 aLength, >+ nscoord aCoord, >+ PRUint32 &aInx) = 0; >+ >+ virtual nsresult GetRangeWidth(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, >+ PRUint32 &aWidth) = 0; >+ > }; > > #endif /* __nsIFontMetricsGTK_h */ >--- gfx/src/gtk/nsRenderingContextGTK.cpp >+++ gfx/src/gtk/nsRenderingContextGTK.cpp >@@ -524,6 +524,9 @@ > > values.foreground.pixel = > gdk_rgb_xpixel_from_rgb(NS_TO_GDK_RGB(mCurrentColor)); >+ values.foreground.red = (NS_GET_R(mCurrentColor) << 8) | NS_GET_R(mCurrentColor); >+ values.foreground.green = (NS_GET_G(mCurrentColor) << 8) | NS_GET_G(mCurrentColor); >+ values.foreground.blue = (NS_GET_B(mCurrentColor) << 8) | NS_GET_B(mCurrentColor); > valuesMask = GDK_GC_FOREGROUND; > > #ifdef MOZ_ENABLE_COREXFONTS >@@ -1438,6 +1441,31 @@ > > #endif /* MOZ_MATHML */ > >+NS_IMETHODIMP nsRenderingContextGTK::SetRightToLeftText(PRBool aIsRTL) >+{ >+ return mFontMetrics->SetRightToLeftText(aIsRTL); >+} >+ >+NS_IMETHODIMP nsRenderingContextGTK::GetClusterInfo(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 *aClusterStarts) >+{ >+ return mFontMetrics->GetClusterInfo(aText, aLength, aClusterStarts); >+} >+ >+NS_IMETHODIMP nsRenderingContextGTK::GetPosition(const PRUnichar *aText, PRUint32 aLength, >+ nscoord aCoord, PRUint32 &aInx) >+{ >+ return mFontMetrics->GetPosition(aText, aLength, aCoord, aInx); >+} >+ >+NS_IMETHODIMP nsRenderingContextGTK::GetRangeWidth(const PRUnichar *aText, PRUint32 aLength, >+ PRUint32 aStart, PRUint32 aEnd, >+ PRUint32 &aWidth) >+{ >+ return mFontMetrics->GetRangeWidth(aText, aLength, aStart, aEnd, aWidth); >+} >+ > NS_IMETHODIMP nsRenderingContextGTK::DrawImage(imgIContainer *aImage, const nsRect * aSrcRect, const nsPoint * aDestPoint) > { > UpdateGC(); >--- gfx/src/gtk/nsRenderingContextGTK.h >+++ gfx/src/gtk/nsRenderingContextGTK.h >@@ -194,6 +194,17 @@ > const nsRect &aDestBounds, PRUint32 aCopyFlags); > NS_IMETHOD RetrieveCurrentNativeGraphicData(PRUint32 * ngd); > >+ NS_IMETHOD SetRightToLeftText(PRBool aIsRTL); >+ NS_IMETHOD GetClusterInfo(const PRUnichar *aText, PRUint32 aLength, >+ PRUint32 *aClusterStarts); >+ NS_IMETHOD GetPosition(const PRUnichar *aText, PRUint32 aLength, >+ nscoord aCoord, PRUint32 &aInx); >+ NS_IMETHOD GetRangeWidth(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, >+ PRUint32 &aWidth); >+ > NS_IMETHOD DrawImage(imgIContainer *aImage, const nsRect * aSrcRect, const nsPoint * aDestPoint); > NS_IMETHOD DrawScaledImage(imgIContainer *aImage, const nsRect * aSrcRect, const nsRect * aDestRect); > >--- gfx/src/gtk/nsFontMetricsPango.h >+++ gfx/src/gtk/nsFontMetricsPango.h >@@ -0,0 +1,296 @@ >+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ >+/* vim:expandtab:shiftwidth=4:tabstop=4: >+ */ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is mozilla.org code. >+ * >+ * The Initial Developer of the Original Code Christopher Blizzard >+ * <blizzard@mozilla.org>. Portions created by the Initial Developer >+ * are Copyright (C) 2002 the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+#include "nsIFontMetrics.h" >+#include "nsIFontEnumerator.h" >+#include "nsCRT.h" >+#include "nsIAtom.h" >+#include "nsString.h" >+#include "nsVoidArray.h" >+#include "nsIFontMetricsGTK.h" >+ >+#include <pango/pango.h> >+ >+class nsFontMetricsPango : public nsIFontMetricsGTK >+{ >+public: >+ nsFontMetricsPango(); >+ virtual ~nsFontMetricsPango(); >+ >+ NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW >+ >+ // nsISupports >+ NS_DECL_ISUPPORTS >+ >+ // nsIFontMetrics >+ NS_IMETHOD Init (const nsFont& aFont, nsIAtom* aLangGroup, >+ nsIDeviceContext *aContext); >+ NS_IMETHOD Destroy(); >+ NS_IMETHOD GetFont (const nsFont *&aFont); >+ NS_IMETHOD GetLangGroup (nsIAtom** aLangGroup); >+ NS_IMETHOD GetFontHandle (nsFontHandle &aHandle); >+ >+ NS_IMETHOD GetXHeight (nscoord& aResult) >+ { aResult = mXHeight; return NS_OK; }; >+ >+ NS_IMETHOD GetSuperscriptOffset (nscoord& aResult) >+ { aResult = mSuperscriptOffset; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetSubscriptOffset (nscoord& aResult) >+ { aResult = mSubscriptOffset; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetStrikeout (nscoord& aOffset, nscoord& aSize) >+ { aOffset = mStrikeoutOffset; >+ aSize = mStrikeoutSize; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetUnderline (nscoord& aOffset, nscoord& aSize) >+ { aOffset = mUnderlineOffset; >+ aSize = mUnderlineSize; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetHeight (nscoord &aHeight) >+ { aHeight = mMaxHeight; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetNormalLineHeight (nscoord &aHeight) >+ { aHeight = mEmHeight + mLeading; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetLeading (nscoord &aLeading) >+ { aLeading = mLeading; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetEmHeight (nscoord &aHeight) >+ { aHeight = mEmHeight; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetEmAscent (nscoord &aAscent) >+ { aAscent = mEmAscent; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetEmDescent (nscoord &aDescent) >+ { aDescent = mEmDescent; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetMaxHeight (nscoord &aHeight) >+ { aHeight = mMaxHeight; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetMaxAscent (nscoord &aAscent) >+ { aAscent = mMaxAscent; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetMaxDescent (nscoord &aDescent) >+ { aDescent = mMaxDescent; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetMaxAdvance (nscoord &aAdvance) >+ { aAdvance = mMaxAdvance; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetSpaceWidth (nscoord &aSpaceCharWidth) >+ { aSpaceCharWidth = mSpaceWidth; >+ return NS_OK; }; >+ >+ NS_IMETHOD GetAveCharWidth (nscoord &aAveCharWidth) >+ { aAveCharWidth = mAveCharWidth; >+ return NS_OK; }; >+ >+ // nsIFontMetricsGTK (calls from the font rendering layer) >+ virtual nsresult GetWidth(const char* aString, PRUint32 aLength, >+ nscoord& aWidth, >+ nsRenderingContextGTK *aContext); >+ virtual nsresult GetWidth(const PRUnichar* aString, PRUint32 aLength, >+ nscoord& aWidth, PRInt32 *aFontID, >+ nsRenderingContextGTK *aContext); >+ >+ virtual nsresult GetTextDimensions(const PRUnichar* aString, >+ PRUint32 aLength, >+ nsTextDimensions& aDimensions, >+ PRInt32* aFontID, >+ nsRenderingContextGTK *aContext); >+ virtual nsresult GetTextDimensions(const char* aString, >+ PRInt32 aLength, >+ PRInt32 aAvailWidth, >+ PRInt32* aBreaks, >+ PRInt32 aNumBreaks, >+ nsTextDimensions& aDimensions, >+ PRInt32& aNumCharsFit, >+ nsTextDimensions& aLastWordDimensions, >+ PRInt32* aFontID, >+ nsRenderingContextGTK *aContext); >+ virtual nsresult GetTextDimensions(const PRUnichar* aString, >+ PRInt32 aLength, >+ PRInt32 aAvailWidth, >+ PRInt32* aBreaks, >+ PRInt32 aNumBreaks, >+ nsTextDimensions& aDimensions, >+ PRInt32& aNumCharsFit, >+ nsTextDimensions& aLastWordDimensions, >+ PRInt32* aFontID, >+ nsRenderingContextGTK *aContext); >+ >+ virtual nsresult DrawString(const char *aString, PRUint32 aLength, >+ nscoord aX, nscoord aY, >+ const nscoord* aSpacing, >+ nsRenderingContextGTK *aContext, >+ nsDrawingSurfaceGTK *aSurface); >+ virtual nsresult DrawString(const PRUnichar* aString, PRUint32 aLength, >+ nscoord aX, nscoord aY, >+ PRInt32 aFontID, >+ const nscoord* aSpacing, >+ nsRenderingContextGTK *aContext, >+ nsDrawingSurfaceGTK *aSurface); >+ >+#ifdef MOZ_MATHML >+ virtual nsresult GetBoundingMetrics(const char *aString, PRUint32 aLength, >+ nsBoundingMetrics &aBoundingMetrics, >+ nsRenderingContextGTK *aContext); >+ virtual nsresult GetBoundingMetrics(const PRUnichar *aString, >+ PRUint32 aLength, >+ nsBoundingMetrics &aBoundingMetrics, >+ PRInt32 *aFontID, >+ nsRenderingContextGTK *aContext); >+#endif /* MOZ_MATHML */ >+ >+ virtual GdkFont* GetCurrentGDKFont(void); >+ >+ virtual nsresult SetRightToLeftText(PRBool aIsRTL); >+ >+ virtual nsresult GetClusterInfo(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 *aClusterStarts); >+ >+ virtual nsresult GetPosition(const PRUnichar *aText, >+ PRUint32 aLength, >+ nscoord aCoord, >+ PRUint32 &aInx); >+ >+ virtual nsresult GetRangeWidth(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, >+ PRUint32 &aWidth); >+ >+ // get hints for the font >+ static PRUint32 GetHints (void); >+ >+ // drawing surface methods >+ static nsresult FamilyExists (nsIDeviceContext *aDevice, >+ const nsString &aName); >+ >+private: >+ >+ // generic font metrics class bits >+ nsCStringArray mFontList; >+ nsAutoVoidArray mFontIsGeneric; >+ >+ nsIDeviceContext *mDeviceContext; >+ nsCOMPtr<nsIAtom> mLangGroup; >+ nsCString *mGenericFont; >+ nsFont *mFont; >+ float mPointSize; >+ >+ nsCAutoString mDefaultFont; >+ >+ // Pango-related items >+ PangoFontDescription *mPangoFontDesc; >+ PangoContext *mPangoContext; >+ PangoContext *mLTRPangoContext; >+ PangoContext *mRTLPangoContext; >+ PangoAttrList *mPangoAttrList; >+ PRBool mIsRTL; >+ >+ // Cached font metrics >+ nscoord mXHeight; >+ nscoord mSuperscriptOffset; >+ nscoord mSubscriptOffset; >+ nscoord mStrikeoutOffset; >+ nscoord mStrikeoutSize; >+ nscoord mUnderlineOffset; >+ nscoord mUnderlineSize; >+ nscoord mMaxHeight; >+ nscoord mLeading; >+ nscoord mEmHeight; >+ nscoord mEmAscent; >+ nscoord mEmDescent; >+ nscoord mMaxAscent; >+ nscoord mMaxDescent; >+ nscoord mMaxAdvance; >+ nscoord mSpaceWidth; >+ nscoord mPangoSpaceWidth; >+ nscoord mAveCharWidth; >+ >+ // Private methods >+ nsresult RealizeFont(void); >+ nsresult CacheFontMetrics(void); >+ >+ static PRBool EnumFontCallback(const nsString &aFamily, >+ PRBool aIsGeneric, void *aData); >+ >+ void DrawStringSlowly(const gchar *aText, >+ const PRUnichar *aOrigString, >+ PRUint32 aLength, >+ GdkDrawable *aDrawable, >+ GdkGC *aGC, gint aX, gint aY, >+ PangoLayoutLine *aLine, >+ const nscoord *aSpacing); >+ >+ nsresult GetTextDimensionsInternal(const gchar* aString, >+ PRInt32 aLength, >+ PRInt32 aAvailWidth, >+ PRInt32* aBreaks, >+ PRInt32 aNumBreaks, >+ nsTextDimensions& aDimensions, >+ PRInt32& aNumCharsFit, >+ nsTextDimensions& aLastWordDimensions, >+ nsRenderingContextGTK *aContext); >+ >+ void FixupSpaceWidths (PangoLayout *aLayout, const char *aString); >+}; >+ >+class nsFontEnumeratorPango : public nsIFontEnumerator >+{ >+public: >+ nsFontEnumeratorPango(); >+ NS_DECL_ISUPPORTS >+ NS_DECL_NSIFONTENUMERATOR >+}; >--- gfx/src/gtk/nsFontMetricsXft.cpp >+++ gfx/src/gtk/nsFontMetricsXft.cpp >@@ -64,6 +64,7 @@ > #include "nsNetUtil.h" > #include "nsClassHashtable.h" > #include "nsAutoBuffer.h" >+#include "nsFontConfigUtils.h" > > #include <gdk/gdkx.h> > #include <freetype/tttables.h> >@@ -197,26 +198,6 @@ > FT_Encoding mFT_Encoding; > }; > >-struct MozXftLangGroup { >- const char *mozLangGroup; >- FcChar32 character; >- const FcChar8 *XftLang; >-}; >- >-static const MozXftLangGroup MozXftLangGroups[] = { >- { "x-western", 0x0041, (const FcChar8 *)"en" }, >- { "x-central-euro", 0x0100, (const FcChar8 *)"pl" }, >- { "x-cyrillic", 0x0411, (const FcChar8 *)"ru" }, >- { "x-baltic", 0x0104, (const FcChar8 *)"lv" }, >- { "x-devanagari", 0x0905, (const FcChar8 *)"hi" }, >- { "x-tamil", 0x0B85, (const FcChar8 *)"ta" }, >- { "x-unicode", 0x0000, 0 }, >- { "x-user-def", 0x0000, 0 }, >-}; >- >-#define NUM_XFT_LANG_GROUPS (sizeof (MozXftLangGroups) / \ >- sizeof (MozXftLangGroups[0])) >- > struct DrawStringData { > nscoord x; > nscoord y; >@@ -239,21 +220,11 @@ > #define AUTO_BUFFER_SIZE 3000 > typedef nsAutoBuffer<FcChar32, AUTO_BUFFER_SIZE> nsAutoFcChar32Buffer; > >-static int CalculateSlant (PRUint8 aStyle); >-static int CalculateWeight (PRUint16 aWeight); >-static void AddLangGroup (FcPattern *aPattern, nsIAtom *aLangGroup); >-static void AddFFRE (FcPattern *aPattern, nsCString *aFamily, >- PRBool aWeak); >-static void FFREToFamily (nsACString &aFFREName, nsACString &oFamily); >-static int FFRECountHyphens (nsACString &aFFREName); > static int CompareFontNames (const void* aArg1, const void* aArg2, > void* aClosure); >-static PRBool IsASCIIFontName (const nsString& aName); > static nsresult EnumFontsXft (nsIAtom* aLangGroup, const char* aGeneric, > PRUint32* aCount, PRUnichar*** aResult); > >-static const MozXftLangGroup* FindFCLangGroup (nsACString &aLangGroup); >- > static void ConvertCharToUCS4 (const char *aString, > PRUint32 aLength, > nsAutoFcChar32Buffer &aOutBuffer, >@@ -452,7 +423,7 @@ > // Make sure that the pixel size is at least greater than zero > if (mPixelSize < 1) { > #ifdef DEBUG >- printf("*** Warning: nsFontMetricsXft was passed a pixel size of %d\n", >+ printf("*** Warning: nsFontMetricsXft was passed a pixel size of %f\n", > mPixelSize); > #endif > mPixelSize = 1; >@@ -477,6 +448,26 @@ > if (NS_FAILED(RealizeFont())) > return NS_ERROR_FAILURE; > >+#ifdef DEBUG_foo >+ printf("%i\n", mXHeight); >+ printf("%i\n", mSuperscriptOffset); >+ printf("%i\n", mSubscriptOffset); >+ printf("%i\n", mStrikeoutOffset); >+ printf("%i\n", mStrikeoutSize); >+ printf("%i\n", mUnderlineOffset); >+ printf("%i\n", mUnderlineSize); >+ printf("%i\n", mMaxHeight); >+ printf("%i\n", mLeading); >+ printf("%i\n", mEmHeight); >+ printf("%i\n", mEmAscent); >+ printf("%i\n", mEmDescent); >+ printf("%i\n", mMaxAscent); >+ printf("%i\n", mMaxDescent); >+ printf("%i\n", mMaxAdvance); >+ printf("%i\n", mSpaceWidth); >+ printf("%i\n", mAveCharWidth); >+#endif /* DEBUG_foo */ >+ > return NS_OK; > } > >@@ -532,6 +523,10 @@ > f = mDeviceContext->DevUnitsToAppUnits(); > aWidth = NSToCoordRound(glyphInfo.xOff * f); > >+#ifdef DEBUG_foo >+ printf("GetWidth (char *) %d\n", aWidth); >+#endif >+ > return NS_OK; > } > >@@ -555,6 +550,10 @@ > if (aFontID) > *aFontID = 0; > >+#ifdef DEBUG_foo >+ printf("GetWidth %d\n", aWidth); >+#endif >+ > return NS_OK; > } > >@@ -588,6 +587,11 @@ > if (nsnull != aFontID) > *aFontID = 0; > >+#ifdef DEBUG_foo >+ printf("GetTextDimensions %d %d %d\n", aDimensions.width, >+ aDimensions.ascent, aDimensions.descent); >+#endif >+ > return NS_OK; > } > >@@ -647,6 +651,10 @@ > nsAutoDrawSpecBuffer drawBuffer(data.draw, &data.color); > data.drawBuffer = &drawBuffer; > >+#ifdef DEBUG_foo >+ printf("DrawString (char *)\n"); >+#endif >+ > return EnumerateGlyphs(aString, aLength, > &nsFontMetricsXft::DrawStringCallback, &data); > } >@@ -677,6 +685,10 @@ > nsAutoDrawSpecBuffer drawBuffer(data.draw, &data.color); > data.drawBuffer = &drawBuffer; > >+#ifdef DEBUG_foo >+ printf("DrawString\n"); >+#endif >+ > return EnumerateGlyphs(aString, aLength, > &nsFontMetricsXft::DrawStringCallback, &data); > } >@@ -716,6 +728,15 @@ > aBoundingMetrics.ascent = NSToCoordRound(aBoundingMetrics.ascent * P2T); > aBoundingMetrics.descent = NSToCoordRound(aBoundingMetrics.descent * P2T); > >+#ifdef DEBUG_foo >+ printf("GetBoundingMetrics (char *)%d %d %d %d %d\n", >+ aBoundingMetrics.leftBearing, >+ aBoundingMetrics.rightBearing, >+ aBoundingMetrics.width, >+ aBoundingMetrics.ascent, >+ aBoundingMetrics.descent); >+#endif >+ > return NS_OK; > } > >@@ -757,6 +778,15 @@ > if (nsnull != aFontID) > *aFontID = 0; > >+#ifdef DEBUG_foo >+ printf("GetBoundingMetrics %d %d %d %d %d\n", >+ aBoundingMetrics.leftBearing, >+ aBoundingMetrics.rightBearing, >+ aBoundingMetrics.width, >+ aBoundingMetrics.ascent, >+ aBoundingMetrics.descent); >+#endif >+ > return NS_OK; > } > >@@ -768,6 +798,39 @@ > return nsnull; > } > >+nsresult >+nsFontMetricsXft::SetRightToLeftText(PRBool aIsRTL) >+{ >+ return NS_OK; >+} >+ >+nsresult >+nsFontMetricsXft::GetClusterInfo(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 *aClusterStarts) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+nsresult >+nsFontMetricsXft::GetPosition(const PRUnichar *aText, >+ PRUint32 aLength, >+ nscoord aCoord, >+ PRUint32 &aInx) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+nsresult >+nsFontMetricsXft::GetRangeWidth(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, >+ PRUint32 &aWidth) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ > PRUint32 > nsFontMetricsXft::GetHints(void) > { >@@ -1041,13 +1104,13 @@ > break;; > > nsCString *familyName = mFontList.CStringAt(i); >- AddFFRE(mPattern, familyName, PR_FALSE); >+ NS_AddFFRE(mPattern, familyName, PR_FALSE); > } > > // Add the language group. Note that we do this before adding any > // generics. That's because the language is more important than > // any generic font. >- AddLangGroup (mPattern, mLangGroup); >+ NS_AddLangGroup (mPattern, mLangGroup); > > // If there's a generic add a pref for the generic if there's one > // set. >@@ -1071,7 +1134,7 @@ > > // we ignore prefs that have three hypens since they are X > // style prefs. >- if (FFRECountHyphens(value) < 3) { >+ if (NS_FFRECountHyphens(value) < 3) { > nsCString tmpstr; > tmpstr.Append(value); > >@@ -1080,14 +1143,14 @@ > tmpstr.get()); > } > >- AddFFRE(mPattern, &tmpstr, PR_FALSE); >+ NS_AddFFRE(mPattern, &tmpstr, PR_FALSE); > } > } > } > > // Add the generic if there is one. > if (mGenericFont && !mFont->systemFont) >- AddFFRE(mPattern, mGenericFont, PR_FALSE); >+ NS_AddFFRE(mPattern, mGenericFont, PR_FALSE); > > if (PR_LOG_TEST(gXftFontLoad, PR_LOG_DEBUG)) { > // generic font >@@ -1114,7 +1177,7 @@ > > // weight > printf("\tweight: (orig,calc) %d,%d\n", >- mFont->weight, CalculateWeight(mFont->weight)); >+ mFont->weight, NS_CalculateWeight(mFont->weight)); > > } > >@@ -1126,11 +1189,11 @@ > > // Add the slant type > FcPatternAddInteger(mPattern, FC_SLANT, >- CalculateSlant(mFont->style)); >+ NS_CalculateSlant(mFont->style)); > > // Add the weight > FcPatternAddInteger(mPattern, FC_WEIGHT, >- CalculateWeight(mFont->weight)); >+ NS_CalculateWeight(mFont->weight)); > > // Set up the default substitutions for this font > FcConfigSubstitute(0, mPattern, FcMatchPattern); >@@ -1292,7 +1355,7 @@ > FcPatternAddInteger(pattern, FC_PIXEL_SIZE, int(0.5 * mPixelSize)); > > FcPatternAddInteger(pattern, FC_WEIGHT, >- CalculateWeight(mFont->weight)); >+ NS_CalculateWeight(mFont->weight)); > > FcConfigSubstitute(0, pattern, FcMatchPattern); > XftDefaultSubstitute(GDK_DISPLAY(), DefaultScreen(GDK_DISPLAY()), >@@ -1708,7 +1771,7 @@ > nsFontMetricsXft::FamilyExists(nsIDeviceContext *aDevice, > const nsString &aName) > { >- if (!IsASCIIFontName(aName)) >+ if (!NS_IsASCIIFontName(aName)) > return NS_ERROR_FAILURE; > > NS_ConvertUCS2toUTF8 name(aName); >@@ -1766,7 +1829,7 @@ > { > // make sure it's an ascii name, if not then return and continue > // enumerating >- if (!IsASCIIFontName(aFamily)) >+ if (!NS_IsASCIIFontName(aFamily)) > return PR_TRUE; > > nsCAutoString name; >@@ -1864,7 +1927,7 @@ > > if (aLangGroup && *aLangGroup) { > nsCOMPtr<nsIAtom> langGroup = do_GetAtom(aLangGroup); >- AddLangGroup(match_pattern, langGroup); >+ NS_AddLangGroup(match_pattern, langGroup); > } > > FcConfigSubstitute(0, match_pattern, FcMatchPattern); >@@ -2239,149 +2302,6 @@ > > /* static */ > int >-CalculateSlant(PRUint8 aStyle) >-{ >- int fcSlant; >- >- switch(aStyle) { >- case NS_FONT_STYLE_ITALIC: >- fcSlant = FC_SLANT_ITALIC; >- break; >- case NS_FONT_STYLE_OBLIQUE: >- fcSlant = FC_SLANT_OBLIQUE; >- break; >- default: >- fcSlant = FC_SLANT_ROMAN; >- break; >- } >- >- return fcSlant; >-} >- >-/* static */ >-int >-CalculateWeight (PRUint16 aWeight) >-{ >- /* >- * weights come in two parts crammed into one >- * integer -- the "base" weight is weight / 100, >- * the rest of the value is the "offset" from that >- * weight -- the number of steps to move to adjust >- * the weight in the list of supported font weights, >- * this value can be negative or positive. >- */ >- PRInt32 baseWeight = (aWeight + 50) / 100; >- PRInt32 offset = aWeight - baseWeight * 100; >- >- /* clip weights to range 0 to 9 */ >- if (baseWeight < 0) >- baseWeight = 0; >- if (baseWeight > 9) >- baseWeight = 9; >- >- /* Map from weight value to fcWeights index */ >- static int fcWeightLookup[10] = { >- 0, 0, 0, 0, 1, 1, 2, 3, 3, 4, >- }; >- >- PRInt32 fcWeight = fcWeightLookup[baseWeight]; >- >- /* >- * adjust by the offset value, make sure we stay inside the >- * fcWeights table >- */ >- fcWeight += offset; >- >- if (fcWeight < 0) >- fcWeight = 0; >- if (fcWeight > 4) >- fcWeight = 4; >- >- /* Map to final FC_WEIGHT value */ >- static int fcWeights[5] = { >- FC_WEIGHT_LIGHT, /* 0 */ >- FC_WEIGHT_MEDIUM, /* 1 */ >- FC_WEIGHT_DEMIBOLD, /* 2 */ >- FC_WEIGHT_BOLD, /* 3 */ >- FC_WEIGHT_BLACK, /* 4 */ >- }; >- >- return fcWeights[fcWeight]; >- >-} >- >-/* static */ >-void >-AddLangGroup(FcPattern *aPattern, nsIAtom *aLangGroup) >-{ >- // Find the FC lang group for this lang group >- nsCAutoString cname; >- aLangGroup->ToUTF8String(cname); >- >- // see if the lang group needs to be translated from mozilla's >- // internal mapping into fontconfig's >- const struct MozXftLangGroup *langGroup; >- langGroup = FindFCLangGroup(cname); >- >- // if there's no lang group, just use the lang group as it was >- // passed to us >- // >- // we're casting away the const here for the strings - should be >- // safe. >- if (!langGroup) >- FcPatternAddString(aPattern, FC_LANG, (FcChar8 *)cname.get()); >- else if (langGroup->XftLang) >- FcPatternAddString(aPattern, FC_LANG, (FcChar8 *)langGroup->XftLang); >-} >- >-/* static */ >-void >-AddFFRE(FcPattern *aPattern, nsCString *aFamily, PRBool aWeak) >-{ >- nsCAutoString family; >- FFREToFamily(*aFamily, family); >- >- FcValue v; >- v.type = FcTypeString; >- // casting away the const here, should be safe >- v.u.s = (FcChar8 *)family.get(); >- >- if (aWeak) >- FcPatternAddWeak(aPattern, FC_FAMILY, v, FcTrue); >- else >- FcPatternAdd(aPattern, FC_FAMILY, v, FcTrue); >-} >- >-/* static */ >-void >-FFREToFamily(nsACString &aFFREName, nsACString &oFamily) >-{ >- if (FFRECountHyphens(aFFREName) == 3) { >- PRInt32 familyHyphen = aFFREName.FindChar('-') + 1; >- PRInt32 registryHyphen = aFFREName.FindChar('-',familyHyphen); >- oFamily.Append(Substring(aFFREName, familyHyphen, >- registryHyphen-familyHyphen)); >- } >- else { >- oFamily.Append(aFFREName); >- } >-} >- >-/* static */ >-int >-FFRECountHyphens (nsACString &aFFREName) >-{ >- int h = 0; >- PRInt32 hyphen = 0; >- while ((hyphen = aFFREName.FindChar('-', hyphen)) >= 0) { >- ++h; >- ++hyphen; >- } >- return h; >-} >- >-/* static */ >-int > CompareFontNames (const void* aArg1, const void* aArg2, void* aClosure) > { > const PRUnichar* str1 = *((const PRUnichar**) aArg1); >@@ -2390,23 +2310,6 @@ > return nsCRT::strcmp(str1, str2); > } > >-PRBool >-IsASCIIFontName(const nsString& aName) >-{ >- PRUint32 len = aName.Length(); >- const PRUnichar* str = aName.get(); >- for (PRUint32 i = 0; i < len; i++) { >- /* >- * X font names are printable ASCII, ignore others (for now) >- */ >- if ((str[i] < 0x20) || (str[i] > 0x7E)) { >- return PR_FALSE; >- } >- } >- >- return PR_TRUE; >-} >- > /* static */ > nsresult > EnumFontsXft(nsIAtom* aLangGroup, const char* aGeneric, >@@ -2434,7 +2337,7 @@ > > // take the pattern and add the lang group to it > if (aLangGroup) >- AddLangGroup(pat, aLangGroup); >+ NS_AddLangGroup(pat, aLangGroup); > > // get the font list > fs = FcFontList(0, pat, os); >@@ -2542,20 +2445,6 @@ > } > > /* static */ >-const MozXftLangGroup* >-FindFCLangGroup (nsACString &aLangGroup) >-{ >- for (unsigned int i=0; i < NUM_XFT_LANG_GROUPS; ++i) { >- if (aLangGroup.Equals(MozXftLangGroups[i].mozLangGroup, >- nsCaseInsensitiveCStringComparator())) { >- return &MozXftLangGroups[i]; >- } >- } >- >- return nsnull; >-} >- >-/* static */ > void > ConvertCharToUCS4(const char *aString, PRUint32 aLength, > nsAutoFcChar32Buffer &aOutBuffer, PRUint32 *aOutLen) >--- gfx/src/gtk/mozilla-decoder.cpp >+++ gfx/src/gtk/mozilla-decoder.cpp >@@ -0,0 +1,376 @@ >+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ >+/* vim:expandtab:shiftwidth=4:tabstop=4: >+ */ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is mozilla.org code. >+ * >+ * The Initial Developer of the Original Code is Christopher Blizzard >+ * <blizzard@mozilla.org>. Portions created by the Initial Developer >+ * are Copyright (C) 2004 the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+#define PANGO_ENABLE_BACKEND >+#define PANGO_ENABLE_ENGINE >+ >+#include "mozilla-decoder.h" >+#include <pango/pangoxft.h> >+#include <pango/pangofc-fontmap.h> >+#include <pango/pangofc-font.h> >+#include <gdk/gdkx.h> >+ >+#include "nsString.h" >+#include "nsIPersistentProperties2.h" >+#include "nsNetUtil.h" >+#include "nsReadableUtils.h" >+#include "nsICharsetConverterManager.h" >+#include "nsICharRepresentable.h" >+#include "nsCompressedCharMap.h" >+ >+#undef DEBUG_CUSTOM_ENCODER >+ >+G_DEFINE_TYPE (MozillaDecoder, mozilla_decoder, PANGO_TYPE_FC_DECODER) >+ >+MozillaDecoder *mozilla_decoder_new (void); >+ >+static FcCharSet *mozilla_decoder_get_charset (PangoFcDecoder *decoder, >+ PangoFcFont *fcfont); >+static PangoGlyph mozilla_decoder_get_glyph (PangoFcDecoder *decoder, >+ PangoFcFont *fcfont, >+ guint32 wc); >+ >+static PangoFcDecoder *mozilla_find_decoder (FcPattern *pattern, >+ gpointer user_data); >+ >+typedef struct _MozillaDecoderPrivate MozillaDecoderPrivate; >+ >+#define MOZILLA_DECODER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MOZILLA_TYPE_DECODER, MozillaDecoderPrivate)) >+ >+struct _MozillaDecoderPrivate { >+ char *family; >+ char *encoder; >+ char *cmap; >+ gboolean is_wide; >+ FcCharSet *charset; >+ nsCOMPtr<nsIUnicodeEncoder> uEncoder; >+}; >+ >+static nsICharsetConverterManager *gCharsetManager = NULL; >+ >+static NS_DEFINE_CID(kCharsetConverterManagerCID, >+ NS_ICHARSETCONVERTERMANAGER_CID); >+ >+// Hash tables that hold the custom encodings and custom cmaps used in >+// various fonts. >+GHashTable *encoder_hash = NULL; >+GHashTable *cmap_hash = NULL; >+GHashTable *wide_hash = NULL; >+ >+void >+mozilla_decoder_init (MozillaDecoder *decoder) >+{ >+} >+ >+void >+mozilla_decoder_class_init (MozillaDecoderClass *klass) >+{ >+ GObjectClass *object_class = G_OBJECT_CLASS(klass); >+ PangoFcDecoderClass *parent_class = PANGO_FC_DECODER_CLASS (klass); >+ >+ /* object_class->finalize = test_finalize; */ >+ >+ parent_class->get_charset = mozilla_decoder_get_charset; >+ parent_class->get_glyph = mozilla_decoder_get_glyph; >+ >+ g_type_class_add_private (object_class, sizeof (MozillaDecoderPrivate)); >+} >+ >+MozillaDecoder * >+mozilla_decoder_new(void) >+{ >+ return (MozillaDecoder *)g_object_new(MOZILLA_TYPE_DECODER, NULL); >+} >+ >+#ifdef DEBUG_CUSTOM_ENCODER >+void >+dump_hash(char *key, char *val, void *arg) >+{ >+ printf("%s -> %s\n", key, val); >+} >+#endif >+ >+/** >+ * mozilla_decoders_init: >+ * >+ * #mozilla_decoders_init: >+ * >+ * This initializes all of the application-specific custom decoders >+ * that Mozilla uses. This should only be called once during the >+ * lifetime of the application. >+ * >+ * Return value: zero on success, not zero on failure. >+ * >+ **/ >+ >+int >+mozilla_decoders_init(void) >+{ >+ static PRBool initialized = PR_FALSE; >+ if (initialized) >+ return 0; >+ >+ encoder_hash = g_hash_table_new(g_str_hash, g_str_equal); >+ cmap_hash = g_hash_table_new(g_str_hash, g_str_equal); >+ wide_hash = g_hash_table_new(g_str_hash, g_str_equal); >+ >+ PRBool dumb = PR_FALSE; >+ nsCOMPtr<nsIPersistentProperties> props; >+ nsCOMPtr<nsISimpleEnumerator> encodeEnum; >+ >+ NS_LoadPersistentPropertiesFromURISpec(getter_AddRefs(props), >+ NS_LITERAL_CSTRING("resource://gre/res/fonts/pangoFontEncoding.properties")); >+ >+ if (!props) >+ goto loser; >+ >+ // Enumerate the properties in this file and figure out all of the >+ // fonts for which we have custom encodings. >+ props->Enumerate(getter_AddRefs(encodeEnum)); >+ if (!encodeEnum) >+ goto loser; >+ >+ while (encodeEnum->HasMoreElements(&dumb), dumb) { >+ nsCOMPtr<nsIPropertyElement> prop; >+ encodeEnum->GetNext(getter_AddRefs(prop)); >+ if (!prop) >+ goto loser; >+ >+ nsCAutoString name; >+ prop->GetKey(name); >+ nsAutoString value; >+ prop->GetValue(value); >+ >+ if (!StringBeginsWith(name, NS_LITERAL_CSTRING("encoding."))) { >+ printf("string doesn't begin with encoding?\n"); >+ continue; >+ } >+ >+ name = Substring(name, 9); >+ >+ if (StringEndsWith(name, NS_LITERAL_CSTRING(".ttf"))) { >+ name = Substring(name, 0, name.Length() - 4); >+ >+ // Strip off a .wide if it's there. >+ if (StringEndsWith(value, NS_LITERAL_STRING(".wide"))) { >+ g_hash_table_insert(wide_hash, g_strdup(name.get()), >+ g_strdup("wide")); >+ value = Substring(value, 0, name.Length() - 5); >+ } >+ >+ g_hash_table_insert(encoder_hash, >+ g_strdup(name.get()), >+ g_strdup(NS_ConvertUTF16toUTF8(value).get())); >+ } >+ else if (StringEndsWith(name, NS_LITERAL_CSTRING(".ftcmap"))) { >+ name = Substring(name, 0, name.Length() - 7); >+ g_hash_table_insert(cmap_hash, >+ g_strdup(name.get()), >+ g_strdup(NS_ConvertUTF16toUTF8(value).get())); >+ } >+ else { >+ printf("unknown suffix used for mapping\n"); >+ } >+ } >+ >+ pango_fc_font_map_add_decoder_find_func(PANGO_FC_FONT_MAP(pango_xft_get_font_map(GDK_DISPLAY(),gdk_x11_get_default_screen())), >+ mozilla_find_decoder, >+ NULL, >+ NULL); >+ >+ initialized = PR_TRUE; >+ >+#ifdef DEBUG_CUSTOM_ENCODER >+ printf("*** encoders\n"); >+ g_hash_table_foreach(encoder_hash, (GHFunc)dump_hash, NULL); >+ >+ printf("*** cmaps\n"); >+ g_hash_table_foreach(cmap_hash, (GHFunc)dump_hash, NULL); >+#endif >+ >+ return 0; >+ >+ loser: >+ return -1; >+} >+ >+FcCharSet * >+mozilla_decoder_get_charset (PangoFcDecoder *decoder, >+ PangoFcFont *fcfont) >+{ >+ MozillaDecoderPrivate *priv = MOZILLA_DECODER_GET_PRIVATE(decoder); >+ >+ if (priv->charset) >+ return priv->charset; >+ >+ // First time this has been accessed. Populate the charset. >+ priv->charset = FcCharSetCreate(); >+ >+ if (!gCharsetManager) { >+ nsServiceManager::GetService(kCharsetConverterManagerCID, >+ NS_GET_IID(nsICharsetConverterManager), (nsISupports**)&gCharsetManager); >+ } >+ >+ nsCOMPtr<nsIUnicodeEncoder> encoder; >+ nsCOMPtr<nsICharRepresentable> represent; >+ >+ if (!gCharsetManager) >+ goto end; >+ >+ gCharsetManager->GetUnicodeEncoderRaw(priv->encoder, getter_AddRefs(encoder)); >+ if (!encoder) >+ goto end; >+ >+ encoder->SetOutputErrorBehavior(encoder->kOnError_Replace, nsnull, '?'); >+ >+ priv->uEncoder = encoder; >+ >+ represent = do_QueryInterface(encoder); >+ if (!represent) >+ goto end; >+ >+ PRUint32 map[UCS2_MAP_LEN]; >+ memset(map, 0, sizeof(map)); >+ >+ represent->FillInfo(map); >+ >+ for (int i = 0; i < NUM_UNICODE_CHARS; i++) { >+ if (IS_REPRESENTABLE(map, i)) >+ FcCharSetAddChar(priv->charset, i); >+ } >+ >+ end: >+ return priv->charset; >+} >+ >+PangoGlyph >+mozilla_decoder_get_glyph (PangoFcDecoder *decoder, >+ PangoFcFont *fcfont, >+ guint32 wc) >+{ >+ MozillaDecoderPrivate *priv = MOZILLA_DECODER_GET_PRIVATE(decoder); >+ >+ PangoGlyph retval = 0; >+ PRUnichar inchar = wc; >+ PRInt32 inlen = 1; >+ char outchar[2] = {0,0}; >+ PRInt32 outlen = 2; >+ >+ priv->uEncoder->Convert(&inchar, &inlen, outchar, &outlen); >+ if (outlen != 1) { >+ printf("Warning: mozilla_decoder_get_glyph doesn't support more than one character conversions.\n"); >+ return 0; >+ } >+ >+ FT_Face face = pango_fc_font_lock_face(fcfont); >+ >+#ifdef DEBUG_CUSTOM_ENCODER >+ char *filename; >+ FcPatternGetString(fcfont->font_pattern, FC_FILE, 0, (FcChar8 **)&filename); >+ printf("filename is %s\n", filename); >+#endif >+ >+ // Make sure to set the right charmap before trying to get the >+ // glyph >+ if (priv->cmap) { >+ if (!strcmp(priv->cmap, "mac_roman")) { >+ FT_Select_Charmap(face, ft_encoding_apple_roman); >+ } >+ else if (!strcmp(priv->cmap, "unicode")) { >+ FT_Select_Charmap(face, ft_encoding_unicode); >+ } >+ else { >+ printf("Warning: Invalid charmap entry for family %s\n", >+ priv->family); >+ } >+ } >+ >+ // Standard 8 bit to glyph translation >+ if (!priv->is_wide) { >+ FcChar32 blah = PRUint8(outchar[0]); >+ retval = FT_Get_Char_Index(face, blah); >+#ifdef DEBUG_CUSTOM_ENCODER >+ printf("wc 0x%x outchar[0] 0x%x index 0x%x retval 0x%x face %p\n", >+ wc, outchar[0], blah, retval, (void *)face); >+#endif >+ } >+ else { >+ printf("Warning: We don't support .wide fonts!\n"); >+ retval = 0; >+ } >+ >+ pango_fc_font_unlock_face(fcfont); >+ >+ return retval; >+} >+ >+PangoFcDecoder * >+mozilla_find_decoder (FcPattern *pattern, gpointer user_data) >+{ >+ // Compare the family name of the font that's been opened to see >+ // if we have a custom decoder. >+ const char *orig = NULL; >+ FcPatternGetString(pattern, FC_FAMILY, 0, (FcChar8 **)&orig); >+ >+ nsCAutoString family; >+ family.Assign(orig); >+ >+ family.StripWhitespace(); >+ ToLowerCase(family); >+ >+ char *encoder = (char *)g_hash_table_lookup(encoder_hash, family.get()); >+ if (!encoder) >+ return NULL; >+ >+ MozillaDecoder *decoder = mozilla_decoder_new(); >+ >+ MozillaDecoderPrivate *priv = MOZILLA_DECODER_GET_PRIVATE(decoder); >+ >+ priv->family = g_strdup(family.get()); >+ priv->encoder = g_strdup(encoder); >+ >+ char *cmap = (char *)g_hash_table_lookup(cmap_hash, family.get()); >+ if (cmap) >+ priv->cmap = g_strdup(cmap); >+ >+ char *wide = (char *)g_hash_table_lookup(wide_hash, family.get()); >+ if (wide) >+ priv->is_wide = TRUE; >+ >+ return PANGO_FC_DECODER(decoder); >+} >--- gfx/src/gtk/mozilla-decoder.h >+++ gfx/src/gtk/mozilla-decoder.h >@@ -0,0 +1,72 @@ >+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ >+/* vim:expandtab:shiftwidth=4:tabstop=4: >+ */ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is mozilla.org code. >+ * >+ * The Initial Developer of the Original Code is Christopher Blizzard >+ * <blizzard@mozilla.org>. Portions created by the Initial Developer >+ * are Copyright (C) 2004 the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+#ifndef _MOZILLA_DECODER_H >+#define _MOZILLA_DECODER_H >+ >+#include <pango/pangofc-decoder.h> >+ >+G_BEGIN_DECLS >+ >+#define MOZILLA_TYPE_DECODER (mozilla_decoder_get_type()) >+#define MOZILLA_DECODER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOZILLA_TYPE_DECODER, MozillaDecoder)) >+#define MOZILLA_IS_DECODER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MOZILLA_TYPE_DECODER)) >+ >+typedef struct _MozillaDecoder MozillaDecoder; >+typedef struct _MozillaDecoderClass MozillaDecoderClass; >+ >+#define MOZILLA_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOZILLA_TYPE_DECODER, MozillaDecoderClass)) >+#define MOZILLA_IS_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOZILLA_TYPE_DECODER)) >+#define MOZILLA_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOZILLA_TYPE_DECODER, MozillaDecoderClass)) >+ >+struct _MozillaDecoder >+{ >+ PangoFcDecoder parent_instance; >+}; >+ >+struct _MozillaDecoderClass >+{ >+ PangoFcDecoderClass parent_class; >+}; >+ >+GType mozilla_decoder_get_type (void); >+int mozilla_decoders_init (void); >+ >+G_END_DECLS >+ >+#endif /*_MOZILLA_DECODER_H */ >--- gfx/src/gtk/pangoFontEncoding.properties >+++ gfx/src/gtk/pangoFontEncoding.properties >@@ -0,0 +1,120 @@ >+# ***** BEGIN LICENSE BLOCK ***** >+# Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+# >+# The contents of this file are subject to the Mozilla Public License Version >+# 1.1 (the "License"); you may not use this file except in compliance with >+# the License. You may obtain a copy of the License at >+# http://www.mozilla.org/MPL/ >+# >+# Software distributed under the License is distributed on an "AS IS" basis, >+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+# for the specific language governing rights and limitations under the >+# License. >+# >+# The Original Code is Mozilla MathML Project. >+# >+# The Initial Developer of the Original Code is >+# The University of Queensland. >+# Portions created by the Initial Developer are Copyright (C) 2001 >+# the Initial Developer. All Rights Reserved. >+# >+# Contributor(s): >+# Roger B. Sidje <rbs@maths.uq.edu.au> >+# Jungshik Shin <jshin@mailaps.org> >+# Christopher Blizzard <blizzard@mozilla.org> >+# >+# Alternatively, the contents of this file may be used under the terms of >+# either the GNU General Public License Version 2 or later (the "GPL"), or >+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+# in which case the provisions of the GPL or the LGPL are applicable instead >+# of those above. If you wish to allow use of your version of this file only >+# under the terms of either the GPL or the LGPL, and not to allow others to >+# use your version of this file under the terms of the MPL, indicate your >+# decision by deleting the provisions above and replace them with the notice >+# and other provisions required by the GPL or the LGPL. If you do not delete >+# the provisions above, a recipient may use your version of this file under >+# the terms of any one of the MPL, the GPL or the LGPL. >+# >+# ***** END LICENSE BLOCK ***** >+ >+# LOCALIZATION NOTE: FILE >+# Do not translate anything in this file >+ >+# This file contains supported custom encodings for pango font >+# rendering. For information about the specific encodings, look at >+# fontEncoding.properties. It contains a lot more verbiage than you >+# will find here. There are a lot of encodings supported in the old >+# encoding file that pango supports directly, so there should be >+# little reason to use those custom encodings. The pango custom code >+# doesn't support .wide fonts, so consider yourself warned! >+# >+ >+# To be honest, we basically support mathml and that's about it. >+ >+encoding.cmr10.ttf = x-ttf-cmr >+encoding.cmmi10.ttf = x-ttf-cmmi >+encoding.cmsy10.ttf = x-ttf-cmsy >+encoding.cmex10.ttf = x-ttf-cmex >+ >+encoding.cmr10.ftcmap = unicode >+encoding.cmmi10.ftcmap = unicode >+encoding.cmsy10.ftcmap = unicode >+encoding.cmex10.ftcmap = unicode >+ >+encoding.math1.ttf = x-mathematica1 >+encoding.math1-bold.ttf = x-mathematica1 >+encoding.math1mono.ttf = x-mathematica1 >+encoding.math1mono-bold.ttf = x-mathematica1 >+ >+encoding.math2.ttf = x-mathematica2 >+encoding.math2-bold.ttf = x-mathematica2 >+encoding.math2mono.ttf = x-mathematica2 >+encoding.math2mono-bold.ttf = x-mathematica2 >+ >+encoding.math3.ttf = x-mathematica3 >+encoding.math3-bold.ttf = x-mathematica3 >+encoding.math3mono.ttf = x-mathematica3 >+encoding.math3mono-bold.ttf = x-mathematica3 >+ >+encoding.math4.ttf = x-mathematica4 >+encoding.math4-bold.ttf = x-mathematica4 >+encoding.math4mono.ttf = x-mathematica4 >+encoding.math4mono-bold.ttf = x-mathematica4 >+ >+encoding.math5.ttf = x-mathematica5 >+encoding.math5-bold.ttf = x-mathematica5 >+encoding.math5bold.ttf = x-mathematica5 >+encoding.math5mono.ttf = x-mathematica5 >+encoding.math5mono-bold.ttf = x-mathematica5 >+encoding.math5monobold.ttf = x-mathematica5 >+ >+encoding.math1.ftcmap = mac_roman >+encoding.math1-bold.ftcmap = mac_roman >+encoding.math1mono.ftcmap = mac_roman >+encoding.math1mono-bold.ftcmap = mac_roman >+ >+encoding.math2.ftcmap = mac_roman >+encoding.math2-bold.ftcmap = mac_roman >+encoding.math2mono.ftcmap = mac_roman >+encoding.math2mono-bold.ftcmap = mac_roman >+ >+encoding.math3.ftcmap = mac_roman >+encoding.math3-bold.ftcmap = mac_roman >+encoding.math3mono.ftcmap = mac_roman >+encoding.math3mono-bold.ftcmap = mac_roman >+ >+encoding.math4.ftcmap = mac_roman >+encoding.math4-bold.ftcmap = mac_roman >+encoding.math4mono.ftcmap = mac_roman >+encoding.math4mono-bold.ftcmap = mac_roman >+ >+encoding.math5.ftcmap = mac_roman >+encoding.math5-bold.ftcmap = mac_roman >+encoding.math5bold.ftcmap = mac_roman >+encoding.math5mono.ftcmap = mac_roman >+encoding.math5mono-bold.ftcmap = mac_roman >+encoding.math5monobold.ftcmap = mac_roman >+ >+encoding.mtextra.ttf = x-mtextra >+encoding.mtextra.ftcmap = mac_roman >+ >--- gfx/src/gtk/nsFontMetricsPango.cpp >+++ gfx/src/gtk/nsFontMetricsPango.cpp >@@ -0,0 +1,1906 @@ >+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ >+/* vim:expandtab:shiftwidth=4:tabstop=4: >+ */ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is mozilla.org code. >+ * >+ * The Initial Developer of the Original Code is Christopher Blizzard >+ * <blizzard@mozilla.org>. Portions created by the Initial Developer >+ * are Copyright (C) 2004 the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+#include "nsFont.h" >+#include "nsIDeviceContext.h" >+#include "nsICharsetConverterManager.h" >+#include "nsIPref.h" >+#include "nsIServiceManagerUtils.h" >+ >+#define PANGO_ENABLE_BACKEND >+#define PANGO_ENABLE_ENGINE >+ >+#include "nsFontMetricsPango.h" >+#include "nsRenderingContextGTK.h" >+#include "nsDeviceContextGTK.h" >+ >+#include "nsUnicharUtils.h" >+#include "nsQuickSort.h" >+ >+#include <pango/pangoxft.h> >+#include <fontconfig/fontconfig.h> >+#include <gdk/gdk.h> >+#include <gdk/gdkx.h> >+#include <freetype/tttables.h> >+ >+#include "mozilla-decoder.h" >+ >+#define FORCE_PR_LOG >+#include "prlog.h" >+ >+// Globals >+ >+static PRLogModuleInfo *gPangoFontLog; >+static int gNumInstances; >+ >+// Defines >+ >+// This is the scaling factor that we keep fonts limited to against >+// the display size. If a pixel size is requested that is more than >+// this factor larger than the height of the display, it's clamped to >+// that value instead of the requested size. >+#define FONT_MAX_FONT_SCALE 2 >+ >+static NS_DEFINE_CID(kCharsetConverterManagerCID, >+ NS_ICHARSETCONVERTERMANAGER_CID); >+ >+struct MozPangoLangGroup { >+ const char *mozLangGroup; >+ const char *PangoLang; >+}; >+ >+static const MozPangoLangGroup MozPangoLangGroups[] = { >+ { "x-western", "en" }, >+ { "x-central-euro", "pl" }, >+ { "x-cyrillic", "ru" }, >+ { "x-baltic", "lv" }, >+ { "x-devanagari", "hi" }, >+ { "x-tamil", "ta" }, >+ { "x-unicode", 0 }, >+ { "x-user-def", 0 }, >+}; >+ >+#define NUM_PANGO_LANG_GROUPS (sizeof (MozPangoLangGroups) / \ >+ sizeof (MozPangoLangGroups[0])) >+ >+#ifdef DEBUG >+#define DUMP_PRUNICHAR(ustr, ulen) for (PRUint32 llen=0;llen<ulen;llen++) \ >+ printf("0x%x ", ustr[llen]); \ >+ printf("\n"); >+#endif >+ >+// rounding and truncation functions for a Freetype floating point number >+// (FT26Dot6) stored in a 32bit integer with high 26 bits for the integer >+// part and low 6 bits for the fractional part. >+#define MOZ_FT_ROUND(x) (((x) + 32) & ~63) // 63 = 2^6 - 1 >+#define MOZ_FT_TRUNC(x) ((x) >> 6) >+#define CONVERT_DESIGN_UNITS_TO_PIXELS(v, s) \ >+ MOZ_FT_TRUNC(MOZ_FT_ROUND(FT_MulFix((v) , (s)))) >+ >+// Static function decls >+ >+static PRBool IsASCIIFontName (const nsString& aName); >+static int FFRECountHyphens (nsACString &aFFREName); >+ >+static PangoLanguage *GetPangoLanguage(nsIAtom *aLangGroup); >+static const MozPangoLangGroup* FindPangoLangGroup (nsACString &aLangGroup); >+ >+static void FreeGlobals (void); >+ >+static PangoStyle CalculateStyle (PRUint8 aStyle); >+static PangoWeight CalculateWeight (PRUint16 aWeight); >+ >+static nsresult EnumFontsPango (nsIAtom* aLangGroup, const char* aGeneric, >+ PRUint32* aCount, PRUnichar*** aResult); >+static int CompareFontNames (const void* aArg1, const void* aArg2, >+ void* aClosure); >+ >+extern void NS_AddLangGroup (FcPattern *aPattern, nsIAtom *aLangGroup); >+ >+nsFontMetricsPango::nsFontMetricsPango() >+{ >+ if (!gPangoFontLog) >+ gPangoFontLog = PR_NewLogModule("PangoFont"); >+ >+ gNumInstances++; >+ >+ mPangoFontDesc = nsnull; >+ mPangoContext = nsnull; >+ mLTRPangoContext = nsnull; >+ mRTLPangoContext = nsnull; >+ mPangoAttrList = nsnull; >+ mIsRTL = PR_FALSE; >+ mPangoSpaceWidth = 0; >+ >+ static PRBool initialized = PR_FALSE; >+ if (initialized) >+ return; >+ >+ // Initialized the custom decoders >+ if (!mozilla_decoders_init()) >+ initialized = PR_TRUE; >+} >+ >+nsFontMetricsPango::~nsFontMetricsPango() >+{ >+ delete mFont; >+ >+ if (mDeviceContext) >+ mDeviceContext->FontMetricsDeleted(this); >+ >+ if (mPangoFontDesc) >+ pango_font_description_free(mPangoFontDesc); >+ >+ if (mLTRPangoContext) >+ g_object_unref(mLTRPangoContext); >+ >+ if (mRTLPangoContext) >+ g_object_unref(mRTLPangoContext); >+ >+ if (mPangoAttrList) >+ pango_attr_list_unref(mPangoAttrList); >+ >+ // XXX clean up all the pango objects >+ >+ if (--gNumInstances == 0) >+ FreeGlobals(); >+} >+ >+ >+NS_IMPL_ISUPPORTS1(nsFontMetricsPango, nsIFontMetrics) >+ >+// nsIFontMetrics impl >+ >+NS_IMETHODIMP >+nsFontMetricsPango::Init(const nsFont& aFont, nsIAtom* aLangGroup, >+ nsIDeviceContext *aContext) >+{ >+ mFont = new nsFont(aFont); >+ mLangGroup = aLangGroup; >+ >+ // Hang on to the device context >+ mDeviceContext = aContext; >+ >+ mPointSize = NSTwipsToFloatPoints(mFont->size); >+ >+ // Make sure to clamp the pixel size to something reasonable so we >+ // don't make the X server blow up. >+ nscoord screenPixels = gdk_screen_height(); >+ mPointSize = PR_MIN(screenPixels * FONT_MAX_FONT_SCALE, mPointSize); >+ >+ // enumerate over the font names passed in >+ mFont->EnumerateFamilies(nsFontMetricsPango::EnumFontCallback, this); >+ >+ nsCOMPtr<nsIPref> prefService; >+ prefService = do_GetService(NS_PREF_CONTRACTID); >+ if (!prefService) >+ return NS_ERROR_FAILURE; >+ >+ nsXPIDLCString value; >+ >+ // Set up the default font name if it's not set >+ if (!mGenericFont) { >+ prefService->CopyCharPref("font.default", getter_Copies(value)); >+ >+ if (value.get()) >+ mDefaultFont = value.get(); >+ else >+ mDefaultFont = "serif"; >+ >+ mGenericFont = &mDefaultFont; >+ } >+ >+ // set up the minimum sizes for fonts >+ if (mLangGroup) { >+ nsCAutoString name("font.min-size."); >+ >+ if (mGenericFont->Equals("monospace")) >+ name.Append("fixed"); >+ else >+ name.Append("variable"); >+ >+ name.Append(char('.')); >+ >+ const char* langGroup; >+ mLangGroup->GetUTF8String(&langGroup); >+ >+ name.Append(langGroup); >+ >+ PRInt32 minimumInt = 0; >+ float minimum; >+ nsresult res; >+ res = prefService->GetIntPref(name.get(), &minimumInt); >+ if (NS_FAILED(res)) >+ prefService->GetDefaultIntPref(name.get(), &minimumInt); >+ >+ if (minimumInt < 0) >+ minimumInt = 0; >+ >+ minimum = minimumInt; >+ >+ // The minimum size is specified in pixels, not in points. >+ // Convert the size from pixels to points. >+ minimum = NSTwipsToFloatPoints(NSFloatPixelsToTwips(minimum, mDeviceContext->DevUnitsToAppUnits())); >+ if (mPointSize < minimum) >+ mPointSize = minimum; >+ } >+ >+ // Make sure that the pixel size is at least greater than zero >+ if (mPointSize < 1) { >+#ifdef DEBUG >+ printf("*** Warning: nsFontMetricsPango created with point size %f\n", >+ mPointSize); >+#endif >+ mPointSize = 1; >+ } >+ >+ nsresult rv = RealizeFont(); >+ if (NS_FAILED(rv)) >+ return rv; >+ >+ // Cache font metrics for the 'x' character >+ return CacheFontMetrics(); >+} >+ >+nsresult >+nsFontMetricsPango::CacheFontMetrics(void) >+{ >+ // Get our scale factor >+ float f; >+ float val; >+ f = mDeviceContext->DevUnitsToAppUnits(); >+ >+ mPangoAttrList = pango_attr_list_new(); >+ >+ GList *items = pango_itemize(mPangoContext, >+ "a", 0, 1, mPangoAttrList, NULL); >+ >+ if (!items) >+ return NS_ERROR_FAILURE; >+ >+ guint nitems = g_list_length(items); >+ if (nitems != 1) >+ return NS_ERROR_FAILURE; >+ >+ PangoItem *item = (PangoItem *)items->data; >+ PangoFcFont *fcfont = PANGO_FC_FONT(item->analysis.font); >+ if (!fcfont) >+ return NS_ERROR_FAILURE; >+ >+ // Get our font face >+ FT_Face face; >+ TT_OS2 *os2; >+ XftFont *xftFont = pango_xft_font_get_font(PANGO_FONT(fcfont)); >+ if (!xftFont) >+ return NS_ERROR_NOT_AVAILABLE; >+ >+ face = XftLockFace(xftFont); >+ os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2); >+ >+ // mEmHeight (size in pixels of EM height) >+ int size; >+ if (FcPatternGetInteger(fcfont->font_pattern, FC_PIXEL_SIZE, 0, &size) != >+ FcResultMatch) { >+ size = 12; >+ } >+ mEmHeight = PR_MAX(1, nscoord(size * f)); >+ >+ // mMaxAscent >+ mMaxAscent = nscoord(xftFont->ascent * f); >+ >+ // mMaxDescent >+ mMaxDescent = nscoord(xftFont->descent * f); >+ >+ nscoord lineHeight = mMaxAscent + mMaxDescent; >+ >+ // mLeading (needs ascent and descent and EM height) >+ if (lineHeight > mEmHeight) >+ mLeading = lineHeight - mEmHeight; >+ else >+ mLeading = 0; >+ >+ // mMaxHeight (needs ascent and descent) >+ mMaxHeight = lineHeight; >+ >+ // mEmAscent (needs maxascent, EM height, ascent and descent) >+ mEmAscent = nscoord(mMaxAscent * mEmHeight / lineHeight); >+ >+ // mEmDescent (needs EM height and EM ascent >+ mEmDescent = mEmHeight - mEmAscent; >+ >+ // mMaxAdvance >+ mMaxAdvance = nscoord(xftFont->max_advance_width * f); >+ >+ // mPangoSpaceWidth >+ PangoLayout *layout = pango_layout_new(mPangoContext); >+ pango_layout_set_text(layout, " ", 1); >+ int pswidth, psheight; >+ pango_layout_get_size(layout, &pswidth, &psheight); >+ mPangoSpaceWidth = pswidth; >+ g_object_unref(layout); >+ >+ // mSpaceWidth (width of a space) >+ nscoord tmpWidth; >+ GetWidth(" ", 1, tmpWidth, NULL); >+ mSpaceWidth = tmpWidth; >+ >+ // mAveCharWidth (width of an 'average' char) >+ // XftTextExtents16(GDK_DISPLAY(), xftFont, &xUnichar, 1, &extents); >+ //rawWidth = extents.width; >+ //mAveCharWidth = NSToCoordRound(rawWidth * f); >+ GetWidth("x", 1, tmpWidth, NULL); >+ mAveCharWidth = tmpWidth; >+ >+ // mXHeight (height of an 'x' character) >+ PRUnichar xUnichar('x'); >+ XGlyphInfo extents; >+ if (FcCharSetHasChar(xftFont->charset, xUnichar)) { >+ XftTextExtents16(GDK_DISPLAY(), xftFont, &xUnichar, 1, &extents); >+ mXHeight = extents.height; >+ } >+ else { >+ // 56% of ascent, best guess for non-true type or asian fonts >+ mXHeight = nscoord(((float)mMaxAscent) * 0.56); >+ } >+ mXHeight = nscoord(mXHeight * f); >+ >+ // mUnderlineOffset (offset for underlines) >+ val = CONVERT_DESIGN_UNITS_TO_PIXELS(face->underline_position, >+ face->size->metrics.y_scale); >+ if (val) { >+ mUnderlineOffset = NSToIntRound(val * f); >+ } >+ else { >+ mUnderlineOffset = >+ -NSToIntRound(PR_MAX(1, floor(0.1 * xftFont->height + 0.5)) * f); >+ } >+ >+ // mUnderlineSize (thickness of an underline) >+ val = CONVERT_DESIGN_UNITS_TO_PIXELS(face->underline_thickness, >+ face->size->metrics.y_scale); >+ if (val) { >+ mUnderlineSize = nscoord(PR_MAX(f, NSToIntRound(val * f))); >+ } >+ else { >+ mUnderlineSize = >+ NSToIntRound(PR_MAX(1, floor(0.05 * xftFont->height + 0.5)) * f); >+ } >+ >+ // mSuperscriptOffset >+ if (os2 && os2->ySuperscriptYOffset) { >+ val = CONVERT_DESIGN_UNITS_TO_PIXELS(os2->ySuperscriptYOffset, >+ face->size->metrics.y_scale); >+ mSuperscriptOffset = nscoord(PR_MAX(f, NSToIntRound(val * f))); >+ } >+ else { >+ mSuperscriptOffset = mXHeight; >+ } >+ >+ // mSubscriptOffset >+ if (os2 && os2->ySubscriptYOffset) { >+ val = CONVERT_DESIGN_UNITS_TO_PIXELS(os2->ySubscriptYOffset, >+ face->size->metrics.y_scale); >+ // some fonts have the incorrect sign. >+ val = (val < 0) ? -val : val; >+ mSubscriptOffset = nscoord(PR_MAX(f, NSToIntRound(val * f))); >+ } >+ else { >+ mSubscriptOffset = mXHeight; >+ } >+ >+ // mStrikeoutOffset >+ mStrikeoutOffset = NSToCoordRound(mXHeight / 2.0); >+ >+ // mStrikeoutSize >+ mStrikeoutSize = mUnderlineSize; >+ >+ XftUnlockFace(xftFont); >+ >+ /* >+ printf("%i\n", mXHeight); >+ printf("%i\n", mSuperscriptOffset); >+ printf("%i\n", mSubscriptOffset); >+ printf("%i\n", mStrikeoutOffset); >+ printf("%i\n", mStrikeoutSize); >+ printf("%i\n", mUnderlineOffset); >+ printf("%i\n", mUnderlineSize); >+ printf("%i\n", mMaxHeight); >+ printf("%i\n", mLeading); >+ printf("%i\n", mEmHeight); >+ printf("%i\n", mEmAscent); >+ printf("%i\n", mEmDescent); >+ printf("%i\n", mMaxAscent); >+ printf("%i\n", mMaxDescent); >+ printf("%i\n", mMaxAdvance); >+ printf("%i\n", mSpaceWidth); >+ printf("%i\n", mAveCharWidth); >+ */ >+ >+ return NS_OK; >+} >+ >+NS_IMETHODIMP >+nsFontMetricsPango::Destroy() >+{ >+ mDeviceContext = nsnull; >+ return NS_OK; >+} >+ >+NS_IMETHODIMP >+nsFontMetricsPango::GetFont(const nsFont *&aFont) >+{ >+ aFont = mFont; >+ return NS_OK; >+} >+ >+NS_IMETHODIMP >+nsFontMetricsPango::GetLangGroup(nsIAtom** aLangGroup) >+{ >+ *aLangGroup = mLangGroup; >+ NS_IF_ADDREF(*aLangGroup); >+ >+ return NS_OK; >+} >+ >+NS_IMETHODIMP >+nsFontMetricsPango::GetFontHandle(nsFontHandle &aHandle) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+// nsIFontMetricsPango impl >+ >+nsresult >+nsFontMetricsPango::GetWidth(const char* aString, PRUint32 aLength, >+ nscoord& aWidth, >+ nsRenderingContextGTK *aContext) >+{ >+ PangoLayout *layout = pango_layout_new(mPangoContext); >+ >+ pango_layout_set_text(layout, aString, aLength); >+ >+ if (mPangoSpaceWidth) >+ FixupSpaceWidths(layout, aString); >+ >+ int width, height; >+ >+ pango_layout_get_size(layout, &width, &height); >+ >+ g_object_unref(layout); >+ >+ float f; >+ f = mDeviceContext->DevUnitsToAppUnits(); >+ aWidth = NSToCoordRound(width * f / PANGO_SCALE); >+ >+ // printf("GetWidth (char *) %d\n", aWidth); >+ >+ return NS_OK; >+} >+ >+nsresult >+nsFontMetricsPango::GetWidth(const PRUnichar* aString, PRUint32 aLength, >+ nscoord& aWidth, PRInt32 *aFontID, >+ nsRenderingContextGTK *aContext) >+{ >+ nsresult rv = NS_OK; >+ PangoLayout *layout = pango_layout_new(mPangoContext); >+ >+ gchar *text = g_utf16_to_utf8(aString, aLength, >+ NULL, NULL, NULL); >+ >+ if (!text) { >+ aWidth = 0; >+#ifdef DEBUG >+ NS_WARNING("nsFontMetricsPango::GetWidth invalid unicode to follow"); >+ DUMP_PRUNICHAR(aString, aLength) >+#endif >+ rv = NS_ERROR_FAILURE; >+ goto loser; >+ } >+ >+ gint width, height; >+ >+ pango_layout_set_text(layout, text, strlen(text)); >+ FixupSpaceWidths(layout, text); >+ pango_layout_get_size(layout, &width, &height); >+ >+ >+ float f; >+ f = mDeviceContext->DevUnitsToAppUnits(); >+ aWidth = NSToCoordRound(width * f / PANGO_SCALE); >+ >+ // printf("GetWidth %d\n", aWidth); >+ >+ loser: >+ g_free(text); >+ g_object_unref(layout); >+ >+ return rv; >+} >+ >+ >+nsresult >+nsFontMetricsPango::GetTextDimensions(const PRUnichar* aString, >+ PRUint32 aLength, >+ nsTextDimensions& aDimensions, >+ PRInt32* aFontID, >+ nsRenderingContextGTK *aContext) >+{ >+ nsresult rv = NS_OK; >+ >+ PangoLayout *layout = pango_layout_new(mPangoContext); >+ >+ gchar *text = g_utf16_to_utf8(aString, aLength, >+ NULL, NULL, NULL); >+ >+ if (!text) { >+#ifdef DEBUG >+ NS_WARNING("nsFontMetricsPango::GetTextDimensions invalid unicode to follow"); >+ DUMP_PRUNICHAR(aString, aLength) >+#endif >+ aDimensions.width = 0; >+ aDimensions.ascent = 0; >+ aDimensions.descent = 0; >+ >+ rv = NS_ERROR_FAILURE; >+ goto loser; >+ } >+ >+ >+ pango_layout_set_text(layout, text, strlen(text)); >+ FixupSpaceWidths(layout, text); >+ >+ // Get the logical extents >+ PangoLayoutLine *line; >+ if (pango_layout_get_line_count(layout) != 1) { >+ printf("Warning: more than one line!\n"); >+ } >+ line = pango_layout_get_line(layout, 0); >+ >+ PangoRectangle rect; >+ pango_layout_line_get_extents(line, NULL, &rect); >+ >+ float P2T; >+ P2T = mDeviceContext->DevUnitsToAppUnits(); >+ >+ aDimensions.width = NSToCoordRound(rect.width * P2T / PANGO_SCALE) ; >+ aDimensions.ascent = NSToCoordRound(PANGO_ASCENT(rect) * P2T / PANGO_SCALE); >+ aDimensions.descent = NSToCoordRound(PANGO_DESCENT(rect) * P2T / PANGO_SCALE); >+ >+ // printf("GetTextDimensions %d %d %d\n", aDimensions.width, >+ //aDimensions.ascent, aDimensions.descent); >+ >+ loser: >+ g_free(text); >+ g_object_unref(layout); >+ >+ return rv; >+} >+ >+nsresult >+nsFontMetricsPango::GetTextDimensions(const char* aString, >+ PRInt32 aLength, >+ PRInt32 aAvailWidth, >+ PRInt32* aBreaks, >+ PRInt32 aNumBreaks, >+ nsTextDimensions& aDimensions, >+ PRInt32& aNumCharsFit, >+ nsTextDimensions& aLastWordDimensions, >+ PRInt32* aFontID, >+ nsRenderingContextGTK *aContext) >+{ >+ >+ return GetTextDimensionsInternal(aString, aLength, aAvailWidth, aBreaks, >+ aNumBreaks, aDimensions, aNumCharsFit, >+ aLastWordDimensions, aContext); >+ >+} >+ >+nsresult >+nsFontMetricsPango::GetTextDimensions(const PRUnichar* aString, >+ PRInt32 aLength, >+ PRInt32 aAvailWidth, >+ PRInt32* aBreaks, >+ PRInt32 aNumBreaks, >+ nsTextDimensions& aDimensions, >+ PRInt32& aNumCharsFit, >+ nsTextDimensions& aLastWordDimensions, >+ PRInt32* aFontID, >+ nsRenderingContextGTK *aContext) >+{ >+ nsresult rv = NS_OK; >+ PRInt32 curBreak = 0; >+ gchar *curChar; >+ >+ PRInt32 *utf8Breaks = new PRInt32[aNumBreaks]; >+ >+ gchar *text = g_utf16_to_utf8(aString, (PRInt32)aLength, >+ NULL, NULL, NULL); >+ >+ curChar = text; >+ >+ if (!text) { >+#ifdef DEBUG >+ NS_WARNING("nsFontMetricsPango::GetWidth invalid unicode to follow"); >+ DUMP_PRUNICHAR(aString, (PRUint32)aLength) >+#endif >+ rv = NS_ERROR_FAILURE; >+ goto loser; >+ } >+ >+ // Covert the utf16 break offsets to utf8 break offsets >+ for (PRInt32 curOffset=0; curOffset < aLength; >+ curOffset++, curChar = g_utf8_find_next_char(curChar, NULL)) { >+ if (aBreaks[curBreak] == curOffset) { >+ utf8Breaks[curBreak] = curChar - text; >+ curBreak++; >+ } >+ >+ if (IS_HIGH_SURROGATE(aString[curOffset])) >+ curOffset++; >+ } >+ >+ // Always catch the last break >+ utf8Breaks[curBreak] = curChar - text; >+ >+#if 0 >+ if (strlen(text) != aLength) { >+ printf("Different lengths for utf16 %d and utf8 %d\n", aLength, strlen(text)); >+ DUMP_PRUNICHAR(aString, aLength) >+ DUMP_PRUNICHAR(text, strlen(text)) >+ for (PRInt32 i = 0; i < aNumBreaks; ++i) { >+ printf(" break %d utf16 %d utf8 %d\n", i, aBreaks[i], utf8Breaks[i]); >+ } >+ } >+#endif >+ >+ // We'll use curBreak to indicate which of the breaks end up being >+ // used for the break point for this line. >+ curBreak = 0; >+ rv = GetTextDimensionsInternal(text, strlen(text), aAvailWidth, utf8Breaks, >+ aNumBreaks, aDimensions, aNumCharsFit, >+ aLastWordDimensions, aContext); >+ >+ // Figure out which of the breaks we ended up using to convert >+ // back to utf16 - start from the end. >+ for (PRInt32 i = aNumBreaks - 1; i >= 0; --i) { >+ if (utf8Breaks[i] == aNumCharsFit) { >+ // if (aNumCharsFit != aBreaks[i]) >+ // printf("Fixing utf8 -> utf16 %d -> %d\n", aNumCharsFit, aBreaks[i]); >+ aNumCharsFit = aBreaks[i]; >+ break; >+ } >+ } >+ >+ loser: >+ if (text) >+ g_free(text); >+ >+ delete[] utf8Breaks; >+ >+ return rv; >+} >+ >+nsresult >+nsFontMetricsPango::DrawString(const char *aString, PRUint32 aLength, >+ nscoord aX, nscoord aY, >+ const nscoord* aSpacing, >+ nsRenderingContextGTK *aContext, >+ nsDrawingSurfaceGTK *aSurface) >+{ >+ PangoLayout *layout = pango_layout_new(mPangoContext); >+ >+ pango_layout_set_text(layout, aString, aLength); >+ FixupSpaceWidths(layout, aString); >+ >+ int x = aX; >+ int y = aY; >+ >+ aContext->GetTranMatrix()->TransformCoord(&x, &y); >+ >+ PangoLayoutLine *line; >+ if (pango_layout_get_line_count(layout) != 1) { >+ printf("Warning: more than one line!\n"); >+ } >+ line = pango_layout_get_line(layout, 0); >+ >+ aContext->UpdateGC(); >+ GdkGC *gc = aContext->GetGC(); >+ >+ if (aSpacing && *aSpacing) { >+ DrawStringSlowly(aString, NULL, aLength, aSurface->GetDrawable(), >+ gc, x, y, line, aSpacing); >+ } >+ else { >+ gdk_draw_layout_line(aSurface->GetDrawable(), gc, >+ x, y, >+ line); >+ } >+ >+ g_object_unref(gc); >+ g_object_unref(layout); >+ >+ // printf("DrawString (char *)\n"); >+ >+ return NS_OK; >+} >+ >+nsresult >+nsFontMetricsPango::DrawString(const PRUnichar* aString, PRUint32 aLength, >+ nscoord aX, nscoord aY, >+ PRInt32 aFontID, >+ const nscoord* aSpacing, >+ nsRenderingContextGTK *aContext, >+ nsDrawingSurfaceGTK *aSurface) >+{ >+ nsresult rv = NS_OK; >+ int x = aX; >+ int y = aY; >+ >+ aContext->UpdateGC(); >+ GdkGC *gc = aContext->GetGC(); >+ >+ PangoLayout *layout = pango_layout_new(mPangoContext); >+ >+ gchar *text = g_utf16_to_utf8(aString, aLength, >+ NULL, NULL, NULL); >+ >+ if (!text) { >+#ifdef DEBUG >+ NS_WARNING("nsFontMetricsPango::DrawString invalid unicode to follow"); >+ DUMP_PRUNICHAR(aString, aLength) >+#endif >+ rv = NS_ERROR_FAILURE; >+ goto loser; >+ } >+ >+ pango_layout_set_text(layout, text, strlen(text)); >+ FixupSpaceWidths(layout, text); >+ >+ aContext->GetTranMatrix()->TransformCoord(&x, &y); >+ >+ PangoLayoutLine *line; >+ if (pango_layout_get_line_count(layout) != 1) { >+ printf("Warning: more than one line!\n"); >+ } >+ line = pango_layout_get_line(layout, 0); >+ >+ if (aSpacing && *aSpacing) { >+ DrawStringSlowly(text, aString, aLength, aSurface->GetDrawable(), >+ gc, x, y, line, aSpacing); >+ } >+ else { >+ gdk_draw_layout_line(aSurface->GetDrawable(), gc, >+ x, y, >+ line); >+ } >+ >+ loser: >+ >+ g_free(text); >+ g_object_unref(gc); >+ g_object_unref(layout); >+ >+ // printf("DrawString\n"); >+ >+ return rv; >+} >+ >+#ifdef MOZ_MATHML >+nsresult >+nsFontMetricsPango::GetBoundingMetrics(const char *aString, PRUint32 aLength, >+ nsBoundingMetrics &aBoundingMetrics, >+ nsRenderingContextGTK *aContext) >+{ >+ printf("GetBoundingMetrics (char *)\n"); >+ return NS_ERROR_FAILURE; >+} >+ >+nsresult >+nsFontMetricsPango::GetBoundingMetrics(const PRUnichar *aString, >+ PRUint32 aLength, >+ nsBoundingMetrics &aBoundingMetrics, >+ PRInt32 *aFontID, >+ nsRenderingContextGTK *aContext) >+{ >+ nsresult rv = NS_OK; >+ PangoLayout *layout = pango_layout_new(mPangoContext); >+ >+ gchar *text = g_utf16_to_utf8(aString, aLength, >+ NULL, NULL, NULL); >+ >+ if (!text) { >+#ifdef DEBUG >+ NS_WARNING("nsFontMetricsPango::GetBoundingMetrics invalid unicode to follow"); >+ DUMP_PRUNICHAR(aString, aLength) >+#endif >+ aBoundingMetrics.leftBearing = 0; >+ aBoundingMetrics.rightBearing = 0; >+ aBoundingMetrics.width = 0; >+ aBoundingMetrics.ascent = 0; >+ aBoundingMetrics.descent = 0; >+ >+ rv = NS_ERROR_FAILURE; >+ goto loser; >+ } >+ >+ pango_layout_set_text(layout, text, strlen(text)); >+ FixupSpaceWidths(layout, text); >+ >+ // Get the logical extents >+ PangoLayoutLine *line; >+ if (pango_layout_get_line_count(layout) != 1) { >+ printf("Warning: more than one line!\n"); >+ } >+ line = pango_layout_get_line(layout, 0); >+ >+ // Get the ink extents >+ PangoRectangle rect; >+ pango_layout_line_get_extents(line, NULL, &rect); >+ >+ float P2T; >+ P2T = mDeviceContext->DevUnitsToAppUnits(); >+ >+ aBoundingMetrics.leftBearing = >+ NSToCoordRound(rect.x * P2T / PANGO_SCALE); >+ aBoundingMetrics.rightBearing = >+ NSToCoordRound(rect.width * P2T / PANGO_SCALE); >+ aBoundingMetrics.width = NSToCoordRound((rect.x + rect.width) * P2T / PANGO_SCALE); >+ aBoundingMetrics.ascent = NSToCoordRound(rect.y * P2T / PANGO_SCALE); >+ aBoundingMetrics.descent = NSToCoordRound(rect.height * P2T / PANGO_SCALE); >+ >+ loser: >+ g_free(text); >+ g_object_unref(layout); >+ >+ return rv; >+} >+ >+#endif /* MOZ_MATHML */ >+ >+GdkFont* >+nsFontMetricsPango::GetCurrentGDKFont(void) >+{ >+ return nsnull; >+} >+ >+nsresult >+nsFontMetricsPango::SetRightToLeftText(PRBool aIsRTL) >+{ >+ if (aIsRTL) { >+ if (!mRTLPangoContext) { >+ mRTLPangoContext = pango_xft_get_context(GDK_DISPLAY(), 0); >+ pango_context_set_base_dir(mRTLPangoContext, PANGO_DIRECTION_RTL); >+ >+ gdk_pango_context_set_colormap(mRTLPangoContext, gdk_rgb_get_cmap()); >+ pango_context_set_language(mRTLPangoContext, GetPangoLanguage(mLangGroup)); >+ pango_context_set_font_description(mRTLPangoContext, mPangoFontDesc); >+ } >+ mPangoContext = mRTLPangoContext; >+ } >+ else { >+ mPangoContext = mLTRPangoContext; >+ } >+ >+ mIsRTL = aIsRTL; >+ return NS_OK; >+} >+ >+nsresult >+nsFontMetricsPango::GetClusterInfo(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 *aClusterStarts) >+{ >+ nsresult rv = NS_OK; >+ PangoLogAttr *attrs = NULL; >+ gint n_attrs = 0; >+ PangoLayout *layout = pango_layout_new(mPangoContext); >+ >+ // Convert the incoming UTF-16 to UTF-8 >+ gchar *text = g_utf16_to_utf8(aText, aLength, NULL, NULL, NULL); >+ >+ if (!text) { >+#ifdef DEBUG >+ NS_WARNING("nsFontMetricsPango::GetWidth invalid unicode to follow"); >+ DUMP_PRUNICHAR(aText, aLength) >+#endif >+ rv = NS_ERROR_FAILURE; >+ goto loser; >+ } >+ >+ // Set up the pango layout >+ pango_layout_set_text(layout, text, strlen(text)); >+ FixupSpaceWidths(layout, text); >+ >+ // Convert back to UTF-16 while filling in the cluster info >+ // structure. >+ pango_layout_get_log_attrs(layout, &attrs, &n_attrs); >+ >+ for (PRUint32 pos = 0; pos < aLength; pos++) { >+ if (IS_HIGH_SURROGATE(aText[pos])) { >+ aClusterStarts[pos] = 1; >+ pos++; >+ } >+ else { >+ aClusterStarts[pos] = attrs[pos].is_cursor_position; >+ } >+ } >+ >+ loser: >+ if (attrs) >+ g_free(attrs); >+ if (text) >+ g_free(text); >+ if (layout) >+ g_object_unref(layout); >+ >+ return rv; >+} >+ >+nsresult >+nsFontMetricsPango::GetPosition(const PRUnichar *aText, PRUint32 aLength, >+ nscoord aCoord, PRUint32 &aInx) >+{ >+ nsresult rv = NS_OK; >+ int trailing = 0; >+ int inx = 0; >+ gboolean found = FALSE; >+ const gchar *curChar; >+ >+ float f = mDeviceContext->AppUnitsToDevUnits(); >+ >+ PangoLayout *layout = pango_layout_new(mPangoContext); >+ PRUint32 localCoord = (PRUint32)(aCoord * PANGO_SCALE * f); >+ >+ // Convert the incoming UTF-16 to UTF-8 >+ gchar *text = g_utf16_to_utf8(aText, aLength, NULL, NULL, NULL); >+ >+ if (!text) { >+#ifdef DEBUG >+ NS_WARNING("nsFontMetricsPango::GetWidth invalid unicode to follow"); >+ DUMP_PRUNICHAR(aText, aLength) >+#endif >+ rv = NS_ERROR_FAILURE; >+ goto loser; >+ } >+ >+ // Set up the pango layout >+ pango_layout_set_text(layout, text, strlen(text)); >+ FixupSpaceWidths(layout, text); >+ >+ found = pango_layout_xy_to_index(layout, localCoord, 0, >+ &inx, &trailing); >+ >+ // Convert the index back to the utf-16 index >+ curChar = text; >+ aInx = 0; >+ >+ // Jump to the end if it's not found. >+ if (!found) { >+ if (inx = 0) >+ aInx = 0; >+ else if (trailing) >+ aInx = aLength; >+ >+ goto loser; >+ } >+ >+ for (PRUint32 curOffset=0; curOffset < aLength; >+ curOffset++, curChar = g_utf8_find_next_char(curChar, NULL)) { >+ >+ // Check for a match before checking for a surrogate pair >+ if (curChar - text == inx) { >+ aInx = curOffset; >+ break; >+ } >+ >+ if (IS_HIGH_SURROGATE(aText[curOffset])) >+ curOffset++; >+ } >+ >+ // If there was a trailing result, advance the index pointer the >+ // number of characters equal to the trailing result. >+ while (trailing) { >+ aInx++; >+ // Yes, this can make aInx > length to indicate the end of the >+ // string. >+ if (aInx < aLength && IS_HIGH_SURROGATE(aText[aInx])) >+ aInx++; >+ trailing--; >+ } >+ >+ loser: >+ if (text) >+ g_free(text); >+ if (layout) >+ g_object_unref(layout); >+ >+ return rv; >+} >+ >+nsresult >+nsFontMetricsPango::GetRangeWidth(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, >+ PRUint32 &aWidth) >+{ >+ nsresult rv = NS_OK; >+ int *ranges = NULL; >+ int n_ranges = 0; >+ PRUint32 utf8Start = 0; >+ PRUint32 utf8End = 0; >+ float f; >+ >+ aWidth = 0; >+ >+ // Convert the incoming UTF-16 to UTF-8 >+ gchar *text = g_utf16_to_utf8(aText, aLength, NULL, NULL, NULL); >+ gchar *curChar = text; >+ >+ PangoLayout *layout = pango_layout_new(mPangoContext); >+ >+ if (!text) { >+#ifdef DEBUG >+ NS_WARNING("nsFontMetricsPango::GetWidth invalid unicode to follow"); >+ DUMP_PRUNICHAR(aText, aLength) >+#endif >+ rv = NS_ERROR_FAILURE; >+ goto loser; >+ } >+ >+ // Convert the utf16 offsets into utf8 offsets >+ for (PRUint32 curOffset = 0; curOffset < aLength; >+ curOffset++, curChar = g_utf8_find_next_char(curChar, NULL)) { >+ >+ if (curOffset == aStart) >+ utf8Start = curChar - text; >+ >+ if (curOffset == aEnd) >+ utf8End = curChar - text; >+ >+ if (IS_HIGH_SURROGATE(aText[curOffset])) >+ curOffset++; >+ } >+ >+ // Special case where the end index is the same as the length >+ if (aLength == aEnd) >+ utf8End = strlen(text); >+ >+ pango_layout_set_text(layout, text, strlen(text)); >+ FixupSpaceWidths(layout, text); >+ >+ PangoLayoutLine *line; >+ if (pango_layout_get_line_count(layout) != 1) { >+ printf("Warning: more than one line!\n"); >+ } >+ line = pango_layout_get_line(layout, 0); >+ >+ pango_layout_line_get_x_ranges(line, utf8Start, utf8End, &ranges, &n_ranges); >+ >+ // Convert the width into app units >+ for (int i = 0; i < n_ranges; i++) { >+ aWidth += (ranges[(i * 2) + 1] - ranges[(i * 2)]); >+ } >+ >+ f = mDeviceContext-> DevUnitsToAppUnits(); >+ aWidth = nscoord(aWidth * f / PANGO_SCALE); >+ >+ loser: >+ if (ranges) >+ g_free(ranges); >+ if (text) >+ g_free(text); >+ if (layout) >+ g_object_unref(layout); >+ >+ return rv; >+} >+ >+/* static */ >+PRUint32 >+nsFontMetricsPango::GetHints(void) >+{ >+ return (NS_RENDERING_HINT_BIDI_REORDERING | >+ NS_RENDERING_HINT_ARABIC_SHAPING | >+ NS_RENDERING_HINT_FAST_MEASURE | >+ NS_RENDERING_HINT_TEXT_CLUSTERS | >+ NS_RENDERING_HINT_SPACING_RUNS); >+} >+ >+/* static */ >+nsresult >+nsFontMetricsPango::FamilyExists(nsIDeviceContext *aDevice, >+ const nsString &aName) >+{ >+ if (!IsASCIIFontName(aName)) >+ return NS_ERROR_FAILURE; >+ >+ NS_ConvertUCS2toUTF8 name(aName); >+ >+ nsresult rv = NS_ERROR_FAILURE; >+ PangoContext *context = pango_xft_get_context(GDK_DISPLAY(), 0); >+ PangoFontFamily **familyList; >+ int n; >+ >+ pango_context_list_families(context, &familyList, &n); >+ >+ for (int i=0; i < n; i++) { >+ const char *tmpname = pango_font_family_get_name(familyList[i]); >+ if (!Compare(nsDependentCString(tmpname), name, >+ nsCaseInsensitiveCStringComparator())) { >+ rv = NS_OK; >+ break; >+ } >+ } >+ >+ g_free(familyList); >+ g_object_unref(context); >+ >+ return rv; >+} >+ >+// Private Methods >+ >+nsresult >+nsFontMetricsPango::RealizeFont(void) >+{ >+ nsCString familyList; >+ // Create and fill out the font description. >+ mPangoFontDesc = pango_font_description_new(); >+ >+ // Add CSS names - walk the list of fonts, adding the generic as >+ // the last font >+ for (int i=0; i < mFontList.Count(); ++i) { >+ // if this was a generic name, break out of the loop since we >+ // don't want to add it to the pattern yet >+ if (mFontIsGeneric[i]) >+ break;; >+ >+ nsCString *familyName = mFontList.CStringAt(i); >+ familyList.Append(familyName->get()); >+ familyList.Append(','); >+ } >+ >+ // If there's a generic add a pref for the generic if there's one >+ // set. >+ if (mGenericFont && !mFont->systemFont) { >+ nsCString name; >+ name += "font.name."; >+ name += mGenericFont->get(); >+ name += "."; >+ >+ nsString langGroup; >+ mLangGroup->ToString(langGroup); >+ >+ name.AppendWithConversion(langGroup); >+ >+ nsCOMPtr<nsIPref> pref; >+ pref = do_GetService(NS_PREF_CONTRACTID); >+ if (pref) { >+ nsresult rv; >+ nsXPIDLCString value; >+ rv = pref->GetCharPref(name.get(), getter_Copies(value)); >+ >+ // we ignore prefs that have three hypens since they are X >+ // style prefs. >+ if (FFRECountHyphens(value) < 3) { >+ nsCString tmpstr; >+ tmpstr.Append(value); >+ >+ familyList.Append(tmpstr); >+ familyList.Append(','); >+ } >+ } >+ } >+ >+ // Add the generic if there is one. >+ if (mGenericFont && !mFont->systemFont) { >+ familyList.Append(mGenericFont->get()); >+ familyList.Append(','); >+ } >+ >+ // Set the family >+ pango_font_description_set_family(mPangoFontDesc, >+ familyList.get()); >+ >+ // Set the point size >+ pango_font_description_set_size(mPangoFontDesc, >+ (gint)(mPointSize * PANGO_SCALE)); >+ >+ // Set the style >+ pango_font_description_set_style(mPangoFontDesc, >+ CalculateStyle(mFont->style)); >+ >+ // Set the weight >+ pango_font_description_set_weight(mPangoFontDesc, >+ CalculateWeight(mFont->weight)); >+ >+ // Now that we have the font description set up, create the >+ // context. >+ mLTRPangoContext = pango_xft_get_context(GDK_DISPLAY(), 0); >+ mPangoContext = mLTRPangoContext; >+ >+ // Set the color map so we can draw later. >+ gdk_pango_context_set_colormap(mPangoContext, gdk_rgb_get_cmap()); >+ >+ // Set the pango language now that we have a context >+ pango_context_set_language(mPangoContext, GetPangoLanguage(mLangGroup)); >+ >+ // And attach the font description to this context >+ pango_context_set_font_description(mPangoContext, mPangoFontDesc); >+ >+ return NS_OK; >+} >+ >+/* static */ >+PRBool >+nsFontMetricsPango::EnumFontCallback(const nsString &aFamily, >+ PRBool aIsGeneric, void *aData) >+{ >+ // make sure it's an ascii name, if not then return and continue >+ // enumerating >+ if (!IsASCIIFontName(aFamily)) >+ return PR_TRUE; >+ >+ nsCAutoString name; >+ name.AssignWithConversion(aFamily.get()); >+ ToLowerCase(name); >+ nsFontMetricsPango *metrics = (nsFontMetricsPango *)aData; >+ metrics->mFontList.AppendCString(name); >+ metrics->mFontIsGeneric.AppendElement((void *)aIsGeneric); >+ if (aIsGeneric) { >+ metrics->mGenericFont = >+ metrics->mFontList.CStringAt(metrics->mFontList.Count() - 1); >+ return PR_FALSE; // stop processing >+ } >+ >+ return PR_TRUE; // keep processing >+} >+ >+/* >+ * This is only used when there's per-character spacing happening. >+ * Well, really it can be either line or character spacing but it's >+ * just turtles all the way down! >+ */ >+ >+void >+nsFontMetricsPango::DrawStringSlowly(const gchar *aText, >+ const PRUnichar *aOrigString, >+ PRUint32 aLength, >+ GdkDrawable *aDrawable, >+ GdkGC *aGC, gint aX, gint aY, >+ PangoLayoutLine *aLine, >+ const nscoord *aSpacing) >+{ >+ float app2dev; >+ app2dev = mDeviceContext->AppUnitsToDevUnits(); >+ gint offset = 0; >+ >+ /* >+ * We walk the list of glyphs returned in each layout run, >+ * matching up the glyphs with the characters in the source text. >+ * We use the aSpacing argument to figure out where to place those >+ * glyphs. It's important to note that since the string we're >+ * working with is in UTF-8 while the spacing argument assumes >+ * that offset will be part of the UTF-16 string. Logical >+ * attributes in pango are in byte offsets in the UTF-8 string, so >+ * we need to store the offsets based on the UTF-8 string. >+ */ >+ nscoord *utf8spacing = new nscoord[strlen(aText)]; >+ >+ if (aOrigString) { >+ const gchar *curChar = aText; >+ bzero(utf8spacing, sizeof(nscoord) * strlen(aText)); >+ >+ // Covert the utf16 spacing offsets to utf8 spacing offsets >+ for (PRUint32 curOffset=0; curOffset < aLength; >+ curOffset++, curChar = g_utf8_find_next_char(curChar, NULL)) { >+ utf8spacing[curChar - aText] = aSpacing[curOffset]; >+ >+ if (IS_HIGH_SURROGATE(aOrigString[curOffset])) >+ curOffset++; >+ } >+ } >+ else { >+ memcpy(utf8spacing, aSpacing, (sizeof(nscoord *) * aLength)); >+ } >+ >+ gint curRun = 0; >+ >+ for (GSList *tmpList = aLine->runs; tmpList && tmpList->data; >+ tmpList = tmpList->next, curRun++) { >+ PangoLayoutRun *layoutRun = (PangoLayoutRun *)tmpList->data; >+ gint tmpOffset = 0; >+ >+ /* printf(" Rendering run %d: \"%s\"\n", curRun, >+ &aText[layoutRun->item->offset]); */ >+ >+ for (gint i=0; i < layoutRun->glyphs->num_glyphs; i++) { >+ /* printf("glyph %d offset %d orig width %d new width %d\n", i, >+ * layoutRun->glyphs->log_clusters[i] + layoutRun->item->offset, >+ * layoutRun->glyphs->glyphs[i].geometry.width, >+ * (gint)(utf8spacing[layoutRun->glyphs->log_clusters[i] + layoutRun->item->offset] * app2dev * PANGO_SCALE)); >+ */ >+ gint thisOffset = (gint)(utf8spacing[layoutRun->glyphs->log_clusters[i] + layoutRun->item->offset] >+ * app2dev * PANGO_SCALE); >+ layoutRun->glyphs->glyphs[i].geometry.width = thisOffset; >+ tmpOffset += thisOffset; >+ } >+ >+ /* printf(" rendering at X coord %d\n", aX + offset); */ >+ offset += tmpOffset; >+ } >+ >+ gdk_draw_layout_line(aDrawable, aGC, aX, aY, aLine); >+ >+ delete[] utf8spacing; >+} >+ >+nsresult >+nsFontMetricsPango::GetTextDimensionsInternal(const gchar* aString, >+ PRInt32 aLength, >+ PRInt32 aAvailWidth, >+ PRInt32* aBreaks, >+ PRInt32 aNumBreaks, >+ nsTextDimensions& aDimensions, >+ PRInt32& aNumCharsFit, >+ nsTextDimensions& aLastWordDimensions, >+ nsRenderingContextGTK *aContext) >+{ >+ NS_PRECONDITION(aBreaks[aNumBreaks - 1] == aLength, "invalid break array"); >+ >+ // If we need to back up this state represents the last place >+ // we could break. We can use this to avoid remeasuring text >+ PRInt32 prevBreakState_BreakIndex = -1; // not known >+ // (hasn't been computed) >+ nscoord prevBreakState_Width = 0; // accumulated width to this point >+ >+ // Initialize OUT parameters >+ GetMaxAscent(aLastWordDimensions.ascent); >+ GetMaxDescent(aLastWordDimensions.descent); >+ aLastWordDimensions.width = -1; >+ aNumCharsFit = 0; >+ >+ // Iterate each character in the string and determine which font to use >+ nscoord width = 0; >+ PRInt32 start = 0; >+ nscoord aveCharWidth; >+ GetAveCharWidth(aveCharWidth); >+ >+ while (start < aLength) { >+ // Estimate how many characters will fit. Do that by >+ // diving the available space by the average character >+ // width. Make sure the estimated number of characters is >+ // at least 1 >+ PRInt32 estimatedNumChars = 0; >+ >+ if (aveCharWidth > 0) >+ estimatedNumChars = (aAvailWidth - width) / aveCharWidth; >+ >+ if (estimatedNumChars < 1) >+ estimatedNumChars = 1; >+ >+ // Find the nearest break offset >+ PRInt32 estimatedBreakOffset = start + estimatedNumChars; >+ PRInt32 breakIndex; >+ nscoord numChars; >+ >+ // Find the nearest place to break that is less than or equal to >+ // the estimated break offset >+ if (aLength <= estimatedBreakOffset) { >+ // All the characters should fit >+ numChars = aLength - start; >+ breakIndex = aNumBreaks - 1; >+ } >+ else { >+ breakIndex = prevBreakState_BreakIndex; >+ while (((breakIndex + 1) < aNumBreaks) && >+ (aBreaks[breakIndex + 1] <= estimatedBreakOffset)) { >+ ++breakIndex; >+ } >+ >+ if (breakIndex == prevBreakState_BreakIndex) { >+ ++breakIndex; // make sure we advanced past the >+ // previous break index >+ } >+ >+ numChars = aBreaks[breakIndex] - start; >+ } >+ >+ // Measure the text >+ nscoord twWidth = 0; >+ if ((1 == numChars) && (aString[start] == ' ')) >+ GetSpaceWidth(twWidth); >+ else if (numChars > 0) >+ GetWidth(&aString[start], numChars, twWidth, aContext); >+ >+ // See if the text fits >+ PRBool textFits = (twWidth + width) <= aAvailWidth; >+ >+ // If the text fits then update the width and the number of >+ // characters that fit >+ if (textFits) { >+ aNumCharsFit += numChars; >+ width += twWidth; >+ start += numChars; >+ >+ // This is a good spot to back up to if we need to so remember >+ // this state >+ prevBreakState_BreakIndex = breakIndex; >+ prevBreakState_Width = width; >+ } >+ else { >+ // See if we can just back up to the previous saved >+ // state and not have to measure any text >+ if (prevBreakState_BreakIndex > 0) { >+ // If the previous break index is just before the >+ // current break index then we can use it >+ if (prevBreakState_BreakIndex == (breakIndex - 1)) { >+ aNumCharsFit = aBreaks[prevBreakState_BreakIndex]; >+ width = prevBreakState_Width; >+ break; >+ } >+ } >+ >+ // We can't just revert to the previous break state >+ if (0 == breakIndex) { >+ // There's no place to back up to, so even though >+ // the text doesn't fit return it anyway >+ aNumCharsFit += numChars; >+ width += twWidth; >+ break; >+ } >+ >+ // Repeatedly back up until we get to where the text >+ // fits or we're all the way back to the first word >+ width += twWidth; >+ while ((breakIndex >= 1) && (width > aAvailWidth)) { >+ twWidth = 0; >+ start = aBreaks[breakIndex - 1]; >+ numChars = aBreaks[breakIndex] - start; >+ >+ if ((1 == numChars) && (aString[start] == ' ')) >+ GetSpaceWidth(twWidth); >+ else if (numChars > 0) >+ GetWidth(&aString[start], numChars, twWidth, >+ aContext); >+ width -= twWidth; >+ aNumCharsFit = start; >+ breakIndex--; >+ } >+ break; >+ } >+ } >+ >+ aDimensions.width = width; >+ GetMaxAscent(aDimensions.ascent); >+ GetMaxDescent(aDimensions.descent); >+ >+ /* printf("aDimensions %d %d %d aLastWordDimensions %d %d %d aNumCharsFit %d\n", >+ aDimensions.width, aDimensions.ascent, aDimensions.descent, >+ aLastWordDimensions.width, aLastWordDimensions.ascent, aLastWordDimensions.descent, >+ aNumCharsFit); */ >+ >+ return NS_OK; >+} >+ >+void >+nsFontMetricsPango::FixupSpaceWidths (PangoLayout *aLayout, >+ const char *aString) >+{ >+ PangoLayoutLine *line = pango_layout_get_line(aLayout, 0); >+ >+ gint curRun = 0; >+ >+ for (GSList *tmpList = line->runs; tmpList && tmpList->data; >+ tmpList = tmpList->next, curRun++) { >+ PangoLayoutRun *layoutRun = (PangoLayoutRun *)tmpList->data; >+ >+ for (gint i=0; i < layoutRun->glyphs->num_glyphs; i++) { >+ gint thisOffset = (gint)layoutRun->glyphs->log_clusters[i] + layoutRun->item->offset; >+ if (aString[thisOffset] == ' ') >+ layoutRun->glyphs->glyphs[i].geometry.width = mPangoSpaceWidth; >+ } >+ } >+} >+ >+/* static */ >+PRBool >+IsASCIIFontName(const nsString& aName) >+{ >+ PRUint32 len = aName.Length(); >+ const PRUnichar* str = aName.get(); >+ for (PRUint32 i = 0; i < len; i++) { >+ /* >+ * X font names are printable ASCII, ignore others (for now) >+ */ >+ if ((str[i] < 0x20) || (str[i] > 0x7E)) { >+ return PR_FALSE; >+ } >+ } >+ >+ return PR_TRUE; >+} >+ >+/* static */ >+int >+FFRECountHyphens (nsACString &aFFREName) >+{ >+ int h = 0; >+ PRInt32 hyphen = 0; >+ while ((hyphen = aFFREName.FindChar('-', hyphen)) >= 0) { >+ ++h; >+ ++hyphen; >+ } >+ return h; >+} >+ >+/* static */ >+PangoLanguage * >+GetPangoLanguage(nsIAtom *aLangGroup) >+{ >+ // Find the FC lang group for this lang group >+ nsCAutoString cname; >+ aLangGroup->ToUTF8String(cname); >+ >+ // see if the lang group needs to be translated from mozilla's >+ // internal mapping into fontconfig's >+ const struct MozPangoLangGroup *langGroup; >+ langGroup = FindPangoLangGroup(cname); >+ >+ // if there's no lang group, just use the lang group as it was >+ // passed to us >+ // >+ // we're casting away the const here for the strings - should be >+ // safe. >+ if (!langGroup) >+ return pango_language_from_string(cname.get()); >+ else if (langGroup->PangoLang) >+ return pango_language_from_string(langGroup->PangoLang); >+ >+ return pango_language_from_string("en"); >+} >+ >+/* static */ >+const MozPangoLangGroup* >+FindPangoLangGroup (nsACString &aLangGroup) >+{ >+ for (unsigned int i=0; i < NUM_PANGO_LANG_GROUPS; ++i) { >+ if (aLangGroup.Equals(MozPangoLangGroups[i].mozLangGroup, >+ nsCaseInsensitiveCStringComparator())) { >+ return &MozPangoLangGroups[i]; >+ } >+ } >+ >+ return nsnull; >+} >+ >+/* static */ >+void >+FreeGlobals(void) >+{ >+} >+ >+/* static */ >+PangoStyle >+CalculateStyle(PRUint8 aStyle) >+{ >+ switch(aStyle) { >+ case NS_FONT_STYLE_ITALIC: >+ return PANGO_STYLE_OBLIQUE; >+ break; >+ case NS_FONT_STYLE_OBLIQUE: >+ return PANGO_STYLE_OBLIQUE; >+ break; >+ } >+ >+ return PANGO_STYLE_NORMAL; >+} >+ >+/* static */ >+PangoWeight >+CalculateWeight (PRUint16 aWeight) >+{ >+ /* >+ * weights come in two parts crammed into one >+ * integer -- the "base" weight is weight / 100, >+ * the rest of the value is the "offset" from that >+ * weight -- the number of steps to move to adjust >+ * the weight in the list of supported font weights, >+ * this value can be negative or positive. >+ */ >+ PRInt32 baseWeight = (aWeight + 50) / 100; >+ PRInt32 offset = aWeight - baseWeight * 100; >+ >+ /* clip weights to range 0 to 9 */ >+ if (baseWeight < 0) >+ baseWeight = 0; >+ if (baseWeight > 9) >+ baseWeight = 9; >+ >+ /* Map from weight value to fcWeights index */ >+ static int fcWeightLookup[10] = { >+ 0, 0, 0, 0, 1, 1, 2, 3, 3, 4, >+ }; >+ >+ PRInt32 fcWeight = fcWeightLookup[baseWeight]; >+ >+ /* >+ * adjust by the offset value, make sure we stay inside the >+ * fcWeights table >+ */ >+ fcWeight += offset; >+ >+ if (fcWeight < 0) >+ fcWeight = 0; >+ if (fcWeight > 4) >+ fcWeight = 4; >+ >+ /* Map to final PANGO_WEIGHT value */ >+ static int fcWeights[5] = { >+ 349, >+ 499, >+ 649, >+ 749, >+ 999 >+ }; >+ >+ return (PangoWeight)fcWeights[fcWeight]; >+} >+ >+/* static */ >+nsresult >+EnumFontsPango(nsIAtom* aLangGroup, const char* aGeneric, >+ PRUint32* aCount, PRUnichar*** aResult) >+{ >+ FcPattern *pat = NULL; >+ FcObjectSet *os = NULL; >+ FcFontSet *fs = NULL; >+ nsresult rv = NS_ERROR_FAILURE; >+ >+ PRUnichar **array = NULL; >+ PRUint32 narray = 0; >+ PRInt32 serif = 0, sansSerif = 0, monospace = 0, nGenerics; >+ >+ *aCount = 0; >+ *aResult = nsnull; >+ >+ pat = FcPatternCreate(); >+ if (!pat) >+ goto end; >+ >+ os = FcObjectSetBuild(FC_FAMILY, FC_FOUNDRY, 0); >+ if (!os) >+ goto end; >+ >+ // take the pattern and add the lang group to it >+ if (aLangGroup) >+ NS_AddLangGroup(pat, aLangGroup); >+ >+ // get the font list >+ fs = FcFontList(0, pat, os); >+ >+ if (!fs) >+ goto end; >+ >+ if (!fs->nfont) { >+ rv = NS_OK; >+ goto end; >+ } >+ >+ // Fontconfig supports 3 generic fonts, "serif", "sans-serif", and >+ // "monospace", slightly different from CSS's 5. >+ if (!aGeneric) >+ serif = sansSerif = monospace = 1; >+ else if (!strcmp(aGeneric, "serif")) >+ serif = 1; >+ else if (!strcmp(aGeneric, "sans-serif")) >+ sansSerif = 1; >+ else if (!strcmp(aGeneric, "monospace")) >+ monospace = 1; >+ else if (!strcmp(aGeneric, "cursive") || !strcmp(aGeneric, "fantasy")) >+ serif = sansSerif = 1; >+ else >+ NS_NOTREACHED("unexpected generic family"); >+ nGenerics = serif + sansSerif + monospace; >+ >+ array = NS_STATIC_CAST(PRUnichar **, >+ nsMemory::Alloc((fs->nfont + nGenerics) * sizeof(PRUnichar *))); >+ if (!array) >+ goto end; >+ >+ if (serif) { >+ PRUnichar *name = ToNewUnicode(NS_LITERAL_STRING("serif")); >+ if (!name) >+ goto end; >+ array[narray++] = name; >+ } >+ >+ if (sansSerif) { >+ PRUnichar *name = ToNewUnicode(NS_LITERAL_STRING("sans-serif")); >+ if (!name) >+ goto end; >+ array[narray++] = name; >+ } >+ >+ if (monospace) { >+ PRUnichar *name = ToNewUnicode(NS_LITERAL_STRING("monospace")); >+ if (!name) >+ goto end; >+ array[narray++] = name; >+ } >+ >+ for (int i=0; i < fs->nfont; ++i) { >+ char *family; >+ PRUnichar *name; >+ >+ // if there's no family, just move to the next iteration >+ if (FcPatternGetString (fs->fonts[i], FC_FAMILY, 0, >+ (FcChar8 **) &family) != FcResultMatch) { >+ continue; >+ } >+ >+ name = NS_STATIC_CAST(PRUnichar *, >+ nsMemory::Alloc ((strlen (family) + 1) >+ * sizeof (PRUnichar))); >+ >+ if (!name) >+ goto end; >+ >+ PRUnichar *r = name; >+ for (char *f = family; *f; ++f) >+ *r++ = *f; >+ *r = '\0'; >+ >+ array[narray++] = name; >+ } >+ >+ NS_QuickSort(array + nGenerics, narray - nGenerics, sizeof (PRUnichar*), >+ CompareFontNames, nsnull); >+ >+ *aCount = narray; >+ if (narray) >+ *aResult = array; >+ else >+ nsMemory::Free(array); >+ >+ rv = NS_OK; >+ >+ end: >+ if (NS_FAILED(rv) && array) { >+ while (narray) >+ nsMemory::Free (array[--narray]); >+ nsMemory::Free (array); >+ } >+ if (pat) >+ FcPatternDestroy(pat); >+ if (os) >+ FcObjectSetDestroy(os); >+ if (fs) >+ FcFontSetDestroy(fs); >+ >+ return rv; >+} >+ >+/* static */ >+int >+CompareFontNames (const void* aArg1, const void* aArg2, void* aClosure) >+{ >+ const PRUnichar* str1 = *((const PRUnichar**) aArg1); >+ const PRUnichar* str2 = *((const PRUnichar**) aArg2); >+ >+ return nsCRT::strcmp(str1, str2); >+} >+ >+// nsFontEnumeratorPango class >+ >+nsFontEnumeratorPango::nsFontEnumeratorPango() >+{ >+} >+ >+NS_IMPL_ISUPPORTS1(nsFontEnumeratorPango, nsIFontEnumerator) >+ >+NS_IMETHODIMP >+nsFontEnumeratorPango::EnumerateAllFonts(PRUint32 *aCount, >+ PRUnichar ***aResult) >+{ >+ NS_ENSURE_ARG_POINTER(aResult); >+ *aResult = nsnull; >+ NS_ENSURE_ARG_POINTER(aCount); >+ *aCount = 0; >+ >+ return EnumFontsPango(nsnull, nsnull, aCount, aResult); >+} >+ >+NS_IMETHODIMP >+nsFontEnumeratorPango::EnumerateFonts(const char *aLangGroup, >+ const char *aGeneric, >+ PRUint32 *aCount, >+ PRUnichar ***aResult) >+{ >+ NS_ENSURE_ARG_POINTER(aResult); >+ *aResult = nsnull; >+ NS_ENSURE_ARG_POINTER(aCount); >+ *aCount = 0; >+ >+ // aLangGroup=null or "" means any (i.e., don't care) >+ // aGeneric=null or "" means any (i.e, don't care) >+ nsCOMPtr<nsIAtom> langGroup; >+ if (aLangGroup && *aLangGroup) >+ langGroup = do_GetAtom(aLangGroup); >+ const char* generic = nsnull; >+ if (aGeneric && *aGeneric) >+ generic = aGeneric; >+ >+ return EnumFontsPango(langGroup, generic, aCount, aResult); >+} >+ >+NS_IMETHODIMP >+nsFontEnumeratorPango::HaveFontFor(const char *aLangGroup, >+ PRBool *aResult) >+{ >+ NS_ENSURE_ARG_POINTER(aResult); >+ *aResult = PR_FALSE; >+ NS_ENSURE_ARG_POINTER(aLangGroup); >+ >+ *aResult = PR_TRUE; // always return true for now. >+ // Finish me - ftang >+ return NS_OK; >+} >+ >+NS_IMETHODIMP >+nsFontEnumeratorPango::GetDefaultFont(const char *aLangGroup, >+ const char *aGeneric, >+ PRUnichar **aResult) >+{ >+ NS_ENSURE_ARG_POINTER(aResult); >+ *aResult = nsnull; >+ >+ // Have a look at nsFontEnumeratorXft::GetDefaultFont for some >+ // possible code for this function. >+ >+ return NS_OK; >+} >+ >+NS_IMETHODIMP >+nsFontEnumeratorPango::UpdateFontList(PRBool *_retval) >+{ >+ *_retval = PR_FALSE; // always return false for now >+ return NS_OK; >+} >--- gfx/src/ps/Makefile.in >+++ gfx/src/ps/Makefile.in >@@ -77,7 +77,13 @@ > $(MOZ_UNICHARUTIL_LIBS) \ > $(NULL) > >-ifdef MOZ_ENABLE_FREETYPE2 >+ifdef MOZ_ENABLE_XFT >+EXTRA_DSO_LDOPTS += \ >+ $(MOZ_XFT_LIBS) \ >+ $(NULL) >+endif >+ >+ifneq (,$(MOZ_ENABLE_FREETYPE2)$(MOZ_ENABLE_XFT)) > CPPSRCS += \ > nsCidMap.cpp \ > nsType1.cpp \ >@@ -87,10 +93,6 @@ > > include $(topsrcdir)/config/rules.mk > >-ifdef MOZ_ENABLE_FREETYPE2 >-INCLUDES += $(FT2_CFLAGS) >-endif >- > CFLAGS += $(TK_CFLAGS) > CXXFLAGS += $(TK_CFLAGS) > >@@ -99,6 +101,15 @@ > -I$(srcdir)/.. \ > $(NULL) > >+ifdef MOZ_ENABLE_XFT >+INCLUDES += $(MOZ_XFT_CFLAGS) >+LOCAL_INCLUDES += -I$(srcdir)/../shared >+else >+ifdef MOZ_ENABLE_FREETYPE2 >+INCLUDES += $(FT2_CFLAGS) >+endif >+endif >+ > libs:: > $(INSTALL) $(EXPORT_RESOURCE) $(DIST)/bin/res > >--- gfx/src/ps/nsDeviceContextPS.cpp >+++ gfx/src/ps/nsDeviceContextPS.cpp >@@ -213,6 +213,15 @@ > > nsresult rv; > nsCOMPtr<nsIPref> pref(do_GetService(NS_PREF_CONTRACTID, &rv)); >+#ifdef MOZ_ENABLE_XFT >+ if (NS_SUCCEEDED(rv)) { >+ rv = pref->GetBoolPref("font.FreeType2.printing", &mFTPEnable); >+ if (NS_FAILED(rv)) >+ mFTPEnable = PR_FALSE; >+ } >+#else >+ mFTPEnable = PR_FALSE; >+#ifdef MOZ_ENABLE_FREETYPE2 > if (NS_SUCCEEDED(rv)) { > rv = pref->GetBoolPref("font.FreeType2.enable", &mFTPEnable); > if (NS_FAILED(rv)) >@@ -223,6 +232,8 @@ > mFTPEnable = PR_FALSE; > } > } >+#endif >+#endif > > // the user's locale > nsCOMPtr<nsILanguageAtomService> langService; >@@ -435,7 +446,7 @@ > > NS_ENSURE_TRUE(mPSObj != nsnull, NS_ERROR_NULL_POINTER); > >-#ifdef MOZ_ENABLE_FREETYPE2 >+#if defined(MOZ_ENABLE_FREETYPE2) || defined(MOZ_ENABLE_XFT) > // Before output Type8 font, check whether printer support CID font > if (mFTPEnable && mPSFontGeneratorList) > if (mPSFontGeneratorList->Count() > 0) >--- gfx/src/ps/nsFontMetricsPS.cpp >+++ gfx/src/ps/nsFontMetricsPS.cpp >@@ -21,6 +21,9 @@ > * > * Contributor(s): > * Roland Mainz <roland.mainz@informatik.med.uni-giessen.de> >+ * Ervin Yan <Ervin.Yan@sun.com> >+ * Christopher Blizzard <blizzard@mozilla.org> >+ * Jungshik Shin <jshin@i18nl10n.com> > * > * > * Alternatively, the contents of this file may be used under the terms of >@@ -47,7 +50,7 @@ > #include "nsIPref.h" > #include "nsVoidArray.h" > #include "nsReadableUtils.h" >-#ifdef MOZ_ENABLE_FREETYPE2 >+#if defined(MOZ_ENABLE_FREETYPE2) || defined(MOZ_ENABLE_XFT) > #include "nsType8.h" > #endif > #include "prlog.h" >@@ -57,12 +60,21 @@ > extern nsIAtom *gUsersLocale; > #define NS_IS_BOLD(weight) ((weight) > 400 ? 1 : 0) > >+#ifdef MOZ_ENABLE_XFT >+ >+#include "nsFontConfigUtils.h" >+ >+static nsFontPS* CreateFontPS(nsXftEntry*, const nsFont&, >+ nsFontMetricsPS*); >+ >+#else > #ifdef MOZ_ENABLE_FREETYPE2 > static nsFontPS* CreateFontPS(nsITrueTypeFontCatalogEntry*, const nsFont&, > nsFontMetricsPS*); > > static NS_DEFINE_CID(kFCSCID, NS_FONTCATALOGSERVICE_CID); > #endif >+#endif > > #ifdef PR_LOGGING > static PRLogModuleInfo *gFontMetricsPSM = PR_NewLogModule("FontMetricsPS"); >@@ -93,11 +105,20 @@ > fontps *fontPS = (fontps *)mFontsPS->ElementAt(i); > if (!fontPS) > continue; >- NS_IF_RELEASE(fontPS->entry); > if (fontPS->fontps) > delete fontPS->fontps; >+#ifdef MOZ_ENABLE_XFT >+ if (fontPS->entry) >+ delete fontPS->entry; >+ if (fontPS->charset) >+ FcCharSetDestroy(fontPS->charset); >+#else >+#ifdef MOZ_ENABLE_FREETYPE2 >+ NS_IF_RELEASE(fontPS->entry); > if (fontPS->ccmap) > FreeCCMap(fontPS->ccmap); >+#endif >+#endif > delete fontPS; > } > delete mFontsPS; >@@ -127,6 +148,7 @@ > mLangGroup = aLangGroup; > > mFont = new nsFont(aFont); >+ > //don't addref this to avoid circular refs > mDeviceContext = (nsDeviceContextPS *)aContext; > >@@ -162,7 +184,7 @@ > float dev2app; > dev2app = mDeviceContext->DevUnitsToAppUnits(); > fontps *font = (fontps*)mFontsPS->ElementAt(0); >-#ifdef MOZ_ENABLE_FREETYPE2 >+#if defined(MOZ_ENABLE_FREETYPE2) || defined(MOZ_ENABLE_XFT) > NS_ASSERTION(font && font->entry, "no font available"); > if (font && !font->fontps && font->entry) > font->fontps = CreateFontPS(font->entry, *mFont, this); >@@ -468,11 +490,15 @@ > { > nsFontPS* fontPS; > >-#ifdef MOZ_ENABLE_FREETYPE2 >+#if defined(MOZ_ENABLE_FREETYPE2) || defined(MOZ_ENABLE_XFT) > nsDeviceContextPS* dc = aFontMetrics->GetDeviceContext(); > NS_ENSURE_TRUE(dc, nsnull); > if (dc->mFTPEnable) { >+#ifdef MOZ_ENABLE_XFT >+ fontPS = nsFontPSXft::FindFont(aChar, aFont, aFontMetrics); >+#else > fontPS = nsFontPSFreeType::FindFont(aChar, aFont, aFontMetrics); >+#endif > if (fontPS) > return fontPS; > } >@@ -488,9 +514,15 @@ > fontPS = nsFontPSAFM::FindFont(aFont, aFontMetrics); > fontps *fps = new fontps; > NS_ENSURE_TRUE(fps, nsnull); >- fps->entry = nsnull; > fps->fontps = fontPS; >+#if defined(MOZ_ENABLE_XFT) || defined(MOZ_ENABLE_FREETYPE2) >+ fps->entry = nsnull; >+#ifdef MOZ_ENABLE_XFT >+ fps->charset = nsnull; >+#else > fps->ccmap = nsnull; >+#endif >+#endif > aFontMetrics->GetFontsPS()->AppendElement(fps); > } > return fontPS; >@@ -548,7 +580,7 @@ > nsFontPS(aFont, aFontMetrics), mAFMInfo(aAFMInfo), mFontIndex(fontIndex) > { > if (!(mFont && mAFMInfo)) return; >- mFamilyName.AssignWithConversion((char*)mAFMInfo->mPSFontInfo->mFamilyName); >+ AppendASCIItoUTF16(mAFMInfo->mPSFontInfo->mFamilyName, mFamilyName); > } > > nsFontPSAFM::~nsFontPSAFM() >@@ -562,140 +594,904 @@ > nscoord > nsFontPSAFM::GetWidth(const char* aString, PRUint32 aLength) > { >- nscoord width = 0; >- if (mAFMInfo) { >- mAFMInfo->GetStringWidth(aString, width, aLength); >- } >- return width; >+ nscoord width = 0; >+ if (mAFMInfo) { >+ mAFMInfo->GetStringWidth(aString, width, aLength); >+ } >+ return width; >+} >+ >+nscoord >+nsFontPSAFM::GetWidth(const PRUnichar* aString, PRUint32 aLength) >+{ >+ nscoord width = 0; >+ if (mAFMInfo) { >+ mAFMInfo->GetStringWidth(aString, width, aLength); >+ } >+ return width; >+} >+ >+nscoord >+nsFontPSAFM::DrawString(nsRenderingContextPS* aContext, >+ nscoord aX, nscoord aY, >+ const char* aString, PRUint32 aLength) >+{ >+ NS_ENSURE_TRUE(aContext, 0); >+ nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >+ NS_ENSURE_TRUE(psObj, 0); >+ >+ psObj->moveto(aX, aY); >+ psObj->show(aString, aLength, ""); >+ return GetWidth(aString, aLength); >+} >+ >+nscoord >+nsFontPSAFM::DrawString(nsRenderingContextPS* aContext, >+ nscoord aX, nscoord aY, >+ const PRUnichar* aString, PRUint32 aLength) >+{ >+ NS_ENSURE_TRUE(aContext, 0); >+ nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >+ NS_ENSURE_TRUE(psObj, 0); >+ >+ psObj->moveto(aX, aY); >+ psObj->show(aString, aLength, "", 0); >+ return GetWidth(aString, aLength); >+} >+ >+nsresult >+nsFontPSAFM::RealizeFont(nsFontMetricsPS* aFontMetrics, float dev2app) >+{ >+ NS_ENSURE_ARG_POINTER(aFontMetrics); >+ >+ float fontSize; >+ float offset; >+ >+ nscoord onePixel = NSToCoordRound(1 * dev2app); >+ >+ // convert the font size which is in twips to points >+ fontSize = mFont->size / TWIPS_PER_POINT_FLOAT; >+ >+ offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mXHeight) / 1000.0f; >+ nscoord xHeight = NSToCoordRound(offset); >+ aFontMetrics->SetXHeight(xHeight); >+ aFontMetrics->SetSuperscriptOffset(xHeight); >+ aFontMetrics->SetSubscriptOffset(xHeight); >+ aFontMetrics->SetStrikeout((nscoord)(xHeight / 2), onePixel); >+ >+ offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mUnderlinePosition) / 1000.0f; >+ aFontMetrics->SetUnderline(NSToCoordRound(offset), onePixel); >+ >+ nscoord size = NSToCoordRound(fontSize * dev2app); >+ aFontMetrics->SetHeight(size); >+ aFontMetrics->SetEmHeight(size); >+ aFontMetrics->SetMaxAdvance(size); >+ aFontMetrics->SetMaxHeight(size); >+ >+ offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mAscender) / 1000.0f; >+ nscoord ascent = NSToCoordRound(offset); >+ aFontMetrics->SetAscent(ascent); >+ aFontMetrics->SetEmAscent(ascent); >+ aFontMetrics->SetMaxAscent(ascent); >+ >+ offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mDescender) / 1000.0f; >+ nscoord descent = -(NSToCoordRound(offset)); >+ aFontMetrics->SetDescent(descent); >+ aFontMetrics->SetEmDescent(descent); >+ aFontMetrics->SetMaxDescent(descent); >+ >+ aFontMetrics->SetLeading(0); >+ >+ nscoord spaceWidth = GetWidth(" ", 1); >+ aFontMetrics->SetSpaceWidth(spaceWidth); >+ >+ nscoord aveCharWidth = GetWidth("x", 1); >+ aFontMetrics->SetAveCharWidth(aveCharWidth); >+ >+ return NS_OK; >+} >+ >+nsresult >+nsFontPSAFM::SetupFont(nsRenderingContextPS* aContext) >+{ >+ NS_ENSURE_TRUE(aContext && mFontMetrics, 0); >+ nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >+ NS_ENSURE_TRUE(psObj, 0); >+ >+ nscoord fontHeight = 0; >+ mFontMetrics->GetHeight(fontHeight); >+ >+ psObj->setscriptfont(mFontIndex, mFamilyName, >+ fontHeight, mFont->style, mFont->variant, >+ mFont->weight, mFont->decorations); >+ return NS_OK; >+} >+ >+#ifdef MOZ_MATHML >+nsresult >+nsFontPSAFM::GetBoundingMetrics(const char* aString, >+ PRUint32 aLength, >+ nsBoundingMetrics& aBoundingMetrics) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+nsresult >+nsFontPSAFM::GetBoundingMetrics(const PRUnichar* aString, >+ PRUint32 aLength, >+ nsBoundingMetrics& aBoundingMetrics) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+#endif >+ >+#if defined(MOZ_ENABLE_FREETYPE2) || defined(MOZ_ENABLE_XFT) >+ >+#define WIDEN_8_TO_16_BUF_SIZE 1024 >+ >+#ifdef MOZ_ENABLE_XFT >+ >+nsXftEntry::nsXftEntry(FcPattern *aFontPattern) >+{ >+ mFace = nsnull; >+ mFaceIndex = 0; >+ >+ char *fcResult; >+ >+ if (FcPatternGetString(aFontPattern, FC_FILE, 0, (FcChar8 **) &fcResult) >+ == FcResultMatch) >+ mFontFileName = fcResult; >+ >+ if (FcPatternGetString(aFontPattern, FC_FAMILY, 0, (FcChar8 **) &fcResult) >+ == FcResultMatch) >+ mFamilyName = fcResult; >+ >+ if (FcPatternGetString(aFontPattern, FC_STYLE, 0, (FcChar8 **) &fcResult) >+ == FcResultMatch) >+ mStyleName = fcResult; >+} >+ >+ >+static nsFontPS* >+CreateFontPS(nsXftEntry *aEntry, const nsFont& aFont, >+ nsFontMetricsPS* aFontMetrics) >+{ >+ nsresult rv; >+ nsDeviceContextPS* dc = aFontMetrics->GetDeviceContext(); >+ NS_ENSURE_TRUE(dc, nsnull); >+ >+ nsCAutoString fileName(aEntry->mFontFileName); >+ nsCAutoString familyName(aEntry->mFamilyName); >+ nsCAutoString styleName(aEntry->mStyleName); >+ ToLowerCase(familyName); >+ ToLowerCase(styleName); >+ >+ nsCAutoString fontName; >+ fontName.Append(familyName); >+ fontName.Append("-"); >+ fontName.Append(styleName); >+ nsCStringKey key(fontName); >+ >+ nsHashtable *psFGList = dc->GetPSFontGeneratorList(); >+ NS_ENSURE_TRUE(psFGList, nsnull); >+ >+ nsPSFontGenerator* psFontGen = (nsPSFontGenerator*) psFGList->Get(&key); >+ if (!psFontGen) { >+ psFontGen = new nsXftType8Generator; >+ NS_ENSURE_TRUE(psFontGen, nsnull); >+ rv = ((nsXftType8Generator*)psFontGen)->Init(aEntry); >+ if (NS_FAILED(rv)) { >+ delete psFontGen; >+ return nsnull; >+ } >+ psFGList->Put(&key, (void *) psFontGen); >+ } >+ nsFontPSXft* font = new nsFontPSXft(aFont, aFontMetrics); >+ NS_ENSURE_TRUE(font, nsnull); >+ rv = font->Init(aEntry, psFontGen); >+ if (NS_FAILED(rv)) { >+ delete font; >+ return nsnull; >+ } >+ return font; >+} >+ >+/* static */ >+PRBool >+nsFontPSXft::CSSFontEnumCallback(const nsString& aFamily, PRBool aIsGeneric, >+ void* aFpi) >+{ >+ fontPSInfo *fpi = (fontPSInfo *)aFpi; >+ >+ // make sure it's an ascii name, if not then return and continue >+ // enumerating >+ if (!NS_IsASCIIFontName(aFamily)) >+ return PR_TRUE; >+ >+ NS_LossyConvertUTF16toASCII name(aFamily); >+ ToLowerCase(name); >+ fpi->mFontList.AppendCString(name); >+ fpi->mFontIsGeneric.AppendElement((void *)aIsGeneric); >+ if (aIsGeneric) { >+ fpi->mGenericFont = >+ fpi->mFontList.CStringAt(fpi->mFontList.Count() - 1); >+ return PR_FALSE; // stop processing >+ } >+ >+ return PR_TRUE; // keep processing >+} >+ >+nsFontPS* >+nsFontPSXft::FindFont(PRUnichar aChar, const nsFont& aFont, >+ nsFontMetricsPS* aFontMetrics) >+{ >+ PRBool inited = PR_FALSE; >+ nsCOMPtr<nsIAtom> langGroup; >+ fontPSInfo fpi; >+ fpi.fontps = aFontMetrics->GetFontsPS(); >+ int i = 0; >+ >+ while (1) { >+ // >+ // see if it is already in the list of fonts >+ // >+ for (; i<fpi.fontps->Count(); i++) { >+ fontps *fi = (fontps *)fpi.fontps->ElementAt(i); >+ if (!fi->entry || !fi->charset) { >+ NS_ASSERTION(fi->entry, "invalid entry"); >+ NS_ASSERTION(fi->charset, "invalid charset"); >+ continue; >+ } >+ if (FcCharSetHasChar(fi->charset, aChar)) { >+ if (!fi->fontps) { >+#ifdef PR_LOGGING >+ if (PR_LOG_TEST(gFontMetricsPSM, PR_LOG_DEBUG)) { >+ PR_LogPrint("CreateFontPS %s/%s\n", >+ fi->entry->mFamilyName.get(), fi->entry->mStyleName.get()); >+ } >+#endif >+ fi->fontps = CreateFontPS(fi->entry, aFont, aFontMetrics); >+ } >+ if (fi->fontps) >+ return fi->fontps; >+ } >+ } >+ >+ // if already get all matched fonts and not found suitable >+ // then return nsnull >+ if (fpi.fontps->Count() > 0) >+ return nsnull; >+ >+ // >+ // it is not already in the list of fonts >+ // so add more fonts to the list >+ // >+ if (inited) >+ return nsnull; >+ >+ inited = PR_TRUE; >+ >+ fpi.nsfont = &aFont; >+ fpi.alreadyLoaded = aFontMetrics->GetFontsAlreadyLoadedList(); >+ fpi.mGenericFont = nsnull; >+ >+ aFontMetrics->GetLangGroup(getter_AddRefs(langGroup)); >+ if (!langGroup) >+ langGroup = NS_NewAtom("x-western"); >+ >+ // enumerate over the font names passed in >+ aFont.EnumerateFamilies(nsFontPSXft::CSSFontEnumCallback, &fpi); >+ >+ nsCOMPtr<nsIPref> prefService; >+ prefService = do_GetService(NS_PREF_CONTRACTID); >+ if (!prefService) >+ return nsnull; >+ >+ nsXPIDLCString value; >+ nsCAutoString aDefaultFont; >+ >+ // Set up the default font name if it's not set >+ if (!fpi.mGenericFont) { >+ prefService->CopyCharPref("font.default", getter_Copies(value)); >+ >+ if (value.get()) >+ aDefaultFont = value.get(); >+ else >+ aDefaultFont = "serif"; >+ >+ fpi.mGenericFont = &aDefaultFont; >+ } >+ >+ // If pattern is null, set up the base bits of it so we can >+ // match. If we need to match later we don't have to set it up >+ // again. >+ FcPattern *pattern = nsnull; >+ >+ pattern = FcPatternCreate(); >+ if (!pattern) >+ return nsnull; >+ >+ // XXX need to add user defined family >+ >+ // Add CSS names - walk the list of fonts, adding the generic as >+ // the last font >+ for (int i=0; i < fpi.mFontList.Count(); ++i) { >+ // if this was a generic name, break out of the loop since we >+ // don't want to add it to the pattern yet >+ if (fpi.mFontIsGeneric[i]) >+ break;; >+ >+ nsCString *familyName = fpi.mFontList.CStringAt(i); >+ NS_AddFFRE(pattern, familyName, PR_FALSE); >+ } >+ >+ // Add the language group. Note that we do this before adding any >+ // generics. That's because the language is more important than >+ // any generic font. >+ NS_AddLangGroup(pattern, langGroup); >+ >+ // If there's a generic add a pref for the generic if there's one >+ // set. >+ if (fpi.mGenericFont && !aFont.systemFont) { >+ nsCAutoString name("font.name."); >+ name += fpi.mGenericFont->get(); >+ name += "."; >+ >+ nsAutoString langGroupStr; >+ langGroup->ToString(langGroupStr); >+ >+ LossyAppendUTF16toASCII(langGroupStr, name); >+ >+ nsCOMPtr<nsIPref> pref; >+ pref = do_GetService(NS_PREF_CONTRACTID); >+ if (pref) { >+ nsresult rv; >+ nsXPIDLCString value; >+ rv = pref->GetCharPref(name.get(), getter_Copies(value)); >+ >+ // we ignore prefs that have three hypens since they are X >+ // style prefs. >+ if (NS_FFRECountHyphens(value) < 3) { >+ nsCAutoString tmpstr(value); >+ >+ if (PR_LOG_TEST(gFontMetricsPSM, PR_LOG_DEBUG)) { >+ printf("\tadding generic font from preferences: %s\n", >+ tmpstr.get()); >+ } >+ >+ NS_AddFFRE(pattern, &tmpstr, PR_FALSE); >+ } >+ } >+ } >+ >+ // Add the generic if there is one. >+ if (fpi.mGenericFont && !aFont.systemFont) >+ NS_AddFFRE(pattern, fpi.mGenericFont, PR_FALSE); >+ >+ // Add the slant type >+ FcPatternAddInteger(pattern, FC_SLANT, NS_CalculateSlant(aFont.style)); >+ >+ // Add the weight >+ FcPatternAddInteger(pattern, FC_WEIGHT, NS_CalculateWeight(aFont.weight)); >+ >+ // Set up the default substitutions for this font >+ FcConfigSubstitute(0, pattern, FcMatchPattern); >+ FcDefaultSubstitute(pattern); >+ >+ FcResult result; >+ FcFontSet *set = FcFontSort(0, pattern, FcTrue, 0, &result); >+ if (!set) { >+ return nsnull; >+ } >+ >+ // Create a list of new font objects based on the fonts returned >+ // as part of the query >+ for (int i=0; i < set->nfont; ++i) { >+ FcBool fc_outline; >+ FcChar8 *fc_family; >+ FcChar8 *fc_style; >+ FcCharSet *fc_charset; >+ >+ // skip if the fonts is not outline font files. >+ result = FcPatternGetBool (set->fonts[i], FC_OUTLINE, 0, &fc_outline); >+ if (!fc_outline) >+ continue; >+ >+ result = FcPatternGetString (set->fonts[i], FC_FAMILY, 0, &fc_family); >+ if (result != FcResultMatch || fc_family == nsnull) >+ continue; >+ >+ result = FcPatternGetString (set->fonts[i], FC_STYLE, 0, &fc_style); >+ if (result != FcResultMatch || fc_style == nsnull) >+ continue; >+ >+ result = FcPatternGetCharSet(set->fonts[i], FC_CHARSET, 0, &fc_charset); >+ if (result != FcResultMatch || fc_charset == nsnull) >+ continue; >+ >+ nsXftEntry *xftEntry = new nsXftEntry(set->fonts[i]); >+ if (!xftEntry) >+ continue; >+ >+ fontps *fps = new fontps; >+ fps->entry = xftEntry; >+ fps->charset = fc_charset; >+ fps->fontps = nsnull; >+ fpi.fontps->AppendElement(fps); >+ } >+ >+ // we're done with the set now >+ FcFontSetDestroy(set); >+ >+ FcPatternDestroy(pattern); >+ } >+ >+ return nsnull; >+} >+ >+/*FT_CALLBACK_DEF*/ >+FT_Error >+nsXftFaceRequester(FTC_FaceID face_id, FT_Library lib, >+ FT_Pointer request_data, FT_Face* aFace) >+{ >+ nsXftEntry *faceID = (nsXftEntry *)face_id; >+ >+ FT_Error fterror = FT_New_Face(lib, faceID->mFontFileName.get(), >+ faceID->mFaceIndex, aFace); >+ if (fterror) >+ *aFace = nsnull; >+ return 0; >+} >+ >+nsFontPSXft::nsFontPSXft(const nsFont& aFont, >+ nsFontMetricsPS* aFontMetrics) >+ :nsFontPS(aFont, aFontMetrics) >+{ >+} >+ >+nsresult >+nsFontPSXft::Init(nsXftEntry* aEntry, >+ nsPSFontGenerator* aPSFontGen) >+{ >+ NS_ENSURE_TRUE(aEntry && aPSFontGen, NS_ERROR_FAILURE); >+ mEntry = aEntry; >+ mPSFontGenerator = aPSFontGen; >+ >+ float app2dev; >+ nsIDeviceContext* dc = mFontMetrics->GetDeviceContext(); >+ NS_ENSURE_TRUE(dc, NS_ERROR_NULL_POINTER); >+ app2dev = dc->AppUnitsToDevUnits(); >+ >+ mPixelSize = NSToIntRound(app2dev * mFont->size); >+ >+ mImageDesc.font.face_id = (void*)mEntry; >+ mImageDesc.font.pix_width = mPixelSize; >+ mImageDesc.font.pix_height = mPixelSize; >+ mImageDesc.image_type = 0; >+ >+ FT_Error fterror; >+ fterror = FT_Init_FreeType(&mFreeTypeLibrary); >+ if (fterror) { >+ NS_ASSERTION(!fterror, "failed to initialize FreeType library"); >+ mFreeTypeLibrary = nsnull; >+ return NS_ERROR_FAILURE; >+ } >+ fterror = FTC_Manager_New(mFreeTypeLibrary, 0, 0, 0, nsXftFaceRequester, >+ NULL, &mFTCacheManager); >+ NS_ASSERTION(!fterror, "failed to create FreeType Cache manager"); >+ if (fterror) >+ return NS_ERROR_FAILURE; >+ >+ fterror = FTC_Image_Cache_New(mFTCacheManager, &mImageCache); >+ NS_ASSERTION(!fterror, "failed to create FreeType image cache"); >+ if (fterror) >+ return NS_ERROR_FAILURE; >+ >+ return NS_OK; >+} >+ >+nsFontPSXft::~nsFontPSXft() >+{ >+ FTC_Manager_Done(mFTCacheManager); >+ >+ if (FT_Done_FreeType(mFreeTypeLibrary)) >+ return; >+ >+ mEntry = nsnull; >+} >+ >+FT_Face >+nsFontPSXft::getFTFace() >+{ >+ FT_Error error; >+ FT_Face face = mEntry->mFace; >+ >+ if (face) >+ return (face); >+ >+ error = FTC_Manager_Lookup_Size(mFTCacheManager, &mImageDesc.font, >+ &face, nsnull); >+ NS_ASSERTION(error == 0, "failed to get face/size"); >+ if (error) >+ return nsnull; >+ >+ mEntry->mFace = face; >+ return face; >+} >+ >+nscoord >+nsFontPSXft::GetWidth(const char* aString, PRUint32 aLength) >+{ >+ PRUnichar unichars[WIDEN_8_TO_16_BUF_SIZE]; >+ PRUint32 len, width = 0; >+ while ( aLength > 0 ) { >+ len = PR_MIN(aLength, WIDEN_8_TO_16_BUF_SIZE); >+ for (PRUint32 i=0; i < len; i++) { >+ unichars[i] = PRUnichar(PRUint8(aString[i])); >+ } >+ width += GetWidth(unichars, len); >+ aString += len; >+ aLength -= len; >+ } >+ return width; >+} >+ >+ >+nscoord >+nsFontPSXft::GetWidth(const PRUnichar* aString, PRUint32 aLength) >+{ >+ FT_UInt glyph_index; >+ FT_Glyph glyph; >+ double origin_x = 0; >+ >+ // get the face/size from the FreeType cache >+ FT_Face face = getFTFace(); >+ NS_ASSERTION(face, "failed to get face/size"); >+ if (!face) >+ return 0; >+ >+ for (PRUint32 i=0; i<aLength; i++) { >+ glyph_index = FT_Get_Char_Index((FT_Face)face, aString[i]); >+ FT_Error error = FTC_Image_Cache_Lookup(mImageCache, &mImageDesc, >+ glyph_index, &glyph); >+ if (error) { >+ origin_x += FT_REG_TO_16_16(face->size->metrics.x_ppem/2 + 2); >+ continue; >+ } >+ origin_x += glyph->advance.x; >+ } >+ >+ NS_ENSURE_TRUE(mFontMetrics, 0); >+ >+ nsDeviceContextPS* dc = mFontMetrics->GetDeviceContext(); >+ NS_ENSURE_TRUE(dc, 0); >+ >+ float dev2app; >+ dev2app = dc->DevUnitsToAppUnits(); >+ origin_x *= dev2app; >+ origin_x /= FT_REG_TO_16_16(1); >+ >+ return NSToCoordRound((nscoord)origin_x); >+} >+ >+nscoord >+nsFontPSXft::DrawString(nsRenderingContextPS* aContext, >+ nscoord aX, nscoord aY, >+ const char* aString, PRUint32 aLength) >+{ >+ NS_ENSURE_TRUE(aContext, 0); >+ nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >+ NS_ENSURE_TRUE(psObj, 0); >+ nscoord width = 0; >+ >+ psObj->moveto(aX, aY); >+ >+ PRUnichar unichars[WIDEN_8_TO_16_BUF_SIZE]; >+ PRUint32 len; >+ >+ while ( aLength > 0 ) { >+ len = PR_MIN(aLength, WIDEN_8_TO_16_BUF_SIZE); >+ for (PRUint32 i=0; i < len; i++) { >+ unichars[i] = PRUnichar(PRUint8(aString[i])); >+ } >+ psObj->show(unichars, len, "", 1); >+ mPSFontGenerator->AddToSubset(unichars, len); >+ width += GetWidth(unichars, len); >+ aString += len; >+ aLength -= len; >+ } >+ return width; >+} >+ >+nscoord >+nsFontPSXft::DrawString(nsRenderingContextPS* aContext, >+ nscoord aX, nscoord aY, >+ const PRUnichar* aString, PRUint32 aLength) >+{ >+ NS_ENSURE_TRUE(aContext, 0); >+ nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >+ NS_ENSURE_TRUE(psObj, 0); >+ >+ psObj->moveto(aX, aY); >+ psObj->show(aString, aLength, "", 1); >+ >+ mPSFontGenerator->AddToSubset(aString, aLength); >+ return GetWidth(aString, aLength); >+} >+ >+int >+nsFontPSXft::ascent() >+{ >+ FT_Face face = getFTFace(); >+ NS_ASSERTION(face, "failed to get face/size"); >+ NS_ENSURE_TRUE(face, 0); >+ return FT_DESIGN_UNITS_TO_PIXELS(face->ascender, face->size->metrics.y_scale); >+} >+ >+int >+nsFontPSXft::descent() >+{ >+ FT_Face face = getFTFace(); >+ NS_ASSERTION(face, "failed to get face/size"); >+ NS_ENSURE_TRUE(face, 0); >+ return FT_DESIGN_UNITS_TO_PIXELS(-face->descender, face->size->metrics.y_scale); >+} >+ >+int >+nsFontPSXft::max_ascent() >+{ >+ FT_Face face = getFTFace(); >+ NS_ASSERTION(face, "failed to get face/size"); >+ NS_ENSURE_TRUE(face, 0); >+ TT_OS2 *tt_os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2); >+ NS_ASSERTION(tt_os2, "unable to get OS2 table"); >+ if (tt_os2) >+ return FT_DESIGN_UNITS_TO_PIXELS(tt_os2->sTypoAscender, >+ face->size->metrics.y_scale); >+ else >+ return FT_DESIGN_UNITS_TO_PIXELS(face->bbox.yMax, >+ face->size->metrics.y_scale); >+} >+ >+int >+nsFontPSXft::max_descent() >+{ >+ FT_Face face = getFTFace(); >+ NS_ASSERTION(face, "failed to get face/size"); >+ NS_ENSURE_TRUE(face, 0); >+ TT_OS2 *tt_os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2); >+ NS_ASSERTION(tt_os2, "unable to get OS2 table"); >+ if (tt_os2) >+ return FT_DESIGN_UNITS_TO_PIXELS(-tt_os2->sTypoDescender, >+ face->size->metrics.y_scale); >+ else >+ return FT_DESIGN_UNITS_TO_PIXELS(-face->bbox.yMin, >+ face->size->metrics.y_scale); >+} >+ >+int >+nsFontPSXft::max_width() >+{ >+ FT_Face face = getFTFace(); >+ NS_ASSERTION(face, "failed to get face/size"); >+ NS_ENSURE_TRUE(face, 0); >+ return FT_DESIGN_UNITS_TO_PIXELS(face->max_advance_width, >+ face->size->metrics.x_scale); >+} >+ >+PRBool >+nsFontPSXft::getXHeight(unsigned long &aVal) >+{ >+ FT_Face face = getFTFace(); >+ NS_ASSERTION(face, "failed to get face/size"); >+ if (!face || !aVal) >+ return PR_FALSE; >+ aVal = FT_DESIGN_UNITS_TO_PIXELS(face->height, face->size->metrics.y_scale); >+ >+ return PR_TRUE; >+} >+ >+PRBool >+nsFontPSXft::underlinePosition(long &aVal) >+{ >+ FT_Face face = getFTFace(); >+ NS_ASSERTION(face, "failed to get face/size"); >+ if (!face) >+ return PR_FALSE; >+ aVal = FT_DESIGN_UNITS_TO_PIXELS(-face->underline_position, >+ face->size->metrics.y_scale); >+ return PR_TRUE; > } > >-nscoord >-nsFontPSAFM::GetWidth(const PRUnichar* aString, PRUint32 aLength) >+PRBool >+nsFontPSXft::underline_thickness(unsigned long &aVal) > { >- nscoord width = 0; >- if (mAFMInfo) { >- mAFMInfo->GetStringWidth(aString, width, aLength); >- } >- return width; >+ FT_Face face = getFTFace(); >+ NS_ASSERTION(face, "failed to get face/size"); >+ if (!face) >+ return PR_FALSE; >+ aVal = FT_DESIGN_UNITS_TO_PIXELS(face->underline_thickness, >+ face->size->metrics.x_scale); >+ return PR_TRUE; > } > >-nscoord >-nsFontPSAFM::DrawString(nsRenderingContextPS* aContext, >- nscoord aX, nscoord aY, >- const char* aString, PRUint32 aLength) >+PRBool >+nsFontPSXft::superscript_y(long &aVal) > { >- NS_ENSURE_TRUE(aContext, 0); >- nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >- NS_ENSURE_TRUE(psObj, 0); >+ aVal = 0; >+ FT_Face face = getFTFace(); >+ NS_ASSERTION(face, "failed to get face/size"); >+ if (!face) >+ return PR_FALSE; > >- psObj->moveto(aX, aY); >- psObj->show(aString, aLength, ""); >- return GetWidth(aString, aLength); >+ TT_OS2 *tt_os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2); >+ NS_ASSERTION(tt_os2, "unable to get OS2 table"); >+ if (!tt_os2) >+ return PR_FALSE; >+ >+ aVal = FT_DESIGN_UNITS_TO_PIXELS(tt_os2->ySuperscriptYOffset, >+ face->size->metrics.y_scale); >+ return PR_TRUE; > } > >-nscoord >-nsFontPSAFM::DrawString(nsRenderingContextPS* aContext, >- nscoord aX, nscoord aY, >- const PRUnichar* aString, PRUint32 aLength) >+PRBool >+nsFontPSXft::subscript_y(long &aVal) > { >- NS_ENSURE_TRUE(aContext, 0); >- nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >- NS_ENSURE_TRUE(psObj, 0); >+ aVal = 0; >+ FT_Face face = getFTFace(); >+ NS_ASSERTION(face, "failed to get face/size"); >+ if (!face) >+ return PR_FALSE; > >- psObj->moveto(aX, aY); >- psObj->show(aString, aLength, "", 0); >- return GetWidth(aString, aLength); >+ TT_OS2 *tt_os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2); >+ NS_ASSERTION(tt_os2, "unable to get OS2 table"); >+ if (!tt_os2) >+ return PR_FALSE; >+ >+ aVal = FT_DESIGN_UNITS_TO_PIXELS(tt_os2->ySubscriptYOffset, >+ face->size->metrics.y_scale); >+ >+ // some fonts have the sign wrong. it should be always positive. >+ aVal = (aVal < 0) ? -aVal : aVal; >+ return PR_TRUE; > } > > nsresult >-nsFontPSAFM::RealizeFont(nsFontMetricsPS* aFontMetrics, float dev2app) >+nsFontPSXft::RealizeFont(nsFontMetricsPS* aFontMetrics, float dev2app) > { >- NS_ENSURE_ARG_POINTER(aFontMetrics); >- >- float fontSize; >- float offset; >+ >+ nscoord leading, emHeight, emAscent, emDescent; >+ nscoord maxHeight, maxAscent, maxDescent, maxAdvance; >+ nscoord xHeight, spaceWidth, aveCharWidth; >+ nscoord underlineOffset, underlineSize, superscriptOffset, subscriptOffset; >+ nscoord strikeoutOffset, strikeoutSize; > >- nscoord onePixel = NSToCoordRound(1 * dev2app); >+ int lineSpacing = ascent() + descent(); >+ if (lineSpacing > mPixelSize) { >+ leading = nscoord((lineSpacing - mPixelSize) * dev2app); >+ } >+ else { >+ leading = 0; >+ } >+ emHeight = PR_MAX(1, nscoord(mPixelSize * dev2app)); >+ emAscent = nscoord(ascent() * mPixelSize * dev2app / lineSpacing); >+ emDescent = emHeight - emAscent; > >- // convert the font size which is in twips to points >- fontSize = mFont->size / TWIPS_PER_POINT_FLOAT; >+ maxHeight = nscoord((max_ascent() + max_descent()) * dev2app); >+ maxAscent = nscoord(max_ascent() * dev2app) ; >+ maxDescent = nscoord(max_descent() * dev2app); >+ maxAdvance = nscoord(max_width() * dev2app); > >- offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mXHeight) / 1000.0f; >- nscoord xHeight = NSToCoordRound(offset); >- aFontMetrics->SetXHeight(xHeight); >- aFontMetrics->SetSuperscriptOffset(xHeight); >- aFontMetrics->SetSubscriptOffset(xHeight); >- aFontMetrics->SetStrikeout((nscoord)(xHeight / 2), onePixel); >+ // 56% of ascent, best guess for non-true type >+ xHeight = NSToCoordRound((float)ascent()* dev2app * 0.56f); > >- offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mUnderlinePosition) / 1000.0f; >- aFontMetrics->SetUnderline(NSToCoordRound(offset), onePixel); >+ PRUnichar space = (PRUnichar)' '; >+ spaceWidth = NSToCoordRound(GetWidth(&space, 1)); >+ PRUnichar averageX = (PRUnichar)'x'; >+ aveCharWidth = NSToCoordRound(GetWidth(&averageX, 1)); >+ >+ unsigned long pr = 0; >+ if (getXHeight(pr)) { >+ xHeight = (nscoord(pr * dev2app)); >+ } > >- nscoord size = NSToCoordRound(fontSize * dev2app); >- aFontMetrics->SetHeight(size); >- aFontMetrics->SetEmHeight(size); >- aFontMetrics->SetMaxAdvance(size); >- aFontMetrics->SetMaxHeight(size); >+ float height; >+ long val; >+ >+ height = ascent() + descent(); >+ underlineOffset = -NSToIntRound( >+ PR_MAX (1, floor (0.1 * height + 0.5)) * dev2app); > >- offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mAscender) / 1000.0f; >- nscoord ascent = NSToCoordRound(offset); >- aFontMetrics->SetAscent(ascent); >- aFontMetrics->SetEmAscent(ascent); >- aFontMetrics->SetMaxAscent(ascent); >+ if (underline_thickness(pr)) { >+ /* this will only be provided from adobe .afm fonts */ >+ underlineSize = nscoord(PR_MAX(dev2app, NSToIntRound(pr * dev2app))); >+ } >+ else { >+ height = ascent() + descent(); >+ underlineSize = NSToIntRound( >+ PR_MAX(1, floor (0.05 * height + 0.5)) * dev2app); >+ } > >- offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mDescender) / 1000.0f; >- nscoord descent = -(NSToCoordRound(offset)); >- aFontMetrics->SetDescent(descent); >- aFontMetrics->SetEmDescent(descent); >- aFontMetrics->SetMaxDescent(descent); >+ if (superscript_y(val)) { >+ superscriptOffset = nscoord(PR_MAX(dev2app, NSToIntRound(val * dev2app))); >+ } >+ else { >+ superscriptOffset = xHeight; >+ } > >- aFontMetrics->SetLeading(0); >+ if (subscript_y(val)) { >+ subscriptOffset = nscoord(PR_MAX(dev2app, NSToIntRound(val * dev2app))); >+ } >+ else { >+ subscriptOffset = xHeight; >+ } > >- nscoord spaceWidth = GetWidth(" ", 1); >+ /* need better way to calculate this */ >+ strikeoutOffset = NSToCoordRound(xHeight / 2.0); >+ strikeoutSize = underlineSize; >+ >+ // TODO: leading never used, does it equal to "Height"? >+ aFontMetrics->SetHeight(emHeight); >+ aFontMetrics->SetEmHeight(emHeight); >+ aFontMetrics->SetEmAscent(emAscent); >+ aFontMetrics->SetEmDescent(emDescent); >+ aFontMetrics->SetMaxHeight(maxHeight); >+ aFontMetrics->SetMaxAscent(maxAscent); >+ aFontMetrics->SetMaxDescent(maxDescent); >+ aFontMetrics->SetMaxAdvance(maxAdvance); >+ aFontMetrics->SetXHeight(xHeight); > aFontMetrics->SetSpaceWidth(spaceWidth); >- >- nscoord aveCharWidth = GetWidth("x", 1); > aFontMetrics->SetAveCharWidth(aveCharWidth); >+ aFontMetrics->SetUnderline(underlineOffset, underlineSize); >+ aFontMetrics->SetSuperscriptOffset(superscriptOffset); >+ aFontMetrics->SetSubscriptOffset(subscriptOffset); >+ aFontMetrics->SetStrikeout(strikeoutOffset, strikeoutSize); > > return NS_OK; > } > > nsresult >-nsFontPSAFM::SetupFont(nsRenderingContextPS* aContext) >+nsFontPSXft::SetupFont(nsRenderingContextPS* aContext) > { >- NS_ENSURE_TRUE(aContext && mFontMetrics, 0); >+ NS_ENSURE_TRUE(aContext, NS_ERROR_FAILURE); > nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >- NS_ENSURE_TRUE(psObj, 0); >+ NS_ENSURE_TRUE(psObj, NS_ERROR_FAILURE); > > nscoord fontHeight = 0; > mFontMetrics->GetHeight(fontHeight); > >- psObj->setscriptfont(mFontIndex, mFamilyName, >- fontHeight, mFont->style, mFont->variant, >- mFont->weight, mFont->decorations); >+ nsCString fontName; >+ int wmode = 0; >+ FT_Face face = getFTFace(); >+ NS_ENSURE_TRUE(face, NS_ERROR_NULL_POINTER); >+ char *cidFontName = FT2ToType8CidFontName(face, wmode); >+ NS_ENSURE_TRUE(cidFontName, NS_ERROR_FAILURE); >+ fontName.Assign(cidFontName); >+ psObj->setfont(fontName, fontHeight); >+ PR_Free(cidFontName); >+ > return NS_OK; > } > > #ifdef MOZ_MATHML > nsresult >-nsFontPSAFM::GetBoundingMetrics(const char* aString, >- PRUint32 aLength, >- nsBoundingMetrics& aBoundingMetrics) >+nsFontPSXft::GetBoundingMetrics(const char* aString, >+ PRUint32 aLength, >+ nsBoundingMetrics& aBoundingMetrics) > { > return NS_ERROR_NOT_IMPLEMENTED; > } > > nsresult >-nsFontPSAFM::GetBoundingMetrics(const PRUnichar* aString, >- PRUint32 aLength, >- nsBoundingMetrics& aBoundingMetrics) >+nsFontPSXft::GetBoundingMetrics(const PRUnichar* aString, >+ PRUint32 aLength, >+ nsBoundingMetrics& aBoundingMetrics) > { > return NS_ERROR_NOT_IMPLEMENTED; > } >-#endif >- >-#ifdef MOZ_ENABLE_FREETYPE2 >+#endif //MOZ_MATHML > >-#define WIDEN_8_TO_16_BUF_SIZE 1024 >+#else > > PRBool > nsFontPSFreeType::CSSFontEnumCallback(const nsString& aFamily, PRBool aGeneric, >@@ -713,7 +1509,7 @@ > nsCOMPtr<nsIPref> pref(do_GetService(NS_PREF_CONTRACTID, &rv)); > NS_ENSURE_SUCCESS(rv, PR_TRUE); // keep trying > nsCAutoString name("font.name."); >- name.AppendWithConversion(aFamily.get()); >+ LossyAppendUTF16toASCII(aFamily, name); > name.Append(char('.')); > name.Append(fpi->lang); > pref->CopyCharPref(name.get(), getter_Copies(value)); >@@ -734,7 +1530,7 @@ > ("generic font \"%s\" -> \"%s\"\n", name.get(), familyname.get())); > } > else >- familyname.AppendWithConversion(aFamily); >+ LossyAppendUTF16toASCII(aFamily, familyname); > > AddFontEntries(familyname, fpi->lang, fpi->weight, > nsIFontCatalogService::kFCWidthAny, fpi->slant, >@@ -1560,6 +2356,7 @@ > #endif //MOZ_MATHML > > #endif //MOZ_ENABLE_FREETYPE2 >+#endif //MOZ_ENABLE_XFT > > // Implementation of nsPSFontGenerator > nsPSFontGenerator::nsPSFontGenerator() >@@ -1593,7 +2390,69 @@ > } > } > >+#ifdef MOZ_ENABLE_XFT >+nsXftType8Generator::nsXftType8Generator() >+{ >+} >+ >+nsresult >+nsXftType8Generator::Init(nsXftEntry* aEntry) >+{ >+ NS_ENSURE_TRUE(aEntry, NS_ERROR_FAILURE); >+ mEntry = aEntry; >+ >+ FT_Error error = FT_Init_FreeType(&mFreeTypeLibrary); >+ NS_ASSERTION(!error, "failed to initialize FreeType library"); >+ if (error) { >+ mFreeTypeLibrary = nsnull; >+ return NS_ERROR_FAILURE; >+ } >+ error = FTC_Manager_New(mFreeTypeLibrary, 0, 0, 0, nsXftFaceRequester, >+ NULL, &mFTCacheManager); >+ NS_ASSERTION(!error, "failed to create FreeType Cache manager"); >+ if (error) >+ return NS_ERROR_FAILURE; >+ >+ return NS_OK; >+} >+ >+nsXftType8Generator::~nsXftType8Generator() >+{ >+ FTC_Manager_Done(mFTCacheManager); >+ >+ if (FT_Done_FreeType(mFreeTypeLibrary)) >+ return; >+ >+ mEntry = nsnull; >+} >+ >+void nsXftType8Generator::GeneratePSFont(FILE* aFile) >+{ >+ FT_Error error; >+ FT_Face face = mEntry->mFace; >+ >+ if (face == nsnull) { >+ mImageDesc.font.face_id = (void*)mEntry; >+ mImageDesc.font.pix_width = 16; >+ mImageDesc.font.pix_height = 16; >+ mImageDesc.image_type = 0; >+ error = FTC_Manager_Lookup_Size(mFTCacheManager, &mImageDesc.font, >+ &face, nsnull); >+ if (error) >+ return; >+ } >+ >+ if (face == nsnull) >+ return; >+ >+ int wmode = 0; >+ if (!mSubset.IsEmpty()) >+ FT2SubsetToType8(face, mSubset.get(), mSubset.Length(), wmode, aFile); >+} >+ >+#else > #ifdef MOZ_ENABLE_FREETYPE2 >+ > nsFT2Type8Generator::nsFT2Type8Generator() > { > } >@@ -1639,5 +2498,6 @@ > if (!mSubset.IsEmpty()) > FT2SubsetToType8(face, mSubset.get(), mSubset.Length(), wmode, aFile); > } >-#endif //MOZ_ENABLE_FREETYPE2 > >+#endif //MOZ_ENABLE_FREETYPE2 >+#endif //MOZ_ENABLE_XFT >--- gfx/src/ps/nsFontMetricsPS.h >+++ gfx/src/ps/nsFontMetricsPS.h >@@ -51,7 +51,20 @@ > #include "nsCRT.h" > #include "nsCompressedCharMap.h" > #include "nsPostScriptObj.h" >+#ifdef MOZ_ENABLE_XFT >+#include <ft2build.h> >+#include FT_FREETYPE_H >+#include FT_GLYPH_H >+#include FT_CACHE_H >+#include FT_CACHE_IMAGE_H >+#include FT_OUTLINE_H >+#include FT_OUTLINE_H >+#include FT_TRUETYPE_TABLES_H >+#else >+#ifdef MOZ_ENABLE_FREETYPE2 > #include "nsIFontCatalogService.h" >+#endif >+#endif > #include "nsVoidArray.h" > #include "nsHashtable.h" > >@@ -251,16 +264,113 @@ > nsString mFamilyName; > }; > >+ >+#ifdef MOZ_ENABLE_XFT >+ >+#include <X11/Xft/Xft.h> >+ >+class nsXftEntry >+{ >+public: >+ nsXftEntry(FcPattern *aFontPattern); >+ ~nsXftEntry() {}; >+ >+ FT_Face mFace; >+ int mFaceIndex; >+ nsCString mFontFileName; >+ nsCString mFamilyName; >+ nsCString mStyleName; >+ >+protected: >+ nsXftEntry() {}; >+}; >+ >+struct fontps { >+ nsXftEntry *entry; >+ nsFontPS *fontps; >+ FcCharSet *charset; >+}; >+ >+struct fontPSInfo { >+ nsVoidArray *fontps; >+ const nsFont* nsfont; >+ nsCAutoString lang; >+ nsHashtable *alreadyLoaded; >+ nsCStringArray mFontList; >+ nsAutoVoidArray mFontIsGeneric; >+ nsCString *mGenericFont; >+}; >+ >+class nsFontPSXft : public nsFontPS >+{ >+public: >+ static nsFontPS* FindFont(PRUnichar aChar, const nsFont& aFont, >+ nsFontMetricsPS* aFontMetrics); >+ nsresult Init(nsXftEntry* aEntry, >+ nsPSFontGenerator* aPSFontGen); >+ static PRBool CSSFontEnumCallback(const nsString& aFamily, PRBool aGeneric, >+ void* aFpi); >+ >+ nsFontPSXft(const nsFont& aFont, nsFontMetricsPS* aFontMetrics); >+ virtual ~nsFontPSXft(); >+ NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW >+ >+ nscoord GetWidth(const char* aString, PRUint32 aLength); >+ nscoord GetWidth(const PRUnichar* aString, PRUint32 aLength); >+ nscoord DrawString(nsRenderingContextPS* aContext, >+ nscoord aX, nscoord aY, >+ const char* aString, PRUint32 aLength); >+ nscoord DrawString(nsRenderingContextPS* aContext, >+ nscoord aX, nscoord aY, >+ const PRUnichar* aString, PRUint32 aLength); >+ nsresult RealizeFont(nsFontMetricsPS* aFontMetrics, float dev2app); >+ nsresult SetupFont(nsRenderingContextPS* aContext); >+ >+#ifdef MOZ_MATHML >+ nsresult >+ GetBoundingMetrics(const char* aString, >+ PRUint32 aLength, >+ nsBoundingMetrics& aBoundingMetrics); >+ nsresult >+ GetBoundingMetrics(const PRUnichar* aString, >+ PRUint32 aLength, >+ nsBoundingMetrics& aBoundingMetrics); >+#endif >+ >+ nsXftEntry *mEntry; >+ FT_Face getFTFace(); >+ >+protected: >+ PRUint16 mPixelSize; >+ FTC_Image_Desc mImageDesc; >+ FT_Library mFreeTypeLibrary; >+ FTC_Manager mFTCacheManager; >+ FTC_Image_Cache mImageCache; >+ >+ int ascent(); >+ int descent(); >+ PRBool getXHeight(unsigned long &aVal); >+ int max_ascent(); >+ int max_descent(); >+ int max_width(); >+ PRBool superscript_y(long &aVal); >+ PRBool subscript_y(long &aVal); >+ PRBool underlinePosition(long &aVal); >+ PRBool underline_thickness(unsigned long &aVal); >+ nsPSFontGenerator* mPSFontGenerator; >+}; >+ >+#else >+ >+#ifdef MOZ_ENABLE_FREETYPE2 >+#include "nsIFreeType2.h" >+ > typedef struct { > nsITrueTypeFontCatalogEntry *entry; > nsFontPS *fontps; > unsigned short *ccmap; > } fontps; > >-#ifdef MOZ_ENABLE_FREETYPE2 >- >-#include "nsIFreeType2.h" >- > typedef struct { > nsVoidArray *fontps; > const nsFont* nsfont; >@@ -338,7 +448,12 @@ > nsPSFontGenerator* mPSFontGenerator; > }; > >-#endif >+#else // !FREETYPE2 && !XFT >+typedef struct { >+ nsFontPS *fontps; >+} fontps; >+#endif // MOZ_ENABLE_FREETYPE2 >+#endif // MOZ_ENABLE_XFT > > class nsPSFontGenerator { > public: >@@ -352,6 +467,23 @@ > nsString mSubset; > }; > >+ >+#ifdef MOZ_ENABLE_XFT >+ >+class nsXftType8Generator : public nsPSFontGenerator { >+public: >+ nsXftType8Generator(); >+ ~nsXftType8Generator(); >+ nsresult Init(nsXftEntry* aFce); >+ void GeneratePSFont(FILE* aFile); >+ >+protected: >+ nsXftEntry *mEntry; >+ FTC_Image_Desc mImageDesc; >+ FT_Library mFreeTypeLibrary; >+ FTC_Manager mFTCacheManager; >+}; >+#else > #ifdef MOZ_ENABLE_FREETYPE2 > class nsFT2Type8Generator : public nsPSFontGenerator { > public: >@@ -365,7 +497,8 @@ > nsCOMPtr<nsIFreeType2> mFt2; > FTC_Image_Desc mImageDesc; > }; >-#endif >+#endif // MOZ_ENABLE_FREETYPE2 >+#endif // MOZ_ENABLE_XFT > > #endif > >--- gfx/src/ps/nsType1.cpp >+++ gfx/src/ps/nsType1.cpp >@@ -71,7 +71,9 @@ > static const PRUint16 type1_encryption_c2 = TYPE1_ENCRYPTION_C2; > > typedef struct { >+#ifndef MOZ_ENABLE_XFT > nsIFreeType2 *ft2; >+#endif > FT_Face face; > int elm_cnt; > int len; >@@ -181,17 +183,24 @@ > FT_GlyphSlot slot; > FT_Glyph glyph; > FT_BBox bbox; >- nsresult rv; > > slot = aFti->face->glyph; > >- rv = aFti->ft2->GetGlyph(slot, &glyph); >+#ifdef MOZ_ENABLE_XFT >+ FT_Error error = FT_Get_Glyph(slot, &glyph); >+ if (error) { >+ NS_ERROR("sideWidthAndBearing failed to get glyph"); >+ return PR_FALSE; >+ } >+ FT_Glyph_Get_CBox(glyph, ft_glyph_bbox_unscaled, &bbox); >+#else >+ nsresult rv = aFti->ft2->GetGlyph(slot, &glyph); > if (NS_FAILED(rv)) { > NS_ERROR("sideWidthAndBearing failed to get glyph"); > return PR_FALSE; > } > aFti->ft2->GlyphGetCBox(glyph, ft_glyph_bbox_unscaled, &bbox); >- >+#endif > > if (aFti->wmode == 0) > aw = toCS(upm, slot->metrics.horiAdvance); >@@ -371,21 +380,33 @@ > }; > > FT_Error >+#ifdef MOZ_ENABLE_XFT >+FT2GlyphToType1CharString(FT_Face aFace, PRUint32 aGlyphID, >+ int aWmode, int aLenIV, unsigned char *aBuf) >+#else > FT2GlyphToType1CharString(nsIFreeType2 *aFt2, FT_Face aFace, PRUint32 aGlyphID, > int aWmode, int aLenIV, unsigned char *aBuf) >+#endif > { > int j; > FT_Int32 flags = FT_LOAD_NO_BITMAP | FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING; > FT_GlyphSlot slot; > unsigned char *start = aBuf; > FT2PT1_info fti; >- nsresult rv; > >- rv = aFt2->LoadGlyph(aFace, aGlyphID, flags); >+#ifdef MOZ_ENABLE_XFT >+ FT_Error error = FT_Load_Glyph(aFace, aGlyphID, flags); >+ if (error) { >+ NS_ERROR("failed to load aGlyphID"); >+ return error; >+ } >+#else >+ nsresult rv = aFt2->LoadGlyph(aFace, aGlyphID, flags); > if (NS_FAILED(rv)) { > NS_ERROR("failed to load aGlyphID"); > return 1; > } >+#endif > slot = aFace->glyph; > > if (slot->format != ft_glyph_format_outline) { >@@ -393,7 +414,9 @@ > return 1; > } > >+#ifndef MOZ_ENABLE_XFT > fti.ft2 = aFt2; >+#endif > fti.face = aFace; > fti.buf = aBuf; > fti.elm_cnt = 0; >@@ -404,11 +427,18 @@ > for (j=0; j< aLenIV; j++) { > fti.len += ecsi(&fti.buf, 0); > } >+#ifdef MOZ_ENABLE_XFT >+ if (FT_Outline_Decompose(&slot->outline, &ft_outline_funcs, &fti)) { >+ NS_ERROR("error decomposing aGlyphID"); >+ return 1; >+ } >+#else > rv = aFt2->OutlineDecompose(&slot->outline, &ft_outline_funcs, &fti); > if (NS_FAILED(rv)) { > NS_ERROR("error decomposing aGlyphID"); > return 1; > } >+#endif > > if (fti.elm_cnt) { > fti.len += csc(&fti.buf, T1_CLOSEPATH); >--- gfx/src/ps/nsType1.h >+++ gfx/src/ps/nsType1.h >@@ -54,7 +54,15 @@ > > #include <stdio.h> > #include "nspr.h" >+#ifdef MOZ_ENABLE_XFT >+#include "nsISupports.h" >+#include <ft2build.h> >+#include FT_FREETYPE_H >+#include FT_GLYPH_H >+#include FT_OUTLINE_H >+#else > #include "nsIFreeType2.h" >+#endif > > /* to/from Character Space */ > inline int >@@ -95,7 +103,11 @@ > #define TYPE1_ENCRYPTION_C1 52845 > #define TYPE1_ENCRYPTION_C2 22719 > >+#ifdef MOZ_ENABLE_XFT >+FT_Error FT2GlyphToType1CharString(FT_Face aFace, >+#else /* MOZ_ENABLE_FREETYPE2 */ > FT_Error FT2GlyphToType1CharString(nsIFreeType2 *aFt2, FT_Face aFace, >+#endif > PRUint32 aGlyphID, int aWmode, int aLenIV, > unsigned char *aBuf); > >--- gfx/src/ps/nsType8.cpp >+++ gfx/src/ps/nsType8.cpp >@@ -53,7 +53,9 @@ > #include "nsCidMap.h" > #include "nsType1.h" > #include "nsType8.h" >+#ifndef MOZ_ENABLE_XFT > #include "nsIFreeType2.h" >+#endif > #include "nsIServiceManager.h" > #include "nsISignatureVerifier.h" > #include "plbase64.h" >@@ -67,7 +69,11 @@ > static void hex_out(unsigned char *buf, PRUint32 n, FILE *f, PRUint32 *pos); > > static void flatten_name(char *aToName); >+#ifdef MOZ_ENABLE_XFT >+static int FT2SubsetToCidKeyedType1(FT_Face aFace, >+#else > static int FT2SubsetToCidKeyedType1(nsIFreeType2 *aFt2, FT_Face aFace, >+#endif > const PRUnichar *aCharIDs, int aLen, > const char *aFontName, > const char *aRegistry, >@@ -319,12 +325,14 @@ > int cmap_type = 0; > PRBool status = PR_FALSE; > >+#ifndef MOZ_ENABLE_XFT > nsresult rv; > nsCOMPtr<nsIFreeType2> ft2 = do_GetService(NS_FREETYPE2_CONTRACTID, &rv); > if (NS_FAILED(rv)) { > NS_ERROR("Failed to get nsIFreeType2 service"); > goto done; > } >+#endif > > if ((aNumChars+1) > sizeof(CIDs_buf)/sizeof(CIDs_buf[0])) > CIDs = (PRUint32 *)PR_Malloc((aNumChars+1)*sizeof(CIDs_buf[0])); >@@ -368,7 +376,11 @@ > WriteCmapFooter(aFile); > > /* output the Type 8 CID font */ >+#ifdef MOZ_ENABLE_XFT >+ FT2SubsetToCidKeyedType1(aFace, aCharIDs, aNumChars, fontname, >+#else > FT2SubsetToCidKeyedType1(ft2, aFace, aCharIDs, aNumChars, fontname, >+#endif > registry, encoding, supplement, aWmode, lenIV, > aFile); > fprintf(aFile, "\n"); >@@ -392,7 +404,11 @@ > } > > static PRBool >+#ifdef MOZ_ENABLE_XFT >+FT2SubsetToCidKeyedType1(FT_Face aFace, >+#else > FT2SubsetToCidKeyedType1(nsIFreeType2 *aFt2, FT_Face aFace, >+#endif > const PRUnichar *aCharIDs, > int aLen, const char *aFontName, > const char *aRegistry, const char *aEncoding, >@@ -445,16 +461,26 @@ > fprintf(aFile, "\n"); > > /* measure the notdef glyph length */ >+#ifdef MOZ_ENABLE_XFT >+ cmapinfo[0] = FT2GlyphToType1CharString(aFace, 0, aWmode, aLenIV, NULL); >+#else > cmapinfo[0] = FT2GlyphToType1CharString(aFt2, aFace, 0, aWmode, aLenIV, NULL); >+#endif > num_charstrings = 1; > charstrings_len = cmapinfo[0]; > > /* get charstring lengths */ > max_charstring = cmapinfo[0]; > for (i=0; i<aLen; i++) { >+#ifdef MOZ_ENABLE_XFT >+ glyphID = FT_Get_Char_Index(aFace, aCharIDs[i]); >+ cmapinfo[i+1] = FT2GlyphToType1CharString(aFace, glyphID, aWmode, >+ aLenIV, NULL); >+#else > aFt2->GetCharIndex(aFace, aCharIDs[i], &glyphID); > cmapinfo[i+1] = FT2GlyphToType1CharString(aFt2, aFace, glyphID, aWmode, > aLenIV, NULL); >+#endif > charstrings_len += cmapinfo[i+1]; > if (cmapinfo[i+1]) > num_charstrings++; >@@ -554,15 +580,26 @@ > // output the charStrings > // > // output the notdef glyph >+#ifdef MOZ_ENABLE_XFT >+ charstring_len = FT2GlyphToType1CharString(aFace, 0, aWmode, aLenIV, >+ charstring); >+#else > charstring_len = FT2GlyphToType1CharString(aFt2, aFace, 0, aWmode, aLenIV, > charstring); >+#endif > hex_out(charstring, charstring_len, aFile, &line_pos); > > /* output the charstrings for the glyphs */ > for (i=0; i<aLen; i++) { >+#ifdef MOZ_ENABLE_XFT >+ glyphID = FT_Get_Char_Index(aFace, aCharIDs[i]); >+ charstring_len = FT2GlyphToType1CharString(aFace, glyphID, aWmode, >+ aLenIV, charstring); >+#else > aFt2->GetCharIndex(aFace, aCharIDs[i], &glyphID); > charstring_len = FT2GlyphToType1CharString(aFt2, aFace, glyphID, aWmode, > aLenIV, charstring); >+#endif > NS_ASSERTION(charstring_len==cmapinfo[i+1], "glyph data changed"); > hex_out(charstring, charstring_len, aFile, &line_pos); > } >--- gfx/src/ps/nsType8.h >+++ gfx/src/ps/nsType8.h >@@ -43,7 +43,24 @@ > > #include <stdio.h> > #include "nspr.h" >+#ifdef MOZ_ENABLE_XFT >+#include <ft2build.h> >+#include FT_FREETYPE_H >+#include FT_GLYPH_H >+#include FT_CACHE_H >+#include FT_CACHE_IMAGE_H >+#include FT_OUTLINE_H >+// macros to handle FreeType2 26.6 numbers (26 bit number with 6 bit fraction) >+#define FT_REG_TO_16_16(x) ((x)<<16) >+#ifndef FT_MulFix >+#define FT_MulFix(v, s) (((v)*(s))>>16) >+#endif >+#define FT_ROUND(x) (((x) + 32) & ~63) // 63 = 2^6 - 1 >+#define FT_TRUNC(x) ((x) >> 6) >+#define FT_DESIGN_UNITS_TO_PIXELS(v, s) FT_TRUNC(FT_ROUND(FT_MulFix((v) , (s)))) >+#else /* MOZ_ENABLE_FREETYPE2 */ > #include "nsIFreeType2.h" >+#endif /* MOZ_ENABLE_XFT */ > > void AddCIDCheckCode(FILE *aFile); > PRBool FT2SubsetToType8(FT_Face aFace, const PRUnichar *aCharIDs, >--- gfx/src/shared/nsRenderingContextImpl.cpp >+++ gfx/src/shared/nsRenderingContextImpl.cpp >@@ -938,3 +938,32 @@ > { > return NS_OK; > } >+ >+NS_IMETHODIMP >+nsRenderingContextImpl::GetClusterInfo(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 *aClusterStarts) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+NS_IMETHODIMP >+nsRenderingContextImpl::GetPosition(const PRUnichar *aText, >+ PRUint32 aLength, >+ nscoord aCoord, >+ PRUint32 &aInx) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+NS_IMETHODIMP >+nsRenderingContextImpl::GetRangeWidth(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, >+ PRUint32 &aWidth) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+ >--- gfx/src/shared/Makefile.in >+++ gfx/src/shared/Makefile.in >@@ -54,6 +54,11 @@ > > LOCAL_INCLUDES = -I$(srcdir)/.. \ > $(NULL) >+ >+ifdef MOZ_ENABLE_XFT >+CPPSRCS += nsFontConfigUtils.cpp >+LOCAL_INCLUDES += $(MOZ_XFT_CFLAGS) >+endif > > include $(topsrcdir)/config/rules.mk > >--- gfx/src/shared/nsFontConfigUtils.cpp >+++ gfx/src/shared/nsFontConfigUtils.cpp >@@ -0,0 +1,227 @@ >+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is mozilla.org code. >+ * >+ * The Initial Developer of the Original Code is Christopher Blizzard >+ * <blizzard@mozilla.org>. Portions created by the Initial Developer >+ * are Copyright (C) 2002 the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either of the GNU General Public License Version 2 or later (the "GPL"), >+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+#include "nsFontConfigUtils.h" >+ >+struct MozXftLangGroup { >+ const char *mozLangGroup; >+ FcChar32 character; >+ const FcChar8 *XftLang; >+}; >+ >+const MozXftLangGroup MozXftLangGroups[] = { >+ { "x-western", 0x0041, (const FcChar8 *)"en" }, >+ { "x-central-euro", 0x0100, (const FcChar8 *)"pl" }, >+ { "x-cyrillic", 0x0411, (const FcChar8 *)"ru" }, >+ { "x-baltic", 0x0104, (const FcChar8 *)"lv" }, >+ { "x-devanagari", 0x0905, (const FcChar8 *)"hi" }, >+ { "x-tamil", 0x0B85, (const FcChar8 *)"ta" }, >+ { "x-unicode", 0x0000, 0 }, >+ { "x-user-def", 0x0000, 0 }, >+}; >+ >+#define NUM_XFT_LANG_GROUPS (sizeof (MozXftLangGroups) / \ >+ sizeof (MozXftLangGroups[0])) >+ >+static >+void FFREToFamily(nsACString &aFFREName, nsACString &oFamily); >+ >+static >+const MozXftLangGroup* >+FindFCLangGroup (nsACString &aLangGroup) >+{ >+ for (unsigned int i=0; i < NUM_XFT_LANG_GROUPS; ++i) { >+ if (aLangGroup.Equals(MozXftLangGroups[i].mozLangGroup, >+ nsCaseInsensitiveCStringComparator())) { >+ return &MozXftLangGroups[i]; >+ } >+ } >+ >+ return nsnull; >+} >+ >+int >+NS_CalculateSlant(PRUint8 aStyle) >+{ >+ int fcSlant; >+ >+ switch(aStyle) { >+ case NS_FONT_STYLE_ITALIC: >+ fcSlant = FC_SLANT_ITALIC; >+ break; >+ case NS_FONT_STYLE_OBLIQUE: >+ fcSlant = FC_SLANT_OBLIQUE; >+ break; >+ default: >+ fcSlant = FC_SLANT_ROMAN; >+ break; >+ } >+ >+ return fcSlant; >+} >+ >+int >+NS_CalculateWeight (PRUint16 aWeight) >+{ >+ /* >+ * weights come in two parts crammed into one >+ * integer -- the "base" weight is weight / 100, >+ * the rest of the value is the "offset" from that >+ * weight -- the number of steps to move to adjust >+ * the weight in the list of supported font weights, >+ * this value can be negative or positive. >+ */ >+ PRInt32 baseWeight = (aWeight + 50) / 100; >+ PRInt32 offset = aWeight - baseWeight * 100; >+ >+ /* clip weights to range 0 to 9 */ >+ if (baseWeight < 0) >+ baseWeight = 0; >+ if (baseWeight > 9) >+ baseWeight = 9; >+ >+ /* Map from weight value to fcWeights index */ >+ static int fcWeightLookup[10] = { >+ 0, 0, 0, 0, 1, 1, 2, 3, 3, 4, >+ }; >+ >+ PRInt32 fcWeight = fcWeightLookup[baseWeight]; >+ >+ /* >+ * adjust by the offset value, make sure we stay inside the >+ * fcWeights table >+ */ >+ fcWeight += offset; >+ if (fcWeight < 0) >+ fcWeight = 0; >+ if (fcWeight > 4) >+ fcWeight = 4; >+ >+ /* Map to final FC_WEIGHT value */ >+ static int fcWeights[5] = { >+ FC_WEIGHT_LIGHT, /* 0 */ >+ FC_WEIGHT_MEDIUM, /* 1 */ >+ FC_WEIGHT_DEMIBOLD, /* 2 */ >+ FC_WEIGHT_BOLD, /* 3 */ >+ FC_WEIGHT_BLACK, /* 4 */ >+ }; >+ >+ return fcWeights[fcWeight]; >+} >+ >+void >+NS_AddLangGroup(FcPattern *aPattern, nsIAtom *aLangGroup) >+{ >+ // Find the FC lang group for this lang group >+ nsCAutoString cname; >+ aLangGroup->ToUTF8String(cname); >+ >+ // see if the lang group needs to be translated from mozilla's >+ // internal mapping into fontconfig's >+ const struct MozXftLangGroup *langGroup; >+ langGroup = FindFCLangGroup(cname); >+ >+ // if there's no lang group, just use the lang group as it was >+ // passed to us >+ // >+ // we're casting away the const here for the strings - should be >+ // safe. >+ if (!langGroup) >+ FcPatternAddString(aPattern, FC_LANG, (FcChar8 *)cname.get()); >+ else if (langGroup->XftLang) >+ FcPatternAddString(aPattern, FC_LANG, (FcChar8 *)langGroup->XftLang); >+} >+ >+void >+NS_AddFFRE(FcPattern *aPattern, nsCString *aFamily, PRBool aWeak) >+{ >+ nsCAutoString family; >+ FFREToFamily(*aFamily, family); >+ >+ FcValue v; >+ v.type = FcTypeString; >+ // casting away the const here, should be safe >+ v.u.s = (FcChar8 *)family.get(); >+ >+ if (aWeak) >+ FcPatternAddWeak(aPattern, FC_FAMILY, v, FcTrue); >+ else >+ FcPatternAdd(aPattern, FC_FAMILY, v, FcTrue); >+} >+ >+/* static */ >+void >+FFREToFamily(nsACString &aFFREName, nsACString &oFamily) >+{ >+ if (NS_FFRECountHyphens(aFFREName) == 3) { >+ PRInt32 familyHyphen = aFFREName.FindChar('-') + 1; >+ PRInt32 registryHyphen = aFFREName.FindChar('-',familyHyphen); >+ oFamily.Append(Substring(aFFREName, familyHyphen, >+ registryHyphen-familyHyphen)); >+ } >+ else { >+ oFamily.Append(aFFREName); >+ } >+} >+ >+int >+NS_FFRECountHyphens (nsACString &aFFREName) >+{ >+ int h = 0; >+ PRInt32 hyphen = 0; >+ while ((hyphen = aFFREName.FindChar('-', hyphen)) >= 0) { >+ ++h; >+ ++hyphen; >+ } >+ return h; >+} >+ >+PRBool >+NS_IsASCIIFontName(const nsString& aName) >+{ >+ PRUint32 len = aName.Length(); >+ const PRUnichar* str = aName.get(); >+ for (PRUint32 i = 0; i < len; i++) { >+ /* >+ * X font names are printable ASCII, ignore others (for now) >+ */ >+ if ((str[i] < 0x20) || (str[i] > 0x7E)) { >+ return PR_FALSE; >+ } >+ } >+ >+ return PR_TRUE; >+} >--- gfx/src/shared/nsFontConfigUtils.h >+++ gfx/src/shared/nsFontConfigUtils.h >@@ -0,0 +1,55 @@ >+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is mozilla.org code. >+ * >+ * The Initial Developer of the Original Code is Christopher Blizzard >+ * <blizzard@mozilla.org>. Portions created by the Initial Developer >+ * are Copyright (C) 2002 the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either of the GNU General Public License Version 2 or later (the "GPL"), >+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+#ifndef nsFontConfigUtils_h__ >+#define nsFontConfigUtils_h__ >+ >+#include "nspr.h" >+#include "nsString.h" >+#include "nsIAtom.h" >+#include "nsFont.h" >+ >+#include <fontconfig/fontconfig.h> >+ >+extern int NS_CalculateSlant (PRUint8 aStyle); >+extern int NS_CalculateWeight (PRUint16 aWeight); >+extern void NS_AddLangGroup (FcPattern *aPattern, nsIAtom *aLangGroup); >+extern void NS_AddFFRE (FcPattern *aPattern, nsCString *aFamily, >+ PRBool aWeak); >+extern int NS_FFRECountHyphens (nsACString &aFFREName); >+extern PRBool NS_IsASCIIFontName (const nsString& aName); >+#endif >+ >--- gfx/src/x11shared/nsFontDebug.h >+++ gfx/src/x11shared/nsFontDebug.h >@@ -97,7 +97,9 @@ > #define FREETYPE_FONT_PRINTF(x) \ > DEBUG_PRINTF_MACRO(x, NS_FONT_DEBUG_FREETYPE_FONT) > >+#ifdef MOZ_ENABLE_FREETYPE2 > extern PRUint32 gFontDebug; >+#endif > > #endif > >--- gfx/src/xlib/nsFontMetricsXlib.cpp >+++ gfx/src/xlib/nsFontMetricsXlib.cpp >@@ -64,10 +64,10 @@ > #include "nsReadableUtils.h" > #include "nsAString.h" > #include "nsXPIDLString.h" >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > #include "nsFT2FontCatalog.h" > #include "nsFreeType.h" >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > #ifdef USE_X11SHARED_CODE > #include "nsXFontNormal.h" > #endif /* USE_X11SHARED_CODE */ >@@ -113,9 +113,9 @@ > > /* Local prototypes */ > static PRBool FreeNode(nsHashKey* aKey, void* aData, void* aClosure); >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > static void CharSetNameToCodeRangeBits(const char*, PRUint32*, PRUint32*); >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > static const nsFontCharSetMapXlib *GetCharSetMap(nsFontMetricsXlibContext *aFmctx, const char *aCharSetName); > > // the font catalog is so expensive to generate >@@ -215,11 +215,11 @@ > #endif /* USE_AASB */ > PRInt32 mEmbeddedBitmapMaximumHeight; > >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > PRBool mEnableFreeType2; > PRBool mFreeType2Autohinted; > PRBool mFreeType2Unhinted; >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > #ifdef USE_AASB > PRUint8 mAATTDarkTextMinValue; > double mAATTDarkTextGain; >@@ -236,8 +236,10 @@ > const char* mCharSet; > nsFontCharSetConverterXlib Convert; > PRUint8 mSpecialUnderline; >+#ifdef MOZ_ENABLE_FREETYPE2 > PRInt32 mCodeRange1Bits; > PRInt32 mCodeRange2Bits; >+#endif > PRUint16* mCCMap; > nsIUnicodeEncoder* mConverter; > nsIAtom* mLangGroup; >@@ -285,6 +287,7 @@ > static nsFontCharSetInfoXlib Unknown = { nsnull }; > static nsFontCharSetInfoXlib Special = { nsnull }; > >+#ifdef MOZ_ENABLE_FREETYPE2 > static nsFontCharSetInfoXlib USASCII = > { "us-ascii", SingleByteConvert, 0, > TT_OS2_CPR1_LATIN1 | TT_OS2_CPR1_MAC_ROMAN, >@@ -490,7 +493,160 @@ > { "x-mathematica4", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; > static nsFontCharSetInfoXlib Mathematica5 = > { "x-mathematica5", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; >-#endif /* MOZ_MATHML */ >+#endif /* MATHML */ >+ >+#else >+ >+static nsFontCharSetInfoXlib USASCII = >+ { "us-ascii", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO88591 = >+ { "ISO-8859-1", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO88592 = >+ { "ISO-8859-2", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO88593 = >+ { "ISO-8859-3", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO88594 = >+ { "ISO-8859-4", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO88595 = >+ { "ISO-8859-5", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO88596 = >+ { "ISO-8859-6", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO885968x = >+ { "x-iso-8859-6-8-x", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO8859616 = >+ { "x-iso-8859-6-16", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib IBM1046 = >+ { "x-IBM1046", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO88597 = >+ { "ISO-8859-7", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO88598 = >+ { "ISO-8859-8", SingleByteConvert, 0 }; >+// change from >+// { "ISO-8859-8", SingleByteConvertReverse, 0, 0, 0 }; >+// untill we fix the layout and ensure we only call this with pure RTL text >+static nsFontCharSetInfoXlib ISO88599 = >+ { "ISO-8859-9", SingleByteConvert, 0 }; >+// no support for iso-8859-10 (Nordic/Icelandic) currently >+// static nsFontCharSetInfoXlib ISO885910 = >+// { "ISO-8859-10", SingleByteConvert, 0, >+// 0, TT_OS2_CPR2_NORDIC | TT_OS2_CPR2_ICELANDIC }; >+// no support for iso-8859-12 (Vietnamese) currently >+// static nsFontCharSetInfoXlib ISO885912 = >+// { "ISO-8859-12", SingleByteConvert, 0, >+// TT_OS2_CPR1_VIETNAMESE, 0 }; >+static nsFontCharSetInfoXlib ISO885913 = >+ { "ISO-8859-13", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO885915 = >+ { "ISO-8859-15", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib JISX0201 = >+ { "jis_0201", SingleByteConvert, 1 }; >+static nsFontCharSetInfoXlib KOI8R = >+ { "KOI8-R", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib KOI8U = >+ { "KOI8-U", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib TIS6202 = >+/* Added to support thai context sensitive shaping if >+ * CTL extension is is in force */ >+#ifdef SUNCTL >+ { "tis620-2", SingleByteConvert, 0 }; >+#else >+ { "windows-874", SingleByteConvert, 0 }; >+#endif /* SUNCTL */ >+static nsFontCharSetInfoXlib TIS620 = >+ { "TIS-620", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib ISO885911 = >+ { "ISO-8859-11", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib Big5 = >+ { "x-x-big5", DoubleByteConvert, 1 }; >+// a kludge to distinguish zh-TW only fonts in Big5 (such as hpbig5-) >+// from zh-TW/zh-HK common fonts in Big5 (such as big5-1) >+static nsFontCharSetInfoXlib Big5TWHK = >+ { "x-x-big5", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib CNS116431 = >+ { "x-cns-11643-1", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib CNS116432 = >+ { "x-cns-11643-2", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib CNS116433 = >+ { "x-cns-11643-3", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib CNS116434 = >+ { "x-cns-11643-4", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib CNS116435 = >+ { "x-cns-11643-5", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib CNS116436 = >+ { "x-cns-11643-6", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib CNS116437 = >+ { "x-cns-11643-7", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib GB2312 = >+ { "gb_2312-80", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib GB18030_0 = >+ { "gb18030.2000-0", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib GB18030_1 = >+ { "gb18030.2000-1", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib GBK = >+ { "x-gbk-noascii", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib HKSCS = >+ { "hkscs-1", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib JISX0208 = >+ { "jis_0208-1983", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib JISX0212 = >+ { "jis_0212-1990", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib KSC5601 = >+ { "ks_c_5601-1987", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib X11Johab = >+ { "x-x11johab", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib JohabNoAscii = >+ { "x-johab-noascii", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib JamoTTF = >+ { "x-koreanjamo-0", DoubleByteConvert, 1 }; >+static nsFontCharSetInfoXlib TamilTTF = >+ { "x-tamilttf-0", DoubleByteConvert, 0 }; >+static nsFontCharSetInfoXlib CP1250 = >+ { "windows-1250", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib CP1251 = >+ { "windows-1251", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib CP1252 = >+ { "windows-1252", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib CP1253 = >+ { "windows-1253", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib CP1257 = >+ { "windows-1257", SingleByteConvert, 0 }; >+ >+#ifdef SUNCTL >+/* Hindi range currently unsupported in FT2 range. Change TT* once we >+ arrive at a way to identify hindi */ >+static nsFontCharSetInfoXlib SunIndic = >+ { "x-sun-unicode-india-0", DoubleByteConvert, 0 }; >+#endif /* SUNCTL */ >+ >+static nsFontCharSetInfoXlib ISO106461 = >+ { nsnull, ISO10646Convert, 1}; >+ >+static nsFontCharSetInfoXlib AdobeSymbol = >+ { "Adobe-Symbol-Encoding", SingleByteConvert, 0 }; >+static nsFontCharSetInfoXlib AdobeEuro = >+ { "x-adobe-euro", SingleByteConvert, 0 }; >+ >+#ifdef MOZ_MATHML >+static nsFontCharSetInfoXlib CMCMEX = >+ { "x-t1-cmex", SingleByteConvert, 0}; >+static nsFontCharSetInfoXlib CMCMSY = >+ { "x-t1-cmsy", SingleByteConvert, 0}; >+static nsFontCharSetInfoXlib CMCMR = >+ { "x-t1-cmr", SingleByteConvert, 0}; >+static nsFontCharSetInfoXlib CMCMMI = >+ { "x-t1-cmmi", SingleByteConvert, 0}; >+static nsFontCharSetInfoXlib Mathematica1 = >+ { "x-mathematica1", SingleByteConvert, 0}; >+static nsFontCharSetInfoXlib Mathematica2 = >+ { "x-mathematica2", SingleByteConvert, 0}; >+static nsFontCharSetInfoXlib Mathematica3 = >+ { "x-mathematica3", SingleByteConvert, 0}; >+static nsFontCharSetInfoXlib Mathematica4 = >+ { "x-mathematica4", SingleByteConvert, 0}; >+static nsFontCharSetInfoXlib Mathematica5 = >+ { "x-mathematica5", SingleByteConvert, 0}; >+#endif /* MATHML */ >+#endif /* FREETYPE2 */ > > static nsFontLangGroupXlib FLG_WESTERN = { "x-western", nsnull }; > static nsFontLangGroupXlib FLG_BALTIC = { "x-baltic", nsnull }; >@@ -1048,9 +1204,9 @@ > { > PR_LOG(FontMetricsXlibLM, PR_LOG_DEBUG, ("# nsFontMetricsXlibContext destroy()\n")); > >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > nsFreeTypeFreeGlobals(); >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > > #ifdef ENABLE_X_FONT_BANNING > if (mFontRejectRegEx) { >@@ -1180,11 +1336,11 @@ > #endif /* USE_AASB */ > mEmbeddedBitmapMaximumHeight = 1000000; > >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > mEnableFreeType2 = PR_TRUE; > mFreeType2Autohinted = PR_FALSE; > mFreeType2Unhinted = PR_TRUE; >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > #ifdef USE_AASB > mAATTDarkTextMinValue = 64; > mAATTDarkTextGain = 0.8; >@@ -1368,7 +1524,7 @@ > mForceOutlineScaledFonts = force_outline_scaled_fonts; > } > >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > PRBool enable_freetype2 = PR_TRUE; > rv = mPref->GetBoolPref("font.FreeType2.enable", &enable_freetype2); > if (NS_SUCCEEDED(rv)) { >@@ -1389,7 +1545,7 @@ > mFreeType2Unhinted = freetype2_unhinted; > FREETYPE_FONT_PRINTF(("mFreeType2Unhinted = %d", mFreeType2Unhinted)); > } >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > > #ifdef USE_AASB > PRInt32 antialias_minimum = 8; >@@ -1585,12 +1741,12 @@ > } > #endif /* ENABLE_X_FONT_BANNING */ > >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > rv = nsFreeTypeInitGlobals(); > if (NS_FAILED(rv)) { > return NS_ERROR_OUT_OF_MEMORY; > } >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > > return NS_OK; > } >@@ -1916,7 +2072,7 @@ > float f; > f = mDeviceContext->DevUnitsToAppUnits(); > >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > if (mWesternFont->IsFreeTypeFont()) { > nsFreeTypeFont *ft = (nsFreeTypeFont *)mWesternFont; > if (!ft) >@@ -1999,7 +2155,7 @@ > return; > #endif /* MOZ_ENABLE_FREETYPE2 */ > } >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > nsXFont *xFont = mWesternFont->GetXFont(); > XFontStruct *fontInfo = xFont->GetXFontStruct(); > f = mDeviceContext->DevUnitsToAppUnits(); >@@ -3010,13 +3166,13 @@ > return ((PRBool) (mCharSetInfo == mFontMetricsContext->mISO106461)); > } > >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > PRBool > nsFontXlib::IsFreeTypeFont(void) > { > return PR_FALSE; > } >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > > MOZ_DECL_CTOR_COUNTER(nsFontXlib) > >@@ -3654,7 +3810,7 @@ > nsFontMetricsXlib::PickASizeAndLoad(nsFontStretchXlib* aStretch, > nsFontCharSetInfoXlib* aCharSet, PRUnichar aChar, const char *aName) > { >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > if (aStretch->mFreeTypeFaceID) { > //FREETYPE_FONT_PRINTF(("mFreeTypeFaceID = 0x%p", aStretch->mFreeTypeFaceID)); > nsFreeTypeFont *ftfont = nsFreeTypeFont::NewFont(aStretch->mFreeTypeFaceID, >@@ -3682,7 +3838,7 @@ > //FREETYPE_FONT_PRINTF(("add the ftfont")); > return AddToLoadedFontsList(ftfont); > } >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > > PRBool use_scaled_font = PR_FALSE; > PRBool have_nearly_rightsized_bitmap = PR_FALSE; >@@ -4498,10 +4654,10 @@ > } > #endif > >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > // get FreeType fonts > nsFT2FontCatalog::GetFontNames(aFmctx, aPattern, aNodes); >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > > nsCAutoString previousNodeName; > nsHashtable* node_hash; >@@ -5896,7 +6052,7 @@ > return charSetMap; > } > >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > static > void CharSetNameToCodeRangeBits(const char *aCharset, > PRUint32 *aCodeRange1, PRUint32 *aCodeRange2) >@@ -5907,5 +6063,5 @@ > *aCodeRange1 = charSetInfo->mCodeRange1Bits; > *aCodeRange2 = charSetInfo->mCodeRange2Bits; > } >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > >--- gfx/src/xlib/nsFontMetricsXlib.h >+++ gfx/src/xlib/nsFontMetricsXlib.h >@@ -56,7 +56,7 @@ > #include "nsCompressedCharMap.h" > > /* Undefine some CPP symbols which wrap not-yet-implemented code */ >-#undef USE_FREETYPE >+#undef MOZ_ENABLE_FREETYPE2 > #undef USE_AASB > #undef USE_X11SHARED_CODE > >@@ -187,9 +187,9 @@ > > class nsFontXlibUserDefined; > class nsFontMetricsXlib; >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > class nsFreeTypeFace; >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > > struct nsFontStretchXlib > { >@@ -204,9 +204,9 @@ > char* mScalable; > PRBool mOutlineScaled; > nsVoidArray mScaledFonts; >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > nsFreeTypeFace *mFreeTypeFaceID; >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > }; > > struct nsFontStyleXlib >@@ -289,9 +289,9 @@ > virtual XFontStruct *GetXFontStruct(void); > virtual nsXFont *GetXFont(void); > virtual PRBool GetXFontIs10646(void); >-#ifdef USE_FREETYPE >+#ifdef MOZ_ENABLE_FREETYPE2 > virtual PRBool IsFreeTypeFont(void); >-#endif /* USE_FREETYPE */ >+#endif /* MOZ_ENABLE_FREETYPE2 */ > virtual int GetWidth(const PRUnichar* aString, PRUint32 aLength) = 0; > virtual int DrawString(nsRenderingContextXlib *aContext, > nsIDrawingSurfaceXlib *aSurface, nscoord aX, >@@ -476,7 +476,7 @@ > * GDK/GTK+ includes which are not available in Xlib builds (fix is to remove > * the GDK/GTK+ dependicy from the code in gfx/src/x11shared/ ...) > */ >-#ifndef USE_FREETYPE >+#ifndef MOZ_ENABLE_FREETYPE2 > /* > * Defines for the TrueType codepage bits. > * Used as a hint for the languages supported in a TrueType font. >@@ -525,7 +525,7 @@ > #define TT_OS2_CPR2_ARABIC_708 (0x20000000) /* Arabic; ASMO 708 */ > #define TT_OS2_CPR2_WE_LATIN1 (0x40000000) /* WE/Latin 1 */ > #define TT_OS2_CPR2_US (0x80000000) /* US */ >-#endif /* !USE_FREETYPE */ >+#endif /* !MOZ_ENABLE_FREETYPE2 */ > > #endif /* !nsFontMetricsXlib_h__ */ > >--- gfx/src/nsRenderingContextImpl.h >+++ gfx/src/nsRenderingContextImpl.h >@@ -138,6 +138,19 @@ > NS_IMETHOD DrawScaledImage(imgIContainer *aImage, const nsRect * aSrcRect, const nsRect * aDestRect); > NS_IMETHOD DrawTile(imgIContainer *aImage, nscoord aXOffset, nscoord aYOffset, const nsRect * aTargetRect); > >+ NS_IMETHOD GetClusterInfo(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 *aClusterStarts); >+ NS_IMETHOD GetPosition(const PRUnichar *aText, >+ PRUint32 aLength, >+ nscoord aCoord, >+ PRUint32 &aInx); >+ NS_IMETHOD GetRangeWidth(const PRUnichar *aText, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, >+ PRUint32 &aWidth); >+ > protected: > virtual ~nsRenderingContextImpl(); > >--- gfx/gfx-config.h >+++ gfx/gfx-config.h >@@ -0,0 +1,31 @@ >+/* gfx/gfx-config.h. Generated automatically by configure. */ >+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- >+ * >+ * The contents of this file are subject to the Mozilla Public >+ * License Version 1.1 (the "License"); you may not use this file >+ * except in compliance with the License. You may obtain a copy of >+ * the License at http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS >+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or >+ * implied. See the License for the specific language governing >+ * rights and limitations under the License. >+ * >+ * The Original Code is mozilla.org code. >+ * >+ * The Initial Developer of the Original Code is Netscape >+ * Communications Corporation. Portions created by Netscape are >+ * Copyright (C) 2003 Netscape Communications Corporation. >+ * All Rights Reserved. >+ * >+ * Contributor(s): >+ * >+ */ >+#ifndef _GFX_CONFIG_H_ >+#define _GFX_CONFIG_H_ >+ >+/* Define if freetype support is enabled */ >+#define MOZ_ENABLE_FREETYPE2 1 >+ >+#endif /* _GFX_CONFIG_H_ */ >+ >--- htmlparser/src/nsParser.cpp >+++ htmlparser/src/nsParser.cpp >@@ -2565,21 +2565,7 @@ > nsresult rv = NS_OK; > > if(eOnStart==mParserContext->mStreamListenerState) { >- nsAutoString temp; >- >- //If you're here, then OnDataAvailable() never got called. >- //Prior to necko, we never dealt with this case, but the problem may have existed. >- //What we'll do (for now at least) is construct a blank HTML document. >- if (!mParserContext->mMimeType.Equals(NS_LITERAL_CSTRING(kPlainTextContentType))) >- { >- temp.Assign(NS_LITERAL_STRING("<html><body></body></html>")); >- } >- // XXX: until bug #108067 has been fixed we must ensure that *something* >- // is in the scanner! so, for now just put in a single space. >- else { >- temp.Assign(NS_LITERAL_STRING(" ")); >- } >- mParserContext->mScanner->Append(temp); >+ //Everybody can live with an empty input stream, so just resume parsing. > rv = ResumeParse(PR_TRUE,PR_TRUE); > } > >--- layout/html/base/src/nsTextFrame.cpp >+++ layout/html/base/src/nsTextFrame.cpp >@@ -2339,6 +2339,24 @@ > #endif > sdptr = sdptr->mNext; > } >+ >+ /* >+ * Text is drawn by drawing the entire string every time, but >+ * using clip regions to control which part of the text is shown >+ * (selected or unselected.) We do this because you can't >+ * assume that the layout of a part of text will be the same >+ * when it's drawn apart from the entire string. This is true >+ * in languages like arabic, where shaping affects entire words. >+ * Simply put: length("abcd") != length("ab") + length("cd") in >+ * some languages. >+ */ >+ >+ // See if this rendering backend supports getting cluster >+ // information. >+ PRUint32 clusterHint = 0; >+ aRenderingContext.GetHints(clusterHint); >+ clusterHint &= NS_RENDERING_HINT_TEXT_CLUSTERS; >+ > //while we have substrings... > //PRBool drawn = PR_FALSE; > DrawSelectionIterator iter(content, details,text,(PRUint32)textLength,aTextStyle, selectionValue, aPresContext, mStyleContext); >@@ -2361,37 +2379,55 @@ > nscolor currentBKColor; > PRBool isCurrentBKColorTransparent; > >-#ifdef IBMBIDI >- if (currentlength > 0 >- && NS_SUCCEEDED(aRenderingContext.GetWidth(currenttext, currentlength,newWidth)))//ADJUST FOR CHAR SPACING >+ if (currentlength > 0) > { >- >- if (isRightToLeftOnBidiPlatform) >- currentX -= newWidth; >-#else // not IBMBIDI >- if (NS_SUCCEEDED(aRenderingContext.GetWidth(currenttext, currentlength,newWidth)))//ADJUST FOR CHAR SPACING >- { >-#endif >- if (iter.CurrentBackGroundColor(currentBKColor, &isCurrentBKColorTransparent) && !isPaginated) >- {//DRAW RECT HERE!!! >- if (!isCurrentBKColorTransparent) { >- aRenderingContext.SetColor(currentBKColor); >- aRenderingContext.FillRect(currentX, dy, newWidth, mRect.height); >+ if (clusterHint) { >+ PRUint32 tmpWidth; >+ rv = aRenderingContext.GetRangeWidth(text, textLength, currenttext - text, >+ (currenttext - text) + currentlength, >+ tmpWidth); >+ newWidth = nscoord(tmpWidth); >+ } >+ else { >+ rv = aRenderingContext.GetWidth(currenttext, currentlength,newWidth); //ADJUST FOR CHAR SPACING >+ } >+ if (NS_SUCCEEDED(rv)) { >+ if (isRightToLeftOnBidiPlatform) >+ currentX -= newWidth; >+ if (iter.CurrentBackGroundColor(currentBKColor, &isCurrentBKColorTransparent) && !isPaginated) >+ {//DRAW RECT HERE!!! >+ if (!isCurrentBKColorTransparent) { >+ aRenderingContext.SetColor(currentBKColor); >+ aRenderingContext.FillRect(currentX, dy, newWidth, mRect.height); >+ } >+ currentFGColor = EnsureDifferentColors(currentFGColor, currentBKColor); > } >- currentFGColor = EnsureDifferentColors(currentFGColor, currentBKColor); >+ } >+ else { >+ newWidth = 0; > } > } >- else >- newWidth =0; >- >+ else { >+ newWidth = 0; >+ } >+ >+ aRenderingContext.PushState(); >+ >+ nsRect rect(currentX, dy, newWidth, mRect.height); >+ PRBool ignore; >+ aRenderingContext.SetClipRect(rect, nsClipCombine_kIntersect, >+ ignore); >+ > if (isPaginated && !iter.IsBeforeOrAfter()) { > aRenderingContext.SetColor(nsCSSRendering::TransformColor(aTextStyle.mColor->mColor,canDarkenColor)); >- aRenderingContext.DrawString(currenttext, currentlength, currentX, dy + mAscent); >+ aRenderingContext.DrawString(text, PRUint32(textLength), dx, dy + mAscent); > } else if (!isPaginated) { > aRenderingContext.SetColor(nsCSSRendering::TransformColor(currentFGColor,canDarkenColor)); >- aRenderingContext.DrawString(currenttext, currentlength, currentX, dy + mAscent); >+ aRenderingContext.DrawString(text, PRUint32(textLength), dx, dy + mAscent); > } > >+ aRenderingContext.PopState(ignore); >+ > #ifdef IBMBIDI > if (!isRightToLeftOnBidiPlatform) > #endif >@@ -2932,11 +2968,20 @@ > if (0 != textLength) { > #ifdef IBMBIDI > PRBool bidiEnabled; >+ PRBool isBidiSystem =PR_FALSE; >+ PRBool isRightToLeftOnBidiPlatform = PR_FALSE; > PRUint8 level = 0; >+ PRUint32 hints = 0; >+ aRenderingContext.GetHints(hints); >+ PRBool paintCharByChar = (0 == hints & NS_RENDERING_HINT_SPACING_RUNS) && >+ ((0 != aTextStyle.mLetterSpacing) || >+ (0 != aTextStyle.mWordSpacing) || >+ aTextStyle.mJustifying); > nsCharType charType = eCharType_LeftToRight; > aPresContext->GetBidiEnabled(&bidiEnabled); > > if (bidiEnabled) { >+ isBidiSystem = aPresContext->IsBidiSystem(); > nsBidiPresUtils* bidiUtils; > aPresContext->GetBidiUtils(&bidiUtils); > >@@ -2948,9 +2993,19 @@ > #ifdef DEBUG > PRInt32 rememberTextLength = textLength; > #endif >- // Since we paint char by char, handle the text like on non-bidi platform >+ isRightToLeftOnBidiPlatform = (!paintCharByChar && >+ isBidiSystem && >+ (eCharType_RightToLeft == charType || >+ eCharType_RightToLeftArabic == charType)); >+ if (isRightToLeftOnBidiPlatform) { >+ // indicate that the platform should use its native >+ // capabilities to reorder the text with right-to-left >+ // base direction >+ aRenderingContext.SetRightToLeftText(PR_TRUE); >+ } >+ // If we will be painting char by char, handle the text like on non-bidi platform > bidiUtils->ReorderUnicodeText(text, textLength, charType, >- level & 1, PR_FALSE); >+ level & 1, (paintCharByChar) ? PR_FALSE : isBidiSystem); > NS_ASSERTION(rememberTextLength == textLength, "Bidi formatting changed text length"); > } > } >@@ -2992,7 +3047,9 @@ > sdptr->mStart = ip[sdptr->mStart] - mContentOffset; > sdptr->mEnd = ip[sdptr->mEnd] - mContentOffset; > #ifdef IBMBIDI >- AdjustSelectionPointsForBidi(sdptr, textLength, CHARTYPE_IS_RTL(charType), level & 1, PR_FALSE); >+ AdjustSelectionPointsForBidi(sdptr, textLength, >+ CHARTYPE_IS_RTL(charType), level & 1, >+ (paintCharByChar) ? PR_FALSE : isBidiSystem); > #endif > sdptr = sdptr->mNext; > } >@@ -3002,6 +3059,16 @@ > { > nscoord currentX = dx; > nsTextDimensions newDimensions;//temp >+#ifdef IBMBIDI >+ if (isRightToLeftOnBidiPlatform) >+ { >+ nsTextDimensions frameDimensions; >+ GetTextDimensions(aRenderingContext, aTextStyle, text, >+ (PRInt32)textLength, >+ &frameDimensions); >+ currentX = dx + frameDimensions.width; >+ } >+#endif > while (!iter.IsDone()) > { > PRUnichar *currenttext = iter.CurrentTextUnicharPtr(); >@@ -3013,6 +3080,10 @@ > GetTextDimensions(aRenderingContext,aTextStyle,currenttext, (PRInt32)currentlength,&newDimensions); > if (newDimensions.width) > { >+#ifdef IBMBIDI >+ if (isRightToLeftOnBidiPlatform) >+ currentX -= newDimensions.width; >+#endif > if (iter.CurrentBackGroundColor(currentBKColor, &isCurrentBKColorTransparent)) > {//DRAW RECT HERE!!! > if (!isCurrentBKColorTransparent) { >@@ -3035,6 +3106,9 @@ > dy, width, details); > } > >+#ifdef IBMBIDI >+ if (!isRightToLeftOnBidiPlatform) >+#endif > //increment twips X start but remember to get ready for next draw by reducing current x by letter spacing amount > currentX+=newDimensions.width;// + aTextStyle.mLetterSpacing; > >@@ -3057,6 +3131,13 @@ > delete details; > } > } >+#ifdef IBMBIDI >+ if (isRightToLeftOnBidiPlatform) { >+ // indicate that future text should not be reordered with >+ // right-to-left base direction >+ aRenderingContext.SetRightToLeftText(PR_FALSE); >+ } >+#endif > } > } > >@@ -3429,6 +3510,16 @@ > PRInt32 textWidth = 0; > PRUnichar* text = paintBuffer.mBuffer; > >+ // See if the font backend will do all the hard work for us. >+ PRUint32 clusterHint = 0; >+ acx->GetHints(clusterHint); >+ clusterHint &= NS_RENDERING_HINT_TEXT_CLUSTERS; >+ if (clusterHint) { >+ PRUint32 tmpIndx = indx; >+ acx->GetPosition(text, textLength, aPoint.x - origin.x, tmpIndx); >+ indx = tmpIndx; >+ } >+ else { > #ifdef IBMBIDI > PRBool getReversedPos = PR_FALSE; > PRUint8 level = 0; >@@ -3465,6 +3556,7 @@ > indx++; > } > } >+ } > > aContentOffset = indx + mContentOffset; > //reusing wordBufMem >@@ -3916,6 +4008,12 @@ > } > PRInt32* ip = indexBuffer.mBuffer; > >+ nsAutoIndexBuffer clusterBuffer; >+ rv = clusterBuffer.GrowTo(mContentLength + 1); >+ if (NS_FAILED(rv)) { >+ return rv; >+ } >+ > PRInt32 textLength; > nsresult result(NS_ERROR_FAILURE); > aPos->mResultContent = mContent;//do this right off >@@ -3981,8 +4079,32 @@ > aPos->mContentOffset = 0; > PRInt32 i; > >+ // Fill in the cluster hint information, if it's available. >+ nsCOMPtr<nsIRenderingContext> acx; >+ PRUint32 clusterHint = 0; >+ >+ nsIPresShell *shell = aPresContext->GetPresShell(); >+ if (shell) { >+ shell->CreateRenderingContext(this, getter_AddRefs(acx)); >+ >+ // Find the font metrics for this text >+ SetFontFromStyle(acx, mStyleContext); >+ >+ if (acx) >+ acx->GetHints(clusterHint); >+ clusterHint &= NS_RENDERING_HINT_TEXT_CLUSTERS; >+ } >+ >+ if (clusterHint) { >+ acx->GetClusterInfo(paintBuffer.mBuffer, (PRUint32)textLength, (PRUint32 *)clusterBuffer.mBuffer); >+ } >+ else { >+ memset(clusterBuffer.mBuffer, 1, sizeof(PRInt32) * textLength); >+ } >+ > for (i = aPos->mStartOffset -1 - mContentOffset; i >=0; i--){ > if ((ip[i] < ip[aPos->mStartOffset - mContentOffset]) && >+ (clusterBuffer.mBuffer[ip[i] - mContentOffset]) && > (! IS_LOW_SURROGATE(paintBuffer.mBuffer[ip[i]-mContentOffset]))) > { > aPos->mContentOffset = i + mContentOffset; >@@ -4033,14 +4155,39 @@ > PRInt32 i; > aPos->mContentOffset = mContentLength; > >- for (i = aPos->mStartOffset +1 - mContentOffset; i <= mContentLength; i++){ >+ // Fill in the cluster hint information, if it's available. >+ nsCOMPtr<nsIRenderingContext> acx; >+ PRUint32 clusterHint = 0; >+ >+ nsIPresShell *shell = aPresContext->GetPresShell(); >+ if (shell) { >+ shell->CreateRenderingContext(this, getter_AddRefs(acx)); >+ >+ // Find the font metrics for this text >+ SetFontFromStyle(acx, mStyleContext); >+ >+ if (acx) >+ acx->GetHints(clusterHint); >+ clusterHint &= NS_RENDERING_HINT_TEXT_CLUSTERS; >+ } >+ >+ if (clusterHint) { >+ acx->GetClusterInfo(paintBuffer.mBuffer, (PRUint32)textLength, (PRUint32 *)clusterBuffer.mBuffer); >+ } >+ else { >+ memset(clusterBuffer.mBuffer, 1, sizeof(PRInt32) * textLength); >+ } >+ >+ for (i = aPos->mStartOffset - mContentOffset; i <= mContentLength; i++) { > if ((ip[i] > ip[aPos->mStartOffset - mContentOffset]) && >- (! IS_LOW_SURROGATE(paintBuffer.mBuffer[ip[i]-mContentOffset]))) >- { >+ ((i == mContentLength) || >+ (!IS_LOW_SURROGATE(paintBuffer.mBuffer[ip[i] - mContentOffset])) && >+ (clusterBuffer.mBuffer[ip[i] - mContentOffset]))) { > aPos->mContentOffset = i + mContentOffset; > break; > } > } >+ > #ifdef SUNCTL > static NS_DEFINE_CID(kLECID, NS_ULE_CID); > >--- layout/html/document/src/html.css >+++ layout/html/document/src/html.css >@@ -441,6 +441,13 @@ > /* PRINT ONLY rules follow */ > @media print { > >+ body { >+ font-family: times, serif; >+ } >+ tt, pre { >+ font-family: courier, monospace; >+ } >+ > marquee { -moz-binding: none; } > > *|*:-moz-any-link img, img[usemap], object[usemap], >--- widget/public/nsGUIEvent.h >+++ widget/public/nsGUIEvent.h >@@ -22,6 +22,8 @@ > * Contributor(s): > * Makoto Kato <m_kato@ga2.so-net.ne.jp> > * Dean Tessman <dean_tessman@hotmail.com> >+ * Andrew Wellington <proton@wiretapped.net> >+ * Graham Dennis <u3952328@anu.edu.au> > * > * Alternatively, the contents of this file may be used under the terms of > * either the GNU General Public License Version 2 or later (the "GPL"), or >@@ -818,6 +820,22 @@ > nsDragDropEventStatus_eDrop > }; > >+/** >+ * Event status for an extended mouse button event >+ * The event (called clickCount) is type PRUint32: >+ * hence this struct will be of the same size >+ */ >+typedef struct { >+ PRUint16 realClickCount; >+ PRUint8 button; >+ PRUint8 event; // eg button went up / down >+} nsExtendedMouseEventStatus; >+ >+enum { >+ /// different types of events >+ nsExtendedMouseEventStatus_up, >+ nsExtendedMouseEventStatus_down >+}; > > #define NS_IS_MOUSE_EVENT(evnt) \ > (((evnt)->message == NS_MOUSE_LEFT_BUTTON_DOWN) || \ >--- widget/src/gtk/nsGtkEventHandler.cpp >+++ widget/src/gtk/nsGtkEventHandler.cpp >@@ -292,7 +292,7 @@ > case GDK_KP_Add: > return '+'; > case GDK_KP_Separator: >- return '|'; >+ return ','; > case GDK_KP_Subtract: > return '-'; > case GDK_KP_Decimal: >--- widget/src/gtk2/Makefile.in >+++ widget/src/gtk2/Makefile.in >@@ -41,6 +41,7 @@ > dom \ > necko \ > uconv \ >+ intl \ > gtkxtbin \ > xremoteservice > >--- widget/src/gtk2/nsWindow.cpp >+++ widget/src/gtk2/nsWindow.cpp >@@ -1396,6 +1396,9 @@ > return; > > switch (aEvent->button) { >+ case 1: >+ eventType = NS_MOUSE_LEFT_BUTTON_DOWN; >+ break; > case 2: > eventType = NS_MOUSE_MIDDLE_BUTTON_DOWN; > break; >@@ -1403,7 +1406,6 @@ > eventType = NS_MOUSE_RIGHT_BUTTON_DOWN; > break; > default: >- eventType = NS_MOUSE_LEFT_BUTTON_DOWN; > break; > } > >--- widget/src/gtk2/nsWidgetFactory.cpp >+++ widget/src/gtk2/nsWidgetFactory.cpp >@@ -132,7 +132,7 @@ > } > > nsCOMPtr<nsIFilePicker> picker; >- PRBool enabled = PR_FALSE; >+ PRBool enabled = PR_TRUE; > > /* need pref fu */ > >--- widget/src/gtk2/nsGtkKeyUtils.cpp >+++ widget/src/gtk2/nsGtkKeyUtils.cpp >@@ -270,7 +270,7 @@ > case GDK_KP_Add: > return '+'; > case GDK_KP_Separator: >- return '|'; >+ return ','; > case GDK_KP_Subtract: > return '-'; > case GDK_KP_Decimal: >--- widget/src/gtk2/nsFilePicker.cpp >+++ widget/src/gtk2/nsFilePicker.cpp >@@ -38,11 +38,17 @@ > #include <gtk/gtkwindow.h> > #include <gtk/gtkdialog.h> > #include <gtk/gtkstock.h> >+#include <gtk/gtklabel.h> >+#include <gtk/gtkimage.h> >+#include <gtk/gtkhbox.h> >+#include <gtk/gtkmessagedialog.h> > > #include "nsIFileURL.h" > #include "nsIURI.h" > #include "nsIWidget.h" > #include "nsILocalFile.h" >+#include "nsIStringBundle.h" >+ > #include "nsArrayEnumerator.h" > #include "nsVoidArray.h" > #include "nsMemory.h" >@@ -91,6 +97,9 @@ > typedef void (*_gtk_file_chooser_set_current_name_fn)(GtkFileChooser* chooser, const gchar* name); > typedef void (*_gtk_file_chooser_set_current_folder_fn)(GtkFileChooser* chooser, const gchar* folder); > typedef void (*_gtk_file_chooser_add_filter_fn)(GtkFileChooser* chooser, GtkFileFilter* filter); >+typedef void (*_gtk_file_chooser_set_filter_fn)(GtkFileChooser* chooser, GtkFileFilter* filter); >+typedef GtkFileFilter* (*_gtk_file_chooser_get_filter_fn)(GtkFileChooser* chooser); >+typedef GSList* (*_gtk_file_chooser_list_filters_fn)(GtkFileChooser* chooser); > typedef GtkFileFilter* (*_gtk_file_filter_new_fn)(); > typedef void (*_gtk_file_filter_add_pattern_fn)(GtkFileFilter* filter, const gchar* pattern); > typedef void (*_gtk_file_filter_set_name_fn)(GtkFileFilter* filter, const gchar* name); >@@ -103,6 +112,9 @@ > DECL_FUNC_PTR(gtk_file_chooser_set_current_name); > DECL_FUNC_PTR(gtk_file_chooser_set_current_folder); > DECL_FUNC_PTR(gtk_file_chooser_add_filter); >+DECL_FUNC_PTR(gtk_file_chooser_set_filter); >+DECL_FUNC_PTR(gtk_file_chooser_get_filter); >+DECL_FUNC_PTR(gtk_file_chooser_list_filters); > DECL_FUNC_PTR(gtk_file_filter_new); > DECL_FUNC_PTR(gtk_file_filter_add_pattern); > DECL_FUNC_PTR(gtk_file_filter_set_name); >@@ -179,6 +191,9 @@ > GET_LIBGTK_FUNC(gtk_file_chooser_set_current_name); > GET_LIBGTK_FUNC(gtk_file_chooser_set_current_folder); > GET_LIBGTK_FUNC(gtk_file_chooser_add_filter); >+ GET_LIBGTK_FUNC(gtk_file_chooser_set_filter); >+ GET_LIBGTK_FUNC(gtk_file_chooser_get_filter); >+ GET_LIBGTK_FUNC(gtk_file_chooser_list_filters); > GET_LIBGTK_FUNC(gtk_file_filter_new); > GET_LIBGTK_FUNC(gtk_file_filter_add_pattern); > GET_LIBGTK_FUNC(gtk_file_filter_set_name); >@@ -272,6 +287,12 @@ > g_free(filename); > } > >+ GtkFileFilter *filter = _gtk_file_chooser_get_filter (GTK_FILE_CHOOSER(file_chooser)); >+ GSList *filter_list = _gtk_file_chooser_list_filters (GTK_FILE_CHOOSER(file_chooser)); >+ >+ mSelectedType = NS_STATIC_CAST(PRInt16, g_slist_index (filter_list, filter)); >+ g_slist_free(filter_list); >+ > // Remember last used directory. > nsCOMPtr<nsILocalFile> file; > GetFile(getter_AddRefs(file)); >@@ -438,6 +459,70 @@ > return NS_ERROR_FAILURE; > } > >+PRBool >+confirm_overwrite_file (GtkWidget *parent, nsILocalFile* file) >+{ >+ nsCOMPtr<nsIStringBundleService> sbs = do_GetService(NS_STRINGBUNDLE_CONTRACTID); >+ nsCOMPtr<nsIStringBundle> bundle; >+ nsresult rv = sbs->CreateBundle("chrome://global/locale/filepicker.properties", >+ getter_AddRefs(bundle)); >+ if (NS_FAILED(rv)) { >+ return PR_FALSE; >+ } >+ >+ nsAutoString leafName; >+ file->GetLeafName(leafName); >+ const PRUnichar *formatStrings[] = >+ { >+ leafName.get() >+ }; >+ >+ nsXPIDLString title, message; >+ bundle->GetStringFromName(NS_LITERAL_STRING("confirmTitle").get(), >+ getter_Copies(title)); >+ bundle->FormatStringFromName(NS_LITERAL_STRING("confirmFileReplacing").get(), >+ formatStrings, NS_ARRAY_LENGTH(formatStrings), >+ getter_Copies(message)); >+ >+ GtkWidget *dialog; >+ >+ /* >+ dialog = gtk_dialog_new_with_buttons (NS_ConvertUCS2toUTF8(title).get(), >+ GTK_WINDOW (parent), >+ GTK_DIALOG_MODAL, >+ GTK_STOCK_YES, GTK_RESPONSE_YES, >+ GTK_STOCK_NO, GTK_RESPONSE_NO, >+ NULL); >+ hbox = gtk_hbox_new (FALSE, 6); >+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, TRUE, TRUE, 12); >+ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG); >+ gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.0); >+ gtk_box_pack_start (GTK_BOX (hbox), image, TRUE, TRUE, 0); >+ >+ label = gtk_label_new(NS_ConvertUCS2toUTF8(message).get()); >+ gtk_label_set_selectable (GTK_LABEL (label), TRUE); >+ gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); >+ gtk_widget_show_all (hbox); >+ >+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); >+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog), TRUE); >+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)), 6); >+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_NO); >+ */ >+ dialog = gtk_message_dialog_new(GTK_WINDOW(parent), >+ GTK_DIALOG_DESTROY_WITH_PARENT, >+ GTK_MESSAGE_QUESTION, >+ GTK_BUTTONS_YES_NO, >+ NS_ConvertUTF16toUTF8(message).get()); >+ gtk_window_set_title(GTK_WINDOW(dialog), NS_ConvertUTF16toUTF8(title).get()); >+ >+ PRBool result = (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES); >+ >+ gtk_widget_destroy (dialog); >+ >+ return result; >+} >+ > NS_IMETHODIMP > nsFilePicker::Show(PRInt16 *aReturn) > { >@@ -508,6 +593,10 @@ > } > > _gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_chooser), filter); >+ >+ // Set the initially selected filter >+ if (mSelectedType == i) >+ _gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(file_chooser), filter); > } > > gint response = gtk_dialog_run (GTK_DIALOG (file_chooser)); >@@ -516,14 +605,20 @@ > case GTK_RESPONSE_ACCEPT: > ReadValuesFromFileChooser(file_chooser); > *aReturn = nsIFilePicker::returnOK; >- if (mMode == modeSave) { >+ if (mMode == nsIFilePicker::modeSave) { > nsCOMPtr<nsILocalFile> file; > GetFile(getter_AddRefs(file)); > if (file) { > PRBool exists = PR_FALSE; > file->Exists(&exists); > if (exists) { >- *aReturn = nsIFilePicker::returnReplace; >+ PRBool overwrite = confirm_overwrite_file (file_chooser, file); >+ >+ if (overwrite) { >+ *aReturn = nsIFilePicker::returnReplace; >+ } else { >+ *aReturn = nsIFilePicker::returnCancel; >+ } > } > } > } >--- widget/src/gtk2/nsLookAndFeel.cpp >+++ widget/src/gtk2/nsLookAndFeel.cpp >@@ -87,22 +87,22 @@ > // (except here at least TextSelectBackground and TextSelectForeground) > // The CSS2 colors below are used. > case eColor_WindowBackground: >- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]); >+ aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_NORMAL]); > break; > case eColor_WindowForeground: >- aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]); >+ aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_NORMAL]); > break; > case eColor_WidgetBackground: >- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]); >+ aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_NORMAL]); > break; > case eColor_WidgetForeground: >- aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]); >+ aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_NORMAL]); > break; > case eColor_WidgetSelectBackground: >- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_SELECTED]); >+ aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_SELECTED]); > break; > case eColor_WidgetSelectForeground: >- aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_SELECTED]); >+ aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_SELECTED]); > break; > case eColor_Widget3DHighlight: > aColor = NS_RGB(0xa0,0xa0,0xa0); >--- xpfe/components/filepicker/src/nsFilePicker.js >+++ xpfe/components/filepicker/src/nsFilePicker.js >@@ -0,0 +1,315 @@ >+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- >+ * >+ * The contents of this file are subject to the Mozilla Public >+ * License Version 1.1 (the "License"); you may not use this file >+ * except in compliance with the License. You may obtain a copy of >+ * the License at http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS >+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or >+ * implied. See the License for the specific language governing >+ * rights and limitations under the License. >+ * >+ * The Original Code is mozilla.org code. >+ * >+ * The Initial Developer of the Original Code is Netscape >+ * Communications Corporation. Portions created by Netscape are >+ * Copyright (C) 2000 Netscape Communications Corporation. All >+ * Rights Reserved. >+ * >+ * Contributor(s): Stuart Parmenter <pavlov@netscape.com> >+ */ >+ >+/* >+ * No magic constructor behaviour, as is de rigeur for XPCOM. >+ * If you must perform some initialization, and it could possibly fail (even >+ * due to an out-of-memory condition), you should use an Init method, which >+ * can convey failure appropriately (thrown exception in JS, >+ * NS_FAILED(nsresult) return in C++). >+ * >+ * In JS, you can actually cheat, because a thrown exception will cause the >+ * CreateInstance call to fail in turn, but not all languages are so lucky. >+ * (Though ANSI C++ provides exceptions, they are verboten in Mozilla code >+ * for portability reasons -- and even when you're building completely >+ * platform-specific code, you can't throw across an XPCOM method boundary.) >+ */ >+ >+ >+const DEBUG = false; /* set to true to enable debug messages */ >+ >+const FILEPICKER_CONTRACTID = "@mozilla.org/filepicker;1"; >+const FILEPICKER_CID = Components.ID("{54ae32f8-1dd2-11b2-a209-df7c505370f8}"); >+const LOCAL_FILE_CONTRACTID = "@mozilla.org/file/local;1"; >+const APPSHELL_SERV_CONTRACTID = "@mozilla.org/appshell/appShellService;1"; >+const STRBUNDLE_SERV_CONTRACTID = "@mozilla.org/intl/stringbundle;1"; >+ >+const nsIAppShellService = Components.interfaces.nsIAppShellService; >+const nsILocalFile = Components.interfaces.nsILocalFile; >+const nsIFileURL = Components.interfaces.nsIFileURL; >+const nsISupports = Components.interfaces.nsISupports; >+const nsIFactory = Components.interfaces.nsIFactory; >+const nsIFilePicker = Components.interfaces.nsIFilePicker; >+const nsIInterfaceRequestor = Components.interfaces.nsIInterfaceRequestor >+const nsIDOMWindow = Components.interfaces.nsIDOMWindow; >+const nsIStringBundleService = Components.interfaces.nsIStringBundleService; >+const nsIWebNavigation = Components.interfaces.nsIWebNavigation; >+const nsIDocShellTreeItem = Components.interfaces.nsIDocShellTreeItem; >+const nsIBaseWindow = Components.interfaces.nsIBaseWindow; >+ >+var bundle = null; >+var lastDirectory = null; >+ >+function nsFilePicker() >+{ >+ if (!bundle) >+ bundle = srGetStrBundle("chrome://global/locale/filepicker.properties"); >+ >+ /* attributes */ >+ this.mDefaultString = ""; >+ this.mFilterIndex = 0; >+ if (lastDirectory) { >+ this.mDisplayDirectory = Components.classes[LOCAL_FILE_CONTRACTID].createInstance(nsILocalFile); >+ this.mDisplayDirectory.initWithPath(lastDirectory); >+ } else { >+ this.mDisplayDirectory = null; >+ } >+ this.mFilterTitles = new Array(); >+ this.mFilters = new Array(); >+} >+ >+nsFilePicker.prototype = { >+ >+ /* attribute nsILocalFile displayDirectory; */ >+ set displayDirectory(a) { this.mDisplayDirectory = a; }, >+ get displayDirectory() { return this.mDisplayDirectory; }, >+ >+ /* readonly attribute nsILocalFile file; */ >+ set file(a) { throw "readonly property"; }, >+ get file() { return this.mFilesEnumerator.mFiles[0]; }, >+ >+ /* readonly attribute nsISimpleEnumerator files; */ >+ set files(a) { throw "readonly property"; }, >+ get files() { return this.mFilesEnumerator; }, >+ >+ /* readonly attribute nsIFileURL fileURL; */ >+ set fileURL(a) { throw "readonly property"; }, >+ get fileURL() { >+ if (this.mFilesEnumerator) { >+ var ioService = Components.classes["@mozilla.org/network/io-service;1"] >+ .getService(Components.interfaces.nsIIOService); >+ var url = ioService.newFileURI(this.file); >+ return url; >+ } >+ return null; >+ }, >+ >+ /* attribute wstring defaultString; */ >+ set defaultString(a) { this.mDefaultString = a; }, >+ get defaultString() { return this.mDefaultString; }, >+ >+ /* attribute wstring defaultExtension */ >+ set defaultExtension(ext) { }, >+ get defaultExtension() { return ""; }, >+ >+ /* attribute long filterIndex; */ >+ set filterIndex(a) { this.mFilterIndex = a; }, >+ get filterIndex() { return this.mFilterIndex; }, >+ >+ /* members */ >+ mFilesEnumerator: undefined, >+ mParentWindow: null, >+ >+ /* methods */ >+ init: function(parent, title, mode) { >+ this.mParentWindow = parent; >+ this.mTitle = title; >+ this.mMode = mode; >+ }, >+ >+ appendFilters: function(filterMask) { >+ if (filterMask & nsIFilePicker.filterHTML) { >+ this.appendFilter(bundle.GetStringFromName("htmlTitle"), >+ bundle.GetStringFromName("htmlFilter")); >+ } >+ if (filterMask & nsIFilePicker.filterText) { >+ this.appendFilter(bundle.GetStringFromName("textTitle"), >+ bundle.GetStringFromName("textFilter")); >+ } >+ if (filterMask & nsIFilePicker.filterImages) { >+ this.appendFilter(bundle.GetStringFromName("imageTitle"), >+ bundle.GetStringFromName("imageFilter")); >+ } >+ if (filterMask & nsIFilePicker.filterXML) { >+ this.appendFilter(bundle.GetStringFromName("xmlTitle"), >+ bundle.GetStringFromName("xmlFilter")); >+ } >+ if (filterMask & nsIFilePicker.filterXUL) { >+ this.appendFilter(bundle.GetStringFromName("xulTitle"), >+ bundle.GetStringFromName("xulFilter")); >+ } >+ if (filterMask & nsIFilePicker.filterApps) { >+ // We use "..apps" as a special filter for executable files >+ this.appendFilter(bundle.GetStringFromName("appsTitle"), >+ "..apps"); >+ } >+ if (filterMask & nsIFilePicker.filterAll) { >+ this.appendFilter(bundle.GetStringFromName("allTitle"), >+ bundle.GetStringFromName("allFilter")); >+ } >+ }, >+ >+ appendFilter: function(title, extensions) { >+ this.mFilterTitles.push(title); >+ this.mFilters.push(extensions); >+ }, >+ >+ QueryInterface: function(iid) { >+ if (!iid.equals(nsIFilePicker) && >+ !iid.equals(nsISupports)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ return this; >+ }, >+ >+ show: function() { >+ var o = new Object(); >+ o.title = this.mTitle; >+ o.mode = this.mMode; >+ o.displayDirectory = this.mDisplayDirectory; >+ o.defaultString = this.mDefaultString; >+ o.filterIndex = this.mFilterIndex; >+ o.filters = new Object(); >+ o.filters.titles = this.mFilterTitles; >+ o.filters.types = this.mFilters; >+ o.retvals = new Object(); >+ >+ var parent; >+ if (this.mParentWindow) { >+ parent = this.mParentWindow; >+ } else if (typeof(window) == "object" && window != null) { >+ parent = window; >+ } else { >+ try { >+ var appShellService = Components.classes[APPSHELL_SERV_CONTRACTID].getService(nsIAppShellService); >+ parent = appShellService.hiddenDOMWindow; >+ } catch(ex) { >+ debug("Can't get parent. xpconnect hates me so we can't get one from the appShellService.\n"); >+ debug(ex + "\n"); >+ } >+ } >+ >+ var parentWin = null; >+ try { >+ parentWin = parent.QueryInterface(nsIInterfaceRequestor) >+ .getInterface(nsIWebNavigation) >+ .QueryInterface(nsIDocShellTreeItem) >+ .treeOwner >+ .QueryInterface(nsIInterfaceRequestor) >+ .getInterface(nsIBaseWindow); >+ } catch(ex) { >+ dump("file picker couldn't get base window\n"+ex+"\n"); >+ } >+ try { >+ if (parentWin) >+ parentWin.blurSuppression = true; >+ parent.openDialog("chrome://global/content/filepicker.xul", >+ "", >+ "chrome,modal,titlebar,resizable=yes,dependent=yes", >+ o); >+ if (parentWin) >+ parentWin.blurSuppression = false; >+ >+ this.mFilterIndex = o.retvals.filterIndex; >+ this.mFilesEnumerator = o.retvals.files; >+ lastDirectory = o.retvals.directory; >+ return o.retvals.buttonStatus; >+ } catch(ex) { dump("unable to open file picker\n" + ex + "\n"); } >+ >+ return null; >+ } >+} >+ >+if (DEBUG) >+ debug = function (s) { dump("-*- filepicker: " + s + "\n"); } >+else >+ debug = function (s) {} >+ >+/* module foo */ >+ >+var filePickerModule = new Object(); >+ >+filePickerModule.registerSelf = >+function (compMgr, fileSpec, location, type) >+{ >+ debug("registering (all right -- a JavaScript module!)"); >+ compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar); >+ >+ compMgr.registerFactoryLocation(FILEPICKER_CID, >+ "FilePicker JS Component", >+ "", >+ fileSpec, >+ location, >+ type); >+} >+ >+filePickerModule.getClassObject = >+function (compMgr, cid, iid) { >+ if (!cid.equals(FILEPICKER_CID)) >+ throw Components.results.NS_ERROR_NO_INTERFACE; >+ >+ if (!iid.equals(Components.interfaces.nsIFactory)) >+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED; >+ >+ return filePickerFactory; >+} >+ >+filePickerModule.canUnload = >+function(compMgr) >+{ >+ debug("Unloading component."); >+ return true; >+} >+ >+/* factory object */ >+var filePickerFactory = new Object(); >+ >+filePickerFactory.createInstance = >+function (outer, iid) { >+ debug("CI: " + iid); >+ debug("IID:" + nsIFilePicker); >+ if (outer != null) >+ throw Components.results.NS_ERROR_NO_AGGREGATION; >+ >+ return (new nsFilePicker()).QueryInterface(iid); >+} >+ >+/* entrypoint */ >+function NSGetModule(compMgr, fileSpec) { >+ return filePickerModule; >+} >+ >+ >+ >+/* crap from strres.js that I want to use for string bundles since I can't include another .js file.... */ >+ >+var strBundleService = null; >+ >+function srGetStrBundle(path) >+{ >+ var strBundle = null; >+ >+ if (!strBundleService) { >+ try { >+ strBundleService = Components.classes[STRBUNDLE_SERV_CONTRACTID].getService(nsIStringBundleService); >+ } catch (ex) { >+ dump("\n--** strBundleService createInstance failed **--\n"); >+ return null; >+ } >+ } >+ >+ strBundle = strBundleService.createBundle(path); >+ if (!strBundle) { >+ dump("\n--** strBundle createInstance failed **--\n"); >+ } >+ return strBundle; >+} >+ >--- xpfe/components/search/src/nsInternetSearchService.cpp >+++ xpfe/components/search/src/nsInternetSearchService.cpp >@@ -997,14 +997,22 @@ > > // get available search engines > nsCOMPtr<nsIFile> nativeDir; >- if (NS_SUCCEEDED(rv = GetSearchFolder(getter_AddRefs(nativeDir)))) >- { >- rv = GetSearchEngineList(nativeDir, PR_FALSE, PR_FALSE); >- >- // read in category list >- rv = GetCategoryList(); >- } >- >+ //in profile directory >+ rv = GetSearchFolder(getter_AddRefs(nativeDir)); >+ NS_ENSURE_SUCCESS(rv, rv); >+ >+ rv = GetSearchEngineList(nativeDir, PR_FALSE, PR_FALSE); >+ NS_ENSURE_SUCCESS(rv, rv); >+ >+ // in application directory >+ rv = GetSearchAppFolder(getter_AddRefs(nativeDir)); >+ NS_ENSURE_SUCCESS(rv, rv); >+ //DOn't return errors even if we failed to load search engines. >+ GetSearchEngineList(nativeDir, PR_FALSE, PR_FALSE); >+ >+ // read in category list >+ rv = GetCategoryList(); >+ > #ifdef XP_MAC > // on Mac, use system's search files too > nsCOMPtr<nsIFile> macSearchDir; >@@ -1400,12 +1408,13 @@ > if (!remoteCategoryDataSource) return(NS_ERROR_UNEXPECTED); > > // get search.rdf >- >+ > nsCOMPtr<nsIFile> searchFile; > nsCAutoString searchFileURLSpec; > >- rv = NS_GetSpecialDirectory(NS_APP_SEARCH_50_FILE, getter_AddRefs(searchFile)); >- if (NS_FAILED(rv)) return rv; >+ rv = GetSearchDatasourceFile(getter_AddRefs(searchFile)); >+ NS_ENSURE_SUCCESS(rv, rv); >+ > NS_GetURLSpecFromFile(searchFile, searchFileURLSpec); > if (NS_FAILED(rv)) return rv; > rv = remoteCategoryDataSource->Init(searchFileURLSpec.get()); >@@ -2560,6 +2569,15 @@ > nsCOMPtr<nsIFile> outFile; > if (NS_FAILED(rv = GetSearchFolder(getter_AddRefs(outFile)))) return(rv); > >+ PRBool exists; >+ rv = outFile->Exists(&exists); >+ if (NS_FAILED(rv)) return(rv); >+ if (!exists) >+ { >+ rv = outFile->Create(nsIFile::DIRECTORY_TYPE, 0755); >+ if (NS_FAILED(rv)) return(rv); >+ } >+ > const PRUnichar *dataBuf = nsnull; > if (NS_FAILED(rv = context->GetBufferConst(&dataBuf))) return(rv); > >@@ -4091,24 +4109,68 @@ > return(rv); > } > >+nsresult >+InternetSearchDataSource::GetSearchAppFolder(nsIFile **aDir) >+{ >+ NS_ENSURE_ARG_POINTER(aDir); >+ *aDir = nsnull; > >+ nsCOMPtr<nsIFile> searchDir; >+ nsresult rv = NS_GetSpecialDirectory(NS_APP_SEARCH_DIR, >+ getter_AddRefs(searchDir)); >+ NS_ENSURE_SUCCESS(rv, rv); >+ >+ // addref >+ *aDir = searchDir; >+ NS_ADDREF(*aDir); >+ return NS_OK; >+} > > nsresult >-InternetSearchDataSource::GetSearchFolder(nsIFile **searchDir) >+InternetSearchDataSource::GetSearchFolder(nsIFile **aDir) > { >- NS_ENSURE_ARG_POINTER(searchDir); >- *searchDir = nsnull; >+ NS_ENSURE_ARG_POINTER(aDir); >+ *aDir = nsnull; >+ PRBool exists; > >- nsCOMPtr<nsIFile> aDir; >- nsresult rv = NS_GetSpecialDirectory(NS_APP_SEARCH_DIR, getter_AddRefs(aDir)); >- if (NS_FAILED(rv)) return rv; >+ nsCOMPtr<nsIFile> searchDir; >+ nsresult rv = NS_GetSpecialDirectory(NS_APP_USER_SEARCH_50_DIR, >+ getter_AddRefs(searchDir)); >+ NS_ENSURE_SUCCESS(rv, rv); >+ >+ // If target directory doesn't exist in profile, >+ // creates an empty directory >+ >+ rv = searchDir->Exists(&exists); >+ NS_ENSURE_SUCCESS(rv, rv); >+ >+ if(!exists){ >+ rv = searchDir->Create(nsIFile::DIRECTORY_TYPE, 0700); >+ NS_ENSURE_SUCCESS(rv, rv); >+ } > >- *searchDir = aDir; >- NS_ADDREF(*searchDir); >+ // addref >+ *aDir = searchDir; >+ NS_ADDREF(*aDir); > return NS_OK; > } > >+nsresult >+InternetSearchDataSource::GetSearchDatasourceFile(nsIFile **aFile) >+{ >+ NS_ENSURE_ARG_POINTER(aFile); > >+ nsresult rv; >+ >+ nsCOMPtr<nsIFile> file; >+ rv = GetSearchFolder(getter_AddRefs(file)); >+ NS_ENSURE_SUCCESS(rv, rv); >+ >+ // addref >+ *aFile = file; >+ NS_ADDREF(*aFile); >+ return NS_OK; >+} > > nsresult > InternetSearchDataSource::SaveEngineInfoIntoGraph(nsIFile *file, nsIFile *icon, >@@ -4315,7 +4377,7 @@ > InternetSearchDataSource::GetSearchEngineList(nsIFile *searchDir, > PRBool isSystemSearchFile, PRBool checkMacFileType) > { >- nsresult rv = NS_OK; >+ nsresult rv = NS_OK; > > if (!mInner) > { >@@ -6435,8 +6497,15 @@ > { > // Delete search.rdf > nsCOMPtr<nsIFile> searchFile; >- rv = NS_GetSpecialDirectory(NS_APP_SEARCH_50_FILE, getter_AddRefs(searchFile)); >- if (NS_SUCCEEDED(rv)) >+ >+ rv = GetSearchDatasourceFile(getter_AddRefs(searchFile)); >+ NS_ENSURE_SUCCESS(rv, rv); >+ >+ PRBool exists; >+ rv = searchFile->Exists(&exists); >+ NS_ENSURE_SUCCESS(rv, rv); >+ >+ if (exists) > rv = searchFile->Remove(PR_FALSE); > } > } >--- xpfe/components/search/src/nsInternetSearchService.h >+++ xpfe/components/search/src/nsInternetSearchService.h >@@ -158,6 +158,8 @@ > nsresult GetSearchEngineList(nsIFile *spec, PRBool isSystemSearchFile, PRBool checkMacFileType); > nsresult GetCategoryList(); > nsresult GetSearchFolder(nsIFile **spec); >+ nsresult GetSearchAppFolder(nsIFile **spec); >+ nsresult GetSearchDatasourceFile(nsIFile **spec); > nsresult ReadFileContents(nsILocalFile *baseFilename, nsString & sourceContents); > nsresult DecodeData(const char *aCharset, const PRUnichar *aInString, PRUnichar **aOutString); > nsresult GetData(const PRUnichar *data, const char *sectionToFind, PRUint32 sectionNum, const char *attribToFind, nsString &value); >--- xpfe/global/resources/content/bindings/browser.xml >+++ xpfe/global/resources/content/bindings/browser.xml >@@ -322,6 +322,10 @@ > null > </field> > >+ <field name="mDestroyed"> >+ false >+ </field> >+ > <property name="userTypedValue" > onget="return this._userTypedValue;" > onset="this.userTypedClear = 0; return this._userTypedValue = val;"/> >@@ -360,12 +364,31 @@ > > <destructor> > <![CDATA[ >+ this.destroy(); >+ ]]> >+ </destructor> >+ >+ <!-- This is necessary because the destructor is not called >+ promptly when we are removed from a tabbrowser. This will be >+ explicitly called by tabbrowser --> >+ <method name="destroy"> >+ <body> >+ <![CDATA[ >+ if (this.mDestroyed) >+ return; >+ this.mDestroyed = true; >+ > if (this.mDragDropHandler) > this.mDragDropHandler.detach(); >+ this.mDragDropHandler = null; > > this.securityUI = null; >+ this.focusedWindow = null; >+ this.focusedElement = null; >+ this._webBrowserFind = null; > ]]> >- </destructor> >+ </body> >+ </method> > </implementation> > > <handlers> >--- xpfe/global/resources/content/bindings/tabbrowser.xml >+++ xpfe/global/resources/content/bindings/tabbrowser.xml >@@ -995,6 +995,19 @@ > // clean up the before/afterselected attributes before removing the tab > oldTab.selected = false; > >+ // Because of the way XBL works (fields just set JS >+ // properties on the element) and the code we have in place >+ // to preserve the JS objects for any elements that have >+ // JS properties set on them, the browser element won't be >+ // destroyed until the document goes away. So we force a >+ // cleanup ourselves. >+ // This has to hapen before we remove the child so that the >+ // XBL implementation of nsIObserver still works. >+ oldBrowser.destroy(); >+ >+ if (oldBrowser == this.mCurrentBrowser) >+ this.mCurrentBrowser = null; >+ > this.mTabContainer.removeChild(oldTab); > this.mPanelContainer.removeChild(oldBrowser); > >--- configure >+++ configure >@@ -90,12 +90,16 @@ > ac_help="$ac_help > --enable-xft Enable Xft support " > ac_help="$ac_help >+ --enable-pango Enable Pango font rendering support" >+ac_help="$ac_help > --disable-postscript Disable PostScript printing support " > ac_help="$ac_help > --disable-xprint Disable Xprint printing support " > ac_help="$ac_help > --disable-gnomevfs Disable GnomeVFS support " > ac_help="$ac_help >+ --disable-gnomeui Disable libgnomeui support (default: auto, optional at runtime) " >+ac_help="$ac_help > --enable-crypto Enable crypto support (Personal Security Manager)" > ac_help="$ac_help > --disable-jsd Disable JavaScript debug library" >@@ -881,7 +885,7 @@ > fi > > echo $ac_n "checking host system type""... $ac_c" 1>&6 >-echo "configure:885: checking host system type" >&5 >+echo "configure:889: checking host system type" >&5 > > host_alias=$host > case "$host_alias" in >@@ -902,7 +906,7 @@ > echo "$ac_t""$host" 1>&6 > > echo $ac_n "checking target system type""... $ac_c" 1>&6 >-echo "configure:906: checking target system type" >&5 >+echo "configure:910: checking target system type" >&5 > > target_alias=$target > case "$target_alias" in >@@ -920,7 +924,7 @@ > echo "$ac_t""$target" 1>&6 > > echo $ac_n "checking build system type""... $ac_c" 1>&6 >-echo "configure:924: checking build system type" >&5 >+echo "configure:928: checking build system type" >&5 > > build_alias=$build > case "$build_alias" in >@@ -981,6 +985,7 @@ > MAKE_VERSION=3.78 > WINDRES_VERSION=2.14.90 > W32API_VERSION=2.4 >+GNOMEUI_VERSION=2.0.6 > GNOMEVFS_VERSION=2.0 > GCONF_VERSION=1.2.1 > LIBGNOME_VERSION=2.0 >@@ -1045,13 +1050,13 @@ > _SAVE_LDFLAGS="$LDFLAGS" > > echo $ac_n "checking for host c compiler""... $ac_c" 1>&6 >-echo "configure:1049: checking for host c compiler" >&5 >+echo "configure:1054: checking for host c compiler" >&5 > for ac_prog in $HOST_CC gcc cc /usr/ucb/cc cl icc > do > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1055: checking for $ac_word" >&5 >+echo "configure:1060: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_HOST_CC'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1086,13 +1091,13 @@ > fi > echo "$ac_t""$HOST_CC" 1>&6 > echo $ac_n "checking for host c++ compiler""... $ac_c" 1>&6 >-echo "configure:1090: checking for host c++ compiler" >&5 >+echo "configure:1095: checking for host c++ compiler" >&5 > for ac_prog in $HOST_CXX $CCC c++ g++ gcc CC cxx cc++ cl icc > do > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1096: checking for $ac_word" >&5 >+echo "configure:1101: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_HOST_CXX'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1141,7 +1146,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1145: checking for $ac_word" >&5 >+echo "configure:1150: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_HOST_RANLIB'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1176,7 +1181,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1180: checking for $ac_word" >&5 >+echo "configure:1185: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_HOST_AR'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1211,16 +1216,16 @@ > LDFLAGS="$HOST_LDFLAGS" > > echo $ac_n "checking whether the host c compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works""... $ac_c" 1>&6 >-echo "configure:1215: checking whether the host c compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works" >&5 >+echo "configure:1220: checking whether the host c compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works" >&5 > cat > conftest.$ac_ext <<EOF >-#line 1217 "configure" >+#line 1222 "configure" > #include "confdefs.h" > > int main() { > return(0); > ; return 0; } > EOF >-if { (eval echo configure:1224: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:1229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_prog_hostcc_works=1 echo "$ac_t""yes" 1>&6 > else >@@ -1235,16 +1240,16 @@ > CFLAGS="$HOST_CXXFLAGS" > > echo $ac_n "checking whether the host c++ compiler ($HOST_CXX $HOST_CXXFLAGS $HOST_LDFLAGS) works""... $ac_c" 1>&6 >-echo "configure:1239: checking whether the host c++ compiler ($HOST_CXX $HOST_CXXFLAGS $HOST_LDFLAGS) works" >&5 >+echo "configure:1244: checking whether the host c++ compiler ($HOST_CXX $HOST_CXXFLAGS $HOST_LDFLAGS) works" >&5 > cat > conftest.$ac_ext <<EOF >-#line 1241 "configure" >+#line 1246 "configure" > #include "confdefs.h" > > int main() { > return(0); > ; return 0; } > EOF >-if { (eval echo configure:1248: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:1253: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_prog_hostcxx_works=1 echo "$ac_t""yes" 1>&6 > else >@@ -1264,7 +1269,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1268: checking for $ac_word" >&5 >+echo "configure:1273: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1298,7 +1303,7 @@ > # Extract the first word of "gcc", so it can be a program name with args. > set dummy gcc; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1302: checking for $ac_word" >&5 >+echo "configure:1307: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1328,7 +1333,7 @@ > # Extract the first word of "cc", so it can be a program name with args. > set dummy cc; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1332: checking for $ac_word" >&5 >+echo "configure:1337: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1379,7 +1384,7 @@ > # Extract the first word of "cl", so it can be a program name with args. > set dummy cl; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1383: checking for $ac_word" >&5 >+echo "configure:1388: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1411,7 +1416,7 @@ > fi > > echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 >-echo "configure:1415: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 >+echo "configure:1420: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 > > ac_ext=c > # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. >@@ -1422,12 +1427,12 @@ > > cat > conftest.$ac_ext << EOF > >-#line 1426 "configure" >+#line 1431 "configure" > #include "confdefs.h" > > main(){return(0);} > EOF >-if { (eval echo configure:1431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:1436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > ac_cv_prog_cc_works=yes > # If we can't run a trivial program, we are probably using a cross compiler. > if (./conftest; exit) 2>/dev/null; then >@@ -1453,12 +1458,12 @@ > { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } > fi > echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 >-echo "configure:1457: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 >+echo "configure:1462: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 > echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 > cross_compiling=$ac_cv_prog_cc_cross > > echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 >-echo "configure:1462: checking whether we are using GNU C" >&5 >+echo "configure:1467: checking whether we are using GNU C" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1467,7 +1472,7 @@ > yes; > #endif > EOF >-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1471: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then >+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1476: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then > ac_cv_prog_gcc=yes > else > ac_cv_prog_gcc=no >@@ -1486,7 +1491,7 @@ > ac_save_CFLAGS="$CFLAGS" > CFLAGS= > echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 >-echo "configure:1490: checking whether ${CC-cc} accepts -g" >&5 >+echo "configure:1495: checking whether ${CC-cc} accepts -g" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1522,7 +1527,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1526: checking for $ac_word" >&5 >+echo "configure:1531: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1558,7 +1563,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1562: checking for $ac_word" >&5 >+echo "configure:1567: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1590,7 +1595,7 @@ > > > echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 >-echo "configure:1594: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 >+echo "configure:1599: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 > > ac_ext=C > # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. >@@ -1601,12 +1606,12 @@ > > cat > conftest.$ac_ext << EOF > >-#line 1605 "configure" >+#line 1610 "configure" > #include "confdefs.h" > > int main(){return(0);} > EOF >-if { (eval echo configure:1610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:1615: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > ac_cv_prog_cxx_works=yes > # If we can't run a trivial program, we are probably using a cross compiler. > if (./conftest; exit) 2>/dev/null; then >@@ -1632,12 +1637,12 @@ > { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } > fi > echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 >-echo "configure:1636: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 >+echo "configure:1641: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 > echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 > cross_compiling=$ac_cv_prog_cxx_cross > > echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 >-echo "configure:1641: checking whether we are using GNU C++" >&5 >+echo "configure:1646: checking whether we are using GNU C++" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1646,7 +1651,7 @@ > yes; > #endif > EOF >-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1650: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then >+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1655: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then > ac_cv_prog_gxx=yes > else > ac_cv_prog_gxx=no >@@ -1665,7 +1670,7 @@ > ac_save_CXXFLAGS="$CXXFLAGS" > CXXFLAGS= > echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 >-echo "configure:1669: checking whether ${CXX-g++} accepts -g" >&5 >+echo "configure:1674: checking whether ${CXX-g++} accepts -g" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1696,63 +1701,12 @@ > fi > fi > >-for ac_declaration in \ >- ''\ >- '#include <stdlib.h>' \ >- 'extern "C" void std::exit (int) throw (); using std::exit;' \ >- 'extern "C" void std::exit (int); using std::exit;' \ >- 'extern "C" void exit (int) throw ();' \ >- 'extern "C" void exit (int);' \ >- 'void exit (int);' >-do >- cat > conftest.$ac_ext <<EOF >-#line 1710 "configure" >-#include "confdefs.h" >-#include <stdlib.h> >-$ac_declaration >-int main() { >-exit (42); >-; return 0; } >-EOF >-if { (eval echo configure:1718: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >- : >-else >- echo "configure: failed program was:" >&5 >- cat conftest.$ac_ext >&5 >- rm -rf conftest* >- continue >-fi >-rm -f conftest* >- cat > conftest.$ac_ext <<EOF >-#line 1728 "configure" >-#include "confdefs.h" >-$ac_declaration >-int main() { >-exit (42); >-; return 0; } >-EOF >-if { (eval echo configure:1735: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >- rm -rf conftest* >- break >-else >- echo "configure: failed program was:" >&5 >- cat conftest.$ac_ext >&5 >-fi >-rm -f conftest* >-done >-if test -n "$ac_declaration"; then >- echo '#ifdef __cplusplus' >>confdefs.h >- echo $ac_declaration >>confdefs.h >- echo '#endif' >>confdefs.h >-fi >- >- > for ac_prog in $RANLIB "${target_alias}-ranlib" "${target}-ranlib" > do > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1756: checking for $ac_word" >&5 >+echo "configure:1710: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1787,7 +1741,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1791: checking for $ac_word" >&5 >+echo "configure:1745: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1822,7 +1776,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1826: checking for $ac_word" >&5 >+echo "configure:1780: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_AS'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1863,7 +1817,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1867: checking for $ac_word" >&5 >+echo "configure:1821: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1898,7 +1852,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1902: checking for $ac_word" >&5 >+echo "configure:1856: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1933,7 +1887,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1937: checking for $ac_word" >&5 >+echo "configure:1891: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -1971,7 +1925,7 @@ > # Extract the first word of "gcc", so it can be a program name with args. > set dummy gcc; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:1975: checking for $ac_word" >&5 >+echo "configure:1929: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2001,7 +1955,7 @@ > # Extract the first word of "cc", so it can be a program name with args. > set dummy cc; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:2005: checking for $ac_word" >&5 >+echo "configure:1959: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2052,7 +2006,7 @@ > # Extract the first word of "cl", so it can be a program name with args. > set dummy cl; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:2056: checking for $ac_word" >&5 >+echo "configure:2010: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2084,7 +2038,7 @@ > fi > > echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 >-echo "configure:2088: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 >+echo "configure:2042: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 > > ac_ext=c > # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. >@@ -2095,12 +2049,12 @@ > > cat > conftest.$ac_ext << EOF > >-#line 2099 "configure" >+#line 2053 "configure" > #include "confdefs.h" > > main(){return(0);} > EOF >-if { (eval echo configure:2104: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:2058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > ac_cv_prog_cc_works=yes > # If we can't run a trivial program, we are probably using a cross compiler. > if (./conftest; exit) 2>/dev/null; then >@@ -2126,12 +2080,12 @@ > { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } > fi > echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 >-echo "configure:2130: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 >+echo "configure:2084: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 > echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 > cross_compiling=$ac_cv_prog_cc_cross > > echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 >-echo "configure:2135: checking whether we are using GNU C" >&5 >+echo "configure:2089: checking whether we are using GNU C" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2140,7 +2094,7 @@ > yes; > #endif > EOF >-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then >+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2098: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then > ac_cv_prog_gcc=yes > else > ac_cv_prog_gcc=no >@@ -2159,7 +2113,7 @@ > ac_save_CFLAGS="$CFLAGS" > CFLAGS= > echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 >-echo "configure:2163: checking whether ${CC-cc} accepts -g" >&5 >+echo "configure:2117: checking whether ${CC-cc} accepts -g" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2195,7 +2149,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:2199: checking for $ac_word" >&5 >+echo "configure:2153: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2227,7 +2181,7 @@ > > > echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 >-echo "configure:2231: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 >+echo "configure:2185: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 > > ac_ext=C > # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. >@@ -2238,12 +2192,12 @@ > > cat > conftest.$ac_ext << EOF > >-#line 2242 "configure" >+#line 2196 "configure" > #include "confdefs.h" > > int main(){return(0);} > EOF >-if { (eval echo configure:2247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:2201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > ac_cv_prog_cxx_works=yes > # If we can't run a trivial program, we are probably using a cross compiler. > if (./conftest; exit) 2>/dev/null; then >@@ -2269,12 +2223,12 @@ > { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } > fi > echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 >-echo "configure:2273: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 >+echo "configure:2227: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 > echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 > cross_compiling=$ac_cv_prog_cxx_cross > > echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 >-echo "configure:2278: checking whether we are using GNU C++" >&5 >+echo "configure:2232: checking whether we are using GNU C++" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2283,7 +2237,7 @@ > yes; > #endif > EOF >-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:2287: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then >+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:2241: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then > ac_cv_prog_gxx=yes > else > ac_cv_prog_gxx=no >@@ -2302,7 +2256,7 @@ > ac_save_CXXFLAGS="$CXXFLAGS" > CXXFLAGS= > echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 >-echo "configure:2306: checking whether ${CXX-g++} accepts -g" >&5 >+echo "configure:2260: checking whether ${CXX-g++} accepts -g" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2333,61 +2287,10 @@ > fi > fi > >-for ac_declaration in \ >- ''\ >- '#include <stdlib.h>' \ >- 'extern "C" void std::exit (int) throw (); using std::exit;' \ >- 'extern "C" void std::exit (int); using std::exit;' \ >- 'extern "C" void exit (int) throw ();' \ >- 'extern "C" void exit (int);' \ >- 'void exit (int);' >-do >- cat > conftest.$ac_ext <<EOF >-#line 2347 "configure" >-#include "confdefs.h" >-#include <stdlib.h> >-$ac_declaration >-int main() { >-exit (42); >-; return 0; } >-EOF >-if { (eval echo configure:2355: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >- : >-else >- echo "configure: failed program was:" >&5 >- cat conftest.$ac_ext >&5 >- rm -rf conftest* >- continue >-fi >-rm -f conftest* >- cat > conftest.$ac_ext <<EOF >-#line 2365 "configure" >-#include "confdefs.h" >-$ac_declaration >-int main() { >-exit (42); >-; return 0; } >-EOF >-if { (eval echo configure:2372: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >- rm -rf conftest* >- break >-else >- echo "configure: failed program was:" >&5 >- cat conftest.$ac_ext >&5 >-fi >-rm -f conftest* >-done >-if test -n "$ac_declaration"; then >- echo '#ifdef __cplusplus' >>confdefs.h >- echo $ac_declaration >>confdefs.h >- echo '#endif' >>confdefs.h >-fi >- >- > # Extract the first word of "ranlib", so it can be a program name with args. > set dummy ranlib; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:2391: checking for $ac_word" >&5 >+echo "configure:2294: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2419,7 +2322,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:2423: checking for $ac_word" >&5 >+echo "configure:2326: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_AS'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2460,7 +2363,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:2464: checking for $ac_word" >&5 >+echo "configure:2367: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2495,7 +2398,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:2499: checking for $ac_word" >&5 >+echo "configure:2402: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2530,7 +2433,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:2534: checking for $ac_word" >&5 >+echo "configure:2437: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2565,7 +2468,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:2569: checking for $ac_word" >&5 >+echo "configure:2472: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2644,12 +2547,12 @@ > fi > fi > >-for ac_prog in gawk mawk nawk awk >+for ac_prog in mawk gawk nawk awk > do > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:2653: checking for $ac_word" >&5 >+echo "configure:2556: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2689,7 +2592,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:2693: checking for $ac_word" >&5 >+echo "configure:2596: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_MIDL'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -2731,14 +2634,14 @@ > cross_compiling=$ac_cv_prog_cc_cross > > cat > conftest.$ac_ext <<EOF >-#line 2735 "configure" >+#line 2638 "configure" > #include "confdefs.h" > #include <stdio.h> > int main() { > printf("Hello World\n"); > ; return 0; } > EOF >-if { (eval echo configure:2742: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:2645: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > : > else > echo "configure: failed program was:" >&5 >@@ -2756,14 +2659,14 @@ > cross_compiling=$ac_cv_prog_cxx_cross > > cat > conftest.$ac_ext <<EOF >-#line 2760 "configure" >+#line 2663 "configure" > #include "confdefs.h" > #include <new.h> > int main() { > unsigned *test = new unsigned(42); > ; return 0; } > EOF >-if { (eval echo configure:2767: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:2670: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > : > else > echo "configure: failed program was:" >&5 >@@ -2817,7 +2720,7 @@ > > # Add flags if necessary > echo $ac_n "checking for midl flags""... $ac_c" 1>&6 >-echo "configure:2821: checking for midl flags" >&5 >+echo "configure:2724: checking for midl flags" >&5 > if test \( "$_MIDL_MAJOR_VERSION" -gt "6" \) -o \( "$_MIDL_MAJOR_VERSION" = "6" -a "$_MIDL_MINOR_VERSION" -gt "0" \) -o \( "$_MIDL_MAJOR_VERSION" = "6" -a "$_MIDL_MINOR_VERSION" = "00" -a "$_MIDL_REV_VERSION" -gt "359" \); then > # Starting with MIDL version 6.0.359, the MIDL compiler > # generates /Oicf /robust stubs by default, which is not >@@ -2836,9 +2739,9 @@ > _W32API_MAJOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $1 }'` > _W32API_MINOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $2 }'` > echo $ac_n "checking for w32api version >= $W32API_VERSION""... $ac_c" 1>&6 >-echo "configure:2840: checking for w32api version >= $W32API_VERSION" >&5 >+echo "configure:2743: checking for w32api version >= $W32API_VERSION" >&5 > cat > conftest.$ac_ext <<EOF >-#line 2842 "configure" >+#line 2745 "configure" > #include "confdefs.h" > #include <w32api.h> > int main() { >@@ -2850,7 +2753,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:2854: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:2757: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > res=yes > else >@@ -2866,7 +2769,7 @@ > fi > # Check windres version > echo $ac_n "checking for windres version >= $WINDRES_VERSION""... $ac_c" 1>&6 >-echo "configure:2870: checking for windres version >= $WINDRES_VERSION" >&5 >+echo "configure:2773: checking for windres version >= $WINDRES_VERSION" >&5 > _WINDRES_VERSION=`${WINDRES} --version 2>&1 | grep -i windres 2>/dev/null | $AWK '{ print $3 }'` > echo "$ac_t""$_WINDRES_VERSION" 1>&6 > _WINDRES_MAJOR_VERSION=`echo $_WINDRES_VERSION | $AWK -F\. '{ print $1 }'` >@@ -2895,7 +2798,7 @@ > SKIP_COMPILER_CHECKS=1 > SKIP_LIBRARY_CHECKS=1 > echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 >-echo "configure:2899: checking how to run the C preprocessor" >&5 >+echo "configure:2802: checking how to run the C preprocessor" >&5 > # On Suns, sometimes $CPP names a directory. > if test -n "$CPP" && test -d "$CPP"; then > CPP= >@@ -2910,13 +2813,13 @@ > # On the NeXT, cc -E runs the code through the compiler's parser, > # not just through cpp. > cat > conftest.$ac_ext <<EOF >-#line 2914 "configure" >+#line 2817 "configure" > #include "confdefs.h" > #include <assert.h> > Syntax Error > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:2920: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:2823: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > : >@@ -2927,13 +2830,13 @@ > rm -rf conftest* > CPP="${CC-cc} -E -traditional-cpp" > cat > conftest.$ac_ext <<EOF >-#line 2931 "configure" >+#line 2834 "configure" > #include "confdefs.h" > #include <assert.h> > Syntax Error > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:2937: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:2840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > : >@@ -2944,13 +2847,13 @@ > rm -rf conftest* > CPP="${CC-cc} -nologo -E" > cat > conftest.$ac_ext <<EOF >-#line 2948 "configure" >+#line 2851 "configure" > #include "confdefs.h" > #include <assert.h> > Syntax Error > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:2954: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:2857: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > : >@@ -2978,17 +2881,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:2982: checking for $ac_hdr" >&5 >+echo "configure:2885: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 2987 "configure" >+#line 2890 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:2992: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:2895: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -3019,10 +2922,10 @@ > if test "$CC" != "icc" -a -z "$_WIN32_MSVC"; then > if test "x$CC" != xcc; then > echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 >-echo "configure:3023: checking whether $CC and cc understand -c and -o together" >&5 >+echo "configure:2926: checking whether $CC and cc understand -c and -o together" >&5 > else > echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 >-echo "configure:3026: checking whether cc understands -c and -o together" >&5 >+echo "configure:2929: checking whether cc understands -c and -o together" >&5 > fi > set dummy $CC; ac_cc="`echo $2 | > sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" >@@ -3034,16 +2937,16 @@ > # We do the test twice because some compilers refuse to overwrite an > # existing .o file with -o, though they will create one. > ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' >-if { (eval echo configure:3038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && >- test -f conftest.o && { (eval echo configure:3039: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; >+if { (eval echo configure:2941: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && >+ test -f conftest.o && { (eval echo configure:2942: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; > then > eval ac_cv_prog_cc_${ac_cc}_c_o=yes > if test "x$CC" != xcc; then > # Test first that cc exists at all. >- if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:3044: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then >+ if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:2947: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then > ac_try='cc -c conftest.c -o conftest.o 1>&5' >- if { (eval echo configure:3046: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && >- test -f conftest.o && { (eval echo configure:3047: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; >+ if { (eval echo configure:2949: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && >+ test -f conftest.o && { (eval echo configure:2950: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; > then > # cc works too. > : >@@ -3104,7 +3007,7 @@ > fi > > echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 >-echo "configure:3108: checking how to run the C preprocessor" >&5 >+echo "configure:3011: checking how to run the C preprocessor" >&5 > # On Suns, sometimes $CPP names a directory. > if test -n "$CPP" && test -d "$CPP"; then > CPP= >@@ -3119,13 +3022,13 @@ > # On the NeXT, cc -E runs the code through the compiler's parser, > # not just through cpp. > cat > conftest.$ac_ext <<EOF >-#line 3123 "configure" >+#line 3026 "configure" > #include "confdefs.h" > #include <assert.h> > Syntax Error > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:3129: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:3032: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > : >@@ -3136,13 +3039,13 @@ > rm -rf conftest* > CPP="${CC-cc} -E -traditional-cpp" > cat > conftest.$ac_ext <<EOF >-#line 3140 "configure" >+#line 3043 "configure" > #include "confdefs.h" > #include <assert.h> > Syntax Error > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:3146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:3049: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > : >@@ -3153,13 +3056,13 @@ > rm -rf conftest* > CPP="${CC-cc} -nologo -E" > cat > conftest.$ac_ext <<EOF >-#line 3157 "configure" >+#line 3060 "configure" > #include "confdefs.h" > #include <assert.h> > Syntax Error > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:3163: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:3066: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > : >@@ -3184,7 +3087,7 @@ > echo "$ac_t""$CPP" 1>&6 > > echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6 >-echo "configure:3188: checking how to run the C++ preprocessor" >&5 >+echo "configure:3091: checking how to run the C++ preprocessor" >&5 > if test -z "$CXXCPP"; then > if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -3197,12 +3100,12 @@ > cross_compiling=$ac_cv_prog_cxx_cross > CXXCPP="${CXX-g++} -E" > cat > conftest.$ac_ext <<EOF >-#line 3201 "configure" >+#line 3104 "configure" > #include "confdefs.h" > #include <stdlib.h> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:3206: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:3109: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > : >@@ -3238,7 +3141,7 @@ > # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" > # ./install, which can be erroneously created by make from ./install.sh. > echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 >-echo "configure:3242: checking for a BSD compatible install" >&5 >+echo "configure:3145: checking for a BSD compatible install" >&5 > if test -z "$INSTALL"; then > if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -3291,7 +3194,7 @@ > test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' > > echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 >-echo "configure:3295: checking whether ln -s works" >&5 >+echo "configure:3198: checking whether ln -s works" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3316,7 +3219,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:3320: checking for $ac_word" >&5 >+echo "configure:3223: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3356,7 +3259,7 @@ > fi > > echo $ac_n "checking for minimum required perl version >= $PERL_VERSION""... $ac_c" 1>&6 >-echo "configure:3360: checking for minimum required perl version >= $PERL_VERSION" >&5 >+echo "configure:3263: checking for minimum required perl version >= $PERL_VERSION" >&5 > _perl_version=`PERL_VERSION=$PERL_VERSION $PERL -e 'print "$]"; if ($] >= $ENV{PERL_VERSION}) { exit(0); } else { exit(1); }' 2>&5` > _perl_res=$? > echo "$ac_t""$_perl_version" 1>&6 >@@ -3366,7 +3269,7 @@ > fi > > echo $ac_n "checking for full perl installation""... $ac_c" 1>&6 >-echo "configure:3370: checking for full perl installation" >&5 >+echo "configure:3273: checking for full perl installation" >&5 > _perl_archlib=`$PERL -e 'use Config; if ( -d $Config{archlib} ) { exit(0); } else { exit(1); }' 2>&5` > _perl_res=$? > if test "$_perl_res" != 0; then >@@ -3379,7 +3282,7 @@ > # Extract the first word of "doxygen", so it can be a program name with args. > set dummy doxygen; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:3383: checking for $ac_word" >&5 >+echo "configure:3286: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_DOXYGEN'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3415,7 +3318,7 @@ > # Extract the first word of "whoami", so it can be a program name with args. > set dummy whoami; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:3419: checking for $ac_word" >&5 >+echo "configure:3322: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_WHOAMI'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3451,7 +3354,7 @@ > # Extract the first word of "autoconf", so it can be a program name with args. > set dummy autoconf; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:3455: checking for $ac_word" >&5 >+echo "configure:3358: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_AUTOCONF'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3487,7 +3390,7 @@ > # Extract the first word of "unzip", so it can be a program name with args. > set dummy unzip; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:3491: checking for $ac_word" >&5 >+echo "configure:3394: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_UNZIP'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3525,7 +3428,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:3529: checking for $ac_word" >&5 >+echo "configure:3432: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_ZIP'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3566,7 +3469,7 @@ > # Extract the first word of "makedepend", so it can be a program name with args. > set dummy makedepend; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:3570: checking for $ac_word" >&5 >+echo "configure:3473: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_SYSTEM_MAKEDEPEND'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3601,7 +3504,7 @@ > # Extract the first word of "xargs", so it can be a program name with args. > set dummy xargs; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:3605: checking for $ac_word" >&5 >+echo "configure:3508: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_XARGS'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3643,7 +3546,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:3647: checking for $ac_word" >&5 >+echo "configure:3550: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_PBBUILD'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3688,7 +3591,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:3692: checking for $ac_word" >&5 >+echo "configure:3595: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_MAKE'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3731,7 +3634,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:3735: checking for $ac_word" >&5 >+echo "configure:3638: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_MAKE'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -3797,7 +3700,7 @@ > # Uses ac_ vars as temps to allow command line to override cache and checks. > # --without-x overrides everything else, but does not touch the cache. > echo $ac_n "checking for X""... $ac_c" 1>&6 >-echo "configure:3801: checking for X" >&5 >+echo "configure:3704: checking for X" >&5 > > # Check whether --with-x or --without-x was given. > if test "${with_x+set}" = set; then >@@ -3859,12 +3762,12 @@ > > # First, try using that file with no special directory specified. > cat > conftest.$ac_ext <<EOF >-#line 3863 "configure" >+#line 3766 "configure" > #include "confdefs.h" > #include <$x_direct_test_include> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:3868: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:3771: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -3933,14 +3836,14 @@ > ac_save_LIBS="$LIBS" > LIBS="-l$x_direct_test_library $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 3937 "configure" >+#line 3840 "configure" > #include "confdefs.h" > > int main() { > ${x_direct_test_function}() > ; return 0; } > EOF >-if { (eval echo configure:3944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:3847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > LIBS="$ac_save_LIBS" > # We can link X programs with no special library path. >@@ -4046,17 +3949,17 @@ > case "`(uname -sr) 2>/dev/null`" in > "SunOS 5"*) > echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6 >-echo "configure:4050: checking whether -R must be followed by a space" >&5 >+echo "configure:3953: checking whether -R must be followed by a space" >&5 > ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries" > cat > conftest.$ac_ext <<EOF >-#line 4053 "configure" >+#line 3956 "configure" > #include "confdefs.h" > > int main() { > > ; return 0; } > EOF >-if { (eval echo configure:4060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:3963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > ac_R_nospace=yes > else >@@ -4072,14 +3975,14 @@ > else > LIBS="$ac_xsave_LIBS -R $x_libraries" > cat > conftest.$ac_ext <<EOF >-#line 4076 "configure" >+#line 3979 "configure" > #include "confdefs.h" > > int main() { > > ; return 0; } > EOF >-if { (eval echo configure:4083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:3986: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > ac_R_space=yes > else >@@ -4111,7 +4014,7 @@ > # libraries were built with DECnet support. And karl@cs.umb.edu says > # the Alpha needs dnet_stub (dnet does not exist). > echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6 >-echo "configure:4115: checking for dnet_ntoa in -ldnet" >&5 >+echo "configure:4018: checking for dnet_ntoa in -ldnet" >&5 > ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -4119,7 +4022,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-ldnet $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 4123 "configure" >+#line 4026 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -4130,7 +4033,7 @@ > dnet_ntoa() > ; return 0; } > EOF >-if { (eval echo configure:4134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4037: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -4152,7 +4055,7 @@ > > if test $ac_cv_lib_dnet_dnet_ntoa = no; then > echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6 >-echo "configure:4156: checking for dnet_ntoa in -ldnet_stub" >&5 >+echo "configure:4059: checking for dnet_ntoa in -ldnet_stub" >&5 > ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -4160,7 +4063,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-ldnet_stub $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 4164 "configure" >+#line 4067 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -4171,7 +4074,7 @@ > dnet_ntoa() > ; return 0; } > EOF >-if { (eval echo configure:4175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -4200,12 +4103,12 @@ > # The nsl library prevents programs from opening the X display > # on Irix 5.2, according to dickey@clark.net. > echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 >-echo "configure:4204: checking for gethostbyname" >&5 >+echo "configure:4107: checking for gethostbyname" >&5 > if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 4209 "configure" >+#line 4112 "configure" > #include "confdefs.h" > /* System header to define __stub macros and hopefully few prototypes, > which can conflict with char gethostbyname(); below. */ >@@ -4228,7 +4131,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:4232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4135: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_func_gethostbyname=yes" > else >@@ -4249,7 +4152,7 @@ > > if test $ac_cv_func_gethostbyname = no; then > echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 >-echo "configure:4253: checking for gethostbyname in -lnsl" >&5 >+echo "configure:4156: checking for gethostbyname in -lnsl" >&5 > ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -4257,7 +4160,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lnsl $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 4261 "configure" >+#line 4164 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -4268,7 +4171,7 @@ > gethostbyname() > ; return 0; } > EOF >-if { (eval echo configure:4272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -4298,12 +4201,12 @@ > # -lsocket must be given before -lnsl if both are needed. > # We assume that if connect needs -lnsl, so does gethostbyname. > echo $ac_n "checking for connect""... $ac_c" 1>&6 >-echo "configure:4302: checking for connect" >&5 >+echo "configure:4205: checking for connect" >&5 > if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 4307 "configure" >+#line 4210 "configure" > #include "confdefs.h" > /* System header to define __stub macros and hopefully few prototypes, > which can conflict with char connect(); below. */ >@@ -4326,7 +4229,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:4330: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_func_connect=yes" > else >@@ -4347,7 +4250,7 @@ > > if test $ac_cv_func_connect = no; then > echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 >-echo "configure:4351: checking for connect in -lsocket" >&5 >+echo "configure:4254: checking for connect in -lsocket" >&5 > ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -4355,7 +4258,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lsocket $X_EXTRA_LIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 4359 "configure" >+#line 4262 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -4366,7 +4269,7 @@ > connect() > ; return 0; } > EOF >-if { (eval echo configure:4370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -4390,12 +4293,12 @@ > > # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX. > echo $ac_n "checking for remove""... $ac_c" 1>&6 >-echo "configure:4394: checking for remove" >&5 >+echo "configure:4297: checking for remove" >&5 > if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 4399 "configure" >+#line 4302 "configure" > #include "confdefs.h" > /* System header to define __stub macros and hopefully few prototypes, > which can conflict with char remove(); below. */ >@@ -4418,7 +4321,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:4422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_func_remove=yes" > else >@@ -4439,7 +4342,7 @@ > > if test $ac_cv_func_remove = no; then > echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6 >-echo "configure:4443: checking for remove in -lposix" >&5 >+echo "configure:4346: checking for remove in -lposix" >&5 > ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -4447,7 +4350,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lposix $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 4451 "configure" >+#line 4354 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -4458,7 +4361,7 @@ > remove() > ; return 0; } > EOF >-if { (eval echo configure:4462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -4482,12 +4385,12 @@ > > # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. > echo $ac_n "checking for shmat""... $ac_c" 1>&6 >-echo "configure:4486: checking for shmat" >&5 >+echo "configure:4389: checking for shmat" >&5 > if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 4491 "configure" >+#line 4394 "configure" > #include "confdefs.h" > /* System header to define __stub macros and hopefully few prototypes, > which can conflict with char shmat(); below. */ >@@ -4510,7 +4413,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:4514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_func_shmat=yes" > else >@@ -4531,7 +4434,7 @@ > > if test $ac_cv_func_shmat = no; then > echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6 >-echo "configure:4535: checking for shmat in -lipc" >&5 >+echo "configure:4438: checking for shmat in -lipc" >&5 > ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -4539,7 +4442,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lipc $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 4543 "configure" >+#line 4446 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -4550,7 +4453,7 @@ > shmat() > ; return 0; } > EOF >-if { (eval echo configure:4554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -4583,7 +4486,7 @@ > # libraries we check for below, so use a different variable. > # --interran@uluru.Stanford.EDU, kb@cs.umb.edu. > echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6 >-echo "configure:4587: checking for IceConnectionNumber in -lICE" >&5 >+echo "configure:4490: checking for IceConnectionNumber in -lICE" >&5 > ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -4591,7 +4494,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lICE $X_EXTRA_LIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 4595 "configure" >+#line 4498 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -4602,7 +4505,7 @@ > IceConnectionNumber() > ; return 0; } > EOF >-if { (eval echo configure:4606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -4865,7 +4768,7 @@ > MKSHLIB_UNFORCE_ALL= > if test "$GNU_CC"; then > echo $ac_n "checking whether ld has archive extraction flags""... $ac_c" 1>&6 >-echo "configure:4869: checking whether ld has archive extraction flags" >&5 >+echo "configure:4772: checking whether ld has archive extraction flags" >&5 > if eval "test \"`echo '$''{'ac_cv_mkshlib_force_and_unforce'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -4882,14 +4785,14 @@ > LDFLAGS=$force > LIBS=$unforce > cat > conftest.$ac_ext <<EOF >-#line 4886 "configure" >+#line 4789 "configure" > #include "confdefs.h" > > int main() { > > ; return 0; } > EOF >-if { (eval echo configure:4893: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:4796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > ac_cv_mkshlib_force_and_unforce=$line; break > else >@@ -4922,17 +4825,17 @@ > cross_compiling=$ac_cv_prog_cc_cross > > echo $ac_n "checking for 64-bit OS""... $ac_c" 1>&6 >-echo "configure:4926: checking for 64-bit OS" >&5 >+echo "configure:4829: checking for 64-bit OS" >&5 > if test "$cross_compiling" = yes; then > result="maybe" > else > cat > conftest.$ac_ext <<EOF >-#line 4931 "configure" >+#line 4834 "configure" > #include "confdefs.h" > int main () { > if (sizeof(long) == 8) { return 0; } return 1; } > EOF >-if { (eval echo configure:4936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:4839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > result="yes" > else >@@ -5068,9 +4971,9 @@ > cross_compiling=$ac_cv_prog_cxx_cross > > echo $ac_n "checking for VisualAge C++ compiler version >= 5.0.2.0""... $ac_c" 1>&6 >-echo "configure:5072: checking for VisualAge C++ compiler version >= 5.0.2.0" >&5 >+echo "configure:4975: checking for VisualAge C++ compiler version >= 5.0.2.0" >&5 > cat > conftest.$ac_ext <<EOF >-#line 5074 "configure" >+#line 4977 "configure" > #include "confdefs.h" > > int main() { >@@ -5079,7 +4982,7 @@ > #endif > ; return 0; } > EOF >-if { (eval echo configure:5083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:4986: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > _BAD_COMPILER= > else >@@ -5114,17 +5017,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:5118: checking for $ac_hdr" >&5 >+echo "configure:5021: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 5123 "configure" >+#line 5026 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:5128: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:5031: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -5164,7 +5067,7 @@ > TK_LIBS='-lbe -lroot' > LIBS="$LIBS -lbe" > echo $ac_n "checking for main in -lbind""... $ac_c" 1>&6 >-echo "configure:5168: checking for main in -lbind" >&5 >+echo "configure:5071: checking for main in -lbind" >&5 > ac_lib_var=`echo bind'_'main | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -5172,14 +5075,14 @@ > ac_save_LIBS="$LIBS" > LIBS="-lbind $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 5176 "configure" >+#line 5079 "configure" > #include "confdefs.h" > > int main() { > main() > ; return 0; } > EOF >-if { (eval echo configure:5183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:5086: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -5357,8 +5260,7 @@ > MOZ_ENABLE_OLD_ABI_COMPAT_WRAPPERS=1 > ;; > mips*) >- CFLAGS="$CFLAGS -Wa,-xgot" >- CXXFLAGS="$CXXFLAGS -Wa,-xgot" >+ MOZ_DEBUG_FLAGS="-g" # We want inlining > ;; > esac > ;; >@@ -5923,9 +5825,9 @@ > CC_VERSION=`$CC -V 2>&1 | grep '^cc:' 2>/dev/null | $AWK -F\: '{ print $2 }'` > CXX_VERSION=`$CXX -V 2>&1 | grep '^CC:' 2>/dev/null | $AWK -F\: '{ print $2 }'` > echo $ac_n "checking for Forte compiler version >= WS6U2""... $ac_c" 1>&6 >-echo "configure:5927: checking for Forte compiler version >= WS6U2" >&5 >+echo "configure:5829: checking for Forte compiler version >= WS6U2" >&5 > cat > conftest.$ac_ext <<EOF >-#line 5929 "configure" >+#line 5831 "configure" > #include "confdefs.h" > > int main() { >@@ -5934,7 +5836,7 @@ > #endif > ; return 0; } > EOF >-if { (eval echo configure:5938: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:5840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > _BAD_COMPILER= > else >@@ -6056,7 +5958,7 @@ > ;; > *-darwin*) > echo $ac_n "checking for -exported_symbols_list option to ld""... $ac_c" 1>&6 >-echo "configure:6060: checking for -exported_symbols_list option to ld" >&5 >+echo "configure:5962: checking for -exported_symbols_list option to ld" >&5 > if eval "test \"`echo '$''{'ac_cv_exported_symbols_list'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -6092,12 +5994,12 @@ > cross_compiling=$ac_cv_prog_cc_cross > > echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 >-echo "configure:6096: checking for ANSI C header files" >&5 >+echo "configure:5998: checking for ANSI C header files" >&5 > if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6101 "configure" >+#line 6003 "configure" > #include "confdefs.h" > #include <stdlib.h> > #include <stdarg.h> >@@ -6105,7 +6007,7 @@ > #include <float.h> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:6109: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:6011: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -6122,7 +6024,7 @@ > if test $ac_cv_header_stdc = yes; then > # SunOS 4.x string.h does not declare mem*, contrary to ANSI. > cat > conftest.$ac_ext <<EOF >-#line 6126 "configure" >+#line 6028 "configure" > #include "confdefs.h" > #include <string.h> > EOF >@@ -6140,7 +6042,7 @@ > if test $ac_cv_header_stdc = yes; then > # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. > cat > conftest.$ac_ext <<EOF >-#line 6144 "configure" >+#line 6046 "configure" > #include "confdefs.h" > #include <stdlib.h> > EOF >@@ -6161,7 +6063,7 @@ > : > else > cat > conftest.$ac_ext <<EOF >-#line 6165 "configure" >+#line 6067 "configure" > #include "confdefs.h" > #include <ctype.h> > #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') >@@ -6172,7 +6074,7 @@ > exit (0); } > > EOF >-if { (eval echo configure:6176: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:6078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > : > else >@@ -6196,12 +6098,12 @@ > fi > > echo $ac_n "checking for working const""... $ac_c" 1>&6 >-echo "configure:6200: checking for working const" >&5 >+echo "configure:6102: checking for working const" >&5 > if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6205 "configure" >+#line 6107 "configure" > #include "confdefs.h" > > int main() { >@@ -6250,7 +6152,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:6254: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6156: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_c_const=yes > else >@@ -6271,12 +6173,12 @@ > fi > > echo $ac_n "checking for mode_t""... $ac_c" 1>&6 >-echo "configure:6275: checking for mode_t" >&5 >+echo "configure:6177: checking for mode_t" >&5 > if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6280 "configure" >+#line 6182 "configure" > #include "confdefs.h" > #include <sys/types.h> > #if STDC_HEADERS >@@ -6304,12 +6206,12 @@ > fi > > echo $ac_n "checking for off_t""... $ac_c" 1>&6 >-echo "configure:6308: checking for off_t" >&5 >+echo "configure:6210: checking for off_t" >&5 > if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6313 "configure" >+#line 6215 "configure" > #include "confdefs.h" > #include <sys/types.h> > #if STDC_HEADERS >@@ -6337,12 +6239,12 @@ > fi > > echo $ac_n "checking for pid_t""... $ac_c" 1>&6 >-echo "configure:6341: checking for pid_t" >&5 >+echo "configure:6243: checking for pid_t" >&5 > if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6346 "configure" >+#line 6248 "configure" > #include "confdefs.h" > #include <sys/types.h> > #if STDC_HEADERS >@@ -6370,12 +6272,12 @@ > fi > > echo $ac_n "checking for size_t""... $ac_c" 1>&6 >-echo "configure:6374: checking for size_t" >&5 >+echo "configure:6276: checking for size_t" >&5 > if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6379 "configure" >+#line 6281 "configure" > #include "confdefs.h" > #include <sys/types.h> > #if STDC_HEADERS >@@ -6403,12 +6305,12 @@ > fi > > echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 >-echo "configure:6407: checking for uid_t in sys/types.h" >&5 >+echo "configure:6309: checking for uid_t in sys/types.h" >&5 > if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6412 "configure" >+#line 6314 "configure" > #include "confdefs.h" > #include <sys/types.h> > EOF >@@ -6437,12 +6339,12 @@ > fi > > echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 >-echo "configure:6441: checking for st_blksize in struct stat" >&5 >+echo "configure:6343: checking for st_blksize in struct stat" >&5 > if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6446 "configure" >+#line 6348 "configure" > #include "confdefs.h" > #include <sys/types.h> > #include <sys/stat.h> >@@ -6450,7 +6352,7 @@ > struct stat s; s.st_blksize; > ; return 0; } > EOF >-if { (eval echo configure:6454: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6356: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_struct_st_blksize=yes > else >@@ -6471,12 +6373,12 @@ > fi > > echo $ac_n "checking for siginfo_t""... $ac_c" 1>&6 >-echo "configure:6475: checking for siginfo_t" >&5 >+echo "configure:6377: checking for siginfo_t" >&5 > if eval "test \"`echo '$''{'ac_cv_siginfo_t'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6480 "configure" >+#line 6382 "configure" > #include "confdefs.h" > #define _POSIX_C_SOURCE 199506L > #include <signal.h> >@@ -6484,7 +6386,7 @@ > siginfo_t* info; > ; return 0; } > EOF >-if { (eval echo configure:6488: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6390: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_siginfo_t=true > else >@@ -6518,12 +6420,12 @@ > fi > > echo $ac_n "checking for int16_t""... $ac_c" 1>&6 >-echo "configure:6522: checking for int16_t" >&5 >+echo "configure:6424: checking for int16_t" >&5 > if eval "test \"`echo '$''{'ac_cv_int16_t'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6527 "configure" >+#line 6429 "configure" > #include "confdefs.h" > #include <stdio.h> > #include <sys/types.h> >@@ -6531,7 +6433,7 @@ > int16_t foo = 0; > ; return 0; } > EOF >-if { (eval echo configure:6535: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6437: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_int16_t=true > else >@@ -6553,12 +6455,12 @@ > echo "$ac_t""no" 1>&6 > fi > echo $ac_n "checking for int32_t""... $ac_c" 1>&6 >-echo "configure:6557: checking for int32_t" >&5 >+echo "configure:6459: checking for int32_t" >&5 > if eval "test \"`echo '$''{'ac_cv_int32_t'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6562 "configure" >+#line 6464 "configure" > #include "confdefs.h" > #include <stdio.h> > #include <sys/types.h> >@@ -6566,7 +6468,7 @@ > int32_t foo = 0; > ; return 0; } > EOF >-if { (eval echo configure:6570: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6472: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_int32_t=true > else >@@ -6588,12 +6490,12 @@ > echo "$ac_t""no" 1>&6 > fi > echo $ac_n "checking for int64_t""... $ac_c" 1>&6 >-echo "configure:6592: checking for int64_t" >&5 >+echo "configure:6494: checking for int64_t" >&5 > if eval "test \"`echo '$''{'ac_cv_int64_t'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6597 "configure" >+#line 6499 "configure" > #include "confdefs.h" > #include <stdio.h> > #include <sys/types.h> >@@ -6601,7 +6503,7 @@ > int64_t foo = 0; > ; return 0; } > EOF >-if { (eval echo configure:6605: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6507: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_int64_t=true > else >@@ -6623,12 +6525,12 @@ > echo "$ac_t""no" 1>&6 > fi > echo $ac_n "checking for int64""... $ac_c" 1>&6 >-echo "configure:6627: checking for int64" >&5 >+echo "configure:6529: checking for int64" >&5 > if eval "test \"`echo '$''{'ac_cv_int64'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6632 "configure" >+#line 6534 "configure" > #include "confdefs.h" > #include <stdio.h> > #include <sys/types.h> >@@ -6636,7 +6538,7 @@ > int64 foo = 0; > ; return 0; } > EOF >-if { (eval echo configure:6640: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6542: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_int64=true > else >@@ -6658,12 +6560,12 @@ > echo "$ac_t""no" 1>&6 > fi > echo $ac_n "checking for uint""... $ac_c" 1>&6 >-echo "configure:6662: checking for uint" >&5 >+echo "configure:6564: checking for uint" >&5 > if eval "test \"`echo '$''{'ac_cv_uint'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6667 "configure" >+#line 6569 "configure" > #include "confdefs.h" > #include <stdio.h> > #include <sys/types.h> >@@ -6671,7 +6573,7 @@ > uint foo = 0; > ; return 0; } > EOF >-if { (eval echo configure:6675: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6577: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_uint=true > else >@@ -6693,12 +6595,12 @@ > echo "$ac_t""no" 1>&6 > fi > echo $ac_n "checking for uint_t""... $ac_c" 1>&6 >-echo "configure:6697: checking for uint_t" >&5 >+echo "configure:6599: checking for uint_t" >&5 > if eval "test \"`echo '$''{'ac_cv_uint_t'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6702 "configure" >+#line 6604 "configure" > #include "confdefs.h" > #include <stdio.h> > #include <sys/types.h> >@@ -6706,7 +6608,7 @@ > uint_t foo = 0; > ; return 0; } > EOF >-if { (eval echo configure:6710: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6612: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_uint_t=true > else >@@ -6728,12 +6630,12 @@ > echo "$ac_t""no" 1>&6 > fi > echo $ac_n "checking for uint16_t""... $ac_c" 1>&6 >-echo "configure:6732: checking for uint16_t" >&5 >+echo "configure:6634: checking for uint16_t" >&5 > if eval "test \"`echo '$''{'ac_cv_uint16_t'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6737 "configure" >+#line 6639 "configure" > #include "confdefs.h" > #include <stdio.h> > #include <sys/types.h> >@@ -6741,7 +6643,7 @@ > uint16_t foo = 0; > ; return 0; } > EOF >-if { (eval echo configure:6745: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6647: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_uint16_t=true > else >@@ -6772,12 +6674,12 @@ > > > echo $ac_n "checking for uname.domainname""... $ac_c" 1>&6 >-echo "configure:6776: checking for uname.domainname" >&5 >+echo "configure:6678: checking for uname.domainname" >&5 > if eval "test \"`echo '$''{'ac_cv_have_uname_domainname_field'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6781 "configure" >+#line 6683 "configure" > #include "confdefs.h" > #include <sys/utsname.h> > int main() { >@@ -6785,7 +6687,7 @@ > (void)uname(res); if (res != 0) { domain = res->domainname; } > ; return 0; } > EOF >-if { (eval echo configure:6789: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6691: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_have_uname_domainname_field=true > else >@@ -6809,12 +6711,12 @@ > fi > > echo $ac_n "checking for uname.__domainname""... $ac_c" 1>&6 >-echo "configure:6813: checking for uname.__domainname" >&5 >+echo "configure:6715: checking for uname.__domainname" >&5 > if eval "test \"`echo '$''{'ac_cv_have_uname_us_domainname_field'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 6818 "configure" >+#line 6720 "configure" > #include "confdefs.h" > #include <sys/utsname.h> > int main() { >@@ -6822,7 +6724,7 @@ > (void)uname(res); if (res != 0) { domain = res->__domainname; } > ; return 0; } > EOF >-if { (eval echo configure:6826: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6728: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_have_uname_us_domainname_field=true > else >@@ -6855,7 +6757,7 @@ > > > echo $ac_n "checking for usable wchar_t (2 bytes, unsigned)""... $ac_c" 1>&6 >-echo "configure:6859: checking for usable wchar_t (2 bytes, unsigned)" >&5 >+echo "configure:6761: checking for usable wchar_t (2 bytes, unsigned)" >&5 > if eval "test \"`echo '$''{'ac_cv_have_usable_wchar'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -6863,14 +6765,14 @@ > ac_cv_have_usable_wchar="maybe" > else > cat > conftest.$ac_ext <<EOF >-#line 6867 "configure" >+#line 6769 "configure" > #include "confdefs.h" > #include <stddef.h> > int main () { > return (sizeof(wchar_t) != 2) || > (wchar_t)-1 < (wchar_t) 0 ; } > EOF >-if { (eval echo configure:6874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:6776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > ac_cv_have_usable_wchar="yes" > else >@@ -6905,7 +6807,7 @@ > CXXFLAGS="$CXXFLAGS -fshort-wchar" > > echo $ac_n "checking for compiler -fshort-wchar option""... $ac_c" 1>&6 >-echo "configure:6909: checking for compiler -fshort-wchar option" >&5 >+echo "configure:6811: checking for compiler -fshort-wchar option" >&5 > if eval "test \"`echo '$''{'ac_cv_have_usable_wchar_option'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -6913,14 +6815,17 @@ > ac_cv_have_usable_wchar_option="maybe" > else > cat > conftest.$ac_ext <<EOF >-#line 6917 "configure" >+#line 6819 "configure" > #include "confdefs.h" >+#ifdef __cplusplus >+extern "C" void exit(int); >+#endif > #include <stddef.h> > int main () { > return (sizeof(wchar_t) != 2) || > (wchar_t)-1 < (wchar_t) 0 ; } > EOF >-if { (eval echo configure:6924: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:6829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > ac_cv_have_usable_wchar_option="yes" > else >@@ -6956,7 +6861,7 @@ > > if test "$GNU_CC"; then > echo $ac_n "checking for .hidden assembler directive""... $ac_c" 1>&6 >-echo "configure:6960: checking for .hidden assembler directive" >&5 >+echo "configure:6865: checking for .hidden assembler directive" >&5 > if eval "test \"`echo '$''{'ac_cv_asm_hidden_directive'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -6964,7 +6869,7 @@ > .hidden foo > foo: > EOF >- if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:6968: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then >+ if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:6873: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then > ac_cv_asm_hidden_directive=yes > else > ac_cv_asm_hidden_directive=no >@@ -6976,7 +6881,7 @@ > > if test $ac_cv_asm_hidden_directive = yes; then > echo $ac_n "checking whether __attribute__((visibility())) is supported""... $ac_c" 1>&6 >-echo "configure:6980: checking whether __attribute__((visibility())) is supported" >&5 >+echo "configure:6885: checking whether __attribute__((visibility())) is supported" >&5 > if eval "test \"`echo '$''{'ac_cv_visibility_attribute'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -7008,12 +6913,12 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 >-echo "configure:7012: checking for $ac_hdr that defines DIR" >&5 >+echo "configure:6917: checking for $ac_hdr that defines DIR" >&5 > if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 7017 "configure" >+#line 6922 "configure" > #include "confdefs.h" > #include <sys/types.h> > #include <$ac_hdr> >@@ -7021,7 +6926,7 @@ > DIR *dirp = 0; > ; return 0; } > EOF >-if { (eval echo configure:7025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:6930: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > eval "ac_cv_header_dirent_$ac_safe=yes" > else >@@ -7046,7 +6951,7 @@ > # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. > if test $ac_header_dirent = dirent.h; then > echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 >-echo "configure:7050: checking for opendir in -ldir" >&5 >+echo "configure:6955: checking for opendir in -ldir" >&5 > ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -7054,7 +6959,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-ldir $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 7058 "configure" >+#line 6963 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -7065,7 +6970,7 @@ > opendir() > ; return 0; } > EOF >-if { (eval echo configure:7069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:6974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -7087,7 +6992,7 @@ > > else > echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 >-echo "configure:7091: checking for opendir in -lx" >&5 >+echo "configure:6996: checking for opendir in -lx" >&5 > ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -7095,7 +7000,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lx $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 7099 "configure" >+#line 7004 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -7106,7 +7011,7 @@ > opendir() > ; return 0; } > EOF >-if { (eval echo configure:7110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -7138,17 +7043,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:7142: checking for $ac_hdr" >&5 >+echo "configure:7047: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 7147 "configure" >+#line 7052 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:7152: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:7057: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -7178,17 +7083,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:7182: checking for $ac_hdr" >&5 >+echo "configure:7087: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 7187 "configure" >+#line 7092 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:7192: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:7097: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -7218,17 +7123,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:7222: checking for $ac_hdr" >&5 >+echo "configure:7127: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 7227 "configure" >+#line 7132 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:7232: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:7137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -7258,17 +7163,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:7262: checking for $ac_hdr" >&5 >+echo "configure:7167: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 7267 "configure" >+#line 7172 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:7272: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:7177: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -7298,17 +7203,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:7302: checking for $ac_hdr" >&5 >+echo "configure:7207: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 7307 "configure" >+#line 7212 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:7312: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:7217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -7339,17 +7244,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:7343: checking for $ac_hdr" >&5 >+echo "configure:7248: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 7348 "configure" >+#line 7253 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:7353: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:7258: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -7380,17 +7285,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:7384: checking for $ac_hdr" >&5 >+echo "configure:7289: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 7389 "configure" >+#line 7294 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:7394: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:7299: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -7427,17 +7332,17 @@ > NEW_H=new.h > ac_safe=`echo "new" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for new""... $ac_c" 1>&6 >-echo "configure:7431: checking for new" >&5 >+echo "configure:7336: checking for new" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 7436 "configure" >+#line 7341 "configure" > #include "confdefs.h" > #include <new> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:7441: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:7346: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -7478,17 +7383,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:7482: checking for $ac_hdr" >&5 >+echo "configure:7387: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 7487 "configure" >+#line 7392 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:7492: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:7397: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -7522,7 +7427,7 @@ > ;; > *) > echo $ac_n "checking for gethostbyname_r in -lc_r""... $ac_c" 1>&6 >-echo "configure:7526: checking for gethostbyname_r in -lc_r" >&5 >+echo "configure:7431: checking for gethostbyname_r in -lc_r" >&5 > ac_lib_var=`echo c_r'_'gethostbyname_r | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -7530,7 +7435,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lc_r $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 7534 "configure" >+#line 7439 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -7541,7 +7446,7 @@ > gethostbyname_r() > ; return 0; } > EOF >-if { (eval echo configure:7545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -7571,7 +7476,7 @@ > ;; > esac > echo $ac_n "checking for atan in -lm""... $ac_c" 1>&6 >-echo "configure:7575: checking for atan in -lm" >&5 >+echo "configure:7480: checking for atan in -lm" >&5 > ac_lib_var=`echo m'_'atan | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -7579,7 +7484,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lm $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 7583 "configure" >+#line 7488 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -7590,7 +7495,7 @@ > atan() > ; return 0; } > EOF >-if { (eval echo configure:7594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -7624,7 +7529,7 @@ > ;; > *) > echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 >-echo "configure:7628: checking for dlopen in -ldl" >&5 >+echo "configure:7533: checking for dlopen in -ldl" >&5 > ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -7632,7 +7537,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-ldl $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 7636 "configure" >+#line 7541 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -7643,7 +7548,7 @@ > dlopen() > ; return 0; } > EOF >-if { (eval echo configure:7647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -7660,17 +7565,17 @@ > echo "$ac_t""yes" 1>&6 > ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6 >-echo "configure:7664: checking for dlfcn.h" >&5 >+echo "configure:7569: checking for dlfcn.h" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 7669 "configure" >+#line 7574 "configure" > #include "confdefs.h" > #include <dlfcn.h> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:7674: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:7579: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -7706,7 +7611,7 @@ > case $target in > *-aix*) > echo $ac_n "checking for demangle in -lC_r""... $ac_c" 1>&6 >-echo "configure:7710: checking for demangle in -lC_r" >&5 >+echo "configure:7615: checking for demangle in -lC_r" >&5 > ac_lib_var=`echo C_r'_'demangle | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -7714,7 +7619,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lC_r $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 7718 "configure" >+#line 7623 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -7725,7 +7630,7 @@ > demangle() > ; return 0; } > EOF >-if { (eval echo configure:7729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -7755,7 +7660,7 @@ > ;; > *) > echo $ac_n "checking for demangle in -lC""... $ac_c" 1>&6 >-echo "configure:7759: checking for demangle in -lC" >&5 >+echo "configure:7664: checking for demangle in -lC" >&5 > ac_lib_var=`echo C'_'demangle | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -7763,7 +7668,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lC $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 7767 "configure" >+#line 7672 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -7774,7 +7679,7 @@ > demangle() > ; return 0; } > EOF >-if { (eval echo configure:7778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -7805,7 +7710,7 @@ > esac > fi > echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6 >-echo "configure:7809: checking for socket in -lsocket" >&5 >+echo "configure:7714: checking for socket in -lsocket" >&5 > ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -7813,7 +7718,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lsocket $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 7817 "configure" >+#line 7722 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -7824,7 +7729,7 @@ > socket() > ; return 0; } > EOF >-if { (eval echo configure:7828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -7869,7 +7774,7 @@ > _SAVE_LDFLAGS="$LDFLAGS" > LDFLAGS="$XLDFLAGS $LDFLAGS" > echo $ac_n "checking for XDrawLines in -lX11""... $ac_c" 1>&6 >-echo "configure:7873: checking for XDrawLines in -lX11" >&5 >+echo "configure:7778: checking for XDrawLines in -lX11" >&5 > ac_lib_var=`echo X11'_'XDrawLines | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -7877,7 +7782,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lX11 $XLIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 7881 "configure" >+#line 7786 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -7888,7 +7793,7 @@ > XDrawLines() > ; return 0; } > EOF >-if { (eval echo configure:7892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -7910,7 +7815,7 @@ > fi > > echo $ac_n "checking for XextAddDisplay in -lXext""... $ac_c" 1>&6 >-echo "configure:7914: checking for XextAddDisplay in -lXext" >&5 >+echo "configure:7819: checking for XextAddDisplay in -lXext" >&5 > ac_lib_var=`echo Xext'_'XextAddDisplay | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -7918,7 +7823,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lXext $XLIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 7922 "configure" >+#line 7827 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -7929,7 +7834,7 @@ > XextAddDisplay() > ; return 0; } > EOF >-if { (eval echo configure:7933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -7953,7 +7858,7 @@ > > > echo $ac_n "checking for XtFree in -lXt""... $ac_c" 1>&6 >-echo "configure:7957: checking for XtFree in -lXt" >&5 >+echo "configure:7862: checking for XtFree in -lXt" >&5 > ac_lib_var=`echo Xt'_'XtFree | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -7961,7 +7866,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lXt $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 7965 "configure" >+#line 7870 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -7972,7 +7877,7 @@ > XtFree() > ; return 0; } > EOF >-if { (eval echo configure:7976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -7993,7 +7898,7 @@ > > unset ac_cv_lib_Xt_XtFree > echo $ac_n "checking for IceFlush in -lICE""... $ac_c" 1>&6 >-echo "configure:7997: checking for IceFlush in -lICE" >&5 >+echo "configure:7902: checking for IceFlush in -lICE" >&5 > ac_lib_var=`echo ICE'_'IceFlush | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -8001,7 +7906,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lICE $XT_LIBS $XLIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 8005 "configure" >+#line 7910 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -8012,7 +7917,7 @@ > IceFlush() > ; return 0; } > EOF >-if { (eval echo configure:8016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -8033,7 +7938,7 @@ > fi > > echo $ac_n "checking for SmcCloseConnection in -lSM""... $ac_c" 1>&6 >-echo "configure:8037: checking for SmcCloseConnection in -lSM" >&5 >+echo "configure:7942: checking for SmcCloseConnection in -lSM" >&5 > ac_lib_var=`echo SM'_'SmcCloseConnection | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -8041,7 +7946,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lSM $XT_LIBS $XLIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 8045 "configure" >+#line 7950 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -8052,7 +7957,7 @@ > SmcCloseConnection() > ; return 0; } > EOF >-if { (eval echo configure:8056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:7961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -8073,7 +7978,7 @@ > fi > > echo $ac_n "checking for XtFree in -lXt""... $ac_c" 1>&6 >-echo "configure:8077: checking for XtFree in -lXt" >&5 >+echo "configure:7982: checking for XtFree in -lXt" >&5 > ac_lib_var=`echo Xt'_'XtFree | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -8081,7 +7986,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lXt $X_PRE_LIBS $XT_LIBS $XLIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 8085 "configure" >+#line 7990 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -8092,7 +7997,7 @@ > XtFree() > ; return 0; } > EOF >-if { (eval echo configure:8096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:8001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -8126,7 +8031,7 @@ > esac > > echo $ac_n "checking for XineramaIsActive in -lXinerama""... $ac_c" 1>&6 >-echo "configure:8130: checking for XineramaIsActive in -lXinerama" >&5 >+echo "configure:8035: checking for XineramaIsActive in -lXinerama" >&5 > ac_lib_var=`echo Xinerama'_'XineramaIsActive | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -8134,7 +8039,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lXinerama $XLIBS $XEXT_LIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 8138 "configure" >+#line 8043 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -8145,7 +8050,7 @@ > XineramaIsActive() > ; return 0; } > EOF >-if { (eval echo configure:8149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:8054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -8167,17 +8072,17 @@ > > ac_safe=`echo "X11/extensions/Xinerama.h" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for X11/extensions/Xinerama.h""... $ac_c" 1>&6 >-echo "configure:8171: checking for X11/extensions/Xinerama.h" >&5 >+echo "configure:8076: checking for X11/extensions/Xinerama.h" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 8176 "configure" >+#line 8081 "configure" > #include "confdefs.h" > #include <X11/extensions/Xinerama.h> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:8181: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:8086: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -8200,7 +8105,7 @@ > > > echo $ac_n "checking for XShmCreateImage in -lXext""... $ac_c" 1>&6 >-echo "configure:8204: checking for XShmCreateImage in -lXext" >&5 >+echo "configure:8109: checking for XShmCreateImage in -lXext" >&5 > ac_lib_var=`echo Xext'_'XShmCreateImage | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -8208,7 +8113,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lXext $XLIBS $XEXT_LIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 8212 "configure" >+#line 8117 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -8219,7 +8124,7 @@ > XShmCreateImage() > ; return 0; } > EOF >-if { (eval echo configure:8223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:8128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -8241,17 +8146,17 @@ > > ac_safe=`echo "X11/extensions/XShm.h" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for X11/extensions/XShm.h""... $ac_c" 1>&6 >-echo "configure:8245: checking for X11/extensions/XShm.h" >&5 >+echo "configure:8150: checking for X11/extensions/XShm.h" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 8250 "configure" >+#line 8155 "configure" > #include "confdefs.h" > #include <X11/extensions/XShm.h> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:8255: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:8160: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -8281,7 +8186,7 @@ > fi > > echo $ac_n "checking for XieFloGeometry in -lXIE""... $ac_c" 1>&6 >-echo "configure:8285: checking for XieFloGeometry in -lXIE" >&5 >+echo "configure:8190: checking for XieFloGeometry in -lXIE" >&5 > ac_lib_var=`echo XIE'_'XieFloGeometry | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -8289,7 +8194,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lXIE $XLIBS $XEXT_LIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 8293 "configure" >+#line 8198 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -8300,7 +8205,7 @@ > XieFloGeometry() > ; return 0; } > EOF >-if { (eval echo configure:8304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:8209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -8322,17 +8227,17 @@ > > ac_safe=`echo "X11/extensions/XIElib.h" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for X11/extensions/XIElib.h""... $ac_c" 1>&6 >-echo "configure:8326: checking for X11/extensions/XIElib.h" >&5 >+echo "configure:8231: checking for X11/extensions/XIElib.h" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 8331 "configure" >+#line 8236 "configure" > #include "confdefs.h" > #include <X11/extensions/XIElib.h> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:8336: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:8241: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -8406,7 +8311,7 @@ > # Extract the first word of "freetype-config", so it can be a program name with args. > set dummy freetype-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:8410: checking for $ac_word" >&5 >+echo "configure:8315: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_FT2_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -8442,7 +8347,7 @@ > > min_ft_version=6.1.0 > echo $ac_n "checking for FreeType - version >= $min_ft_version""... $ac_c" 1>&6 >-echo "configure:8446: checking for FreeType - version >= $min_ft_version" >&5 >+echo "configure:8351: checking for FreeType - version >= $min_ft_version" >&5 > no_ft="" > if test "$FT2_CONFIG" = "no" ; then > no_ft=yes >@@ -8490,7 +8395,7 @@ > echo $ac_n "cross compiling; assumed OK... $ac_c" > else > cat > conftest.$ac_ext <<EOF >-#line 8494 "configure" >+#line 8399 "configure" > #include "confdefs.h" > > #include <ft2build.h> >@@ -8516,7 +8421,7 @@ > } > > EOF >-if { (eval echo configure:8520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:8425: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > : > else >@@ -8568,7 +8473,7 @@ > > > echo $ac_n "checking for pthread_create in -lpthreads""... $ac_c" 1>&6 >-echo "configure:8572: checking for pthread_create in -lpthreads" >&5 >+echo "configure:8477: checking for pthread_create in -lpthreads" >&5 > echo " > #include <pthread.h> > void *foo(void *v) { int a = 1; } >@@ -8590,7 +8495,7 @@ > echo "$ac_t""no" 1>&6 > > echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6 >-echo "configure:8594: checking for pthread_create in -lpthread" >&5 >+echo "configure:8499: checking for pthread_create in -lpthread" >&5 > echo " > #include <pthread.h> > void *foo(void *v) { int a = 1; } >@@ -8612,7 +8517,7 @@ > echo "$ac_t""no" 1>&6 > > echo $ac_n "checking for pthread_create in -lc_r""... $ac_c" 1>&6 >-echo "configure:8616: checking for pthread_create in -lc_r" >&5 >+echo "configure:8521: checking for pthread_create in -lc_r" >&5 > echo " > #include <pthread.h> > void *foo(void *v) { int a = 1; } >@@ -8634,7 +8539,7 @@ > echo "$ac_t""no" 1>&6 > > echo $ac_n "checking for pthread_create in -lc""... $ac_c" 1>&6 >-echo "configure:8638: checking for pthread_create in -lc" >&5 >+echo "configure:8543: checking for pthread_create in -lc" >&5 > echo " > #include <pthread.h> > void *foo(void *v) { int a = 1; } >@@ -8690,7 +8595,7 @@ > rm -f conftest* > ac_cv_have_dash_pthread=no > echo $ac_n "checking whether ${CC-cc} accepts -pthread""... $ac_c" 1>&6 >-echo "configure:8694: checking whether ${CC-cc} accepts -pthread" >&5 >+echo "configure:8599: checking whether ${CC-cc} accepts -pthread" >&5 > echo 'int main() { return 0; }' | cat > conftest.c > ${CC-cc} -pthread -o conftest conftest.c > conftest.out 2>&1 > if test $? -eq 0; then >@@ -8713,7 +8618,7 @@ > ac_cv_have_dash_pthreads=no > if test "$ac_cv_have_dash_pthread" = "no"; then > echo $ac_n "checking whether ${CC-cc} accepts -pthreads""... $ac_c" 1>&6 >-echo "configure:8717: checking whether ${CC-cc} accepts -pthreads" >&5 >+echo "configure:8622: checking whether ${CC-cc} accepts -pthreads" >&5 > echo 'int main() { return 0; }' | cat > conftest.c > ${CC-cc} -pthreads -o conftest conftest.c > conftest.out 2>&1 > if test $? -eq 0; then >@@ -8844,7 +8749,7 @@ > > > echo $ac_n "checking whether mmap() sees write()s""... $ac_c" 1>&6 >-echo "configure:8848: checking whether mmap() sees write()s" >&5 >+echo "configure:8753: checking whether mmap() sees write()s" >&5 > > > mmap_test_prog=' >@@ -8883,11 +8788,11 @@ > result="yes" > else > cat > conftest.$ac_ext <<EOF >-#line 8887 "configure" >+#line 8792 "configure" > #include "confdefs.h" > $mmap_test_prog > EOF >-if { (eval echo configure:8891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:8796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > result="yes" > else >@@ -8912,13 +8817,13 @@ > > if test $ac_cv_prog_gcc = yes; then > echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 >-echo "configure:8916: checking whether ${CC-cc} needs -traditional" >&5 >+echo "configure:8821: checking whether ${CC-cc} needs -traditional" >&5 > if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > ac_pattern="Autoconf.*'x'" > cat > conftest.$ac_ext <<EOF >-#line 8922 "configure" >+#line 8827 "configure" > #include "confdefs.h" > #include <sgtty.h> > Autoconf TIOCGETP >@@ -8936,7 +8841,7 @@ > > if test $ac_cv_prog_gcc_traditional = no; then > cat > conftest.$ac_ext <<EOF >-#line 8940 "configure" >+#line 8845 "configure" > #include "confdefs.h" > #include <termio.h> > Autoconf TCGETA >@@ -8958,7 +8863,7 @@ > fi > > echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 >-echo "configure:8962: checking for 8-bit clean memcmp" >&5 >+echo "configure:8867: checking for 8-bit clean memcmp" >&5 > if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -8966,7 +8871,7 @@ > ac_cv_func_memcmp_clean=no > else > cat > conftest.$ac_ext <<EOF >-#line 8970 "configure" >+#line 8875 "configure" > #include "confdefs.h" > > main() >@@ -8976,7 +8881,7 @@ > } > > EOF >-if { (eval echo configure:8980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:8885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > ac_cv_func_memcmp_clean=yes > else >@@ -8996,12 +8901,12 @@ > for ac_func in random strerror lchown fchmod snprintf statvfs memmove rint > do > echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 >-echo "configure:9000: checking for $ac_func" >&5 >+echo "configure:8905: checking for $ac_func" >&5 > if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9005 "configure" >+#line 8910 "configure" > #include "confdefs.h" > /* System header to define __stub macros and hopefully few prototypes, > which can conflict with char $ac_func(); below. */ >@@ -9024,7 +8929,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:9028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:8933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_func_$ac_func=yes" > else >@@ -9051,12 +8956,12 @@ > for ac_func in flockfile getpagesize > do > echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 >-echo "configure:9055: checking for $ac_func" >&5 >+echo "configure:8960: checking for $ac_func" >&5 > if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9060 "configure" >+#line 8965 "configure" > #include "confdefs.h" > /* System header to define __stub macros and hopefully few prototypes, > which can conflict with char $ac_func(); below. */ >@@ -9079,7 +8984,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:9083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:8988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_func_$ac_func=yes" > else >@@ -9108,12 +9013,12 @@ > for ac_func in localtime_r strtok_r > do > echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 >-echo "configure:9112: checking for $ac_func" >&5 >+echo "configure:9017: checking for $ac_func" >&5 > if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9117 "configure" >+#line 9022 "configure" > #include "confdefs.h" > /* System header to define __stub macros and hopefully few prototypes, > which can conflict with char $ac_func(); below. */ >@@ -9136,7 +9041,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:9140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:9045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_func_$ac_func=yes" > else >@@ -9172,19 +9077,19 @@ > cross_compiling=$ac_cv_prog_cxx_cross > > echo $ac_n "checking for wcrtomb""... $ac_c" 1>&6 >-echo "configure:9176: checking for wcrtomb" >&5 >+echo "configure:9081: checking for wcrtomb" >&5 > if eval "test \"`echo '$''{'ac_cv_have_wcrtomb'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9181 "configure" >+#line 9086 "configure" > #include "confdefs.h" > #include <wchar.h> > int main() { > mbstate_t ps={0};wcrtomb(0,'f',&ps); > ; return 0; } > EOF >-if { (eval echo configure:9188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:9093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > ac_cv_have_wcrtomb="yes" > else >@@ -9204,19 +9109,19 @@ > > fi > echo $ac_n "checking for mbrtowc""... $ac_c" 1>&6 >-echo "configure:9208: checking for mbrtowc" >&5 >+echo "configure:9113: checking for mbrtowc" >&5 > if eval "test \"`echo '$''{'ac_cv_have_mbrtowc'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9213 "configure" >+#line 9118 "configure" > #include "confdefs.h" > #include <wchar.h> > int main() { > mbstate_t ps={0};mbrtowc(0,0,0,&ps); > ; return 0; } > EOF >-if { (eval echo configure:9220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:9125: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > ac_cv_have_mbrtowc="yes" > else >@@ -9245,12 +9150,12 @@ > fi > > echo $ac_n "checking for res_ninit()""... $ac_c" 1>&6 >-echo "configure:9249: checking for res_ninit()" >&5 >+echo "configure:9154: checking for res_ninit()" >&5 > if eval "test \"`echo '$''{'ac_cv_func_res_ninit'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9254 "configure" >+#line 9159 "configure" > #include "confdefs.h" > > #ifdef linux >@@ -9262,7 +9167,7 @@ > int foo = res_ninit(&_res); > ; return 0; } > EOF >-if { (eval echo configure:9266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:9171: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > ac_cv_func_res_ninit=yes > else >@@ -9292,12 +9197,12 @@ > cross_compiling=$ac_cv_prog_cxx_cross > > echo $ac_n "checking for gnu_get_libc_version()""... $ac_c" 1>&6 >-echo "configure:9296: checking for gnu_get_libc_version()" >&5 >+echo "configure:9201: checking for gnu_get_libc_version()" >&5 > if eval "test \"`echo '$''{'ac_cv_func_gnu_get_libc_version'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9301 "configure" >+#line 9206 "configure" > #include "confdefs.h" > > #ifdef HAVE_GNU_LIBC_VERSION_H >@@ -9308,7 +9213,7 @@ > const char *glibc_version = gnu_get_libc_version(); > ; return 0; } > EOF >-if { (eval echo configure:9312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:9217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > ac_cv_func_gnu_get_libc_version=yes > else >@@ -9337,7 +9242,7 @@ > *) > > echo $ac_n "checking for iconv in -lc""... $ac_c" 1>&6 >-echo "configure:9341: checking for iconv in -lc" >&5 >+echo "configure:9246: checking for iconv in -lc" >&5 > ac_lib_var=`echo c'_'iconv | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -9345,7 +9250,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lc $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 9349 "configure" >+#line 9254 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > #ifdef __cplusplus >@@ -9359,7 +9264,7 @@ > iconv() > ; return 0; } > EOF >-if { (eval echo configure:9363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:9268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -9378,7 +9283,7 @@ > else > echo "$ac_t""no" 1>&6 > echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6 >-echo "configure:9382: checking for iconv in -liconv" >&5 >+echo "configure:9287: checking for iconv in -liconv" >&5 > ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -9386,7 +9291,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-liconv $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 9390 "configure" >+#line 9295 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > #ifdef __cplusplus >@@ -9400,7 +9305,7 @@ > iconv() > ; return 0; } > EOF >-if { (eval echo configure:9404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:9309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -9419,7 +9324,7 @@ > else > echo "$ac_t""no" 1>&6 > echo $ac_n "checking for libiconv in -liconv""... $ac_c" 1>&6 >-echo "configure:9423: checking for libiconv in -liconv" >&5 >+echo "configure:9328: checking for libiconv in -liconv" >&5 > ac_lib_var=`echo iconv'_'libiconv | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -9427,7 +9332,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-liconv $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 9431 "configure" >+#line 9336 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > #ifdef __cplusplus >@@ -9441,7 +9346,7 @@ > libiconv() > ; return 0; } > EOF >-if { (eval echo configure:9445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:9350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -9468,12 +9373,12 @@ > _SAVE_LIBS=$LIBS > LIBS="$LIBS $_ICONV_LIBS" > echo $ac_n "checking for iconv()""... $ac_c" 1>&6 >-echo "configure:9472: checking for iconv()" >&5 >+echo "configure:9377: checking for iconv()" >&5 > if eval "test \"`echo '$''{'ac_cv_func_iconv'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9477 "configure" >+#line 9382 "configure" > #include "confdefs.h" > > #include <stdlib.h> >@@ -9487,7 +9392,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:9491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:9396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > ac_cv_func_iconv=yes > else >@@ -9510,12 +9415,12 @@ > XPCOM_LIBS="$XPCOM_LIBS $_ICONV_LIBS" > LIBICONV="$_ICONV_LIBS" > echo $ac_n "checking for iconv() with const input""... $ac_c" 1>&6 >-echo "configure:9514: checking for iconv() with const input" >&5 >+echo "configure:9419: checking for iconv() with const input" >&5 > if eval "test \"`echo '$''{'ac_cv_func_const_iconv'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9519 "configure" >+#line 9424 "configure" > #include "confdefs.h" > > #include <stdlib.h> >@@ -9530,7 +9435,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:9534: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:9439: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_func_const_iconv=yes > else >@@ -9559,19 +9464,19 @@ > > > echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6 >-echo "configure:9563: checking for nl_langinfo and CODESET" >&5 >+echo "configure:9468: checking for nl_langinfo and CODESET" >&5 > if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9568 "configure" >+#line 9473 "configure" > #include "confdefs.h" > #include <langinfo.h> > int main() { > char* cs = nl_langinfo(CODESET); > ; return 0; } > EOF >-if { (eval echo configure:9575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:9480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > am_cv_langinfo_codeset=yes > else >@@ -9603,7 +9508,7 @@ > > > echo $ac_n "checking for an implementation of va_copy()""... $ac_c" 1>&6 >-echo "configure:9607: checking for an implementation of va_copy()" >&5 >+echo "configure:9512: checking for an implementation of va_copy()" >&5 > if eval "test \"`echo '$''{'ac_cv_va_copy'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -9613,7 +9518,7 @@ > > else > cat > conftest.$ac_ext <<EOF >-#line 9617 "configure" >+#line 9522 "configure" > #include "confdefs.h" > > #include <stdarg.h> >@@ -9627,7 +9532,7 @@ > } > int main() { f (0, 42); return 0; } > EOF >-if { (eval echo configure:9631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:9536: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > ac_cv_va_copy=yes > else >@@ -9644,7 +9549,7 @@ > > echo "$ac_t""$ac_cv_va_copy" 1>&6 > echo $ac_n "checking for an implementation of __va_copy()""... $ac_c" 1>&6 >-echo "configure:9648: checking for an implementation of __va_copy()" >&5 >+echo "configure:9553: checking for an implementation of __va_copy()" >&5 > if eval "test \"`echo '$''{'ac_cv___va_copy'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -9654,7 +9559,7 @@ > > else > cat > conftest.$ac_ext <<EOF >-#line 9658 "configure" >+#line 9563 "configure" > #include "confdefs.h" > > #include <stdarg.h> >@@ -9668,7 +9573,7 @@ > } > int main() { f (0, 42); return 0; } > EOF >-if { (eval echo configure:9672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:9577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > ac_cv___va_copy=yes > else >@@ -9685,7 +9590,7 @@ > > echo "$ac_t""$ac_cv___va_copy" 1>&6 > echo $ac_n "checking whether va_lists can be copied by value""... $ac_c" 1>&6 >-echo "configure:9689: checking whether va_lists can be copied by value" >&5 >+echo "configure:9594: checking whether va_lists can be copied by value" >&5 > if eval "test \"`echo '$''{'ac_cv_va_val_copy'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -9695,7 +9600,7 @@ > > else > cat > conftest.$ac_ext <<EOF >-#line 9699 "configure" >+#line 9604 "configure" > #include "confdefs.h" > > #include <stdarg.h> >@@ -9709,7 +9614,7 @@ > } > int main() { f (0, 42); return 0; } > EOF >-if { (eval echo configure:9713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:9618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > ac_cv_va_val_copy=yes > else >@@ -9808,7 +9713,7 @@ > if test "$GNU_CXX"; then > > echo $ac_n "checking for C++ exceptions flag""... $ac_c" 1>&6 >-echo "configure:9812: checking for C++ exceptions flag" >&5 >+echo "configure:9717: checking for C++ exceptions flag" >&5 > > if eval "test \"`echo '$''{'ac_cv_cxx_exceptions_flags'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -9843,12 +9748,12 @@ > HAVE_GCC3_ABI= > if test "$GNU_CC"; then > echo $ac_n "checking for gcc 3.0 ABI""... $ac_c" 1>&6 >-echo "configure:9847: checking for gcc 3.0 ABI" >&5 >+echo "configure:9752: checking for gcc 3.0 ABI" >&5 > if eval "test \"`echo '$''{'ac_cv_gcc_three_abi'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9852 "configure" >+#line 9757 "configure" > #include "confdefs.h" > > int main() { >@@ -9861,7 +9766,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:9865: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:9770: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_gcc_three_abi="yes" > else >@@ -9882,12 +9787,12 @@ > > > echo $ac_n "checking for C++ \"explicit\" keyword""... $ac_c" 1>&6 >-echo "configure:9886: checking for C++ \"explicit\" keyword" >&5 >+echo "configure:9791: checking for C++ \"explicit\" keyword" >&5 > if eval "test \"`echo '$''{'ac_cv_cpp_explicit'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9891 "configure" >+#line 9796 "configure" > #include "confdefs.h" > class X { > public: explicit X(int i) : i_(i) {} >@@ -9897,7 +9802,7 @@ > X x(3); > ; return 0; } > EOF >-if { (eval echo configure:9901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:9806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_cpp_explicit=yes > else >@@ -9918,12 +9823,12 @@ > fi > > echo $ac_n "checking for C++ \"typename\" keyword""... $ac_c" 1>&6 >-echo "configure:9922: checking for C++ \"typename\" keyword" >&5 >+echo "configure:9827: checking for C++ \"typename\" keyword" >&5 > if eval "test \"`echo '$''{'ac_cv_cpp_typename'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9927 "configure" >+#line 9832 "configure" > #include "confdefs.h" > class param { > public: >@@ -9942,7 +9847,7 @@ > A.foo(0); > ; return 0; } > EOF >-if { (eval echo configure:9946: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:9851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_cpp_typename=yes > else >@@ -9963,12 +9868,12 @@ > fi > > echo $ac_n "checking for modern C++ template specialization syntax support""... $ac_c" 1>&6 >-echo "configure:9967: checking for modern C++ template specialization syntax support" >&5 >+echo "configure:9872: checking for modern C++ template specialization syntax support" >&5 > if eval "test \"`echo '$''{'ac_cv_cpp_modern_specialize_template_syntax'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 9972 "configure" >+#line 9877 "configure" > #include "confdefs.h" > template <class T> struct X { int a; }; > class Y {}; >@@ -9978,7 +9883,7 @@ > X<Y> y_x; > ; return 0; } > EOF >-if { (eval echo configure:9982: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:9887: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_cpp_modern_specialize_template_syntax=yes > else >@@ -10000,12 +9905,12 @@ > > > echo $ac_n "checking whether partial template specialization works""... $ac_c" 1>&6 >-echo "configure:10004: checking whether partial template specialization works" >&5 >+echo "configure:9909: checking whether partial template specialization works" >&5 > if eval "test \"`echo '$''{'ac_cv_cpp_partial_specialization'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10009 "configure" >+#line 9914 "configure" > #include "confdefs.h" > template <class T> class Foo {}; > template <class T> class Foo<T*> {}; >@@ -10013,7 +9918,7 @@ > return 0; > ; return 0; } > EOF >-if { (eval echo configure:10017: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:9922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_cpp_partial_specialization=yes > else >@@ -10034,12 +9939,12 @@ > fi > > echo $ac_n "checking whether operators must be re-defined for templates derived from templates""... $ac_c" 1>&6 >-echo "configure:10038: checking whether operators must be re-defined for templates derived from templates" >&5 >+echo "configure:9943: checking whether operators must be re-defined for templates derived from templates" >&5 > if eval "test \"`echo '$''{'ac_cv_need_derived_template_operators'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10043 "configure" >+#line 9948 "configure" > #include "confdefs.h" > template <class T> class Base { }; > template <class T> >@@ -10051,7 +9956,7 @@ > return 0; > ; return 0; } > EOF >-if { (eval echo configure:10055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:9960: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_need_derived_template_operators=no > else >@@ -10073,12 +9978,12 @@ > > > echo $ac_n "checking whether we need to cast a derived template to pass as its base class""... $ac_c" 1>&6 >-echo "configure:10077: checking whether we need to cast a derived template to pass as its base class" >&5 >+echo "configure:9982: checking whether we need to cast a derived template to pass as its base class" >&5 > if eval "test \"`echo '$''{'ac_cv_need_cpp_template_cast_to_base'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10082 "configure" >+#line 9987 "configure" > #include "confdefs.h" > template <class T> class Base { }; > template <class T> class Derived : public Base<T> { }; >@@ -10087,7 +9992,7 @@ > Derived<char> bar; return foo(bar); > ; return 0; } > EOF >-if { (eval echo configure:10091: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:9996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_need_cpp_template_cast_to_base=no > else >@@ -10108,12 +10013,12 @@ > fi > > echo $ac_n "checking whether the compiler can resolve const ambiguities for templates""... $ac_c" 1>&6 >-echo "configure:10112: checking whether the compiler can resolve const ambiguities for templates" >&5 >+echo "configure:10017: checking whether the compiler can resolve const ambiguities for templates" >&5 > if eval "test \"`echo '$''{'ac_cv_can_resolve_const_ambiguity'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10117 "configure" >+#line 10022 "configure" > #include "confdefs.h" > > template <class T> class ptrClass { >@@ -10134,7 +10039,7 @@ > a(&i); > ; return 0; } > EOF >-if { (eval echo configure:10138: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:10043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_can_resolve_const_ambiguity=yes > else >@@ -10156,12 +10061,12 @@ > > > echo $ac_n "checking whether the C++ \"using\" keyword can change access""... $ac_c" 1>&6 >-echo "configure:10160: checking whether the C++ \"using\" keyword can change access" >&5 >+echo "configure:10065: checking whether the C++ \"using\" keyword can change access" >&5 > if eval "test \"`echo '$''{'ac_cv_cpp_access_changing_using2'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10165 "configure" >+#line 10070 "configure" > #include "confdefs.h" > class A { protected: int foo() { return 0; } }; > class B : public A { public: using A::foo; }; >@@ -10169,10 +10074,10 @@ > B b; return b.foo(); > ; return 0; } > EOF >-if { (eval echo configure:10173: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:10078: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > cat > conftest.$ac_ext <<EOF >-#line 10176 "configure" >+#line 10081 "configure" > #include "confdefs.h" > class A { public: int foo() { return 1; } }; > class B : public A { private: using A::foo; }; >@@ -10180,7 +10085,7 @@ > B b; return b.foo(); > ; return 0; } > EOF >-if { (eval echo configure:10184: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:10089: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_cpp_access_changing_using2=no > else >@@ -10208,12 +10113,12 @@ > fi > > echo $ac_n "checking whether the C++ \"using\" keyword resolves ambiguity""... $ac_c" 1>&6 >-echo "configure:10212: checking whether the C++ \"using\" keyword resolves ambiguity" >&5 >+echo "configure:10117: checking whether the C++ \"using\" keyword resolves ambiguity" >&5 > if eval "test \"`echo '$''{'ac_cv_cpp_ambiguity_resolving_using'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10217 "configure" >+#line 10122 "configure" > #include "confdefs.h" > class X { > public: int go(const X&) {return 3;} >@@ -10229,7 +10134,7 @@ > X x; Y y; y.jo(x); > ; return 0; } > EOF >-if { (eval echo configure:10233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:10138: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_cpp_ambiguity_resolving_using=yes > else >@@ -10250,19 +10155,19 @@ > fi > > echo $ac_n "checking for \"std::\" namespace""... $ac_c" 1>&6 >-echo "configure:10254: checking for \"std::\" namespace" >&5 >+echo "configure:10159: checking for \"std::\" namespace" >&5 > if eval "test \"`echo '$''{'ac_cv_cpp_namespace_std'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10259 "configure" >+#line 10164 "configure" > #include "confdefs.h" > #include <algorithm> > int main() { > return std::min(0, 1); > ; return 0; } > EOF >-if { (eval echo configure:10266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:10171: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_cpp_namespace_std=yes > else >@@ -10283,12 +10188,12 @@ > fi > > echo $ac_n "checking whether standard template operator!=() is ambiguous""... $ac_c" 1>&6 >-echo "configure:10287: checking whether standard template operator!=() is ambiguous" >&5 >+echo "configure:10192: checking whether standard template operator!=() is ambiguous" >&5 > if eval "test \"`echo '$''{'ac_cv_cpp_unambiguous_std_notequal'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10292 "configure" >+#line 10197 "configure" > #include "confdefs.h" > #include <algorithm> > struct T1 {}; >@@ -10298,7 +10203,7 @@ > T1 a,b; return a != b; > ; return 0; } > EOF >-if { (eval echo configure:10302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:10207: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_cpp_unambiguous_std_notequal=unambiguous > else >@@ -10320,12 +10225,12 @@ > > > echo $ac_n "checking for C++ reinterpret_cast""... $ac_c" 1>&6 >-echo "configure:10324: checking for C++ reinterpret_cast" >&5 >+echo "configure:10229: checking for C++ reinterpret_cast" >&5 > if eval "test \"`echo '$''{'ac_cv_cpp_reinterpret_cast'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10329 "configure" >+#line 10234 "configure" > #include "confdefs.h" > struct X { int i; }; > struct Y { int i; }; >@@ -10333,7 +10238,7 @@ > X x; X*const z = &x;Y*y = reinterpret_cast<Y*>(z); > ; return 0; } > EOF >-if { (eval echo configure:10337: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:10242: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_cpp_reinterpret_cast=yes > else >@@ -10354,7 +10259,7 @@ > fi > > echo $ac_n "checking for C++ dynamic_cast to void*""... $ac_c" 1>&6 >-echo "configure:10358: checking for C++ dynamic_cast to void*" >&5 >+echo "configure:10263: checking for C++ dynamic_cast to void*" >&5 > if eval "test \"`echo '$''{'ac_cv_cpp_dynamic_cast_void_ptr'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -10362,8 +10267,11 @@ > ac_cv_cpp_dynamic_cast_void_ptr=no > else > cat > conftest.$ac_ext <<EOF >-#line 10366 "configure" >+#line 10271 "configure" > #include "confdefs.h" >+#ifdef __cplusplus >+extern "C" void exit(int); >+#endif > class X { int i; public: virtual ~X() { } }; > class Y { int j; public: virtual ~Y() { } }; > class Z : public X, public Y { int k; }; >@@ -10378,7 +10286,7 @@ > ((void*)&mdo == dynamic_cast<void*>(suby)))); > } > EOF >-if { (eval echo configure:10382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:10290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > ac_cv_cpp_dynamic_cast_void_ptr=yes > else >@@ -10402,19 +10310,19 @@ > > > echo $ac_n "checking whether C++ requires implementation of unused virtual methods""... $ac_c" 1>&6 >-echo "configure:10406: checking whether C++ requires implementation of unused virtual methods" >&5 >+echo "configure:10314: checking whether C++ requires implementation of unused virtual methods" >&5 > if eval "test \"`echo '$''{'ac_cv_cpp_unused_required'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10411 "configure" >+#line 10319 "configure" > #include "confdefs.h" > class X {private: virtual void never_called();}; > int main() { > X x; > ; return 0; } > EOF >-if { (eval echo configure:10418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:10326: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > ac_cv_cpp_unused_required=no > else >@@ -10437,12 +10345,12 @@ > > > echo $ac_n "checking for trouble comparing to zero near std::operator!=()""... $ac_c" 1>&6 >-echo "configure:10441: checking for trouble comparing to zero near std::operator!=()" >&5 >+echo "configure:10349: checking for trouble comparing to zero near std::operator!=()" >&5 > if eval "test \"`echo '$''{'ac_cv_trouble_comparing_to_zero'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10446 "configure" >+#line 10354 "configure" > #include "confdefs.h" > #include <algorithm> > template <class T> class Foo {}; >@@ -10453,7 +10361,7 @@ > Foo<int> f; return (0 != f); > ; return 0; } > EOF >-if { (eval echo configure:10457: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:10365: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_trouble_comparing_to_zero=no > else >@@ -10485,19 +10393,19 @@ > > > echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6 >-echo "configure:10489: checking for LC_MESSAGES" >&5 >+echo "configure:10397: checking for LC_MESSAGES" >&5 > if eval "test \"`echo '$''{'ac_cv_i18n_lc_messages'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 10494 "configure" >+#line 10402 "configure" > #include "confdefs.h" > #include <locale.h> > int main() { > int category = LC_MESSAGES; > ; return 0; } > EOF >-if { (eval echo configure:10501: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:10409: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_cv_i18n_lc_messages=yes > else >@@ -10573,7 +10481,7 @@ > # Extract the first word of "nspr-config", so it can be a program name with args. > set dummy nspr-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:10577: checking for $ac_word" >&5 >+echo "configure:10485: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_NSPR_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -10608,7 +10516,7 @@ > > min_nspr_version=4.0.0 > echo $ac_n "checking for NSPR - version >= $min_nspr_version (skipping)""... $ac_c" 1>&6 >-echo "configure:10612: checking for NSPR - version >= $min_nspr_version (skipping)" >&5 >+echo "configure:10520: checking for NSPR - version >= $min_nspr_version (skipping)" >&5 > > no_nspr="" > if test "$NSPR_CONFIG" = "no"; then >@@ -10675,7 +10583,7 @@ > SYSTEM_JPEG= > else > echo $ac_n "checking for jpeg_destroy_compress in -ljpeg""... $ac_c" 1>&6 >-echo "configure:10679: checking for jpeg_destroy_compress in -ljpeg" >&5 >+echo "configure:10587: checking for jpeg_destroy_compress in -ljpeg" >&5 > ac_lib_var=`echo jpeg'_'jpeg_destroy_compress | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -10683,7 +10591,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-ljpeg $JPEG_LIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 10687 "configure" >+#line 10595 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -10694,7 +10602,7 @@ > jpeg_destroy_compress() > ; return 0; } > EOF >-if { (eval echo configure:10698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:10606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -10723,7 +10631,7 @@ > SYSTEM_JPEG= > else > cat > conftest.$ac_ext <<EOF >-#line 10727 "configure" >+#line 10635 "configure" > #include "confdefs.h" > #include <stdio.h> > #include <sys/types.h> >@@ -10737,7 +10645,7 @@ > } > > EOF >-if { (eval echo configure:10741: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:10649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > SYSTEM_JPEG=1 > else >@@ -10778,7 +10686,7 @@ > SYSTEM_ZLIB= > else > echo $ac_n "checking for gzread in -lz""... $ac_c" 1>&6 >-echo "configure:10782: checking for gzread in -lz" >&5 >+echo "configure:10690: checking for gzread in -lz" >&5 > ac_lib_var=`echo z'_'gzread | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -10786,7 +10694,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lz $ZLIB_LIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 10790 "configure" >+#line 10698 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -10797,7 +10705,7 @@ > gzread() > ; return 0; } > EOF >-if { (eval echo configure:10801: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:10709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -10825,7 +10733,7 @@ > SYSTEM_ZLIB= > else > cat > conftest.$ac_ext <<EOF >-#line 10829 "configure" >+#line 10737 "configure" > #include "confdefs.h" > > #include <stdio.h> >@@ -10846,7 +10754,7 @@ > } > > EOF >-if { (eval echo configure:10850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:10758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > SYSTEM_ZLIB=1 > else >@@ -10889,7 +10797,7 @@ > SYSTEM_PNG= > else > echo $ac_n "checking for png_get_valid in -lpng""... $ac_c" 1>&6 >-echo "configure:10893: checking for png_get_valid in -lpng" >&5 >+echo "configure:10801: checking for png_get_valid in -lpng" >&5 > ac_lib_var=`echo png'_'png_get_valid | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -10897,7 +10805,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lpng $PNG_LIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 10901 "configure" >+#line 10809 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -10908,7 +10816,7 @@ > png_get_valid() > ; return 0; } > EOF >-if { (eval echo configure:10912: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:10820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -10936,7 +10844,7 @@ > SYSTEM_PNG= > else > cat > conftest.$ac_ext <<EOF >-#line 10940 "configure" >+#line 10848 "configure" > #include "confdefs.h" > #include <stdio.h> > #include <sys/types.h> >@@ -10950,7 +10858,7 @@ > } > > EOF >-if { (eval echo configure:10954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:10862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > SYSTEM_PNG=1 > else >@@ -11132,7 +11040,7 @@ > # Extract the first word of "gtk-config", so it can be a program name with args. > set dummy gtk-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:11136: checking for $ac_word" >&5 >+echo "configure:11044: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -11167,7 +11075,7 @@ > > min_gtk_version=$GTK_VERSION > echo $ac_n "checking for GTK - version >= $min_gtk_version""... $ac_c" 1>&6 >-echo "configure:11171: checking for GTK - version >= $min_gtk_version" >&5 >+echo "configure:11079: checking for GTK - version >= $min_gtk_version" >&5 > no_gtk="" > if test "$GTK_CONFIG" = "no" ; then > no_gtk=yes >@@ -11190,7 +11098,7 @@ > echo $ac_n "cross compiling; assumed OK... $ac_c" > else > cat > conftest.$ac_ext <<EOF >-#line 11194 "configure" >+#line 11102 "configure" > #include "confdefs.h" > > #include <gtk/gtk.h> >@@ -11268,7 +11176,7 @@ > } > > EOF >-if { (eval echo configure:11272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:11180: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > : > else >@@ -11303,7 +11211,7 @@ > CFLAGS="$CFLAGS $GTK_CFLAGS" > LIBS="$LIBS $GTK_LIBS" > cat > conftest.$ac_ext <<EOF >-#line 11307 "configure" >+#line 11215 "configure" > #include "confdefs.h" > > #include <gtk/gtk.h> >@@ -11313,7 +11221,7 @@ > return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); > ; return 0; } > EOF >-if { (eval echo configure:11317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:11225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > echo "*** The test program compiled, but did not run. This usually means" > echo "*** that the run-time linker is not finding GTK or finding the wrong" >@@ -11365,7 +11273,7 @@ > # Extract the first word of "pkg-config", so it can be a program name with args. > set dummy pkg-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:11369: checking for $ac_word" >&5 >+echo "configure:11277: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -11409,19 +11317,19 @@ > PKG_CONFIG_MIN_VERSION=0.9.0 > if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then > echo $ac_n "checking for gtk+-2.0 >= 1.3.7""... $ac_c" 1>&6 >-echo "configure:11413: checking for gtk+-2.0 >= 1.3.7" >&5 >+echo "configure:11321: checking for gtk+-2.0 >= 1.3.7" >&5 > > if $PKG_CONFIG --exists "gtk+-2.0 >= 1.3.7" ; then > echo "$ac_t""yes" 1>&6 > succeeded=yes > > echo $ac_n "checking MOZ_GTK2_CFLAGS""... $ac_c" 1>&6 >-echo "configure:11420: checking MOZ_GTK2_CFLAGS" >&5 >+echo "configure:11328: checking MOZ_GTK2_CFLAGS" >&5 > MOZ_GTK2_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 1.3.7"` > echo "$ac_t""$MOZ_GTK2_CFLAGS" 1>&6 > > echo $ac_n "checking MOZ_GTK2_LIBS""... $ac_c" 1>&6 >-echo "configure:11425: checking MOZ_GTK2_LIBS" >&5 >+echo "configure:11333: checking MOZ_GTK2_LIBS" >&5 > MOZ_GTK2_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 1.3.7"` > echo "$ac_t""$MOZ_GTK2_LIBS" 1>&6 > else >@@ -11727,7 +11635,7 @@ > # Extract the first word of "pkg-config", so it can be a program name with args. > set dummy pkg-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:11731: checking for $ac_word" >&5 >+echo "configure:11639: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -11771,19 +11679,19 @@ > PKG_CONFIG_MIN_VERSION=0.9.0 > if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then > echo $ac_n "checking for xft""... $ac_c" 1>&6 >-echo "configure:11775: checking for xft" >&5 >+echo "configure:11683: checking for xft" >&5 > > if $PKG_CONFIG --exists "xft" ; then > echo "$ac_t""yes" 1>&6 > succeeded=yes > > echo $ac_n "checking MOZ_XFT_CFLAGS""... $ac_c" 1>&6 >-echo "configure:11782: checking MOZ_XFT_CFLAGS" >&5 >+echo "configure:11690: checking MOZ_XFT_CFLAGS" >&5 > MOZ_XFT_CFLAGS=`$PKG_CONFIG --cflags "xft"` > echo "$ac_t""$MOZ_XFT_CFLAGS" 1>&6 > > echo $ac_n "checking MOZ_XFT_LIBS""... $ac_c" 1>&6 >-echo "configure:11787: checking MOZ_XFT_LIBS" >&5 >+echo "configure:11695: checking MOZ_XFT_LIBS" >&5 > MOZ_XFT_LIBS=`$PKG_CONFIG --libs "xft"` > echo "$ac_t""$MOZ_XFT_LIBS" 1>&6 > else >@@ -11817,7 +11725,7 @@ > # Extract the first word of "pkg-config", so it can be a program name with args. > set dummy pkg-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:11821: checking for $ac_word" >&5 >+echo "configure:11729: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -11861,19 +11769,19 @@ > PKG_CONFIG_MIN_VERSION=0.9.0 > if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then > echo $ac_n "checking for pango >= 1.1.0""... $ac_c" 1>&6 >-echo "configure:11865: checking for pango >= 1.1.0" >&5 >+echo "configure:11773: checking for pango >= 1.1.0" >&5 > > if $PKG_CONFIG --exists "pango >= 1.1.0" ; then > echo "$ac_t""yes" 1>&6 > succeeded=yes > > echo $ac_n "checking _PANGOCHK_CFLAGS""... $ac_c" 1>&6 >-echo "configure:11872: checking _PANGOCHK_CFLAGS" >&5 >+echo "configure:11780: checking _PANGOCHK_CFLAGS" >&5 > _PANGOCHK_CFLAGS=`$PKG_CONFIG --cflags "pango >= 1.1.0"` > echo "$ac_t""$_PANGOCHK_CFLAGS" 1>&6 > > echo $ac_n "checking _PANGOCHK_LIBS""... $ac_c" 1>&6 >-echo "configure:11877: checking _PANGOCHK_LIBS" >&5 >+echo "configure:11785: checking _PANGOCHK_LIBS" >&5 > _PANGOCHK_LIBS=`$PKG_CONFIG --libs "pango >= 1.1.0"` > echo "$ac_t""$_PANGOCHK_LIBS" 1>&6 > else >@@ -11906,6 +11814,175 @@ > > > >+# Check whether --enable-pango or --disable-pango was given. >+if test "${enable_pango+set}" = set; then >+ enableval="$enable_pango" >+ if test "$enableval" = "yes"; then >+ MOZ_ENABLE_PANGO=1 >+ elif test "$enableval" = "no"; then >+ MOZ_ENABLE_PANGO= >+ else >+ { echo "configure: error: Option, pango, does not take an argument ($enableval)." 1>&2; exit 1; } >+ fi >+fi >+ >+ >+if test "$MOZ_ENABLE_PANGO" >+then >+ cat >> confdefs.h <<\EOF >+#define MOZ_ENABLE_PANGO 1 >+EOF >+ >+ >+ succeeded=no >+ >+ if test -z "$PKG_CONFIG"; then >+ # Extract the first word of "pkg-config", so it can be a program name with args. >+set dummy pkg-config; ac_word=$2 >+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >+echo "configure:11844: checking for $ac_word" >&5 >+if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then >+ echo $ac_n "(cached) $ac_c" 1>&6 >+else >+ case "$PKG_CONFIG" in >+ /*) >+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. >+ ;; >+ ?:/*) >+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a dos path. >+ ;; >+ *) >+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" >+ ac_dummy="$PATH" >+ for ac_dir in $ac_dummy; do >+ test -z "$ac_dir" && ac_dir=. >+ if test -f $ac_dir/$ac_word; then >+ ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word" >+ break >+ fi >+ done >+ IFS="$ac_save_ifs" >+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" >+ ;; >+esac >+fi >+PKG_CONFIG="$ac_cv_path_PKG_CONFIG" >+if test -n "$PKG_CONFIG"; then >+ echo "$ac_t""$PKG_CONFIG" 1>&6 >+else >+ echo "$ac_t""no" 1>&6 >+fi >+ >+ fi >+ >+ if test "$PKG_CONFIG" = "no" ; then >+ echo "*** The pkg-config script could not be found. Make sure it is" >+ echo "*** in your path, or set the PKG_CONFIG environment variable" >+ echo "*** to the full path to pkg-config." >+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." >+ else >+ PKG_CONFIG_MIN_VERSION=0.9.0 >+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then >+ echo $ac_n "checking for pango >= 1.5.0""... $ac_c" 1>&6 >+echo "configure:11888: checking for pango >= 1.5.0" >&5 >+ >+ if $PKG_CONFIG --exists "pango >= 1.5.0" ; then >+ echo "$ac_t""yes" 1>&6 >+ succeeded=yes >+ >+ echo $ac_n "checking MOZ_PANGO_CFLAGS""... $ac_c" 1>&6 >+echo "configure:11895: checking MOZ_PANGO_CFLAGS" >&5 >+ MOZ_PANGO_CFLAGS=`$PKG_CONFIG --cflags "pango >= 1.5.0"` >+ echo "$ac_t""$MOZ_PANGO_CFLAGS" 1>&6 >+ >+ echo $ac_n "checking MOZ_PANGO_LIBS""... $ac_c" 1>&6 >+echo "configure:11900: checking MOZ_PANGO_LIBS" >&5 >+ MOZ_PANGO_LIBS=`$PKG_CONFIG --libs "pango >= 1.5.0"` >+ echo "$ac_t""$MOZ_PANGO_LIBS" 1>&6 >+ else >+ MOZ_PANGO_CFLAGS="" >+ MOZ_PANGO_LIBS="" >+ ## If we have a custom action on failure, don't print errors, but >+ ## do set a variable so people can do so. >+ MOZ_PANGO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pango >= 1.5.0"` >+ echo $MOZ_PANGO_PKG_ERRORS >+ fi >+ >+ >+ >+ else >+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." >+ echo "*** See http://www.freedesktop.org/software/pkgconfig" >+ fi >+ fi >+ >+ if test $succeeded = yes; then >+ : >+ else >+ { echo "configure: error: Library requirements (pango >= 1.5.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." 1>&2; exit 1; } >+ fi >+ >+ >+ _SAVE_CFLAGS=$CFLAGS >+ _SAVE_LDFLAGS=$LDFLAGS >+ CFLAGS="$MOZ_PANGO_CFLAGS $CFLAGS" >+ LDFLAGS="$MOZ_PANGO_LIBS $LDFLAGS" >+ echo $ac_n "checking for pango_fc_font_map_add_decoder_find_func in -lpangoft2-1.0""... $ac_c" 1>&6 >+echo "configure:11932: checking for pango_fc_font_map_add_decoder_find_func in -lpangoft2-1.0" >&5 >+ac_lib_var=`echo pangoft2-1.0'_'pango_fc_font_map_add_decoder_find_func | sed 'y%./+-%__p_%'` >+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then >+ echo $ac_n "(cached) $ac_c" 1>&6 >+else >+ ac_save_LIBS="$LIBS" >+LIBS="-lpangoft2-1.0 $LIBS" >+cat > conftest.$ac_ext <<EOF >+#line 11940 "configure" >+#include "confdefs.h" >+/* Override any gcc2 internal prototype to avoid an error. */ >+/* We use char because int might match the return type of a gcc2 >+ builtin and then its argument prototype would still apply. */ >+char pango_fc_font_map_add_decoder_find_func(); >+ >+int main() { >+pango_fc_font_map_add_decoder_find_func() >+; return 0; } >+EOF >+if { (eval echo configure:11951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+ rm -rf conftest* >+ eval "ac_cv_lib_$ac_lib_var=yes" >+else >+ echo "configure: failed program was:" >&5 >+ cat conftest.$ac_ext >&5 >+ rm -rf conftest* >+ eval "ac_cv_lib_$ac_lib_var=no" >+fi >+rm -f conftest* >+LIBS="$ac_save_LIBS" >+ >+fi >+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then >+ echo "$ac_t""yes" 1>&6 >+ ac_tr_lib=HAVE_LIB`echo pangoft2-1.0 | sed -e 's/[^a-zA-Z0-9_]/_/g' \ >+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` >+ cat >> confdefs.h <<EOF >+#define $ac_tr_lib 1 >+EOF >+ >+ LIBS="-lpangoft2-1.0 $LIBS" >+ >+else >+ echo "$ac_t""no" 1>&6 >+{ echo "configure: error: Your Pango is too old. Sorry." 1>&2; exit 1; } >+fi >+ >+ CFLAGS=$_SAVE_CFLAGS >+ LDFLAGS=$_SAVE_LDFLAGS >+ >+ >+ >+ >+fi >+ > MOZ_ENABLE_COREXFONTS=${MOZ_ENABLE_COREXFONTS-1} > if test "$MOZ_ENABLE_COREXFONTS" > then >@@ -11937,7 +12014,7 @@ > _SAVE_LDFLAGS="$LDFLAGS" > LDFLAGS="$XLDFLAGS $LDFLAGS" > echo $ac_n "checking for XpGetPrinterList in -lXp""... $ac_c" 1>&6 >-echo "configure:11941: checking for XpGetPrinterList in -lXp" >&5 >+echo "configure:12018: checking for XpGetPrinterList in -lXp" >&5 > ac_lib_var=`echo Xp'_'XpGetPrinterList | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -11945,7 +12022,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lXp $XEXT_LIBS $XLIBS $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 11949 "configure" >+#line 12026 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -11956,7 +12033,7 @@ > XpGetPrinterList() > ; return 0; } > EOF >-if { (eval echo configure:11960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:12037: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -12029,7 +12106,7 @@ > # Extract the first word of "pkg-config", so it can be a program name with args. > set dummy pkg-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:12033: checking for $ac_word" >&5 >+echo "configure:12110: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -12073,19 +12150,19 @@ > PKG_CONFIG_MIN_VERSION=0.9.0 > if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then > echo $ac_n "checking for gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION""... $ac_c" 1>&6 >-echo "configure:12077: checking for gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION" >&5 >+echo "configure:12154: checking for gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION" >&5 > > if $PKG_CONFIG --exists "gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION" ; then > echo "$ac_t""yes" 1>&6 > succeeded=yes > > echo $ac_n "checking MOZ_GNOMEVFS_CFLAGS""... $ac_c" 1>&6 >-echo "configure:12084: checking MOZ_GNOMEVFS_CFLAGS" >&5 >+echo "configure:12161: checking MOZ_GNOMEVFS_CFLAGS" >&5 > MOZ_GNOMEVFS_CFLAGS=`$PKG_CONFIG --cflags "gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION"` > echo "$ac_t""$MOZ_GNOMEVFS_CFLAGS" 1>&6 > > echo $ac_n "checking MOZ_GNOMEVFS_LIBS""... $ac_c" 1>&6 >-echo "configure:12089: checking MOZ_GNOMEVFS_LIBS" >&5 >+echo "configure:12166: checking MOZ_GNOMEVFS_LIBS" >&5 > MOZ_GNOMEVFS_LIBS=`$PKG_CONFIG --libs "gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION"` > echo "$ac_t""$MOZ_GNOMEVFS_LIBS" 1>&6 > else >@@ -12133,7 +12210,7 @@ > # Extract the first word of "pkg-config", so it can be a program name with args. > set dummy pkg-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:12137: checking for $ac_word" >&5 >+echo "configure:12214: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -12177,19 +12254,19 @@ > PKG_CONFIG_MIN_VERSION=0.9.0 > if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then > echo $ac_n "checking for gconf-2.0 >= $GCONF_VERSION""... $ac_c" 1>&6 >-echo "configure:12181: checking for gconf-2.0 >= $GCONF_VERSION" >&5 >+echo "configure:12258: checking for gconf-2.0 >= $GCONF_VERSION" >&5 > > if $PKG_CONFIG --exists "gconf-2.0 >= $GCONF_VERSION" ; then > echo "$ac_t""yes" 1>&6 > succeeded=yes > > echo $ac_n "checking MOZ_GCONF_CFLAGS""... $ac_c" 1>&6 >-echo "configure:12188: checking MOZ_GCONF_CFLAGS" >&5 >+echo "configure:12265: checking MOZ_GCONF_CFLAGS" >&5 > MOZ_GCONF_CFLAGS=`$PKG_CONFIG --cflags "gconf-2.0 >= $GCONF_VERSION"` > echo "$ac_t""$MOZ_GCONF_CFLAGS" 1>&6 > > echo $ac_n "checking MOZ_GCONF_LIBS""... $ac_c" 1>&6 >-echo "configure:12193: checking MOZ_GCONF_LIBS" >&5 >+echo "configure:12270: checking MOZ_GCONF_LIBS" >&5 > MOZ_GCONF_LIBS=`$PKG_CONFIG --libs "gconf-2.0 >= $GCONF_VERSION"` > echo "$ac_t""$MOZ_GCONF_LIBS" 1>&6 > else >@@ -12233,7 +12310,7 @@ > # Extract the first word of "pkg-config", so it can be a program name with args. > set dummy pkg-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:12237: checking for $ac_word" >&5 >+echo "configure:12314: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -12277,19 +12354,19 @@ > PKG_CONFIG_MIN_VERSION=0.9.0 > if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then > echo $ac_n "checking for libgnome-2.0 >= $LIBGNOME_VERSION""... $ac_c" 1>&6 >-echo "configure:12281: checking for libgnome-2.0 >= $LIBGNOME_VERSION" >&5 >+echo "configure:12358: checking for libgnome-2.0 >= $LIBGNOME_VERSION" >&5 > > if $PKG_CONFIG --exists "libgnome-2.0 >= $LIBGNOME_VERSION" ; then > echo "$ac_t""yes" 1>&6 > succeeded=yes > > echo $ac_n "checking MOZ_LIBGNOME_CFLAGS""... $ac_c" 1>&6 >-echo "configure:12288: checking MOZ_LIBGNOME_CFLAGS" >&5 >+echo "configure:12365: checking MOZ_LIBGNOME_CFLAGS" >&5 > MOZ_LIBGNOME_CFLAGS=`$PKG_CONFIG --cflags "libgnome-2.0 >= $LIBGNOME_VERSION"` > echo "$ac_t""$MOZ_LIBGNOME_CFLAGS" 1>&6 > > echo $ac_n "checking MOZ_LIBGNOME_LIBS""... $ac_c" 1>&6 >-echo "configure:12293: checking MOZ_LIBGNOME_LIBS" >&5 >+echo "configure:12370: checking MOZ_LIBGNOME_LIBS" >&5 > MOZ_LIBGNOME_LIBS=`$PKG_CONFIG --libs "libgnome-2.0 >= $LIBGNOME_VERSION"` > echo "$ac_t""$MOZ_LIBGNOME_LIBS" 1>&6 > else >@@ -12337,6 +12414,127 @@ > > fi > >+if test "$MOZ_ENABLE_GTK2" >+then >+ MOZ_ENABLE_GNOMEUI=1 >+ >+ # Check whether --enable-gnomeui or --disable-gnomeui was given. >+if test "${enable_gnomeui+set}" = set; then >+ enableval="$enable_gnomeui" >+ if test "$enableval" = "no"; then >+ MOZ_ENABLE_GNOMEUI= >+ elif test "$enableval" = "yes"; then >+ MOZ_ENABLE_GNOMEUI=force >+ else >+ { echo "configure: error: Option, gnomeui, does not take an argument ($enableval)." 1>&2; exit 1; } >+ fi >+fi >+ >+ >+ if test "$MOZ_ENABLE_GNOMEUI" >+ then >+ >+ succeeded=no >+ >+ if test -z "$PKG_CONFIG"; then >+ # Extract the first word of "pkg-config", so it can be a program name with args. >+set dummy pkg-config; ac_word=$2 >+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >+echo "configure:12444: checking for $ac_word" >&5 >+if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then >+ echo $ac_n "(cached) $ac_c" 1>&6 >+else >+ case "$PKG_CONFIG" in >+ /*) >+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. >+ ;; >+ ?:/*) >+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a dos path. >+ ;; >+ *) >+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" >+ ac_dummy="$PATH" >+ for ac_dir in $ac_dummy; do >+ test -z "$ac_dir" && ac_dir=. >+ if test -f $ac_dir/$ac_word; then >+ ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word" >+ break >+ fi >+ done >+ IFS="$ac_save_ifs" >+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" >+ ;; >+esac >+fi >+PKG_CONFIG="$ac_cv_path_PKG_CONFIG" >+if test -n "$PKG_CONFIG"; then >+ echo "$ac_t""$PKG_CONFIG" 1>&6 >+else >+ echo "$ac_t""no" 1>&6 >+fi >+ >+ fi >+ >+ if test "$PKG_CONFIG" = "no" ; then >+ echo "*** The pkg-config script could not be found. Make sure it is" >+ echo "*** in your path, or set the PKG_CONFIG environment variable" >+ echo "*** to the full path to pkg-config." >+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." >+ else >+ PKG_CONFIG_MIN_VERSION=0.9.0 >+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then >+ echo $ac_n "checking for libgnomeui-2.0 >= $GNOMEUI_VERSION""... $ac_c" 1>&6 >+echo "configure:12488: checking for libgnomeui-2.0 >= $GNOMEUI_VERSION" >&5 >+ >+ if $PKG_CONFIG --exists "libgnomeui-2.0 >= $GNOMEUI_VERSION" ; then >+ echo "$ac_t""yes" 1>&6 >+ succeeded=yes >+ >+ echo $ac_n "checking MOZ_GNOMEUI_CFLAGS""... $ac_c" 1>&6 >+echo "configure:12495: checking MOZ_GNOMEUI_CFLAGS" >&5 >+ MOZ_GNOMEUI_CFLAGS=`$PKG_CONFIG --cflags "libgnomeui-2.0 >= $GNOMEUI_VERSION"` >+ echo "$ac_t""$MOZ_GNOMEUI_CFLAGS" 1>&6 >+ >+ echo $ac_n "checking MOZ_GNOMEUI_LIBS""... $ac_c" 1>&6 >+echo "configure:12500: checking MOZ_GNOMEUI_LIBS" >&5 >+ MOZ_GNOMEUI_LIBS=`$PKG_CONFIG --libs "libgnomeui-2.0 >= $GNOMEUI_VERSION"` >+ echo "$ac_t""$MOZ_GNOMEUI_LIBS" 1>&6 >+ else >+ MOZ_GNOMEUI_CFLAGS="" >+ MOZ_GNOMEUI_LIBS="" >+ ## If we have a custom action on failure, don't print errors, but >+ ## do set a variable so people can do so. >+ MOZ_GNOMEUI_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libgnomeui-2.0 >= $GNOMEUI_VERSION"` >+ >+ fi >+ >+ >+ >+ else >+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." >+ echo "*** See http://www.freedesktop.org/software/pkgconfig" >+ fi >+ fi >+ >+ if test $succeeded = yes; then >+ MOZ_ENABLE_GNOMEUI=1 >+ else >+ >+ if test "$MOZ_ENABLE_GNOMEUI" = "force" >+ then >+ { echo "configure: error: * * * Could not find libgnomeui-2.0 >= $GNOMEUI_VERSION" 1>&2; exit 1; } >+ fi >+ MOZ_ENABLE_GNOMEUI= >+ >+ fi >+ >+ fi >+ >+ >+ >+ >+ >+fi > > if (test "$MOZ_ENABLE_GTK" || test "$MOZ_ENABLE_GTK2") \ > && test "$MOZ_ENABLE_COREXFONTS" \ >@@ -12711,17 +12909,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:12715: checking for $ac_hdr" >&5 >+echo "configure:12913: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 12720 "configure" >+#line 12918 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:12725: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:12923: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -12752,17 +12950,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:12756: checking for $ac_hdr" >&5 >+echo "configure:12954: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 12761 "configure" >+#line 12959 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:12766: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:12964: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -12792,7 +12990,7 @@ > CPPFLAGS="$_SAVE_CPPFLAGS $GSSAPI_INCLUDES" > > echo $ac_n "checking for gss_init_sec_context in -lgss""... $ac_c" 1>&6 >-echo "configure:12796: checking for gss_init_sec_context in -lgss" >&5 >+echo "configure:12994: checking for gss_init_sec_context in -lgss" >&5 > ac_lib_var=`echo gss'_'gss_init_sec_context | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -12800,7 +12998,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lgss $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 12804 "configure" >+#line 13002 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -12811,7 +13009,7 @@ > gss_init_sec_context() > ; return 0; } > EOF >-if { (eval echo configure:12815: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:13013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -12836,12 +13034,12 @@ > _GSS_LIBS="-L$GSSAPI_DIR/lib -lgssapi_krb5" > LIBS="$LIBS $_GSS_LIBS" > echo $ac_n "checking for gss_init_sec_context""... $ac_c" 1>&6 >-echo "configure:12840: checking for gss_init_sec_context" >&5 >+echo "configure:13038: checking for gss_init_sec_context" >&5 > if eval "test \"`echo '$''{'ac_cv_func_gss_init_sec_context'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 12845 "configure" >+#line 13043 "configure" > #include "confdefs.h" > /* System header to define __stub macros and hopefully few prototypes, > which can conflict with char gss_init_sec_context(); below. */ >@@ -12864,7 +13062,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:12868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:13066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_func_gss_init_sec_context=yes" > else >@@ -12894,7 +13092,7 @@ > > LIBS="$LIBS $TMP_GSSAPI_LIBS" > echo $ac_n "checking for gss_init_sec_context in -lgssapi""... $ac_c" 1>&6 >-echo "configure:12898: checking for gss_init_sec_context in -lgssapi" >&5 >+echo "configure:13096: checking for gss_init_sec_context in -lgssapi" >&5 > ac_lib_var=`echo gssapi'_'gss_init_sec_context | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -12902,7 +13100,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lgssapi $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 12906 "configure" >+#line 13104 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -12913,7 +13111,7 @@ > gss_init_sec_context() > ; return 0; } > EOF >-if { (eval echo configure:12917: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:13115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -12949,17 +13147,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:12953: checking for $ac_hdr" >&5 >+echo "configure:13151: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 12958 "configure" >+#line 13156 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:12963: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:13161: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -12989,17 +13187,17 @@ > do > ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` > echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 >-echo "configure:12993: checking for $ac_hdr" >&5 >+echo "configure:13191: checking for $ac_hdr" >&5 > if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 12998 "configure" >+#line 13196 "configure" > #include "confdefs.h" > #include <$ac_hdr> > EOF > ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" >-{ (eval echo configure:13003: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } >+{ (eval echo configure:13201: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } > ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` > if test -z "$ac_err"; then > rm -rf conftest* >@@ -13027,7 +13225,7 @@ > > > cat > conftest.$ac_ext <<EOF >-#line 13031 "configure" >+#line 13229 "configure" > #include "confdefs.h" > #if defined(HAVE_GSSAPI_H) > #include <gssapi.h> >@@ -13038,7 +13236,7 @@ > gss_OID oid = GSS_C_NT_HOSTBASED_SERVICE; > ; return 0; } > EOF >-if { (eval echo configure:13042: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:13240: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > cat >> confdefs.h <<\EOF > #define HAVE_GSS_C_NT_HOSTBASED_SERVICE 1 >@@ -13077,6 +13275,17 @@ > MOZ_IMG_DECODERS_DEFAULT="$MOZ_IMG_DECODERS_DEFAULT icon" > fi > ;; >+*) >+ if test "$MOZ_ENABLE_GNOMEUI"; then >+ >+ MOZ_IMG_DECODERS_DEFAULT="$MOZ_IMG_DECODERS_DEFAULT icon" >+ fi >+ ;; >+*) >+ if test "$MOZ_ENABLE_GNOMEUI"; then >+ MOZ_IMG_DECODERS_DEFAULT="$MOZ_IMG_DECODERS_DEFAULT icon" >+ fi >+ ;; > esac > > # Check whether --enable-image-decoders or --disable-image-decoders was given. >@@ -13169,7 +13378,7 @@ > > if test -n "$MOZ_SVG_RENDERER_GDIPLUS"; then > echo $ac_n "checking for Gdiplus.h""... $ac_c" 1>&6 >-echo "configure:13173: checking for Gdiplus.h" >&5 >+echo "configure:13382: checking for Gdiplus.h" >&5 > > ac_ext=C > # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. >@@ -13179,7 +13388,7 @@ > cross_compiling=$ac_cv_prog_cxx_cross > > cat > conftest.$ac_ext <<EOF >-#line 13183 "configure" >+#line 13392 "configure" > #include "confdefs.h" > #include <windows.h> > #include <unknwn.h> >@@ -13188,7 +13397,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:13192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:13401: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > echo "$ac_t""yes" 1>&6 > else >@@ -13486,18 +13695,18 @@ > > if test -n "$MOZ_OPTIMIZE"; then > echo $ac_n "checking for valid optimization flags""... $ac_c" 1>&6 >-echo "configure:13490: checking for valid optimization flags" >&5 >+echo "configure:13699: checking for valid optimization flags" >&5 > _SAVE_CFLAGS=$CFLAGS > CFLAGS="$CFLAGS $MOZ_OPTIMIZE_FLAGS" > cat > conftest.$ac_ext <<EOF >-#line 13494 "configure" >+#line 13703 "configure" > #include "confdefs.h" > #include <stdio.h> > int main() { > printf("Hello World\n"); > ; return 0; } > EOF >-if { (eval echo configure:13501: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:13710: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > _results=yes > else >@@ -13715,7 +13924,7 @@ > > if test -n "$_ENABLE_EFENCE"; then > echo $ac_n "checking for malloc in -lefence""... $ac_c" 1>&6 >-echo "configure:13719: checking for malloc in -lefence" >&5 >+echo "configure:13928: checking for malloc in -lefence" >&5 > ac_lib_var=`echo efence'_'malloc | sed 'y%./+-%__p_%'` > if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 >@@ -13723,7 +13932,7 @@ > ac_save_LIBS="$LIBS" > LIBS="-lefence $LIBS" > cat > conftest.$ac_ext <<EOF >-#line 13727 "configure" >+#line 13936 "configure" > #include "confdefs.h" > /* Override any gcc2 internal prototype to avoid an error. */ > /* We use char because int might match the return type of a gcc2 >@@ -13734,7 +13943,7 @@ > malloc() > ; return 0; } > EOF >-if { (eval echo configure:13738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:13947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_lib_$ac_lib_var=yes" > else >@@ -13834,12 +14043,12 @@ > for ac_func in __builtin_vec_new __builtin_vec_delete __builtin_new __builtin_delete __pure_virtual > do > echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 >-echo "configure:13838: checking for $ac_func" >&5 >+echo "configure:14047: checking for $ac_func" >&5 > if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 13843 "configure" >+#line 14052 "configure" > #include "confdefs.h" > /* System header to define __stub macros and hopefully few prototypes, > which can conflict with char $ac_func(); below. */ >@@ -13865,7 +14074,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:13869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:14078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_func_$ac_func=yes" > else >@@ -14109,12 +14318,12 @@ > for ac_func in __cxa_demangle > do > echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 >-echo "configure:14113: checking for $ac_func" >&5 >+echo "configure:14322: checking for $ac_func" >&5 > if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 14118 "configure" >+#line 14327 "configure" > #include "confdefs.h" > /* System header to define __stub macros and hopefully few prototypes, > which can conflict with char $ac_func(); below. */ >@@ -14140,7 +14349,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:14144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:14353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_func_$ac_func=yes" > else >@@ -14278,7 +14487,7 @@ > # Compiler Options > > echo $ac_n "checking for gcc -pipe support""... $ac_c" 1>&6 >-echo "configure:14282: checking for gcc -pipe support" >&5 >+echo "configure:14491: checking for gcc -pipe support" >&5 > if test -n "$GNU_CC" && test -n "$GNU_CXX" && test -n "$GNU_AS"; then > echo '#include <stdio.h>' > dummy-hello.c > echo 'int main() { printf("Hello World\n"); exit(0); }' >> dummy-hello.c >@@ -14293,14 +14502,14 @@ > _SAVE_CFLAGS=$CFLAGS > CFLAGS="$CFLAGS -pipe" > cat > conftest.$ac_ext <<EOF >-#line 14297 "configure" >+#line 14506 "configure" > #include "confdefs.h" > #include <stdio.h> > int main() { > printf("Hello World\n"); > ; return 0; } > EOF >-if { (eval echo configure:14304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:14513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > _res_gcc_pipe="yes" > else >@@ -14342,16 +14551,16 @@ > _SAVE_CFLAGS="$CFLAGS" > CFLAGS="$CFLAGS ${_COMPILER_PREFIX}-Wno-long-long" > echo $ac_n "checking whether compiler supports -Wno-long-long""... $ac_c" 1>&6 >-echo "configure:14346: checking whether compiler supports -Wno-long-long" >&5 >+echo "configure:14555: checking whether compiler supports -Wno-long-long" >&5 > cat > conftest.$ac_ext <<EOF >-#line 14348 "configure" >+#line 14557 "configure" > #include "confdefs.h" > > int main() { > return(0); > ; return 0; } > EOF >-if { (eval echo configure:14355: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:14564: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} ${_COMPILER_PREFIX}-Wno-long-long" > _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} ${_COMPILER_PREFIX}-Wno-long-long" >@@ -14372,16 +14581,16 @@ > CFLAGS="$CFLAGS -fprofile-generate" > > echo $ac_n "checking whether C compiler supports -fprofile-generate""... $ac_c" 1>&6 >-echo "configure:14376: checking whether C compiler supports -fprofile-generate" >&5 >+echo "configure:14585: checking whether C compiler supports -fprofile-generate" >&5 > cat > conftest.$ac_ext <<EOF >-#line 14378 "configure" >+#line 14587 "configure" > #include "confdefs.h" > > int main() { > return 0; > ; return 0; } > EOF >-if { (eval echo configure:14385: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:14594: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > PROFILE_GEN_CFLAGS="-fprofile-generate" > result="yes" >@@ -14399,16 +14608,16 @@ > else > CFLAGS="$_SAVE_CFLAGS -fprofile-arcs" > echo $ac_n "checking whether C compiler supports -fprofile-arcs""... $ac_c" 1>&6 >-echo "configure:14403: checking whether C compiler supports -fprofile-arcs" >&5 >+echo "configure:14612: checking whether C compiler supports -fprofile-arcs" >&5 > cat > conftest.$ac_ext <<EOF >-#line 14405 "configure" >+#line 14614 "configure" > #include "confdefs.h" > > int main() { > return 0; > ; return 0; } > EOF >-if { (eval echo configure:14412: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:14621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > PROFILE_GEN_CFLAGS="-fprofile-arcs" > result="yes" >@@ -14454,18 +14663,21 @@ > _SAVE_CXXFLAGS=$CXXFLAGS > CXXFLAGS="$CXXFLAGS ${_WARNINGS_CXXFLAGS} ${_COMPILER_PREFIX}-pedantic" > echo $ac_n "checking whether C++ compiler has -pedantic long long bug""... $ac_c" 1>&6 >-echo "configure:14458: checking whether C++ compiler has -pedantic long long bug" >&5 >+echo "configure:14667: checking whether C++ compiler has -pedantic long long bug" >&5 > if test "$cross_compiling" = yes; then > result="maybe" > else > cat > conftest.$ac_ext <<EOF >-#line 14463 "configure" >+#line 14672 "configure" > #include "confdefs.h" >+#ifdef __cplusplus >+extern "C" void exit(int); >+#endif > int main () { > if (sizeof(long long) != 8) { return 1; } > return 0; } > EOF >-if { (eval echo configure:14469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:14681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > result="no" > else >@@ -14495,13 +14707,16 @@ > fi > > echo $ac_n "checking for correct temporary object destruction order""... $ac_c" 1>&6 >-echo "configure:14499: checking for correct temporary object destruction order" >&5 >+echo "configure:14711: checking for correct temporary object destruction order" >&5 > if test "$cross_compiling" = yes; then > result="maybe" > else > cat > conftest.$ac_ext <<EOF >-#line 14504 "configure" >+#line 14716 "configure" > #include "confdefs.h" >+#ifdef __cplusplus >+extern "C" void exit(int); >+#endif > class A { > public: A(int& x) : mValue(x) {} > ~A() { mValue--; } >@@ -14520,7 +14735,7 @@ > } > > EOF >-if { (eval echo configure:14524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:14739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > result="yes" > else >@@ -14541,12 +14756,12 @@ > _SAVE_CXXFLAGS=$CXXFLAGS > CXXFLAGS="$CXXFLAGS ${_WARNINGS_CXXFLAGS}" > echo $ac_n "checking for correct overload resolution with const and templates""... $ac_c" 1>&6 >-echo "configure:14545: checking for correct overload resolution with const and templates" >&5 >+echo "configure:14760: checking for correct overload resolution with const and templates" >&5 > if eval "test \"`echo '$''{'ac_nscap_nonconst_opeq_bug'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 14550 "configure" >+#line 14765 "configure" > #include "confdefs.h" > > template <class T> >@@ -14576,7 +14791,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:14580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:14795: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > rm -rf conftest* > ac_nscap_nonconst_opeq_bug="no" > else >@@ -14867,7 +15082,7 @@ > # Extract the first word of "pkg-config", so it can be a program name with args. > set dummy pkg-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:14871: checking for $ac_word" >&5 >+echo "configure:15086: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -14911,19 +15126,19 @@ > PKG_CONFIG_MIN_VERSION=0.9.0 > if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then > echo $ac_n "checking for libIDL-2.0 >= 0.8.0""... $ac_c" 1>&6 >-echo "configure:14915: checking for libIDL-2.0 >= 0.8.0" >&5 >+echo "configure:15130: checking for libIDL-2.0 >= 0.8.0" >&5 > > if $PKG_CONFIG --exists "libIDL-2.0 >= 0.8.0" ; then > echo "$ac_t""yes" 1>&6 > succeeded=yes > > echo $ac_n "checking LIBIDL_CFLAGS""... $ac_c" 1>&6 >-echo "configure:14922: checking LIBIDL_CFLAGS" >&5 >+echo "configure:15137: checking LIBIDL_CFLAGS" >&5 > LIBIDL_CFLAGS=`$PKG_CONFIG --cflags "libIDL-2.0 >= 0.8.0"` > echo "$ac_t""$LIBIDL_CFLAGS" 1>&6 > > echo $ac_n "checking LIBIDL_LIBS""... $ac_c" 1>&6 >-echo "configure:14927: checking LIBIDL_LIBS" >&5 >+echo "configure:15142: checking LIBIDL_LIBS" >&5 > LIBIDL_LIBS=`$PKG_CONFIG --libs "libIDL-2.0 >= 0.8.0"` > echo "$ac_t""$LIBIDL_LIBS" 1>&6 > else >@@ -15044,7 +15259,7 @@ > # Extract the first word of "glib-config", so it can be a program name with args. > set dummy glib-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:15048: checking for $ac_word" >&5 >+echo "configure:15263: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_GLIB_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -15079,7 +15294,7 @@ > > min_glib_version=1.2.0 > echo $ac_n "checking for GLIB - version >= $min_glib_version""... $ac_c" 1>&6 >-echo "configure:15083: checking for GLIB - version >= $min_glib_version" >&5 >+echo "configure:15298: checking for GLIB - version >= $min_glib_version" >&5 > no_glib="" > if test "$GLIB_CONFIG" = "no" ; then > no_glib=yes >@@ -15102,7 +15317,7 @@ > echo $ac_n "cross compiling; assumed OK... $ac_c" > else > cat > conftest.$ac_ext <<EOF >-#line 15106 "configure" >+#line 15321 "configure" > #include "confdefs.h" > > #include <glib.h> >@@ -15178,7 +15393,7 @@ > } > > EOF >-if { (eval echo configure:15182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:15397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > : > else >@@ -15212,7 +15427,7 @@ > CFLAGS="$CFLAGS $GLIB_CFLAGS" > LIBS="$LIBS $GLIB_LIBS" > cat > conftest.$ac_ext <<EOF >-#line 15216 "configure" >+#line 15431 "configure" > #include "confdefs.h" > > #include <glib.h> >@@ -15222,7 +15437,7 @@ > return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); > ; return 0; } > EOF >-if { (eval echo configure:15226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:15441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > echo "*** The test program compiled, but did not run. This usually means" > echo "*** that the run-time linker is not finding GLIB or finding the wrong" >@@ -15266,7 +15481,7 @@ > # Extract the first word of "libIDL-config", so it can be a program name with args. > set dummy libIDL-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:15270: checking for $ac_word" >&5 >+echo "configure:15485: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_LIBIDL_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -15301,7 +15516,7 @@ > > min_libIDL_version=$LIBIDL_VERSION > echo $ac_n "checking for libIDL - version >= $min_libIDL_version""... $ac_c" 1>&6 >-echo "configure:15305: checking for libIDL - version >= $min_libIDL_version" >&5 >+echo "configure:15520: checking for libIDL - version >= $min_libIDL_version" >&5 > no_libIDL="" > if test "$LIBIDL_CONFIG" = "no" ; then > no_libIDL=yes >@@ -15328,7 +15543,7 @@ > echo $ac_n "cross compiling; assumed OK... $ac_c" > else > cat > conftest.$ac_ext <<EOF >-#line 15332 "configure" >+#line 15547 "configure" > #include "confdefs.h" > > #include <stdio.h> >@@ -15414,7 +15629,7 @@ > } > > EOF >-if { (eval echo configure:15418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:15633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > : > else >@@ -15448,7 +15663,7 @@ > CFLAGS="$CFLAGS $LIBIDL_CFLAGS" > LIBS="$LIBS $LIBIDL_LIBS" > cat > conftest.$ac_ext <<EOF >-#line 15452 "configure" >+#line 15667 "configure" > #include "confdefs.h" > > #include <stdio.h> >@@ -15459,7 +15674,7 @@ > return IDL_get_libver_string ? 1 : 0; > ; return 0; } > EOF >-if { (eval echo configure:15463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:15678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > echo "*** The test program compiled, but did not run. This usually means" > echo "*** that the run-time linker is not finding libIDL or finding the wrong" >@@ -15499,7 +15714,7 @@ > # Extract the first word of "$ac_prog", so it can be a program name with args. > set dummy $ac_prog; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:15503: checking for $ac_word" >&5 >+echo "configure:15718: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_ORBIT_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -15578,7 +15793,7 @@ > # Extract the first word of "pkg-config", so it can be a program name with args. > set dummy pkg-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:15582: checking for $ac_word" >&5 >+echo "configure:15797: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -15622,19 +15837,19 @@ > PKG_CONFIG_MIN_VERSION=0.9.0 > if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then > echo $ac_n "checking for glib-2.0 >= 1.3.7""... $ac_c" 1>&6 >-echo "configure:15626: checking for glib-2.0 >= 1.3.7" >&5 >+echo "configure:15841: checking for glib-2.0 >= 1.3.7" >&5 > > if $PKG_CONFIG --exists "glib-2.0 >= 1.3.7" ; then > echo "$ac_t""yes" 1>&6 > succeeded=yes > > echo $ac_n "checking GLIB_CFLAGS""... $ac_c" 1>&6 >-echo "configure:15633: checking GLIB_CFLAGS" >&5 >+echo "configure:15848: checking GLIB_CFLAGS" >&5 > GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 1.3.7"` > echo "$ac_t""$GLIB_CFLAGS" 1>&6 > > echo $ac_n "checking GLIB_LIBS""... $ac_c" 1>&6 >-echo "configure:15638: checking GLIB_LIBS" >&5 >+echo "configure:15853: checking GLIB_LIBS" >&5 > GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 1.3.7"` > echo "$ac_t""$GLIB_LIBS" 1>&6 > else >@@ -15716,7 +15931,7 @@ > # Extract the first word of "glib-config", so it can be a program name with args. > set dummy glib-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:15720: checking for $ac_word" >&5 >+echo "configure:15935: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_GLIB_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -15751,7 +15966,7 @@ > > min_glib_version=${GLIB_VERSION} > echo $ac_n "checking for GLIB - version >= $min_glib_version""... $ac_c" 1>&6 >-echo "configure:15755: checking for GLIB - version >= $min_glib_version" >&5 >+echo "configure:15970: checking for GLIB - version >= $min_glib_version" >&5 > no_glib="" > if test "$GLIB_CONFIG" = "no" ; then > no_glib=yes >@@ -15774,7 +15989,7 @@ > echo $ac_n "cross compiling; assumed OK... $ac_c" > else > cat > conftest.$ac_ext <<EOF >-#line 15778 "configure" >+#line 15993 "configure" > #include "confdefs.h" > > #include <glib.h> >@@ -15850,7 +16065,7 @@ > } > > EOF >-if { (eval echo configure:15854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:16069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > : > else >@@ -15884,7 +16099,7 @@ > CFLAGS="$CFLAGS $GLIB_CFLAGS" > LIBS="$LIBS $GLIB_LIBS" > cat > conftest.$ac_ext <<EOF >-#line 15888 "configure" >+#line 16103 "configure" > #include "confdefs.h" > > #include <glib.h> >@@ -15894,7 +16109,7 @@ > return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); > ; return 0; } > EOF >-if { (eval echo configure:15898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:16113: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > echo "*** The test program compiled, but did not run. This usually means" > echo "*** that the run-time linker is not finding GLIB or finding the wrong" >@@ -15969,19 +16184,19 @@ > # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works > # for constant arguments. Useless! > echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 >-echo "configure:15973: checking for working alloca.h" >&5 >+echo "configure:16188: checking for working alloca.h" >&5 > if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 15978 "configure" >+#line 16193 "configure" > #include "confdefs.h" > #include <alloca.h> > int main() { > char *p = alloca(2 * sizeof(int)); > ; return 0; } > EOF >-if { (eval echo configure:15985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:16200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > ac_cv_header_alloca_h=yes > else >@@ -16002,12 +16217,12 @@ > fi > > echo $ac_n "checking for alloca""... $ac_c" 1>&6 >-echo "configure:16006: checking for alloca" >&5 >+echo "configure:16221: checking for alloca" >&5 > if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 16011 "configure" >+#line 16226 "configure" > #include "confdefs.h" > > #ifdef __GNUC__ >@@ -16035,7 +16250,7 @@ > char *p = (char *) alloca(1); > ; return 0; } > EOF >-if { (eval echo configure:16039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:16254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > ac_cv_func_alloca_works=yes > else >@@ -16067,12 +16282,12 @@ > > > echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 >-echo "configure:16071: checking whether alloca needs Cray hooks" >&5 >+echo "configure:16286: checking whether alloca needs Cray hooks" >&5 > if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 16076 "configure" >+#line 16291 "configure" > #include "confdefs.h" > #if defined(CRAY) && ! defined(CRAY2) > webecray >@@ -16097,12 +16312,12 @@ > if test $ac_cv_os_cray = yes; then > for ac_func in _getb67 GETB67 getb67; do > echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 >-echo "configure:16101: checking for $ac_func" >&5 >+echo "configure:16316: checking for $ac_func" >&5 > if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else > cat > conftest.$ac_ext <<EOF >-#line 16106 "configure" >+#line 16321 "configure" > #include "confdefs.h" > /* System header to define __stub macros and hopefully few prototypes, > which can conflict with char $ac_func(); below. */ >@@ -16125,7 +16340,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:16129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then >+if { (eval echo configure:16344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then > rm -rf conftest* > eval "ac_cv_func_$ac_func=yes" > else >@@ -16152,7 +16367,7 @@ > fi > > echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 >-echo "configure:16156: checking stack direction for C alloca" >&5 >+echo "configure:16371: checking stack direction for C alloca" >&5 > if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -16160,7 +16375,7 @@ > ac_cv_c_stack_direction=0 > else > cat > conftest.$ac_ext <<EOF >-#line 16164 "configure" >+#line 16379 "configure" > #include "confdefs.h" > find_stack_direction () > { >@@ -16179,7 +16394,7 @@ > exit (find_stack_direction() < 0); > } > EOF >-if { (eval echo configure:16183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null >+if { (eval echo configure:16398: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null > then > ac_cv_c_stack_direction=1 > else >@@ -16222,7 +16437,7 @@ > # Extract the first word of "pkg-config", so it can be a program name with args. > set dummy pkg-config; ac_word=$2 > echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 >-echo "configure:16226: checking for $ac_word" >&5 >+echo "configure:16441: checking for $ac_word" >&5 > if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then > echo $ac_n "(cached) $ac_c" 1>&6 > else >@@ -16266,19 +16481,19 @@ > PKG_CONFIG_MIN_VERSION=0.9.0 > if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then > echo $ac_n "checking for cairo >= $CAIRO_VERSION""... $ac_c" 1>&6 >-echo "configure:16270: checking for cairo >= $CAIRO_VERSION" >&5 >+echo "configure:16485: checking for cairo >= $CAIRO_VERSION" >&5 > > if $PKG_CONFIG --exists "cairo >= $CAIRO_VERSION" ; then > echo "$ac_t""yes" 1>&6 > succeeded=yes > > echo $ac_n "checking CAIRO_CFLAGS""... $ac_c" 1>&6 >-echo "configure:16277: checking CAIRO_CFLAGS" >&5 >+echo "configure:16492: checking CAIRO_CFLAGS" >&5 > CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= $CAIRO_VERSION"` > echo "$ac_t""$CAIRO_CFLAGS" 1>&6 > > echo $ac_n "checking CAIRO_LIBS""... $ac_c" 1>&6 >-echo "configure:16282: checking CAIRO_LIBS" >&5 >+echo "configure:16497: checking CAIRO_LIBS" >&5 > CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= $CAIRO_VERSION"` > echo "$ac_t""$CAIRO_LIBS" 1>&6 > else >@@ -16512,14 +16727,14 @@ > cross_compiling=$ac_cv_prog_cc_cross > > cat > conftest.$ac_ext <<EOF >-#line 16516 "configure" >+#line 16731 "configure" > #include "confdefs.h" > #include <gmodule.h> > int main() { > int x = 1; x++; > ; return 0; } > EOF >-if { (eval echo configure:16523: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:16738: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > : > else > echo "configure: failed program was:" >&5 >@@ -16798,7 +17013,7 @@ > _SAVE_CFLAGS=$CFLAGS > CFLAGS="$CFLAGS $XCFLAGS" > cat > conftest.$ac_ext <<EOF >-#line 16802 "configure" >+#line 17017 "configure" > #include "confdefs.h" > > #include <stdio.h> >@@ -16814,7 +17029,7 @@ > > ; return 0; } > EOF >-if { (eval echo configure:16818: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then >+if { (eval echo configure:17033: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then > : > else > echo "configure: failed program was:" >&5 >@@ -17024,34 +17239,15 @@ > # Transform confdefs.h into DEFS. > # Protect against shell expansion while executing Makefile rules. > # Protect against Makefile macro expansion. >-# >-# If the first sed substitution is executed (which looks for macros that >-# take arguments), then we branch to the quote section. Otherwise, >-# look for a macro that doesn't take arguments. >-cat >confdef2opt.sed <<\_ACEOF >-t clear >-: clear >-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g >-t quote >-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g >-t quote >-d >-: quote >-s,[ `~#$^&*(){}\\|;'"<>?],\\&,g >-s,\[,\\&,g >-s,\],\\&,g >-s,\$,$$,g >-p >-_ACEOF >-# We use echo to avoid assuming a particular line-breaking character. >-# The extra dot is to prevent the shell from consuming trailing >-# line-breaks from the sub-command output. A line-break within >-# single-quotes doesn't work because, if this script is created in a >-# platform that uses two characters for line-breaks (e.g., DOS), tr >-# would break. >-ac_LF_and_DOT=`echo; echo .` >-DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` >-rm -f confdef2opt.sed >+cat > conftest.defs <<\EOF >+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g >+s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g >+s%\[%\\&%g >+s%\]%\\&%g >+s%\$%$$%g >+EOF >+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` >+rm -f conftest.defs > > MOZ_DEFINES=$DEFS > >@@ -17315,6 +17511,9 @@ > s%@_PANGOCHK_CFLAGS@%$_PANGOCHK_CFLAGS%g > s%@_PANGOCHK_LIBS@%$_PANGOCHK_LIBS%g > s%@MOZ_ENABLE_XFT@%$MOZ_ENABLE_XFT%g >+s%@MOZ_PANGO_CFLAGS@%$MOZ_PANGO_CFLAGS%g >+s%@MOZ_PANGO_LIBS@%$MOZ_PANGO_LIBS%g >+s%@MOZ_ENABLE_PANGO@%$MOZ_ENABLE_PANGO%g > s%@MOZ_ENABLE_COREXFONTS@%$MOZ_ENABLE_COREXFONTS%g > s%@MOZ_GNOMEVFS_CFLAGS@%$MOZ_GNOMEVFS_CFLAGS%g > s%@MOZ_GNOMEVFS_LIBS@%$MOZ_GNOMEVFS_LIBS%g >@@ -17323,6 +17522,9 @@ > s%@MOZ_LIBGNOME_CFLAGS@%$MOZ_LIBGNOME_CFLAGS%g > s%@MOZ_LIBGNOME_LIBS@%$MOZ_LIBGNOME_LIBS%g > s%@MOZ_ENABLE_GNOME_COMPONENT@%$MOZ_ENABLE_GNOME_COMPONENT%g >+s%@MOZ_GNOMEUI_CFLAGS@%$MOZ_GNOMEUI_CFLAGS%g >+s%@MOZ_GNOMEUI_LIBS@%$MOZ_GNOMEUI_LIBS%g >+s%@MOZ_ENABLE_GNOMEUI@%$MOZ_ENABLE_GNOMEUI%g > s%@MOZ_EXTRA_X11CONVERTERS@%$MOZ_EXTRA_X11CONVERTERS%g > s%@MOZ_PLAINTEXT_EDITOR_ONLY@%$MOZ_PLAINTEXT_EDITOR_ONLY%g > s%@MOZ_COMPOSER@%$MOZ_COMPOSER%g >@@ -17895,7 +18097,7 @@ > fi > fi > >- cd $ac_popdir >+ cd "$ac_popdir" > done > fi > >@@ -18032,7 +18234,7 @@ > fi > fi > >- cd $ac_popdir >+ cd "$ac_popdir" > done > fi > >--- debian/mozilla-firefoxrc >+++ debian/mozilla-firefoxrc >@@ -0,0 +1,2 @@ >+# which /dev/dsp wrapper to use >+FIREFOX_DSP="auto" >--- debian/presubj >+++ debian/presubj >@@ -0,0 +1,14 @@ >+*** Please submit non packaging issue (e.g. feature requests) bugs to >+the Debian BTS and the upstream bugzilla >+(http://bugzilla.mozilla.org/buglist.cgi?product=Firefox) and put a >+reference to the bugzilla bug in the Debian bug report, to ease bug >+triage for the maintainers. Thank you. *** >+ >+If your Firefox installation pre-dates 1.0, you might have had problems >+Firefox not really cleanly supporting upgrade from one release to another. >+Please try moving around your ~/.mozilla/firefox directory to see if it >+helps with your issue. >+ >+Firefox requires the loopback interface (lo) to be up and unfiltered >+to accept keyboard input and function correctly. Please make sure this >+is the case before filing any bugs. >--- debian/mozilla-firefox.links >+++ debian/mozilla-firefox.links >@@ -0,0 +1,13 @@ >+/usr/lib/mozilla-firefox/firefox /usr/bin/mozilla-firefox >+/usr/lib/mozilla-firefox/firefox /usr/bin/firefox >+/usr/share/man/man1/mozilla-firefox.1.gz /usr/share/man/man1/firefox.1.gz >+/var/lib/mozilla-firefox/chrome/overlayinfo /usr/lib/mozilla-firefox/chrome/overlayinfo >+/var/lib/mozilla-firefox/chrome/chrome.rdf /usr/lib/mozilla-firefox/chrome/chrome.rdf >+/var/lib/mozilla-firefox/extensions/installed-extensions.txt /usr/lib/mozilla-firefox/extensions/installed-extensions-processed.txt >+/var/lib/mozilla-firefox/extensions/Extensions.rdf /usr/lib/mozilla-firefox/extensions/Extensions.rdf >+/var/lib/mozilla-firefox/defaults.ini /usr/lib/mozilla-firefox/defaults.ini >+/var/lib/mozilla-firefox/components.ini /usr/lib/mozilla-firefox/components.ini >+/var/lib/mozilla-firefox/components/xpti.dat /usr/lib/mozilla-firefox/components/xpti.dat >+/var/lib/mozilla-firefox/components/compreg.dat /usr/lib/mozilla-firefox/components/compreg.dat >+/etc/mozilla-firefox/pref /usr/lib/mozilla-firefox/defaults/syspref >+/etc/mozilla-firefox/profile /usr/lib/mozilla-firefox/defaults/profile >--- debian/mozilla-firefox-dom-inspector.install >+++ debian/mozilla-firefox-dom-inspector.install >@@ -0,0 +1,9 @@ >+debian/tmp/usr/lib/mozilla-firefox/components/libinspector.so usr/lib/mozilla-firefox/extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/components >+debian/tmp/usr/lib/mozilla-firefox/components/inspector.xpt usr/lib/mozilla-firefox/extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/components >+debian/tmp/usr/lib/mozilla-firefox/chrome/inspector.jar usr/lib/mozilla-firefox/extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/chrome >+debian/tmp/usr/lib/mozilla-firefox/res/inspector/viewer-registry.rdf usr/lib/mozilla-firefox/res/inspector >+debian/tmp/usr/lib/mozilla-firefox/res/inspector/search-registry.rdf usr/lib/mozilla-firefox/res/inspector >+debian/inspector/install.rdf usr/lib/mozilla-firefox/extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9} >+debian/inspector/Uninstall usr/lib/mozilla-firefox/extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/uninstall >+debian/inspector/00dom-inspector var/lib/mozilla-firefox/extensions.d >+debian/tmp/usr/lib/mozilla-firefox/defaults/pref/inspector.js usr/lib/mozilla-firefox/extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/defaults/preferences >--- debian/mozilla-firefox.png.uu >+++ debian/mozilla-firefox.png.uu >@@ -0,0 +1,146 @@ >+begin 644 mozilla-firefox.png >+MB5!.1PT*&@H````-24A$4@```$````!`"`8```"J:7'>````!F)+1T0`_P#_ >+M`/^@O:>3````"7!(67,```L3```+$P$`FIP8````!W1)344'U`8=!!(VV`_# >+M[0``&*Y)1$%4>-KMFWF,7==]WS_GW.7M\]ZLG(WD<+B9I$QM=F18LFI;L1"G >+M-EHD7H`T5ERT!EH@2(.@@.T4!5H!7=(B0`H42%P;@1T[:9JXDMO85BS9KA?) >+MUF)J,2DN0W)(:3B<?7_K/5O_./<M0U&VO,AQVKS!#^>^B_OFWN_W]_TMY]Q[ >+MX>\^_W]_Q-_$29]XXNSPA0O+<F.C3K.IR&8CRN4<DY,5)B;*6V]\XW3S_QD" >+M'G[XJ>PW'I_=(S+QL:IQO_K,E4UN/3[ZCVJ6W*81&$`*03&`4@@K2]O?"!-] >+MZ9VWC28FT7\Z4(@N?>0C]RW_K2+@D4>>S7S^H1>FDCC\M7,KS;O=:.6^>1EC >+M!\I$(V6B?)8@"I"A1`0!A"$N##"`;BF2E2W$R@;%S1TF6O6%BE%?S=:;GWS_ >+M>T]<^M5?><O"SRT!G_SDU^)GSR[>/;?=^MALPOUS<8[LOA&*I2R#I2SE0H9" >+M+B:;B\C$$4$F0D0!+@A0#IJ)H=94U.H)F_46V[46C4:"6MDBN[C&='7GI6/# >+M^4_<,E7YD]_^K5^:_[DAX#O?.1L\^O69>T^]M/Z[9[;5+ZZ5^RB.5!CM+S#8 >+MEZ4OGR&,0\(H(,C$1$-E@BA$2`D"G`.M#4E3D;0422LA:2J:346UGK!1:[%5 >+M;]&L-0F7-IANU*^\=:+PJ0^^Y\2?W'WWB6M_HP0\]/!34__M+Y_[R)6F_MVY >+M7([RGG[&!XOT]^7(9B*B."2,>BP3$O7W$10R2"D10F`=&&-I-1*:M29),^F0 >+MT6HF)"U%LYFP56NQ64MH-9ID5C:Y4YK9$Z-]O_$'__F#C_^XUQ_\).!_[_>_ >+M?-]G'SWWA:?J^CWU_CXF1RM,]A<H9"/"0!($DD!VQS"0!$(0.$=8R!)(@10" >+MB4`(D%*@&BU,2V.UP2@_6F5PVA`80\89,):ZE%Q-3/_RRO:'[SKY'GWQS)>^ >+M_>-@D#\N^'_S[Q[^MY]]_.*C3S;,OOQ`D?V#1<K9$.$<6(NPZ>@<PCID.@KG >+MMP,A"($`1X`E!&AII#8(TV/:]GRW!,91$([^`*(PX&H4RV]OU![\!Q_^Q-<_ >+M][EO[ON9$/`;_^Q3#_[18R_^JPN)E4/E'"/%+(%P8"S.6)QQ.&/!.IRUX/RV >+M<"DA`B0."03.R]!_=Z`T:`O:^-%XCZ--NNU)"9VE)`59`<U\+GCTVN8[/O._ >+MGOWRQ_[UY_>_K@3\_??]_H-?>.[*Q]>B.!@L92EF0@_26)SUAK4XEY+0L]^E >+M"@@*640;M'`$PA$`<29$2@'&2[X#O+UM/"'.>'*$->1P9'&H*.*;2]437SMU >+MZ4L/_L?_O?]U(>"W/_8_'GQRK?'Q:B875O(9,E)@M<4:B[5^="8=M<4)`<4< >+M3@BL32\\$R%R&?\/G4.F"@AP"&MQB>X`=MJDBK+^M\;@M.V2D:HB=H[8.4PV >+MQPMCXR>^=6GC2W_V9Z\M',+7"OZ__N&C#_ZG[Z]_?./0_K#XTCR!<!ZX,3@3 >+M8+7!!8$'&F61AR8(*D5D'"+6MW$;VY#/0E\!B\,YBVLG/P<."`)):;1":W8) >+MIS1H[4E(P\&UPT![,D4@*;[Q`'*XG_KR!CM-16W/((]OUDZ,/[_XR+ESL^\^ >+M=FSZY9^X"GSZL]]XQZ>^M_B'YXY.Q1ECB!=6D5(@`TDP/N0;FD3YC"XE,I\E >+M.C!.$$FD$`3Y+$%_B;!<0$8A,JV_HJ<.6P=;"QMLSJ^1-!)THM'*8)3"*(U6 >+M&J.,M[0RF)9";59Q4M`X/P>;.X1OV$>CD.7*<FVX^MQ53GWW?W[E)PJ!LV<O >+M37_YR;D_/C4TE!%Q@$@2K#%>Y@-EQ%VWP"W3<&@26\AZ192+&,!8AW$.`]C` >+MM[K&.;3U9JQ#68M*CXM+.:PR6*W!.:SV9=!I@Y""N)('UPX-OU]O5JD^?1ZU >+MM(Y9V227)(0"MJ=&^?JV_1>_\]$_O^<G(N`S?_[\/WE,1U.F7$`8AYU?P>9S >+MV%(.=_(0QCEL7P&#P&SL8#,QC`][\+WF'-I:M&F#MQZ\<2ACT<8B<Q&%T0K9 >+M@1(R$_H>0!L*XP/LO>\VAF\_Z%-'2HHS72(P!A%'A(4LQ5`B!%R>W"-?6&E\ >+MYK&O?F_RQ\H!?_!?OCC]J>\N/+!Q9#^DR<V^\\W8V/?O1@HO14".#T&Y`*4\ >+M)@R0SJ*M1`J;2CW]DQ:LW^,$6.'+H3.6I-:DL=U@<VX5E2B,\E(780@"DNTZ >+MIIGL!MZC!F$-S6=G"`Y-D!&29B[BJ3`W_=!?SSP`_/L?20'GSU^,OO&]^7\^ >+M4RA.$DA?VHSU'5KJ1?V5%VC]T:/HC1HF"K^PN1EO;\;SN&;5Q'04H8TF, >+M11E+=;/&XKEK+)V?9VMQP\>[-ABM,5JS=O8EEIZ9(1XHT7=X@GBPY$/#F&Z_ >+M82QZ91.[4T=&$1E`6D=UN,*W7][YI__A]QZ>^)$(>/*IEVZ;M_)WDH'2KCIL >+MM<48B[$6>]=A;#&+*69W@?7;-C4?Y[HC^=32X[=7=UB]LD2CUO03H6:"5J:; >+M!+5/?$FM!5(P\*9#9$8JB##`:4-F<HCL@5%$&!`,ELG]PG%`$%A'Y(!`<C'* >+M'C@WN_Z/+U^>%:\Y!)XYO?@/3]M(@DMKK@5I<=)ZV4N!*68(?NT>C`!MK"]I >+M0B*P""$1.`06G$"XE&OA<$BL<U@AV+J^CFTIG$I[_T2G6=]_-\JK(#M2QDF) >+MM9;^-QTAW-//XF.G*-UV"#DV0'9M&YN-,4)BFQJL)<*1&$MKN,+5U:7?//7L >+MW*>!:S]4`8\^^N3^BVO-#S=+^;0=M9TV%).6(&70QG:E[79+7)O4XSTJ:'O> >+MJ\#O<T&`4H8DT2BE4<JDHR>A383,9SQISF&M(S,VP-#]=Y+9-P(+&X3/OXS< >+M:7:O5UNDL03.@A"<:;!G=:/^H=<4`C.7UMYZ;E.-(T77^VU+9V9M$I1.I6XL >+MNM%"+:VCM$7MU%&+ZZAZJRO[-.-WR-"6>*R"BT)L(#SX1*7@-3K-`48;"`), >+MFENL\U4ES.>P3\Y@S\SYUCN*.M6A?;V!GVNSD<GRS-G5=Y\]>[[P`PFX>/%B >+M-+]<_?4E&W1!I]U79X+20X#1QA-0K:,OS:&-02^NDERZAII?0<TM>8]:BS+& >+MDZ`MRAH2:[%12.'P&'W']Q&6\UWPJ5D@.SZ([,OWE%6+M0X+V-4=G)2XN]^` >+M"V6/P]+2:"S"6%P^9GZK];8K5]:F?F`.J%8;>V<7JF]/XB@%+D`*$!:D`2%` >+M:]A>Q0[T8;(QHM%$K&_ZI9U6XK-R*"$(8+,*C19.9G%"8ITA%`+C!(%PF/9Z >+M0!A0.#2!BT.2K;I/:OD,4:5`V%?`!;)37:QU?NZ1"7'W'O-S!=TMBV@_9W#: >+M=@DPCN<6ZFAC'P`^^JH$+"[N'+ZR7,L3]WDF>X'+M&>]^C+4&[BY"),N;8DX >+MA#A$*`.1Q)D`%_IY@EO9Q`6#N$R(=0(K!8$3&`&!$'YF*$"$DMST&#DZ<Z6. >+MW.VNTIIN:X.5TA/0:.%4"ESU*%;YZ3/:L.DD%V?7)F9F9N(C1XXD-R6@7D\. >+MSJZU8/@&X$*`-7!M'G:JWKO&X)(`$P8($_E%BR@$$T!H04L(#>ZE19S2N`/C >+M6.$\"<*O!AGA//AVLR3\S,BE#%@'KD-"VEH;Z\$G&GMM&;NVA5U8P24*F\WB >+M#DU[1:C=JE`R8'ZY5E%*98%7$C`S,Y-_^IFK4YO--(:D`)&2(`QLK,/**LA4 >+MWD$`@9\1:F/`1/YW48"+0@@DF``7&-BI^V4M*0BMP$B!%*1+8EV>=WU2!;B> >+M[&^MP6B+5;XGL?4F=G$%M[F-:R4XO8Z5`6YXCR=`]>2N4')MJ2J!_<#I5Q"@ >+ME,JO;]9/$@C_H]HV)`T8GP"1@;5U2!3MSA!C(?`9ND."#E/3G?5^F\O@*B6L >+ML81.8(0/@4"`Q!,ATE`0WO=I"+B4!+^8XM+I=Y<`@QWHQRZL8I,U;**P28([ >+M?18;7\(5^W`CXS@1>#S6L55-[FTV]<F;$J"U9G.KB;/X'VQN0'4+HMB[8WW# >+MCT9"D(*W/A20?DU`=V(OP$4&P@!7R.&T]5+M[R.0PG,G=JN`5`FB`]YUEM7: >+MRVQ6^\61-@G&@=T[@;W\D@>?)%X)V]O86@,G(URV",*K<Z>N"ZU6$M\T"89A >+M.%2K)YAV&<D68'T9KE[V7I=!5_[6=HF0TN>+0&*U1+>]K[4G8&$%M[J!VS.( >+M/7D8&P9>1&D>\#E`^,[1I6L$/02TYR'.N,YJD]4I"5ICEM>PC49'`58E6*5P >+MM67<PCQ.!E`>@&R1ZIXAE-+![.RLF)Z>=KL($$),ZG;?KPS$>8AST-CQGI8I >+M6-L&'?ACI4SC78*46*W1@<:I`!=VS=::!$V%"ZVO!*GW.WFVAX3=!+15D)*@ >+M?2C8I16_?6D6DRA,DG@"$H55J24)Z`2VU\%I3.$7D%(.6&LE8'81X)PK!%)X >+M\,I`?0=J6RG@'M"VQ^L=(D2J$.%)$`87R"[X(""0`:ZEL<H02(GM)$(/7K9S >+M@$M'BU]1-JZSJ.IT=U9J6P;[PO>QU5KJ>855"28=K?:&U;Z"64T8Y0A#V6^M >+M#5Y!`!`5<I+(&90VT&Q`JYEZ7:9@V^!3$[U$F/2[)\%IB5'"DY#+XLI]N(9" >+M!B(%WVNNNTSFND1T0L!V5YFMMKBSY[`KJ]A:'=MJ=3QN4OE;[4>,!N?!XPRE >+MK$!*PO9JW(TA4*N4L\JU-,0&ME=!JZZ7G4A#(04I4H^+&PD1:5V3."$QI2+N >+M^%%<%&.;"8&4Z>%=`CK-$/B;*ZX]]N8!3X*K-7`OS6&;3;]LIA*LTJGW=4I" >+MXG-0"ASGG92-Q'-!()M""'NS1FAM<K*T$AH_"_/S``U.IC<W4@6TU2!2-8@> >+M$E+@G7UA"`>FL'$&UU3(5/J!%#T$=+._0/B;)VTB;`\!;1+FK^,:#5P'N.YX >+MW&B%U0IKE)>]T_[:<1!$#`SDKPO!JI32W*P,OES(9QC*"ZXI#:4Q#Z:QX9DD >+M!=_V<I@V/NWOMI>,%%4<^F-:"B=\`V1%&@(=$GISP&X5M.\J]:J`M75LLXE3 >+M"JLU3JMT`55US(-/S?\C!#%3^\H((;8.'CSX2@5(*76QF)&C_='5:]?-%%$` >+M?7NA/`&Z#JTZ5.M>^F.#7ATKU_Q)>D&+E(@@@""$,R_"OGTP-.QOATN)$6D[ >+M#,BE342MA9@<1.:B3AGL5`/;)<&MK?J;)ZT$IY.4`(TU/@>X=L)SINOYU,*H >+MP(ECPTMA&-I7ZP-T'$?-PP>*ET]=69UR[0L(`XC[O-4V(930-P)6@6K"ZG4/ >+MVO:`%_X6%RO+?KM>AY-9F+T$(WM@9!0G\$OF:U7$BW.(/>5T%2E-A+TYP#EH >+M-'&GGX?:#LYXX.W16NW/Y]HQ[WK`>[QC8Z,,CY1D&(;77XV`[2`(SK_UKK'X >+MH<<6:2D!+DC+D?,>'>GSA"0:%F:@NNX9%S>`I_<[OJ+,S\/B`BPMPG$+@R-> >+M$:,57#D/VB"T2<M@J@+;0\+\'&QMI(NA&HS&6=,%;MM>W^UY'_\YIO8./-57 >+MRD?.N1=N2L"A0X?LZ=.GE_?MZW=3>R(N+)IN0^(""%TZ#TCG_9M+/C?T@N\` >+MQX^DA%1WX.+9[G,9ERY`L9+^!H@#:&GO./P$J$.\=1[8SK8'JY*TKG?+6Q>\ >+MNZD%83]WOW7O7"83KP=!4'O5]0`AQ'?Z^TOO/GFL?&KFY:4[G0U[DE"[#78^ >+M#*SR%R1Z8K\-N$-&S[85W8:_5H6F\D2UFJEDT\0:A#W$I^=.$@@R4!Z&0C\L >+M78'ME9XR=R-XNDH0DO'Q26X].;H31='9*(H:KTI`%$4KN5SNVKWWC)NO?7/I >+MSO6&]MYWSO<`84J$E?Z"U'8/R-3SR*YGVVJ@APCP(*M5F#T#29L`_,1KXB"4 >+MAFYHAP44AR`_F.(+86=E=YGK`-_M?1%4>-,=X\\.#Y>C.(Z?/GCPH'O5-<&C >+M1X_6,IG,]Z>GA]VM)TI+0FD?[[W6WM<WG4[:TX;#JIZQ9SN-5V_I_E8#7CH/ >+M6RO0J$*SYFUGP^^O[O@P:RD_!4\4*.LMT>!"R%72,F=O2'B])A@<W,<[WKYO >+MIE0J;4DI+_W05>$P#+]5J93MN^Z;^&XYRRN!M]*1K"^)'0)N8D:_DB"C0#=A >+M9:Y+BE%=XFI;</X[,'<>FHD_7_N<B?+;]1W?F78\;F\84Y/]W/7FO=<.'=S3 >+MRF:S3\5QO/-#"8BBZ'H^GW_VEEO&U^]Z<V5=ZINHH'U147^:@75WO*FIFQ"C >+M=JO%].Q7#5A_&:K;716T5)<(6009DQ;2'NM50<C8Z#3WOVOJR4JEHL(P?*Q7 >+M_J]*P.'#AUT<QU\>&!@0O_S+^[X],1Z`;KV2A$1#-`GY(Y`=3Y.1[BE)[6WU >+M@U72SN8=<E)2C/+)KY?P1'>)(/LJ\O??HV@/][_KP%</'1JKYO/Y)Z(H6GK- >+M]P:C*+I:+!:?/G1H8N.][YW\6BZ;@-GQ)6@7"0[(0;+2TX28W:KH_=[9=Q,B >+MVMG<:?_L1FD:7/:5X-OGED.0V7<3!1B$R'+\^.$+]]UWX-K`P$`KCN-'#A\^ >+M[%XS`4>.''&93.:AP<'!ZCWW3,V_[6UC7PR"*KCUE(A6-SG59T%O[59`+\B; >+M[;,W$F)`9J'O"!2/0/^;(!Q*P=\0`JU>%>R#\#B(@T`&T(!@SYXCUQ]XX-@3 >+MX^.C8:%0>.3X\>-+/_+S`<>.'5L^<^;,E\;&QG[]?>^K+Z^NUJX___S%<6OK >+MX')@LMYZVLWN0R\]HWN5_>WR*'-0NLW_#U'P;E$V)93=[;#=/3GR5DB?]ID" >+MZO3W]YL/?>CVIZ:GQ^/^_OXKV6SVL1_[(:E\/O]8?W__P;U[)][RP`/-K]1J >+MS?MG9BY,.%=+8S"7GERE@I(W>0+7W?S)W'86-PW0SGO0:7]\9S9XPWR@W14Z >+M#2X!6JDU@2;%8K_^P`>./7S''?N:HZ.C]7P^_\='CARI_T3/"I\_?WZ@6JU^ >+M='Y^?N_%BU>;G_C$L_=?OGQFPEJ;DD!ZUUG2?N@-QH!\"GXUE:9Z]<L(AD#N >+M]PIP/4].N51=G=R@4NL%WP(22J41_?[WW_GPV]]^6$]-3:F!@8%/WW+++?_G >+MI_*P]-FS9_?L[.Q\[-JU:\-7KLPEG_O<Z?M/GWYFPIA&&GL;*<@0B('#J3K" >+ME)`&<#G];^8FE^#2#G(:W%!/4M/I\3>";UL3L`P,'%`?_."=7[CKKFF]?_]^ >+M/3`P\-]OO?761WZJ3XN?.W?NX-;6UF_-S\\/S<W-M_[JK\[?\<033]W:;"ZD >+M_ZJ1>IU4`5%*0)BJH`J,`@N=+NV5GWY@/`7=:ZJ'A"X!0F38O_^-BQ_XP.W? >+M/'%BK]V[=Z\9'!S\8JE4^LOIZ6G[4W]<_MRY<P>WM[=_<W%Q<<_\_+QYYIEK >+MQ:]\Y7OO7%@XW>?<5NK]&"CT@`_3"P[24ZZF'A<W/+(XD(:42`DR/=[7-Q`` >+M^?PD=]SQIC/O><^1IR<G1W.3DY.J4JD\5"J5OGSPX$'UNKTO\.*++XXTF\U_ >+MN;R\/';]^G5S[=JR^>I7+]WQW'-/WU:K7<6YY`;OM\.@G2#;TA4]U2/?DS/L >+M#R#`$8;#3$W=>OV^^TY\Y\2)L>;X^)@9&QNSI5+I+TZ>//G7/Y,7)LZ?/]_? >+M;#8_L+FY^?<6%A;4RLJ*N'IU53_^^.P=%RZ\>.OV]BS.[?2T&VWORY[V0_1T >+M<<$-'=V-1,3$\1[&QHXOO.4MQY^X_?;1G>'A`3DZ.AH/#P\O%HO%/SU^_/BI >+MG^D;([.SL[)>K]];J]5^975U=6!U=56NKZ_K^?DM?>K4]8,S,U>.+RU='=)Z >+M&=CN*8<_Z-2]QV0(@D'*Y0GV[IV>N?WV?=\_<F2H.C!0CH>&AMS(R(@LE\O? >+MBN/X+XX=.[;^-_;.T+ESYX9;K=9[:[7:/>OKZ_'Z^KK8VMJRFYM5O;Q<=^?. >+MK>R[?GWMC1L;*R-;6\LH50,46K=2-3BDC-*PR5`L]C,PL&=K:*C_V3>\861] >+M__[R5G]_0?;UE:)*I<+@X*"H5"I7LMGLYW.YW/=?2[)[W=\:FYF9$4JI2:74 >+M+S4:C;=L;FYFM[:V],[.3E"KU6RKE=AZ/;'-IF)[.REN;R=]]7I"K6;)9`39 >+M;$0N%U*I9!:+Q=#F\QF1SV?"7"Y'H5"PY7)95BJ5H%`HS&2SV<>B*'KNZ-&C >+M]9^[]P8O7KPHE%)#QIA[6ZW6'8U&XT"M5K/U>MTU&@V3)$FLE$)KG1ACG+56 >+M"B&L$((@"&3D/S:?S^M<+A<7BT5;*!3J<1P_%T71M\(PO'STZ-&?VINEK^N; >+MHQ<N7,AJK2O.N;N54H/6VA-*J2&MM5!*66,,UEHAA'!22H(@$%$4B2B*5!`$ >+M9Z,HF@_#\!0P%\=Q[="A0^YOW:NS[<_ERY>%UCK66@=`&`3!"##BG*L`B1!B >+KQSEW52FU$X8A412U#A\^;/B[S^O[^;\Z\7.<>GK+0@````!)14Y$KD)@@@`` >+` >+end >--- debian/debsearch.gif.uu >+++ debian/debsearch.gif.uu >@@ -0,0 +1,12 @@ >+begin 644 debsearch.gif >+M1TE&.#EA$``0`*4``/___^^_S]!(<,``0,@80-`H8-A@@.>OO\@04-]_G]!` >+M<-A8@."(H.>?K\`(0._'S\@@4/??W^_/W\@00-^'G]AH@/?G[^^_O_??[^^O >+MO]`P8-!`8.^OK]!0@-`X<,@84-A@<,@X4-AHD.^GO]A0@.>/K_?/W_______ >+M____________________________________________________________ >+M_________________________________R'^%4-R96%T960@=VET:"!4:&4@ >+M1TE-4``L`````!``$`!`!GA`@%`8$`P(!<-A*+P@A@<#@`.P>"Q#R80R9%02 >+M#T"`(&&22LQT>C%@I`,#P?#B&$J'&(`#*U0DF!8C?&I")%R$:48("8Q&"FD- >+M#F%J!A`11`.756X`FI)"&1I#&WQ4#QU,'T,1("$)(@N#0@^/B(0*D[9I)B(9 >+$A$$`.P`` >+` >+end >--- debian/mozilla-firefox.install >+++ debian/mozilla-firefox.install >@@ -0,0 +1,39 @@ >+debian/tmp/usr/bin/firefox usr/bin >+debian/tmp/usr/lib/mozilla-firefox/*.so usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/*.chk usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/components usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/defaults usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/greprefs usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/res usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/searchplugins usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/icons usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/firefox-bin usr/lib/mozilla-firefox >+debian/mozilla-firefox-xremote-client usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/regchrome usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/regxpcom usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/xp* usr/lib/mozilla-firefox >+debian/tmp/usr/lib/mozilla-firefox/run-mozilla.sh usr/lib/mozilla-firefox >+ >+debian/tmp/usr/lib/mozilla-firefox/chrome/browser.jar usr/lib/mozilla-firefox/chrome >+debian/tmp/usr/lib/mozilla-firefox/chrome/comm.jar usr/lib/mozilla-firefox/chrome >+debian/tmp/usr/lib/mozilla-firefox/chrome/en-US.jar usr/lib/mozilla-firefox/chrome >+debian/tmp/usr/lib/mozilla-firefox/chrome/help.jar usr/lib/mozilla-firefox/chrome >+debian/tmp/usr/lib/mozilla-firefox/chrome/icons usr/lib/mozilla-firefox/chrome >+debian/tmp/usr/lib/mozilla-firefox/chrome/toolkit.jar usr/lib/mozilla-firefox/chrome >+debian/tmp/usr/lib/mozilla-firefox/chrome/pipnss.jar usr/lib/mozilla-firefox/chrome >+debian/tmp/usr/lib/mozilla-firefox/chrome/pippki.jar usr/lib/mozilla-firefox/chrome >+ >+debian/mozilla-firefox.desktop usr/share/applications >+debian/mozilla-firefoxrc etc/mozilla-firefox >+debian/mozilla-firefox.xpm usr/share/pixmaps >+debian/mozilla-firefox.png usr/share/pixmaps >+debian/presubj usr/share/bug/mozilla-firefox >+ >+debian/firefox.js etc/mozilla-firefox/pref >+ >+debian/debsearch.gif usr/lib/mozilla-firefox/searchplugins >+debian/debsearch.src usr/lib/mozilla-firefox/searchplugins >+ >+debian/tmp/usr/lib/mozilla-firefox/chrome/classic.jar usr/lib/mozilla-firefox/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/chrome >+debian/theme/00classic var/lib/mozilla-firefox/extensions.d >+debian/theme/Uninstall usr/lib/mozilla-firefox/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/uninstall >--- debian/mozilla-firefox.desktop >+++ debian/mozilla-firefox.desktop >@@ -0,0 +1,16 @@ >+[Desktop Entry] >+Encoding=UTF-8 >+Name=Firefox Web Browser >+Name[fr]=Navigateur Web Firefox >+GenericName=Web Browser >+GenericName[fr]=Navigateur Web >+Comment=Browse the World Wide Web >+Comment[fr]=Navigue sur Internet >+Exec=firefox %u >+Terminal=false >+MultipleArgs=false >+Type=Application >+Icon=mozilla-firefox.png >+Categories=Application;Network >+MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;x-directory/webdav;x-directory/webdav-prefer-directory;image/gif;image/jpeg;image/png >+StartupWMClass=Firefox-bin >--- debian/mozilla-firefox.dirs >+++ debian/mozilla-firefox.dirs >@@ -0,0 +1,7 @@ >+var/lib/mozilla-firefox/extensions.d >+var/lib/mozilla-firefox/extensions >+usr/lib/mozilla-firefox/extensions >+usr/lib/mozilla-firefox/plugins >+usr/sbin >+etc/mozilla-firefox >+ >--- debian/update-mozilla-firefox-chrome.8 >+++ debian/update-mozilla-firefox-chrome.8 >@@ -0,0 +1,14 @@ >+.TH UPDATE-MOZILLA-FIREFOX-CHROME 8 >+.SH NAME >+update-mozilla-firefox-chrome \- maintence script for Mozilla Firefox >+.SH SYNOPSIS >+.B update-mozilla-firefox-chrome [ -v ] >+.SH OPTIONS >+.TP >+\fB\-v\fR >+Display warning messages, if any. >+.SH DESCRIPTION >+Run as superuser to update the installation of Mozilla Firefox. >+This script is normally called by the package maintainance script; however, you may invoke it yourself if you've added chrome to Mozilla Firefox. >+.SH "SEE ALSO" >+.BR mozilla-firefox (1). >--- debian/mozilla-firefox-dom-inspector.preinst >+++ debian/mozilla-firefox-dom-inspector.preinst >@@ -0,0 +1,10 @@ >+#!/bin/sh -e >+ >+if [ "$1" = "upgrade" ]; then >+ # Remove old conf files >+ if dpkg --compare-versions "$2" lt 1.0-2; then >+ rm -f /etc/mozilla-firefox/pref/inspector.js >+ fi >+fi >+ >+#DEBHELPER# >--- debian/industrial.jar.uu >+++ debian/industrial.jar.uu >@@ -0,0 +1,11543 @@ >+begin 644 industrial.jar >+M4$L#!`H``````(!SE3$````````````````(`!4`8G)O=W-E<B]55`D``S]Y >+MR$$)9<U!57@$`.@#9`!02P,$"@``````E1)K,0````````````````T`%0!B >+M<F]W<V5R+W!R968O550)``/*$I-!"67-055X!`#H`V0`4$L#!!0````(`)42 >+M:S'?_8ARC08``'L3```5`!4`8G)O=W-E<B]P<F5F+W!R968N8W-S550)``/* >+M$I-!47G(055X!`#H`V0`K5AM4^,X$OY,?D4??`$J3DAFCMH)=UL7`C/#+0-3 >+MP.[4U-9]D&TEUN%(/DE.R&[M?]]'LIPX+SM,P:6*BB.WGNY^^D4MNL>M`XJ. >+M(_JD4CZ@?[,9.R/+XF@N4IL-Z.T9"9ER:2,LFFCJI:3(SRB)8F9$$JGQV'`+ >+M20<#L%^X-D+)`7WZ?$V]3J_[`=_]SDGWNGKHM0X@]9!Q2I2T0#:DQF0S86@L >+M<DY,<S)E_%^>6+(*+SAL^TWD.://99R+A*Y%PJ7AM2:@00T=.LG]\&[_Z(P6 >+MJJ0I6Y!4EDJ(KU3PIX07%H[!A&F1"R833G-A,T`YE`#2H:\!0L6609I!OEA4 >+MYBZEB%ELRZPM!MWN?#[O3"MK.TI/NN"@Z_V]5V,[=ZZEPE@MXM+RE$HPJ]>P >+M8&%30$&GI/WA/5W=[Y/CV[0!]N7JX>/MSP_T97AW-[QY^$JW[VEX\Y5^NKJY >+M:!.'(X#E3X7F!N1J$LY)GG;HGO.F.D"-566`*7@BQB`W9W)2L@FGB9IQ+86< >+MD!:3#%%B,J5<3(5E%JR;E?6`J1E;QO86FX1D.8V0,<ZM3RM6_-I*]$H**R!Y >+MP6<\5P4P`\&;&)"_4!J<W"G#9<SU!"#T6>G*GD1SYDB+%W[W-JRC?X0`>G_H >+M<'1$_9.37HCYEGB'AGE.=Y7O=]QP/0.%WNH1$M>'2.E#<S3`"M$YE_1!J70" >+M1?^(N?R7Y-8DK.`=Y-B/=+AT9EC:3.DC#S3,+3@&G]"Y:'L[=A>%2\*8NS1N >+M9@TV3YT@D$+0W>J'FY_I`Y=<0]GNBJ&^RXH<;.E0-BC-_:,V5@,;#N,:V0.! >+MYZ!0>AM@UQ4:H%`S\TPD&27,5)E7:#43QL<K1-EUA9"$OD.X*+$""9NP&)X+ >+M:2QG*<"\O'(%%R,U.W0U]B4^%R9SC8+EN9K[0E?^A:99,'&-227S!<"V25RC >+M<-VFML]]UT>6>I23-?CML*#SKQ7NT.1[FH-%:X6;MMH.I!1%Z!&0PRG/N77E >+MMT&;]]X;I'F1L\3S.O7MRXO"3(0(8$[$F]G<K?G_2J%75;+AZ9+55'E_O1$\ >+M),6F$:`%>(DH!!+6I^AW,!&PEEPPB88J^1HMNPSS]7+L/G1Y<T'75Z/+F_M+ >+M.K^^'?U4K;>.NZU6!U5IE3Q73_1[BV"41M4-Z*1XHG?X.PE_?T-+1-]@TIZU >+M_FCN.O</?B\.N]\B9")GVAT0./9@YUEKKWN,E['2<&9`/8`9E8N4+*1,@>QU >+MF+7F*.=CZZ4::[[_A,4]&`TTECQ.M`)!4:)R!=PUM+T<9T)D["+GD9BB.0^H >+MU/GA?I)I->4X=F*MYJC5KGD4LHNV/^[>%KXI=@HYP5G8V@NP7Y!Q:O[`GQQJ >+M[<,)GI=$X;E@:8K$&]`IG.OUO9F>#(171V.5E,:1H:<LW\W>CQ26HCC$H5;E >+M*'R6_/7MJU\B"9$)L\F;?D5KQBM"J]\[$`>9.\O:M+7N?0'D7\3TK,Z"ZHT/ >+M9A4@$'#P[H?SMY?]31FKBN=$?/R?$XH5+)SNDMI.EH\`S!WH*M#+)1]K(I]H >+M.ZCY-<EX\LC3?^Y;7?+]_U31>IF&EY#XIG<Z'/W]FR3N%MD@<;?0)HDKJ6T7 >+M#T:]B_[EY<K!&,WUL4'=`3IU.`Q#HKK,\>I\44::3_S@BYYH#]%EVCXCVQ2^ >+ML'($G"V8.CNW7FS%YEOZ*AU!X>G;AD*O\;,6,Y8LOM?P"H!6H+7E:SA-R]=> >+MO,#RH+'ZJC5ZE>\QUI489>/OM/W=:<-VAU?;O@[4-'[]S0NL#SHKZVN=7NF% >+MFLM<L=14S.P];W^O_\,JE`ZXMG\#JNG`QJL=5?V,`T%IY4"MU&L=IC-W_*7? >+MFSJ]TT;J>]C:_G6DIOGK;UY@_6DC:Y<Z6[@",3]]-4>!<&@\<X`[YXLJI4<8 >+MT"9*"VYP%C4@ZW,RG/%OJL/GF[M^Q<5"/M-J#][C,QKMMK'J2=LMRG5V-P9R >+M<RWD(_U.K_]LSC#(B;/7`EH<%1&&7*7]'7)0C82YP%SU,L`E#^6+$'8`EMHX >+MQ$()W,/T*T%;?[S>J'7`9I@'+'$WQ]=%>T4B;@7_!PXIE`X?7^`ZK2;(\HV% >+M@PSWN:J"MA/\(=.<7]QG#&,J\CP5!G><13U[`VF&F="CF56%M5L=PZV[+)EJ >+M\-_;FMU=YHT%S]-0VDSR_+UF4[Y=R*=^X)TB\>O!\NT)GU;[PJ!];YFV9?$1 >+MTW?A_E?2<?`P+!*R*&V8>E=S=-_-T5NWCC\!4$L#!!0````(`%2"9#$B[[98 >+M9R,``,HC```8`!4`8G)O=W-E<B]P<F5F+T]P=&EO;G,N<&YG550)``.PG(I! >+M47G(055X!`#H`V0`G7IE3!Q0E.[@[NX4*PX%BELI[EY<BQ4&M\&A0''7P4JQ >+M%M?!W0H4&-P9I+B[#Z^[F\UF7]ZO=Y-SOAR[N3E_OG.3$ZVIKH"#28D)``!P >+ME!1EM?_A]W\BC8[Z3^?%!M3\`U0K%059P'^>AX_MP?\`PU71T`,`P"+Z#T$` >+M@'/)_SG1/)74Y-!FL9!)"%D/;8Z````]0$GV@Z[O\DFN3Y;>7.>=E.-9X/*? >+MW(.(PCC>[YY,,2&Z<EJU.?:S_D48LBF.ERP70ZMW?G-,I=D&/PC:6^L4ZIA^ >+MA/RP0/@@C7P`#*&P\!/;^W-@=]8Y_S1\S(^[K?D>!'OJL).8#%*7\D\_>X2/ >+M&AUQ_$Y[51I$*4[8]G?N>;;3521##,%ZJ]H#-45'F(9H:2>K,CTT?A&BN2`' >+M0+3-[SOOW\YJ>;8GNE>_NNWD-$OZ6D)HX$I,4-%1Y2$T@VA6UAS[Z;Z=<1:' >+M!C%PRMG]92R=^4/?B]CKAY<LG'#8+S-5#P4D-XZA-HF*:+D?(3VJV1VW_3Z` >+M9^EKNK6%-OQ%Y8NBBNK=E>T)RQG(Y#G(Y*_=WM1B\G?AFJC`7RQ!CXO]]C+T >+M?@B%%R2S18@_3T@LEN1`LBMA`!N;DH\Y8#`>@I)T$$H(Z9I9!>W")WWNUXLS >+MG@FMY#(=-*&TW."=!0H!>WJYP<'[`,.6-6>CY;!9H69"3-1O^I\6L`,?TE&D >+M:"6VJ3A,#.%T0)/G/_,UY"&H(39E4$\R,ZYO411O*.,`^%A,;8D5]PI(O#BE >+M;OV1%Z-46$NF3;&<-:&Z89R)!6XS$WNYV:EN$K>\MD(;):%/-@BL(98]N!;B >+MM32UN2HI>AN,RZ0!UY,:"FAX^ZE>FY5+[:%+/5_H41??NDUF][PG8E'-VKKP >+M1068K4#$*"DI(6>P[E>7'F/I>.N@+NS?#Q-TI'^S<<3,8P1.L@)/Y1J$';?B >+MLUK.[4"_QT9DV"(<5$2W6$1`*/?NEZQL9Y/W&-L@EX?+@UA2'C.IV^>*UQ:' >+MAXKFX$%Z62+1#+ZZ]'A;>X7G=:EZSH!K#'4*,=1,*(7(!:?VE1'HT@=OILZ: >+M:U0]18\O*G;/%"UC*'$R1ZY>@Z"N/%#\9L1(5P@_AF>*P#I$S87'J/=8I0S) >+M!(\3U<KWZH4IK&JR\YYOYFU>R8_D6B<\9&V=TOSMC_9[W_^BHH4/8Z50;^Q] >+MC,1NW=S-<>'N/._#:GI^#DC3EBW2\CY>[!U-YZAJ/^ORESC'KQUX"#[Z3'E7 >+M!9,LX*'R#M`'<Z&:>=V\]WU^2"/^2QC'\GOD<LN-0J`1]1V7DIL9[@V01I%M >+M9/(B9<?M3;C%V7JG^,UU`[63D_'S07N-V2-)7"OJ7X23L?),3;I?PRFD8\T\ >+M;TP6I@9#SF`W&-)O\!_K4VL5WE'_(.C1*%/-#Q@LGZO80Z3IR8!_9;]-_[QS >+MU3^VJZEIT%.<G>J0$`&"-^,UO#38=#1YT^@UH8D`+V4%I(4!L^J$`7:(.7#X >+MZ)>);@O,BD].:+ZT60FGW,P$3H%;O^RL^4OSJ[1_$:/W)N2U$X>L;'-Y!V1O >+M=_JHFYFM'WGL_GE8`K]W?#3Q6?,"+QPQXZ/CHR,G:?.Y_U5T[KB0WV[=RQ?S >+MGRY6FD2`>:#V>O%)T$BUW#3$;!V'DIFY<8UNES6R%LQKIBGVE4JD;%CH)!43 >+M*Q;JS%!+HX=:[O^U?4)7(%K4UGKG2B\%/]#X)5X"8[:>;/U[$!SEP06GX`[X >+M1/&Z7Y0(]SI=;<6Z=&]X&_#ZY(%\WLW=ZCMO'C)<G2L40?5Z941:;2SS!+D[ >+ML*_<*?)9V!SSXK<<78*6I2F*PU'HM,64&MKA<YGZ_%=]&-0_$S3??0^+=_R" >+M0&I55HUT_UC2T%!</S(Q\@8?^Z+S[,68M*^%.3UJKN![=,O)*$=-[D4.[%F^ >+M`9C3UB9ZM.Y_=I+%;Z>^DBOB04D7<-Y["P93CO%BR\=3#FH$71)9[T,+A1"( >+MJ'=G-8I#/_UY6AH;E'Q__B@"*ZG_P1,8<X7P02N4;ARJN/3=$TF`ABK4N67D >+MZHGU^@E=SFH_,H&+.:/J]^U#RV$;%2L'&WQB@[_T=5_%@*IJ9>[`B<-+`.#] >+M"O\4H7VQ?ND3/\:3O?0*?SH[S50=&/"8%!=TWD_2N?2X>GYHOW6R'"T^T)T[ >+MW=LI.3MO#^Z.3K'">PA4:0F8\.FM2E4=\*_:C_8<T+08WEKXY`Y'(?I9C3FU >+M3EC8*:&NGY&Y8`Y'W\@W?WU<:"K-EF%C-C(VSA8'E9^.3012VP!1C4)_NX&_ >+M87Q%P\OW..N\^Q)I61OP<'E.\LFDS@/^_)!8;=;YB$87_'QQMSM9(&6WW@$: >+M@P4]G91V=(B+V$/I=R?RC`WU];V)-)%]$WSP6<R?MMGJYI==S+S&F_8CL=1F >+M\,&15<1J)Y8"T@R:X`19"X[:XA\B^+WUP%5G,NY,+!5VM/"4YPYJ6Q-/"MJ/ >+MS_H+-V&IO/[3%YEJ96>`),5&1CSSBJO`E8>73$S!FJY=]A#C#![S4I0P!%(> >+MOYQO=*"PY8\WLT*"UB65L_5VD!=C-S.VO<!`<6:R/[)JM)-XP2"L:L6D4<N/ >+M'V38LT4=`)@6Q+4>%WTDJKF^I%YH88WO(Z+D4Q:]8X9*!2^QQ)Y\!LXM7U!< >+M]S6K*/EM*Z'BAEA;=><,WZ<.<@?<`)J`3["`J_$2&70P&-QR,V^<<WL&>V4X >+MEZS%6L0,T-?3\SJ2N%N]FBI5R^F+B(B(HY4`ZVA(>+'SHO\67?=^E+L,;2A3 >+M+=*`P1>U+97D^&SJNR$1;1#T7@-,%?9B1.-0-F:VE5)Z(:K$X8_6CNC&H]SG >+MAA!9HK"M^B#57$'&YN/9FA<XTX]U]Y`5V,L[+&^)R8IVL^+W\S'<USR\%OJA >+MF13-\79#P.ULX1J^%V]0\\_[8F5C#ZJ]7(^)'9ZN^P7WE8SCY=8<M9QFCU-0 >+MP_Y"LZI)T%+E14^+G5EWXB&8<B)/,&)X5VK@[X$.A=A10$>$W/?04JJW*#V- >+M2VOUYW-W60(@AJ8FFMD%B)7U]N25%0O0R!BQ`_YX!%`5]V?8"7SBMQD52#:? >+MWB/*CN.1^87Z?<2R>QL#=^!\LW\R6\(?,C\_/^18TTE:7E7U`EA$IO:L]ON. >+M\+/\UZ^'I7]MTR'"C-"6DY,S\1A_+]*S-.P8.=EVB<;(<!*_/:0!#CL(>9O, >+MMU1[!*B:8FJSM&!3!`M>I"DQV"0+`*VBB<V:)T(C!7&;D)?T3">[ON*$,[BI >+M&J?4.TF_>_P3[6NZK)?PZB\NYV7=5=C=;B%Y=A8<VT+RD4BTS;703^G8EL0W >+MNJFQ_G;RR8U3'XRAP<Z<>C2YNVK8<'_>C[=G%C!"0A6CHM)R4`JJ-+A`H&WN >+MS0"*':/4<`;0^HJ3NI2NFH_$74T.9J3,9PC*)A08"*"6QG,W$J%:@!^\GU]V >+M[H2W_[@=PU94_562(-)B-_%<QTNF:J-\2ZU[.KM2CQ[EY;?0[F"4!NY[%D!O >+MQA#>ASE$+G7W:U]&'<N5VY#551-145K\FC`!$`;%7$C=]%$YZ7`&7%4B5 >+MS3CXO:VWMV#@TRT*^19VRY$!=E(5<Y=4P/7!?7U]G1/56(;3BC^Z#@:G<;*B >+MX4`J2YULC(&X$F<R4[Y`LC9!=`DKQX3UGR1XRQKW%EO.>'NY@S-.DF(V*PIM >+M0>*F]23[*-NOEGOD(9C[,@5`7APTI<)98:3:EV!=ODXF:G0W6]HKU/=@&I[Z >+M!Q7P?'B*!CH>#P30"`6^#O5RJ7%]@:UW?GD0PVK=.X4M@QY`WL[.$T+ZU::/ >+M!_=U.MF")R:H.)6R[-'U:D8Y8(RF1@(7K,UZO1K)H7<Z7#7<!D-+J2SNM6TH >+MQDJ<.LEQQL3$?Z&TV/7V4["6O=#78L@M_LL3WL:E2K6=Q:!#'`6(]$[\G.YU >+M981`_T:1FH[_)"DO+X^QI+BHZ&M&1L9GO(UHVIO,*?M&47+L!(_VM?N.=<\4 >+M<:IS48QS1O[0]-QEGQ[Z0TIC)9;4OX\O`FA%GVUL+%-EFIG:JHL<*-%#M3%7 >+M(!2:Q\/;@KQ<5"L9Q&1_4\XF?W0T`F8:,>2L%$NBAHFP:47CTL?66]%]=Y`- >+M>'>*1?^U*WBGCZ8#=X:=A]YX4I3RWB@/5J(>_O*8ECZU.#L[4@HW4:<0B-HM >+M'008T_IO=4MQ<?[AB9*W&J'X1]PWMV)G4IE'=^9K4P3KDL"M2M!!_O/$S=6Z >+M(QZ$NK&$@7:??IZ487.L5[4D0<PR^^1>PYBLXQQW>SCO@[4U\AA?,B&N[@(1 >+M[C>W]O?>^L"-T&]!O1-Y*Q22`4R?3-]EAI+T4T!=`%]1<0:VK]PW2ZP1=@%C >+MU/B&"E<(DW1&PD([$T^Q,BD%7+4II/&]3#+\BH:"$.`;Y/VV!)6%\S8<;-/A >+MDVD*[0PY4&&F3DS]_;$TM8/QK/[96G/G&Q$?C9[G:T7X7IKAIWD3[[5<'7W@ >+M:G\XOWRR8O9G&[MM]U8H#M(:=,J+YHT`_O=BF05D.^R#KT`5)V/O=V4.A@89 >+M:H$Z'-H8`J;0:4J+E0PN3K_-Z/2I#*09#09";Z16:3?U:/_AW++7B*F7X8O> >+MA)+P(]$NPG.OQ%J$0V/$:RZVC1N]G-8=N)!2)%AZYJ<Y'*K6XY/;<;;2LZ3\ >+MZR'I;_W2S"V/T>-(4X_@6Y(,Y&4J(;V1<F!.UF-51?MEB(*5-`(V,J3KNJ\] >+MUVU(F#('T:`TWD:)(1EWZX(WLK`A<*],_'Z1Y^=RPS<=#;'X;/[J8G,0<YDN >+M=O%6&J9X/B<R97#@%XI749_=F9[T'K_OXP>YZ](_'S#'X)?-"V;].V.,M%\8 >+M"(1EQ1=E.*&RM=Y"T?;$OXC;QGIV+K9N'J!KSE`3>W"/\J#F"'F9_E"T?!BG >+M"C5U1]4;$9J?WJJ^]7MJ'PL3)%$BY$P\UY=TZ9RDR;E_7#!%.O@@:BY,>9[P >+M`DCW'A7!>7_L5*)ME@P@\0Z&3"DL9@6)@7-H;&<Z,;""_HG.)E8'_\09S/OV >+M=S!+YNF4K4*5_,VV;D'&D_XL/#N;\D\^N.AT/.AX`L@&W6Y(7SG0^&[B"L6] >+M)O&B6%`RX]BG0_*VAQ,=LUY[Z%S`PJ#'A1#Y%>QZU]Z/G$:/T:<&N1PUW9LY >+MF9*OJQS^H7LG::T*X/EW:JYD5Q(/OQWCJ"7#'C]R*1K_2%-C)2[LJLN^O07, >+MH0E=77O<-=B,V:I+G`B4:K1&$7P<UC+25@=U=]V+Y[UP`F.?GV76?4$TF>;\ >+MFU[?,&">/0M41)@E[>]6#17?1+W_--.V9TV8C)YLP9%L$&[/A$IH0DMF5O.M >+M93)VDP^*36/*>JR+G1UE-;0=+K:L9$2H4BYNA[_L;XDZM4IY7FG0$%U7I&XM >+M#=.67((D\LMCEW:]1P9[9SV0H!=KMX2K\>E!*1Y$L>V-2$L=@IU38C'K2CY/ >+M&8\I*6F.>HM\2/;B/&^"0+0U-:&#BMK*VK]TEYDWKV<T[+8ZE.?A("DJ(>?B >+MGS_1NV&)*R?RPLYA:2EZ%?IN4W)D7KGHZ.\S_TWBM&I<56G$I.=3',&E?D]& >+M(5TES*T+-<;-\,M.X\R+)[%=D^OE%(W;P6TES[4(J94<H@26W36WI^#XAX=) >+M%SI3\!D.W`WN$?@43^<V4Z^0KT2#$V+H<+X6?->@JY\_U/72Q/K+U8&;H0[] >+MIBE^U?VIJ4#L9_<CB?50[D1Q0]F[%G=BD:76OWMDV]Z@),+BVB3(@.I2%F3P >+M[/29OQDF<N9@05H[8<BM<K-+RF1<SGOY2`!<C.;Z\`4S#1%%QCM(!5T3/#^B >+MVI8`Q1$PI0<2C?-"L7%,R?)@.N3J_OY8'9YL)_/@Q]VMY5W`M@;=Z$&9'K2F >+M,B3T1=G^"U:]FP\7=V;%56F(;LRM1=36JA/FI7LMS97CBF"&C?5*7N88KZ(A >+M:=MF+^38\ZI#P3#F&HEF?'R<F)24EO0`\XUK^]K?W=T?:59C&5QQ%/R1:CF" >+M6IJ:TL[.W-R91U@'V2.I;QL^CQ!R=]UO;:,6JJ#'8%W^JOYE>6'LDII9,$8' >+MO\?7Z+Z/5/DX\WK?GG.\2OV1SD1D\>I(K`S7Y6=%[]!@8/#]9%\723]WCJA7 >+M9'#_LD_3V]=+[<(&]PR7;/VK*8`O>^U!.<>NP%,'?'I-S`=)%`*<6:?=F(`% >+M)XZ.*N]*/2#"I]TS.)_%NI]W>%HW.K+32!.9A)KQ^UV3TW=.J`$S\M$3\"9@ >+M=+KRYM5]R^6TR]7C#[M,Q.V0O&M(MUJHMG?;PA1.:!)BHSH3!E(XL3TXH;KD >+MRG)-<%B8W[Q0,TI@(;KHX9,,_U:T?59NF)7@Z>+DDKF'CIE^N&[,CP`I<[$J >+MJ0I!O4(J^;T78D5FPWIWI#(<UI(2"<6,A?[LHF_>CV&XZ&HKI1+XGX-O$/Y\ >+MIIX[^/J8=ZVHP7*+1'-S<Y.6EG8-MB60V7!O_3T^+C<C4%Y>?OX0\-G.;MN[ >+MO7MCN*1``RP0/1A+YC'"G$E-AJXSS5+S/:2TZ8A<Y`MVFZ6FOMF;$`MK%=>E >+MR5/?@./820G)Z4:CN*''%ZL%2!5Y9.C"'L%XD]A5OE\`SMWS`:A/B[^8ZL<H >+M)$WR:9>J*3^U6@S0#+#K@IP?X(1*1_&K%ZR*Y)0,/@\[;U?[OPZT1*?Z!J^1 >+M/NXP[?-?8T]TGW[K>)IF#+B+Y'\G0"9#;I"AQ$"`PH8?*6-(29B3H)G4=/3I >+M\E]S9ZC(C!+`J-IY8A5.#I8YA,S,$(<P;=8Y!T0<AZ\I!36QRM'3HH$"A4?H >+MS`EOG\J1S!R,]:8LC@`:WMSDW.P<HW65$_'IVJG$?VT]UL,)CI?-)T,CYZM# >+MTY5K@>82VLKUJQC#U\NF"-'`E8Z;VR?T-7H*'"OF'U[2743C.1*`^Z\[8YD^ >+MU:4&"A`HN'3SPA?JE7=\[(3=WZ.H$5>49MA@Z[9@ZN.V`FR60`TXVO>O8J+- >+MC,WFG^QO1*E2\P+H4&^QH@U`":SO/>=DYH&K$V,UG(D'D?GB=[E*\+-5UZHI >+M*%1:/Z,TA'1%6]#U?2WZSU)C"?_'$.-0P[.J^Z=I@\JBP.LHC`@-R2<Q6O]# >+ME%$.=D.('V/_-SP;::4W+IQ/Y"I7B$F*+$G30ZK,2LRIZ(6%&/_^;-4?K:T9 >+MCX0"!BJP7JDVNJEW56A!*ADR(D1R;$KL!,RT&`3Q@^BH,DQ$2DD6+3@FFZS. >+MB529P_&3CDEY.1&J`[RI[RIU"6?XD@^SVE4[HETM`HL[W2*[BZ4>X)RJ8S+* >+M$;/O!=0^$A$F%GH\0C$IJ7(P!K5-)3/2"%?JH\/[J2L=BRM;OG-0.ML[L9`G >+M6',HB4/)FZT*C>P^J<2F=A]/H`=G";LQ1,N&:;+.8@2Q)9=?T2HK%7/5I<LL >+M33Q!XH_+OQT^)SP_*[_**RLI.;")B(@`7OTX`?)JT;S,;9N;/85&MAH4;T,( >+ME'\]]?>*IBC%WMZR+".](>VH%\=78?)!V(H?'%/AZ=Q:1@@*3CB:#WX-)1>S >+M?$SZT??CS:>@E\L+8PB-"99N+".OA>A5%V&+Y_CC3NQ\I?F$*9ZX.BQ&>=YY >+M26UGXTT<E636M]='5)PF-)$FIM@??7R5NBF^XF'<GH31PF"6)%9Q;K*+S[E- >+M1U(;9RZ22.=T$WQ&CD*H^\`<-)FC/S1';1^<M3`,@Z3R3:1L2$AM_\W+S&TK >+M7S>]"]NQ4Z8,WMZ_EYXAF!"MAGH*N*D"VABYT*1F3//M@UXME]2F=RV`1"]/ >+M&0PE2-)J].'TV:I3L[-AKB!J`'NQI\%D?=3@5G'E*C>_DXB3/0N1;(ZCE?IG >+M?Y,1M[GW%'GTLB)G;"A]%]$T:,TY9^Z+9S3-%#O(S)W9-_DE@OAV1Z>=^^@Q >+ME^X.6,,S!A<L#%[B3YDPJWUNS[6OEBTC$[<T4<PI.;D%>,U`/:NE:1)L%,/' >+M7?-W1&X0)[&?(D>7IK8MS2<&TPB#90`?^`6&_S&%7;WMC/KHZ-,[9UEFEZYF >+M\&!-]P@4H>38H#N&X..D+'N$@U%XT9M#JB]B'UB9>A,`*C##-%3828\"[KV, >+M@HUTB;0A*W%I.OWLK/18(248C]H"=BNA"ZRP.JM^.88U92*UWVH9ZZFQXB,: >+MEV[O<_?XF@S5D?/BR,RH#D%0CVZM2E4E#9KR(X=V)W[.URMF_V-[K06H*E,^ >+M4[)BDB*3HK>I4DHT,GKH0<!"(V??)J\^NU)QZS+$JI>R;%STV]GA:9/34GTV >+M=7<!5TYS4D[.&*3*>(2'U6(%`OQ'6'7`%>\8%>5%2""5C8W-\6+=5\F=G>/5 >+MNM2@E\<ZQSUU5&QR*$[.,$I/+Q)F0W6'[>X2##Z3U[RXET!WT>PRGB^,DH7[ >+M5R-70/*^J$""MOL`1E=_>/3UWL.C];2M`NTH<A[WF%S,.T[+S.Q0S/5[AEC0 >+M"WIWRY'#E=`=3]1%ZUD%G2.S+`*.#WRS][ZQ8=@?]KQ!-/JDQVNK*.6],'MQ >+MWX"UOU`3%R07-!_9GRMBB]]UG#N1'EJL]!M32TM+79S$[@'MK-9SB</AG,NK >+M9R'HCQ[&&VER=&3N?H4@4'#]%HJOAS$;G\ZB=IAVG@-9,U4A_?14J#:I\A=Z >+M8!J0$1B]DN,AGFU`Q6L-]*)SC+2+6S%/LUF)Z.@^U.D*.GBPEQ&V-8#.D]*G >+M/W;@\@%92N*!AK(,6I=78A2\A/%U^^,^R=-,VLT</XH#>S#$I\4@<\E+&E[6 >+MO:>A@WMQ/Z>)[R)@/QE?8>\`ODLVF1+!)TT+<4^9P0\+X[!7.'6=]?`\ADZI >+M>N#!N%"F`**+R[I1-[(P#OEJ,'3_V>`\2?`H[.IY9K+3HGILQQ'5T8!OVBDM >+MC9@?.&T_7PG+CAO2>3_A?",H[2E%=HD"\`M8TDF]8-U^JW895`_,%"YQYRUB >+M'U,<('P^[%*X\/=DB:,8^N@#ZP7-\##R\!08,$04'B@B75ZY"VNV)\93"5UN >+MELLY-*RD/E06L5BERRRSI34J,6^%@P\5Y<7L71P9B?=[5`T5F9R;L1(G8\=. >+MY&<\Q;E#NZ%XRDC,TB%B8G1O$C&ZTK8)!0:7ORQ`%IQRS#P/A=<F1AC2^=I5 >+MS^T*@)LS:NV_+_<LL_.PJXH?5\D:@.6W<YK:^G$V*KBSU+)L<C\?&WZ28!V[ >+MH=(O`D6T:-U,N\:":)VU\<1N&'`;YDP3R\D8U[&0;L'8L";',H)XY#@4'DF) >+M:L;9WL"[]3D-(S:(\SIG.=ZL/L*WD%P7LYOX&=L_'9J<OKL(\P$=<:N5E>[, >+MK*].5^JJ,[:_-S`GLB51S"&3S>XW\[F:"IY?&T"RM/$(<GRT+QN#@W0&[]&. >+MXF+@2,*!^_241LLM1\EV2A$KV9(VB'BP0+14%C/I`DF2`4(,AF1>L^;$T(_L >+MT/!Q8Y?.\:%Q.H35Y?$]1RGN<QI2E*_:+/"^`/>8J]_LOTMXJ?]1EZ;REKO_ >+ME(1S2ATR)+T/BMP'2=)''(,D3<O[M(L,%6>J\T)Q!90YFIA76VJ0"Q-KQ[7\ >+MI@7:%UW.UBD],W,^\TT-LBBSZ8(1@$H>*E1*,PRDL1<7,7J>L\X:S!]QT/+T >+MLN3M%#2A!UAS.`'5^6.6A^B!TT='_?EE%!K4&5K[O2%&/)P!5_D2>M61;:*2 >+M(IY1&I)KO^\;AMZY6@1;713CF""*^\%%4FO\C^L4W)M=#+EVI2[841Z65I_[ >+M6V49:#JNE]T!H)>FAJ;14.Z,P)8/F1EQB$^YWBL*2-^QOA<W)KYS.U8,#TD4 >+M.MDM+"/#=Q+NB=A3W1IY"AHYL&;AJ[7BE=00=-80+)$KN:;3G"@<HEP/=F$K >+M`,*%<;KP-*(>VB:1U9`*"QUHK2[01V2S7.FE!0C?IBN&:;8$LJTZ"_WC[O[4 >+M^-"(4T'IY7U(O&O[A:\']-H:D?<`<(Z?Y#(HIN\UZYPIP_*-1M0UHZP2!I`T >+M:(M['/)>[:KD'C87T6H[M(W,8:3I>.P;:Q28)7!9HE)".7(,69L(_C0#"N-= >+M9$3[*8*%L):2&C95I$"$Z\/K=VT?%@HH4D@L[>S,2RZ2GUJ>[ON=S.C@[&P[ >+M$$4@("#(%W#O>GAT2"X80-Z$YD@AZLF*ADN[_R?BAQ^?A2C%>F=NYV41WA#R >+M<LX`V.MHJ<,&K<'6],_/9.LLT/HL_"RP]C$L<JCTU0B^>7CB`W\NVS;WVXD_ >+M5A1@ILI9KJJ)+S@->LWK+O$Y1R;E-MP<OP35$[HUX-PO+DF2G8G`Y5TJ\,>Y >+M3F;GW^-'RQEV.C/*&I/S[1/G=YQE[G/C34/8N-B8Q=YF?I;1=E-FJ[//\LGD >+MMCU*T``X>PC2Y@I?W>1.*8<>JXHM0N)32"&-4(!-MJ+I49PNU[[GJS:K0V&: >+MC$_K%,["/P[JW&;:#QG`01<C:5YVA*#FMY^1F5=0\[\K>Q]S>D.6HLS2EE42 >+MBY#N::!I54+H.4LC8!VO1\-'LG;TY]G(3D@SO3]LREG2U>^3AGJ;3*_%N2]N >+MN.=#J<*R*I3?9__NJ3TX8VZ<3BT3K51-0@B>8[YV496]5U`4?-=^12[H1!Y+ >+M]I*7:69Z_PLX@D;#][!?.&R>NWM+G@Z&;H6P<[*S-XDN^*E9.`I3SZ1Q/8F< >+MF(.8"A;V;5XISJJ,5!@<"'&_17U;1E=0F^]Z04<'A@)9[IS7NN"XF9LXZ^=5 >+M9[M/`9)]-&_6#>IY<;J,]\7]0-I_%FQDG+!*G-+2^_0QM$NC;586M;VK/;X@ >+M%E+L<R/U[PQN>Q4=Y3E"1O<4%C''78D2T0X&"\[B48C4\R)T8*SXJI$KN,<F >+M#9[%FV-46R,\=RT>8P&10E2%[03@R$:N8UU",8HW%#^QRD3!JMEQU/NV[D<' >+MXNQ@VV[`MX)X_0-=_%H&RGCUFE^_'F0&'D46\>SX3!?:S1S!MQ&3:C/'?ET^ >+M9V:"3HLA2)B?>+`0'!42:5L][\\M;P_U*N2$B:'K`=MZS"38E3^%O6!P<#A2 >+M+?O&H.ZTZ)S#F,.GX&VJ5,F5^D\>Z';,FC31S)BYDFOK*A,-=_1,92VPZ[*@ >+MX+$8K8:]C;N'Q<[`;U]@G<K?*8+EC51R:7[["SG#][.?.P*&XG,&ABNDK,;; >+M;!S.`^]+LO#HI]8[#F;F2LJP'9@7&Q-U.>/2Z_%_";?Q?3#(8X$J6\AY*;;Q >+M6E/V*24J%;[A(N)/9R#$A%)#OBH9-]$R7^JO2;^EL447.[&77I[3;^R<C8$4 >+M$`(7YQ0\0+%)TW,4)^@1^*6J@]-5GV/]```DE?_8!0!6>]"NM"/4KB]%S&P" >+MUDZY,-'6V3DXQKSUJ>!:-GCG/<F/5D?S)Y,3>7=?77S"1<UR)!R';CCT*TW/ >+M;MO6>J5YT9V\#V&`2K<0>R2]`N`2%0)F[F"<UT3XE7?.XLCZZ5L_T`G2HW`# >+MDVG0W]Q>>U>&5F17R?,O<J\Z*[CS^B0BDC`T];)O]\\FI]&G"C,:(W,N&&]/ >+MSO9E[C5V.;\.XT<CUA"HUB`V#YSX@*UOOQA[-;T!A?N5:'P'Y7YVRV\HJ_H- >+M^N.Q?G=CD>3)1./#L/H=J4=PKZYH90@+%+[30[TG"9IP7#GHOCX0G!N/^^6L >+M5;GO%EG\U+*\!E?P;'"O<[;V9`H-<>OI%A'9'.9I_\QRPJ5&3$IROFO,@3T< >+MWI[GGP&PSFL[\])O`[?//40]20T2B/:C$2/93,033DQK.0IEG`-20WU"J4)P >+M<!V1U<$/DCZ_/4*"U/L[7/N&%?P%Q0]""A^$$U'LU:5:\I[L?-KK<R%WR-\/ >+MKG7^M"H,@/*%)SPH#@(]UYV=0P+#WQUF1QW`6?U:2+T3)Z>="K:$Y]@":(4@ >+MNG$T8KF:]']..^<.)`G5.QMRZ]S%4KDV&E^RM-FV[,=TUC+BIAM*GP[E_$+D >+MQ2;:=SR]MU1":MH=-SRX7Y@,-+V0+/WFW[:KQ1%E8SOPMK69RB?ZC3BK6HMF >+MS@$1<Q7-HVA/]KG,%U)?_)Y4+S2@WP[>6:(4T*'HO5U>7)<D"M!ZWE,44L=K >+M>8ZAY/*SE'3+W3@ZN<DDX"94:-V(W5*\1/<:24LEAZH^!)=]OD;H1O8/,"1] >+M[#;B>PSI_,I3A)<UA?9G'RGE/[7M-0+_8PA%8$^<I(4\'>]_!IG^.^6_@GG, >+M_]M^J\?W?U?\BWFG_V_[_W7Q_X][IK4_3G+#[7_>_=^ITGS_HWM2`?]5=E^B >+M+$]W_OKU,AAP.&2A/I1G!/N/E1PE.779:AF+L/\#4$L#!!0````(`")R9#'@ >+M^Q%V7@<``&D)```4`!4`8G)O=W-E<B]4:')O8F)E<BYG:6955`D``R^`BD%1 >+M><A!57@$`.@#9`"]EO]74^<=Q^^]N;FYQ)C<A(`71'>#44#`!J1(IF!"`B3@ >+MER0&A."7$`@$4`L(0CM*0P@A#1I`P6)U$P0<2KM&MN[0,[HE@`2F;2(%I9VK >+MI%BG4A65M78[;L.C/3T]RW&_[?D#GM?K?9[/ER=%FAS'SV$#;&"6"MB'_C0R >+M.CQVR?FI^Y.I:Y,W/%_^[<ZMN?MWYQ\]6/CN\;?_=3C_7K(M2;E#))0E1:_C >+MD4```#C_BA65:7/*M7E$96&YCE#JM$2*=*N,2@W-#2.B>;SU1&I.<86&""DJ >+MW+\_)S>$V%&N+3R@+0,XW\,^5(`!1"S>`CP3`N#<^7%IW\=Q<_$NCTM>;2:( >+MDTS`D8*Q'NTFJY=-`?BU"_=;64`!DUG51HHN6-XA0$XN/5X=O_K5L+;$=N2M >+MX?"K:5'40201E&?N/:/P"SCVL93R[O"*AW_13,"AP6*BWN3+],;=]X(;R>2, >+MW5IZ<0<@.,<,%00)U>73;JJK5"*V94>P.S4GLV@0V&MXPI0;,.=D619&GKHY >+M&9@Q\`4EV!TM"4&4<3N)::A'Y&CFX4V1IP7O>\[0=P?FAI(8L6'!69S,RAW6 >+M)I97@=>>"^S(75@-"*J<!&;&$'.LT3X_JBCNX:5A3A$:OR0TIA>#'!8.AG-# >+M7.,R]>---)[`H[B]KW^5]O;;)'BPE;3>$OH-9*`/E4B(,[[P86IB$9V/@ISL >+MP+7!"?E5?@=UE/2,EJ-^7AT./'=PB<:N^`4#`KW.2=`0:>`7,];[M=7^K`$A >+M<X$1<#EXE<]*\V>YR@&\AG0]/_,A"*>Z9V>@F$C*N>ZO_Z&@;RYU]R93;9V& >+M:JQMFIMUB<ZK>C(3N+X84.(P=VL"Z76\LDK5W!+@54'W7&'[>M.5*28@*%E4 >+MP,A2_T6%W\BQ@GKW:F$_UY'D7TU@3?X"/6TI5'?=.'.!#8.0N;]OMY6S;,:7 >+MR@M/L'>,W[-M,)%JW=4%9M5P4?B3^`D%3LX/"5-EJ[,MC=E>X=H?X.(K4^!A >+M>R?'*&!SYSFX$(D4,DI67XYN/GHZE<&K(M1_D#<;J+0MOOY1&_CEQUN':W\N >+M13K:NNICH>V80=,C6*5&[KI_KP:RNG_6MWSRGS;H4$9<<O@A4X/9Y)5<^)/8 >+M-SLY%V5L;E804L:\YX9BL?9T.AIS_8@ZI\6,CN3HA!@"?\X=Z(NC#%H\VG&? >+M;K;2$4R0[;ZS[1H,ONI7<:OYK]6\]^Q.'Q>^&=E,,+:)6>3*.DOC8>)_T?U8 >+MB^^N1W)P;A9^L=0O\@H$!52W;675"^S?_=:]BP%_5;+J,E+_9X&SBXW^VIV> >+MP:?G2RS;U<P[_:P1@:SG9LD)DFKHH9H..GPZH?A,(#IB;PU9SGJE9I%N\4K? >+M_Y.JT^OU*:5!W$+\KA8^L(26I\Y,RF9#H"/6%J33KX`<1<QUIU:0*>ZL/<O@ >+M^:RHY@$V\YSD#FCW?2UMK;`\H>WLDH/G,=UMF[X:9Z\,#X@`0^)!@H64''C+ >+M;&UJ-GLU*'Z17TF=N`H`I"?$*-\ZYMEM!M`&&CR"!QV_X&]R=-@@+.+"\NUE >+MH2M;3%]S*]/25>W0?1$?!C)2RT:U5JK_5Q],?-3K6C,I%*]MI+AV$46V2A+$ >+MV@OH"$K:&XHU6VH:K4TOX[_H?=8C(A$G4AIJ2=%&$9/:4`%[:C&8]$I,_V7X >+M[(3,&,4-(01$RKMLV%@0EM3SC5(%NY(NU`/UJ7,:>D\\64W5#XXE-SS6=_68 >+MR8S]%8$4_NOB=%]$\.;;5JY7?M$+OG$A4BBKF@*`NLF<&<DI([.C>#4`[F2/ >+MO6GU3]3+3CSE?2CUQ$B.TDB&QU'8%F;RW*U#MHCMP`Q\Y7WBC\Y+G5LP6O]G >+MSFMZ.DXK_7Y\'GJG!18C:A67188@Q'3X"/ME\><BFS!*RK.F'U5O2LJJ6A,+ >+M&/+>._B1RB13\NW;\M`1\3%2I]Z&(<N,'5R=XFQ&:A_\1(Y][C-DO[='8209 >+M,`P'Z^9OQD\OTEXUA:-08@`7)!\"R_S5K'T)DB-6QLL*\-GL1U/\`%D)I713 >+M"H;_JF0/+)`X521'T0J22'O-UX/4GGA8&XJ&HZ!]9T`KX@9FI%&MJ;M.<6K1 >+MBL$;\]W'%P`8NO>)8=V]*C[M3OA3122J`DB_V)2/4\AD#@Q&IS6GO6SJS<6G >+M>=I``&E@.^O01!5V)QTP&@D7#9T6MK)_"5".8HC=TJ#CCQBZ'/6\\_+>C4LT >+M,9KS"%1WL&P6&CPF]!.B*&JP.\_TE67?MO+5-;$/*D2!",QCE.0D61J]Q]?\ >+M")]BPI0&]E@=3534D0EB'%XN*E<TQ.M;#9]J,#1!(+8CTV00[!:/QRA[W9-& >+MM2]^:JWPG<S?,<L,PEKMAV/MUTO7?*F-78_<DG]P$4=$Y$*UH-[[T"GX`7O$ >+MX\>"T9UPO7AQS>=``H7DU!ZQ?0*P[6P0C6M":6%\^\Q`U,(;&RQ"(DYR6G\[ >+MS[W<K>DWM`VEFZC2&UT\(BAC-A7<^.#INK_?/V@J_1:NR0]$2AA&>`MA:?3* >+M_K_\,C;^!U!+`P0*```````B<F0QV)#%O5<"``!7`@``%``5`&)R;W=S97(O >+M5&AR;V)B97(N<&YG550)``,O@(I!47G(055X!`#H`V0`B5!.1PT*&@H````- >+M24A$4@```!0````4"`8```"-B1T-````!F)+1T0`]@#V`/;;H$;)````"7!( >+M67,```L3```+$P$`FIP8````!W1)344'U`@)$`HS41K:/@```>1)1$%4>-KE >+ME$&+TT`4Q]\DT\`V@8!II;3(;J7MK=@4<Q#\!,*>U+L'#YX\"A[TZA?P`RR" >+MQSV(X-[=8R\MM=&4EI**AQ**:3M)FF;RQHMZ6&KJNKWYCF_F_>;/F_][1`A! >+M8(\AP9YC[T"ZZP)C3'(<YZX00JK7Z^>ZKJ=74C@>C\M1%)U$4?1F-!K=N+3" >+M?K]_M%@L'N;S^??M=ON+JJISQM@9(82JJNK]?.1@M5IIK5;+VPD,P_`1(KX, >+M@J`(`,]JM5I4*I6>`@!HFI:ZKDL]SWO%.;_7Z73N6Y;5SP122M\BXJ$LRV>_ >+M<IJF_>X;YUQ"Q$-$+`HAM(OUY%]\:-MV,8[C@FF:GS.!0@@BA`!)DL25;6/; >+MMN+[_FM$O*WK^G&SV?SVIZ(@"*3A<'@$`(EIFE^WVB9)$HJ(+42\F:;IM2P5 >+MCN-4&&,?&&/O>KW>]:T*&XU&.)E,'B"B7JU6/V4!%44)PS!T`2#-Y7+)7WW* >+M;#8[D&4Y+10*FVWG\_E<`0`P#&.S<_2ZW:X1!,$)`'PGA#PV#&,S&`P*R^7R >+M!:7THV59IQ=!F4`AA)ZFZ2U"B!_'<1X`-NOU^DZ2)$\XYQ8`G%YJ.50J%7<Z >+MG1Y32GFY7/8!`%15/8_C^#FEM)?57_+_+=@?#";L@"Y-):T`````245.1*Y" >+M8()02P,$"@``````(G)D,9[\J5?`!@``P`8```X`%0!B<F]W<V5R+T=O+G!N >+M9U54"0`#+X"*05%YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````\```` >+M%`@&````T0->*0````9B2T=$`/\`_P#_H+VGDP````EP2%ES```+$P``"Q,! >+M`)J<&`````=T24U%!]0+`Q8!'4*HZ#P```9-241!5'C:[9=]4%37%<!_][U= >+M%E@^E.^@%7%004A2:Z8I-4H;=$0QQEB_.E9+TDP2G:$5@VB`T='!M%%J;3+1 >+M8.*,U524ML'4!&U!F]$XS+20C&9P_6HE?A(5T%U<=OG8TS^X,+0E5.KFG[9G >+MYLV][[[S?O><>^\[YQWXO_QWB[H?I9P-67UZN]<?D0>=U-^\B!14BP/I;0?3 >+M-;YD_!>`=9#G0Q5_\Z9KG@*X7V>_S&$%+`<Z@"#`=+:X:;O3SL>5GRG]CG&_ >+MI^,KX`$<`@J`8$"%C>EQUA;:QQET86U`*I"FKT<`F;KZ]P((D`3,&1=OEB=$ >+MVV3L*+LDQMAD3*SY&V`N,.R?C/TJ>-&:%:UY18Q_I@XHTKQQ4:&\"ZP,#^8> >+ML'*XG?W`>,W[!TF-BX_M-:;O^O5'EV3*JM_UW5=N3)3ZG5/DZK&GY?2N=-GS >+MRB@!Q&ZR"8CO9Z2_>=$8M&CGI%\[@K%SZOO=/[X\DY-`_(^SJ`6>T.,9FM<G >+M:8`<.]TDA_YR3:KJK\M)QRVIJK\N^X\WRA-YOQ5`SA]=)LXSJZ3CK_ERK^&' >+M<O-$MOQI^^.]#JP&PK61:8#4G.KAU9QJ\@>OB+A)+P/1C$A_!0C7;3Q)3]4# >+M12\\S7M`>&$.NX!AQ4LYW'NZ@'3-PU"&4@#-3B_7F]W<O..AJ=6#B!`88.'% >+M.9/(+#[*N,P]>+Q>3'L706$0&6UC0EH$NPJ324\V9P")_7FM+B]7;[NY>MO] >+M0#S@)E!"4_T^$C+7<JWV749.S>-:[3N,G/PC+AZ:0\JBIW:^3_U/%O'FJ[M9 >+M\;.5E)7L96'Q4DJ!*0DQK`,"`=.B]!+L^:B1UN9;&*8%7U<'UN#A&(:!B*"4 >+M(FG:2\1,?)/VB\L(#.E`V0Q"0BT\FC2,A##[MVMQ/@*<'8AG6`)0RD1$,$S+ >+MT'B*6!&*25FX'T?%)L;.K>3"P4)2%GZ`HV(-*8O>PW%@#5&I>WYYH*%LPPKV >+MKMW&LM)5E.=O9?&*F51M/\SKP`Q@GZ7W7#M=;7B=MWK"JF'2X7;VA''3@O/& >+M>2[6O$5]>0:*-K#:H$-A*(.@B!"LT>%!X!RNH^:`/)3Q'_%$^`(HP5$QC80G >+MMW'A8"&CIY7BJ"@D<?KK.`ZLY:''=G&CKFSY;++6;V?6EF+VYI>PY-47J2@L >+MX_O)7^/$V2O,`\+Z'/:ZFNEL=_49:+$%([YN6B\U<*%Z!P??F,KHQ!`"@BW0 >+MY4.Z!6]'-_=<'7C:.@!,P.^\OAT>,W,K?SN\CA&3M]!8LY:$)W_*I>HBHE)W >+M<*-NY[PI9._X@+F;"]B]NH0EFU=17K"59U^81>7.*@IT$&O`,-3#89'!_Q)5 >+M)_[@YS)^V@(!I"3W8;EZ+%NZSLT3N;)`I'&^=#F>D<O5,^3(YC3YWC>#K@,Y >+M0.1@O#$9.4/F`3&F%<\`47HN$:,:@:+)J9P!XE_+Y7T@N'05E4!XP6)J@$FI >+M\9S7`2S28EK-:ZX6]_,H0E3/#JF0B*`M[J83G*LYR(+OQI(\.I"P$`-3!'%W >+MX?'X:'=W<[O9RZ=G[O+)Y][3P#G`.Q#/%C9\RYW+I[ET_%=#YJ$(Z.[D6SJ] >+MI.N=RB<B?ALME]\>^Q"Y)QO(WO`<;Z]Y@\6EN93G;^79=3GLW[B;Y9D3J#YZ >+MACS`#K@8/2'.#`RQV2T!9I3%:L::5B/.,%7OSFP$I.SE9&FLSI*FX[.DI7:V >+M-/XQ2_Z\[SOR5EYRKUZNSG56?_,`A8D="$81"]B5ZMOIC4#1[&]P%AA9N)0_ >+M`#'Y"ZD&QF5_G;-:+Q<(!:QJ?EZ&.E=W1;6[O`K`V7Q/W;QRYT/#5+E**:^O >+MVY<BPN%-2^QW8\/CPCNC0FF[W(K;>\NYOMP=!KP$?`BT`.WS\S+P)R\\">Y> >+M!%LHAM>%S[1A=GM9H!3U.J"E`Y-F3>2YJD]Y?OIC;*NN8TW6H^PX<HIW@-M` >+M.=`%N%7_R@7@X\K/U.>.+X)]/E^`81I>B]72V=[F24*8"93V4]T`'`,N`$Z@ >+M'?#YFS=`-00*.T(W!@8^//H7,@RH!8J!$OT)`'RB3XT;$#5(46'H"47W`W3: >+M"=(1M!-H`SQZ]7S_IDCQ)T_I=[K[C07J-A)PZ6^V6<_7J=LA52B]58BI^SX] >+MH>\!:G%_\GI3&3H]=NJ^C_]E^3L(%JO(*GNYU@````!)14Y$KD)@@E!+`P04 >+M````"``B<F0QXGI."^(```":`0``%``5`&)R;W=S97(O<&%G94EN9F\N8W-S >+M550)``,O@(I!47G(055X!`#H`V0`;9#+:L-`#$7W_@HUW=9VNRB4"93^BFS+ >+M,R*>![(2FY3^>\=.3&O(3D*'P]7]8I^B*!Q:)]&3J6L[Q`:'>CQQJ`_'HE`A >+M@N\"P*-8#@:J=_+'XB=?:-8FSB_;`)]0W<>2@Y($',I'``KACEC]#;8G*_$< >+M.@,J&,:4N:#P=(N(08\+%:4C,1!BH&5/V'4<K('7-"][Z>.UQ)0(LZ*E#?R+ >+M6SG";/CW4CE0KUFP4A7W@O[1Q_N$DV-=`\0+23_$R0">-:Z.9W64A"Y,$WNT >+M>]G;O;VJYYFZD:^WLR.V+J?XV.K]!5!+`P0*```````B<F0QM1I"&0P#```, >+M`P``%0`5`&)R;W=S97(O:&EG:&QI9VAT+G!N9U54"0`#+X"*05%YR$%5>`0` >+MZ`-D`(E03D<-"AH*````#4E(1%(````P````$`@&````4*[\L0````1G04U! >+M``"OR#<%BND````9=$58=%-O9G1W87)E`$%D;V)E($EM86=E4F5A9'EQR64\ >+M```"GDE$051XVF+\__\_`ZE@]NS9_Y\^?:K!PL+ROJ:FYA6I^OOZ^OX_?OP8 >+MK+^[N_L5&?;7`NV?!M3_`R"`F$C1F)Z>+@QR?$A("(.2DM*-/W_^J).B/R(B >+M0ACD^+BX.`85%162]0/MYP0Y'FI_%E"_,$``,9'B>`4%A3=.3DX,&S=NO**H >+MJ,@`#(%#I#@>J.>-IZ<GP_+ERZ^HJJJ2I!_D>*#])5#[7T'MCP<(("92')^1 >+MD<'P[-DS!@$!`9V#!P^"I,Q)<7QQ<3$#,.DP"`D)Z>S>O9MH_3#'(]DO!K5_ >+M+D``L1#K^+"P,(8K5ZXPO'CQ@N'FS9L,P+SCPLC(^)M8QX.2S;ESYQB`:9?A >+MVK5K1.N'.1Z+_4N`^O\!!!`3*2&/YOAWP`Q\GI201W/\.V`&/D]*R*,Y_CO0 >+M_A<``<2(JQ1"#GE*'`\*>4H<C\5^N.-!Z@`"B&FHACQ,+4``8<3`4`EY&``( >+M(*:A&O(P`!!`\!@`.=[$Q`1<SI/K>#,S,W`Y3Z[C@?:78+$?I^-!`""`P!Z` >+M.1Y4.;"SLY/M>&#MRL#!P4&VX['8C]?Q(``00&`/_&)@5`2R[WWZ*,"P?]<L >+MDAP/`C^A^C^\XV+8MG$*28X'@8:&!@$@E0M4SZ"EI46TXT$`(("8OO]V]P19 >+M#N+P\7]@>/[\.4F.__K+$JY?0.@;./1)<?S"A0M50(X'L4&!";6?*,>#`$`` >+M,?W]8[D-QEFS/"[FX\>/1#L>!/[^MH#K7SC;/^;#AP]$.QX$I*2D(F%L9F;F >+M#4#[B78\"``$$`L;9R.8<6AO2OV]N_+W@+%X':CY`S&:OWQOT&+GG@!F[]P< >+M6G_[%D0_T/%$Z?_TM5#KZ%%^,%M04/#@Y\^?WP.9;X#V_R!&/[`])0H08``; >+M,:Y)RPGQ-P````!)14Y$KD)@@E!+`P04````"`!,F),QH@RE]LQ(`0##2`$` >+M%@`5`&)R;W=S97(O5&]O;&)A<BYX8V8N9WI55`D``X\6QD%1><A!57@$`.@# >+M9`!L=U.0,#RTY#>V;=NV;=NV;=NV;=NV;=OVS/[W[CYN'CI)I^I4DM-).GA1 >+MX/_^MP!=:T`H(Z^U]JC,S/,#P>`@L4Q$>43PBB@PD%L:1A,.)`S?4?/]B4'L >+M0S.2IY-'>D02,20Q3I!3YA_V<\^Q"V<(1&?28T6/;S.OJ-QE5X)BOIR=G9BI >+M7]%YU4BIW33=U2BYW7&6:>*LV;GB'AB<T0\:_)!Z"8*WP/Y.DPR.@0-`_H[K >+MAYOY"8##OG?_$P(:E4$7TH\.+#AI-WTZ94$?P:"3QN;S>!3^3L^0R6)VV"RN >+M6"K5OQ99D99,EYCY6V$JB8VOO/B<L<*^D<'16?4K/%0Z7*BUS<VZ%JO>.S2] >+M.[2T.VO=M8BZ0M]9@(UUE<W*UA:-/NV3UL%>J\5@<.#NNQ\VPTZO@!WM7VZ9 >+M2[=\)7ZX`,J^/+CL'K7]01U#2)K^DM]9R)T#5$FO^$I]L8WOWN'TFMX<FA@8 >+M6-FMX:/+_F$FQ@\J2PR`JQ$+)XZ$/]()AJXA,F8_1][@%]>!*6B-)DDV1"W` >+M*1$^3I45WBI<(>T%-@J4!+,!2V/)NM%!6%6,&"V`41Y[7U#@6E5!4I6#22O' >+MN:K"P:I<]8S^.#Q9-O1YY2QSE3K+$T<X='[5CZ8=0*(B/-14)UG:VMA8V%W] >+M;#]9F(.[$]*D-B-EO/+VBIV9;,EJO>&]5X%'&=;%Z:\!_L:/0P/<G1;1[7-M >+MJ<?GHZ)B8B+BH6$AZ1#OMQL\C,3U<$/3SL>AG1]\8/>".<BU[==Z&(S#A6A_ >+MM,3KJ>FI@7FZ&`)IKRIJJ4&Y@`/)IE`F/_8'ZGAAR//EJ^TDE_O[,&CR?T.] >+M1[LY-U=;4&DG[!/;76&IAYCA@W"7R^WNZFIJRM'#.0`#I)T[.GA=744-J!WL >+M<@J),KR,@T>U-UFCF8T_:JOL*G@=P[O=ZW-KDRR+E"'0)?[N`/5K`%7MN\=> >+M#[?F5*O=V.^U^D,#0#A#+`=.`0VO4^]"N#?Z!?R]8O;_LCV[TY(!$H&SMC2C >+M(H9&\PT%_?:!6\SO:@)Z2/6U21?$O;,&(\%KXZX0:,/GMKR7UP$ZL`W@$0^Z >+M-;/L_P(F$7TW<.H#?:S]Y?%Z3P:]H83)_).;&W""^<6&\;W@6"??7+\`!7P/ >+M&QLV0495&J&$<?<^^Z7['OR\UZL0V`-YS^94;A&/S9)L>=FO?8W*ET<RD&<( >+MK`1BV]T<7:OU14`.!/=Q=D$X!NKZ?/('5U^T5\NC%+4D_*[6C0[FG-1SEF<8 >+M3%RMV\!'X,P'+`3_>;?S@L^-NB>+T!>1GH"/)=F&\IO&6^-S?GEXMV13?JD= >+M^R/.Z!FU+2J*2OI*E1-=Y^#PZC5@_=CS42'Y.ZVR5-G+>F#251&#[:Z\K%/$ >+M>2Z!<OB9"6+XR7%G#*LWO7^DBNM4T%70]85&-&+K]WB:F0X.'AY&QFND\'Z3 >+MVA,6RX!OA+`O1=:G;"`B,3QVM&MC^^[I88.7>2Q';I>0J"B;2>/@E'N?W/)" >+M\I?&T%=&3,+DF0EM5%#7Z.6RY>['.>F7EI6=:O?\^93Y)%493$[5"4W9<,1O >+M*RXN-3,V.3M%T^[Q/>K2&B%(EQ11=)34]#15M=7U/6#ACY*<%/3@YF"A:<K3 >+M5E;65!TX2@'LR+_??+FS!>SH;J2$?JB<KL;&1]/M<WA2=9#0$#%!B>/KS9E) >+MLL/O:.XNC*PUG`/<U8RAT@-JK`\MCXP!;/^1Y:7UANI(4<D$7'<0&T_34Y'J >+M[ZQ4KHZD=$#!BJG>SL]/(A,2%!0:(I15*"MGZC$K*G3KE]-)`9].B]C@4(;M >+M0E)1#^2_K+"+4QK3`FI%U-IS:=0A^^8/-8%W3WZX>3@BDP7^[&;<&W@]F</! >+M3LV'Q/#_^`#!Q>1Q>YA,R.-DIQ9"800H^D['WW-@*L>(I$@B^_V1\<]J\K^X >+M\V-\/BR9>GB`@*BHL,!HW[!FC=<"#`P<(B2<$Q[)CNM!3HMW!G>C&YOC(V<G >+MQMX_=T*CU8V5$Y<]>-#&#Q/-YO1!G5`[3%)<9(0ERD7#QO2E?+1&CJ\;)B$M >+M*S4SQ1/@YFNV.Z%ZB-`/JK;&]=,&E[JG&B,A)<B8-8TK@E3[&F]W5&T5]]^J >+M>S$)T)8!N&[WY7U]3`D>3E;&MS1I\BT7Y*U._^?$U#0"N.A@^^>;!P0&A\/I >+M?1QEM-R0:]?+<WO6YL$/TF%E/_V1CLZ%;,!IZCWI]71*H]7Z"];PJFYNWN;& >+M9W[/&NF$J6\I-:;*M<&URA3#JJDE)X8@"[0V,3'RFV*A9`;]M[[Y:8-\`*V? >+MC'34>&M'FAQA>)Q5!X<329@-4MK4=/5:I(?]=7E5UP<@\M.C$-S$;^O@ZN+T >+M=K_^L%&[X_7JVVO7!U2*>')\?7C9NV,T5L;5X^IU]W/&FQ?$C=N#,KZ5<-TR >+M]I7W]8K'[3R,\(!.[.7;Z826^#8D@_>`<F^SQ1.2`O*HH+?G0C[H@>]WRL)? >+MZJ-!AGPP6.9S#!0&B_>"\M$X2SX(@K)VMG]`U/N?A!"ZO.+>SB@+4^FZ4$38 >+M;WK<\.KU11K\F;^J6YJ^AG<'!A8<AD)CL`R\6FU__C&GBZMCR49=-6.Q2)M2 >+M8S$.BV>%A\.NK5#]5>08>%:2#54D*[FB]+<AC/G2>?/XUQ%@OV"-#O_UE&;] >+MI;#\S`1DTC+Y=)9.F<*,&D<]#$<_WY]\HR<DHO;&0[ED\^.P#;%A-7M(4>CM >+MKURRDR3_HO:F5ZTY@NO?W-$>175[<JP1YGASX)6?]I28>'/8T9Y5>6MZ>HJZ >+MRLK:"A`@RU#32XLL)N#/X+.R!T,6$*5'7ZDW;E$F!N)RFUM:6UI7VY77%5VA >+MWX(>[J10",C`969B8IV#MO;&5E[5G-@:SIA6*@9EEI?NCH:.AGI6ZNJJ:6D- >+M[2!6>GO.`ZF7%P"H'3X8#G?9F0$?@<3+KBFT]+!H4ZA^[%Y2]U>,ZN;*020P >+M5N\]<G$0?',Z\PPJPPRE0+GK,L<="5K;P(!2,O1O3\R=/G.8J"#GB?D"N.9? >+ML=DBHZ"@I:6DJ:G\",*EAQ<:?,QM1!0:[/#1*OL`JOCQ,_?>5J7Y2)XCTWC? >+MJ-']P/?++L2\[-G)OZPIJOB]'.;-JOV=6O=2`(.%!>=&1G/CX#C1LJ)&<2<= >+ML8DSXUZ/OP@M\#.MX#)LDU1_]W@`",#Q8U<F(`H766+<0JZZD_*!JQ1AB;Q8 >+MZ]`,/H!/004&O9N4@T*F%@#(<4>J%-$SJ[=PV[8`%DN/,M:U8\(F`F2!-I>U >+MEH9*G1Q8)1#$`&Z7J7$>/EZ9%:KP7E17B8@MVV>0T>=<*73K;OAZZT5&QL9& >+MQ/2X/RARO^-%9Z7\0.T$KD79(;N6H^T1!L,*Y`M!G[MDVN%8X@0B9DI"[9$N >+M=P$#UU<YYQULA7D6S2NR0+[P'HRQ19XV>?_9.SFYO3UO-QBA*?_QK,.EDY<) >+M>#[HRS4C_<4?O+[UB]KOKD.FI]<(R#";+V[(S_'1;9^!OPVW`Q>TDAON/;7` >+M:05_9V,!+[]F'+P2[7KY:M7SBZ6KG?QKC9V%PAT8/`J?8XG#&V9=<#(0$S=* >+MRN>P`UV^HA?M-.2+&H5:+G+KM+*RGT2XQI"^EM6ET^L-R-[M<%JKY?'J;FBZ >+M?N-P?J^ON_O;5B<5#`@>+9QPH<6@7%E96%A96@G]I#@M]WK\KN_B^Y%GQI!] >+M86]-+&(W\0#(%F_HNM>#V[]J<TGK#5CI^/-CJ5_&4K=Q=7W";K"/*>N9PC+U >+M<PZZ^.*N&@B�[#0>G]8@IYKW\*AHX+1(`C\K+W7I>C1_87TAT*&_)'*SI8 >+M,I@.:\`<!47GTL<./HACZBGN>YKW,9SO>\K?Q6+>=Q*IH1CB031:::B0K")+ >+M8?6]]#FL4^9RQ_]^-).K^G'$)TC(=R3^-9-YV7^?NL]D+`""Q4-LO`42?.W' >+MR3,'VM5$IZ7O-O"&(((>)<F^$/`L+R@]"E4TAKS`_/$8>%M)*8'8FM`J%IH[ >+M\]V)6T$988-LG"!>Y"6NK>TM/?W-B2RT\J@'N?9X).QU$!?/NCWY#!T%DW'A >+M4T[S4?OG5C8=$YS..(CJ6CSS-=8YFE=GRE/^TTO(!VJ;-@$#%T3N]'D<5B]Y >+MA972T@(W"`@GIK(W!=D!K;6;@(7APOHI^/SQ='"E3T-Z.UCBSJF+@(KP7H!> >+MVN:YTZ6TA#SC\$9[&KQWL/_33<9&3\A-S>X/J1_X<W9P`B0(6,'OX>^G+[[_ >+M\!?*P<.1TG:W)B:T(*\\HNR$W1W6VIN(ANWX:&R/[[RPOP]"7W6S+O&']`L0 >+M0`8$)-2K`7[E*C4517G['>^9L+2_+II>M-VTHK*5XN#F`4;W>/`=<A@R^4&: >+M+[ZV)V67K*RZU^,64,1AHD3!7STAG9-1S0&_X>%N#`CEVJ.K[5[47MUXB;B8 >+M^?0/,+,]CU0T$_5BL2]!R_[G-",*C@-AC!5HT8K1J?0#/8:AF@*QAIJ9VKPX >+M4F*NX_FZNWQ)'08+:Y_..FU"VFE;)RJ#M+VK*VF1,3;OH/VSJH/%?B^^%2(T >+M!954?WO5H.(^:8JOB9*/@ZCEF-4R4D`=@]E%.B(N:FXZNLN1@N&!L7E!=^8' >+M0LWP0GWD([U\">$<;&*7JD%!P6Q..!<2"K2+'K-*B*@<7$3=O+X-*$.Z4U?] >+MUK?_"NGK3U.X-%'W(8HN,@)-PM>V]<ST*VFZE"'*?;`A05F:6CSMH/@D]]:6 >+M]FFT<(.YM-V]HU;7NLE^]ZN]O76EK)9*C5:O<]UT0%N:&@WI"Q0):>;!6=?& >+MJLMR)!$.]<$RK>0(I^0C?V.ZS4;S9P$,REJ-5HO;CC2SAIH%I(V(R('--FS8 >+M=FSR+[MMQG:V\01*&ZYH8W*QB;'IJ=')2:E/N$EGAJI=5$^IN)CD>E6L2>-: >+MO7/1E6U,IU7WF":]AIK@OU\"16ZD6>+A]L/CPP2$<B`W+RT!Q\$C`?-69UQ: >+MM?I)H&F7/;\)Z])CL?$[1/J_ONO$1.YYZX8(![7#?1\.`H*/1+),F:4=TX=% >+ME*>WH@W:H@U"V7>K+R8`7ZM[0MTMMW`W\C:MP@UB6B@;5#J-5D.\SO-)5^:L >+MDIY8GN],`*?V@P223)E#;KN"F;"HM$]"&BN.S)E%W6TY)"*8Z=*&$<_=0)&F >+MV'M3*N$FC<TMNHP:AJP6T<(ERA@59L4!ZZB:W;RO6JQM=)<,T2J-3;J!'AT3 >+MNP@O+K]7["H*+H[;Q)W(J,`5:H9J;9,(5:2MV4R;C]N%.M[<'N>+!7MEY*!Z >+M6G).UY(7K[L:W9_=:3<^[5;T&M$8O49]4!ZAA]FMI3)-?RQ/D:/4F1Q9&37I >+M+$L&$T;/F,\M9*C-0K=)XZ2U>4O-NE^C[70$(EV<2-6BEA:+<BN*N9C7;7._ >+MP(7@3-$(863-F%4OG]\O554AEW".!*SI^HR'R(8$`I-W5'KHO3S:(N-D!B(6 >+MYN%N6R-=BGO22?19AK0(?$&,2W@3&XY=Z0\2YXR#:@C&C&5Y4B96UN3\*<LI >+M20<RRLBY`4B=9W:K#.OT'<(*!I/J;W.PS>K6[L;"RL[+UYM&XN:-MQ6WVT4W >+ME)*3D;/H>5.A4ZPIXRL.VG'U4\+UZM;V[NKFXG!*0TG;G.$9:DJ:TL@3D;9( >+MJ2@[78&L&?H`CJEY4P!<RJR9<BH*&EI:"EH*"AH*B"$-MD@[A;;U0L/.=(H> >+M#-B,\3/)F!@34:T%TP#SINUE9X=.1ANZQB(AN0@Y"B&;`<4>0BHAHND_$+5G >+MN7B8S>E5L;$P%T$MX,,$FDUH=WYFW$8D"S31PAEKG^$?9H;%Y@(NS,70Z`'9 >+M71.)<T8M/+RR%<RJC;B$MYJP4+`8:79<H$YR$KR"&4"/K(U/]H-3S_?UPAE2 >+M#'3,2YOC]OX)(T#@K`U#]0L#*%8EQ21H\J#:-.[M&1C1GZ$3\,L(!74,;U/F >+M7Q*@(`@DZ.<7L5@V`"V&3M*Z"ZM+)40G=NR_3-X2NL1ZSWUX52G"1'E/R0;2 >+M;F\7*XNH%I869I9Q9D$%7>*;CJK<KLLWUY10DN0&64GBU31,#(F7D74$$<,B >+MN5M*]MJW7\]Z,*F!.-UW(@)(R25]&;*RD8O`.?8&T&_CNY/A3.3B%2D+S!(G >+M0UDP7V[[;7F>2/$/H@S6$-`%9LHCY_U3C7606`R2$H+I17=N8'#-8`2,8OO. >+M;%9$\U@,LVJ!)>8HA-1!(ACAA$H`%/7NR*4C>D"F9$29W[RL]WSPU816`7FD >+MH'^Q\?/O>?S,983SPA4]D4GVF.AI]M/J1"K:A,,4A<MU_D@(HR\$<;WMO&1C >+M[`F3'^4$8^FO(=#MN!FD!*+4POH^DF!DF94RS%XB88B#^G(R&+I3SON=.ZA% >+M#IW-67%,R:_PTJUY^6,N&M$'=#04ITAG&)V6%5>.D`$`$U9;_\24]OU]RC(R >+M%DM[C$)TSDM(B$8'.\KCY(YL6^ZU)N3^,4SKIF`HB$8G[RF+*A&&,*F&SA73 >+M@R`ATP52;!9CE=G+0:[4##@D>5`:"UR)";D:$HI5YG=DGXK&#-(C8\!8`+@# >+MPA317#%%[\H/T.N376#4(V'**-%G@F+*H'&7%_#=(;C++]I)`RT*6$F=^:R- >+M-.ZTH?KO#<QN(C8W"6NQ>]G>GIW^_IG;TB&`\5F[(KD2/[NUQG0+)]?%!;VD >+M([/IT+<QED6A)]Q6TT$P>$Q]R[#?SHAST@ZE^3XX]F5G=W>KBE=?7<$S+GMN >+M)%0,A1-<.$Q)1GQ=ZEWK>"@CJW7VJ>PPXUL1T3H4FAINATM)!W;!`^0(%YE/ >+MEP^@QUB1RK*.>1Q@L`E&X[(@I`G;$]$*=`KP:R`+@[@,XU,"$@+.Q#)K$3FS >+M[:RHK+STUF76@YO_NCO-9CVQB[QQ^-R][;Q\_=RZM0VB8@K=?;-(;G>GU(XY >+MN,#01IS#):2-Y:AC972OHT".1G?D9L,_40Q?HD8F]ID8[_(%#7+-!ZWUL3O) >+M+*96&P^XH4.&!50;TN<>8B([_F2][6K5S]M%@,'6D>7W-`N=YL!-<E(30TT$ >+M_.03F`=X>#,1B'9`'K_D:>N=<MD-#(Y(D0K)W2,P\5<\E-0-4A_>>W/#.T&= >+MH9?2\_!J-J`XK^_O]";-FW^3"EQZ+X_-G\`$V6V+HQ4&$[LGAGQEZ0:G@R8I >+ME/5DH:*A_!8Q$:CYF.5OR"#X@%6C\1%?5EY3JDO-[SV4BPW9)HDNV?\,?HS7 >+MWP1!2&0&'7EQ;FXJC)"IH\3HD]`?ZVO2;$1'8&%55:U(/#!,+F&!PC=:@*"> >+MZ+G+Q\:$\S2`([]3/SM%`TJ$%OPY5>_8"G'HU'9Y_UYG)%GA0&3\RFVC]\K+ >+MJ][OS[8\5>V-5E(!*]9P"@([HB6KYB<6H';3E=(+.'R.F:@'Y-W;QQ/^S-9< >+MJ=$)`]-B1.#TZN"[9("!GYK]0B?GYX,X&(2Q?>#;N7\9D=U*]OA>G<XL%]>= >+M2@_1`H1X(8W'!$FE^=[%T<HYI!)'143Q=AQ5]:XSV]&%WIV.0*'V]NWS['7P >+MLLLLQ7?NX4/91R3R"ZC9DQ$=.;M,3PCI?8.\K[3KWUYO.'63_<MCE"A&CF;4 >+M2+3>C0CTL&!;$L3+>_^XDZKIC_78V[B?^6:\\;U$8&CP`2_WJEA3K%!^S5*I >+MNNG/?`]P&I\*CE,AMR!Y._&F8@PWU]U^N*G%R:/S67MB>;Q95>&MVALT(O,9 >+M5YTL`L/C>3\?$'-[C]=MB":`#4?PP1+M%I.$)]H0'09/=Z,2-77OF*J?P`8\ >+M:FQR<G0.3^"X:QL2OY2VFV,C#D\`$),_%+#-!<@RIJ/EO_#A,C0N?=-:TATX >+MA4$FP>.E5-81.<QD-KYO36B)]$XSN1DWS\=YJ]>^_<ZOF'Y*\Q"1RF!+X >+MG0M/R+_6T6H%!;;=>R#`%+X\VS$B/F::]T")H5?M&(%C>.29?7^_ZNH:"1<H >+MT^D;=;HL;MB_,K;]Q9:Y)AH&?S8@B[[W1Y`L^M+O'$N.*/)$2&Q`$$@,PY<0 >+MA[A$)+ZT;$D[:YY`"MV`1^P$FTI4"CF1DI'ZO,7`SX#CB/:3D!PG"T,@OD!9 >+M02'YT&#ST]X#3#S:0G7^)Q$3J8@1->A#)H?.!5YE#ZN0F)B6EY63D>OI.?:, >+MFIRMO;\%0!+Y@;2'O@"FT`A+ML\Y\G.]#09W:X;]>6H$)2G;RW=OD=S]=_NN >+M(&2RSG[51B39"@;LBU5O,U7:IR6/^%I@YY6\#9`\C<5G*ZXG+-%/ZO<7<X6J >+M)=]H,;.MFIS^M%C.;'1^]'#TRQTOF&[]BF9PR.@W$ZB:GGY7(JFX<1"DEX@O >+M/NH-A&\1JT*>##E"12=/*"X(BPOQ<9LWY5.6$.3U@V:;'H:?H`&:@.O__*\8 >+M#'_GW_&;0K!H/'T-_D&.=8&\-T@4^D/6?"3"[,0";-EHSYR)ZCR**9&@<:,; >+MEK!T'B<'YWJ`P(.0$K]_Y7&5]#IVA(%YJ!(7X3"$L4W]R-P!1H?DTE'E9:9V >+M<J]+,Y-P:%`]D"RYRVX&REIAD='LR.@-?]/D!2;AV([`+B9!HGH"/$FDG8C3 >+M.-0M+"'I$AMOOE$4J3L=CR62(+$K5.9)4;`M?J$8G]6J,AB8%S"=&FI$V>7T >+M'J'H(ZU+%`+;^,AN*&DQ.S:#8@AZ1U[:.@91=#B"&-CD@#E=T,7K"Y1Z9B29 >+M^F#W8/:33H!P%Y9<=`I<`/5U=3VD`$5X(J%,4:FLCJ[]@SJ4Y*OOZ<[&VB;? >+M\L#N*N25/9I`HEI);34YU607QMD:8.)/$@^G_S$9VY?NJB+PQ(!R=L2?JJH" >+M!(^&JK?(1P\(R5?IJP\D2>E"W?K&^+QH[$&OBI/U=(<3PX("`I\&_^,3%VX- >+M/@.:L3S&Z-(*T8TU`1J_A+2PNOK[0`QJ<O5#UFHDXL]0UKZURL;&9#4\0((! >+MH:@UZ;N'VS"X&4U20,ZC'04`X2D[2(E^"N0\!C0\Q'HSC_Z-7@]I>X(,%M^C >+M.B]&:-P&S_BY@"@<(R>1D&?6/2+D-_F4X555<-*6>+C-U6<E54'P[K"Q^I%Y >+M")0#-\F/C\%*@/@]*P9-NS^XU\X(9-K]M%"^EU8JE\5DYCJDK#"E_0>M85(= >+M8C4(CR@M:K#"*C.S/-T``A;'BH+@^%D@3>5B._:5K920I2L@OVL^/LHZ"NOR >+M5+OK!673T,B8`3BE%T!HKTB@M/Z+8P1>K4HO[[SJ:628W>IK@#N8-I*O3CW" >+M.PHK_)0T]@5E48W`#C<RY%$PU&`4?6L_`".K+/:&6GV*)/VG#'DW]IJ'7ACX >+M[C'TS!2=%](B2W[\_-XN5!1[!OP`B)H76D&R!JQ!*(T1*-2@.WP@(_2;<`^% >+M^U[L:+%G"SA&#R@7Y%"8D&V@N^PFA)-F\$(TDS!3W4O*QIM;R%Y-PRM@VA6^ >+M[4S,!4W*9N'Y"82-0U3UEY$'Z/I^).W?`;GUQ4]@C_XN::UN5F8VR:*;PJ"* >+M:91,-?8/8:2U$$)VW!-R`''6KZ60`BMOX#[?.BSF@J9^RA$H5V$^%V1G$;X, >+M_]\$!]@Y=:?:G\'0Y\;\JD_^D,P?^E=BDK*U8[W')*9F2A>-V/RYA168&#[@ >+M%&:][>-54=C?A(#D=HA-8).^)FE[$AI#%7F'.0]B)"FGPXW;=OYNK'Y8_CDM >+MFO1M,/0.B*F^9?H5_LA,H"DRYBUAB4)4H"4_X3T)2G_?%9]%:-K:=`;O;'R- >+MTA5@?;+\%/%MJ<E7FXW6J>V)K8BZE8=>!]7)9(?_QY16:B`80JKH4LDOD,`` >+M#-+:3I<82)OJ=:*MP0#<<$"!EW8]$?;`<4X>5+3"(Q]@],*CV3\@PY%"YZ#H >+MUO/9^7W:+HXV$==^T+>#J5=WK@.,??V4HJ\)^5./<WH`SFN+Y&\_\+@:Q<QH >+MPM("1,U72MMCNE&4^AB\:4$U2S%(Z;I&6K^P+"^3$.6"#]S8S%@B7M$RRY)M >+M`$83N./D"XY(IH;-SD5\[*ZFK(C22ND7K`D3\M":RG8F]#=WWF2N0?$Q'1K/ >+M0:7N@UN:6!.82^)P@RP0115IE*M%;4>04H).S?"<<#995FM-<C=LOEVD;Z); >+M08RI)>^GE2CJ76.U,D,4$%WE)5TWC@1'CM]G)`&T`-A@CPIM0C8YD1H<$6JZ >+M@Q<&R%03="&G$]T&`!K+T>6T)HW2"W9"WVE%#I*SO7ZE+._8@+3'3R0"&CHW >+M^;;R\@;_-/'SDZD(,D2@OB$HBT[&MI5'"Z%)X()+1E5[,0PP$VO&IR_7`L<F >+M7:VXM1#U_'C4&VFB(AH*:3GU.)\99JX:`M+18?H2]S-&D3$';CO4:0`LC:F< >+M[U!KA2RG&HJR21>V\06I"#1$Q$);X'T6E)Q7R(Z:%0GG4W?SJ$UK)*K*IZLU >+M"WRKG-:&`7S++'$8=O9MFC4N3LVQU=340Q0*+9B]>_AE:4LEAJO1A6S;D\2M >+ME/0SDAB$PRL0HHH)X@R,VC"ZT;$Q$9'DW%'8"M6C'LKW>4LFVLSTR'1O0-'A >+MR]<>+B.1R,H*AM[=PEUIW$3P1,'%@8@JRBKXE9O)&8S\X6.L"9C!=/*DVM/) >+M2H:A/0OK<C/HPM1;^@U7\F!@X+&Q4>&<%N-)U(K(2&7$E`KQ$LK(,?^IXU$* >+M;JW"SL;Q/@&E,6,MYY:1/A36RD1E&)=SH,C.U]2@$1>VP63WPX]E,F&R7BDA >+ML^$O_>Y[XMS8M&$,0Z-"(B)"R7O#/!]4Y6C0F*(RN1!<CD"P7)H[5'K6PAVH >+MEQ<7Y9S6UL[6SLY'!P^'!,B4Y[(J/[];>;?GB&!U63X\F!*AEZ:(\CGT(`(` >+MU7*0M83(!9$Q8;&\&.70,+1(BB+FC^3$+Y4P.V#$$-KD,LZ<L8:++7?XS >+MI7XI"9F40Y_^QL3"P4"Q`GQR*18](+8%[)@3IZ=G;`H,"W29RRO+F%&K><D7 >+M:1'CXXTFA(1[X>"PO`^6._;26F"^1"5*9$G)"<KD27CIO1FD8YD6SB(`.>7, >+M*ZF*Q='$QL3%Q,5#1)6#HNZP,?W6$B<BXS.:E`5S<VF`M[9?7PL)!X6(=V04 >+MU%,>;WO@\F`H#I=/9!=)KT-B;C)!H3@<KL94:Q(&'NREH?\+?[RQ":""R1L@ >+M")9KDDQ_DNR_R#/IJS39;?<]KM1)R-]Z.PW2PP\]6&HNQAE0`UJ=IAF>^AG\ >+M__D.M`TW_(QE+(>!+%CL]5V:"7/Q_DD3JKV6NW$&M""2@5.=N<-T.V\*O:-I >+M7QML)X9TR-,^7]2Q[S:TDY(L_8-TJ(``*QILI__N9+S#]/_4#K2DG)B7>U\R >+MSI"]1'+/C3%I[(L[<:TA2;/2`T?LQ$#`^WO],E->RZ1#TN:BJ1][UCB=VZ?@ >+M=\3K.C._J-E:VO[N!7Y;PL`79_SZCO0W%V]\>%B(/&*>62W.F+P9K>?]LF*V >+M&)T+##`S37PA=VF%EY:JA4A.14='E9:2==<<+R.[9EPDT@@1*O?MX6\87#Y5 >+M%:F<'"E2J;!`Z02U<TSL5HIE@S0_DS0X+"ACHR+B45'^P[5SK"TQ<@4[\<6U >+M`(-B%QM58@1S5E1$F#QY6'2##G;'34Q*O!\2%ANMI":U8FFUS&+I(B*BD5!Y >+M#RY>M<4@*PH*'WOR.!0BS*EPMY=@;VEH6%AAKJ/LK*QL'$SX+0UPR=8*#\MM >+M8<$FTON@2Z.UTYT/M+=_XV81`F!91NG^#$_7NE7:N*:H)%+YH-NS*75H\BZ% >+MM7(O[0&,8A`;G4]$3H*$^WI5H:T]8*T<F44I6?+NAJ[TJKN3:W%Y)14I%1E@ >+M'!D@!/F(=\K+'BQ\](.\@#Q$+P_]`\B<E)>7E?6#A"AS_W`T5FZ46+2,0!G, >+M.?S7K>ALXBE>&F;\O_#K0VST8(*-4+RHFOGA&'NVQ,QD=VB%M+-E/MH-CN:> >+M2XH!$S^=@,=:EPU#;,3<:A_M@>MP&VO`J]5JV!"F4ZN_+/PS2Y_W>X0CN+T] >+MRA=DL#J3S>N4O1.1?/RN5`/-A+<F/<839:`:6S"*OO-IW#"*&IH1%]5JZ[KS >+M./4HL(R_`W7L[NAX2`<!`$!%\WTHIOLG]+U8Z%.WL:Z>[48%JT<P3$]*QI=. >+MK@!MY\G:5U^KYZ68VTEQ;$X8R$-H`@2<95^:#'L]:.$R=XH6ZLV3ECDUX]BS >+M(\S6<#DH6$RF.<1JS@R#^>G!;82O5T=:A=852CR<PX?G4'K_+Q@SP?2^(&^* >+MD;,Q@WRBZCBUM+6SNUU8N<WJ*.VQ]J.$(MB:QQF<M^'LW_5!8:H/55GRF?-I >+M<JFHBF8OZ9^@KXZ+"<4T(6SS4?(C&-Q#I9*L(9@L`T1F>_OZ4^)3J),9$<*V >+MP`TZB!V7B8GIH4H9;+2BEI*,BM5*RN7DY.)BX;>81[GRUB@YAEN\PK"5W+*/ >+M1.JOL9?@`8@+,HI(SHI(K@@GQ-?+\U`^JF``A:*7H$:C4FO31Q1L<""=6J&D >+M"[T=`L:)`&LO[3BHF81R)0<D5)OQF2Q?1)Z!!U85O70$H78!>-E0!=-T79GL >+M;V*(9+4X:7,B0H5(-A'-QD:"LG)("$AEX""@?E18Q\;;W9VHHL8C<@7R\1D? >+MI7OR'SD?'1T;V]7OCDX_SG3O#]CKW1:>,!C&*^C/_5`N3Q=O?3LM3_;B$,7_ >+MPI]6-F!N)(8<#3N2SAT=(J5ZZ^-A*)HY-^4C1*Y)>HQ^"8%>Q;[P^PWUK:FC >+ME\UPSS*<O5)CAP0\Y/">XD#`/1&3_1&=&?=M.`>4=@B5[?2!#X.O,8AN1.5# >+M,V+;LTPWD4RX/@S#*?2``OT)3/R@74=_Z+H"L",#W+`2\A:(60`/1=OP\<\$ >+M9-O+M.ZZ3H]&]*&I>N%DF,;1;GX'G^L\6F!4_X]AQ'QT,P)1-STA`)'C\!#@ >+M-KD6X7H!(/VB$;2[(02>$<3;H#TJD+O4NSIX&]KZKW_Q;(%N<+@%<TL()WA\ >+M/\FWRKWR/N@WRAI#/9OR2)\/_#-$\`CU)?DI8;KRT\Y6F,/J_92$_F5?-N5= >+M_AX8Y3XYNHJ>1P3,EJ8J;ST=8[3^:7X"!JWI[S+`.E%/"&?X6R:OS2-RW,7N >+M+JX2M_<NIBW9HE716$$T9VQ5'U;G]0W#;+L:Y."\]..N(QE9VFYM;<_!D744 >+M5UI,H$P>0I*WZ<QC!G-AW(@X;Z"M(6O7QGY6E7^V>63I?MPZ(@_)U<G^\?&\ >+ME"@1G]171XP+MI7C55C)3Y]-[*QRV^FYP58,!^[E4@R':?3Y)O85J8M-;+:< >+MVNGXS.4D]I69BT&LFT\G_=B\1,ZTPT;X[.F[:][L:3C)]21V0\KOTDR"D-,V >+M)(BN0'H-AUK=J34)$'B>Z6$U>RR+*!*9(;QRW,KE&&5`]S^GN4G'RFUU545M >+M;?5X?NP(77FU-365%;4JD,4\\PX7*Z#*U+]$/4U%1X'HFAH[1O1,2ZLGAM2Q >+MMM(CK+FJ%;4%FZ$WZ@N;4A$K==6J"JJ@2W%@G2ZU&2&;YN]:N3@VL)QJ5="+ >+MQ7E>)QG54E.?HEB3/'7E83_^Q>W/.(EZ$'=[8O+4P+@/VLMO."\U0%65CI:U >+MW3-Z2'=^X!$($1"1`>'FJ_A,IT^I3`[EM]1#&B2`)60$%$)L_IAI+5@.5<O# >+M9(YDH]3(S+Y\\PK_5,8<HG%O?R;[U[[5MKGI!+V_,[_.%^WO7)_OT)9>AYZ[ >+MW_6S:[L*E-?(S</(S<WMEIYK:4K0/)+J#"`PJ-G5G!V?&G4O&>4&I>5)E!$1 >+M$;P?7SJU3"U0U;$U):[)K^V?3:^WNS]7O=_]R`("E)QN3&^ZM5AG:I\<>:'+ >+M%(2J6K&17?66IT\$A1&!@2F716VOY+;'@$`H==+^.2]7GQ:KM5NZOO4.)ZSZ >+M//-*E%G(".H]'5(G-S"J/W)SC[C5Q0.JS.`4"S*+>N*;<FI0JC`*?'`5<:!. >+M,6;$EL(00JQJ[;+^CY40RE6<ED[0*EKWYI^V)-3%4UB5_2J.R:8^[#Z/[U6W >+MMM==;M<;==OA4A?0"^]ZQR;`+$+(*2L52\[]O*JC*I:4I#2LDA/]$V^05F'I >+MG['AM-%'HQ2Z&`P>R^EQB+KAD4Q/PY-$D-\6!Y'E;;9=#Y_+*[^\U\ED"[MN >+MWI\=]*3FE")4]=:#)A<(*;21;K0GW>7F>XV%A"?465;QM("4+U1.^"3(9OFD >+MB.J1`->7MC&_^.]\WJ>9MJ_>C4&;`\1KX0A,>MQ#.[>REO0UG&9(^?W&58I_ >+MR,@Q-H(Z2)>9\F]@1;2ZES.W;A9;;64LPKMP:;4[[0XWBW"M"6DN/ZJJJS57 >+M&JP);E1'JT&-C6%MMKA^A(_7>7NZY:IH9F8E?"2/Q98EE=<&$9HT?5/.Z64% >+MF$5@A%OS293)C]]>'B4F&!`!BD6)"SP+2`-J[_N[.UT0;DZY`-[`&X/?W=VW >+M')XT4F.BK0=F=?E)M5<E'-`-JKQQUOCT%0[`JO"`)Q-($`%22:^X30'\04'$ >+M0(`GI^F-]BG`?+6T^,"K^(`IYG4@CS=O<1I$\^?\$+W1Y:W\^J[#H\I!ST#U >+MCE7`6$2/4E;*TW4R.CHH:B45Z=G&R'2`5'A,]Q_7%7;!,;X6T&RB')[+XPA% >+MH6$RZMA&L0)09-+UOTW%'`E+IK)9W#<O$W1RF8PVF\\:4-,,Y@>9$(>\6GF= >+MU@[3@><@"TZETGY<EK->=WU;_X)4Y(;W*X7$9L5GR^5PN)]?!F2V26TOF/8^ >+M,N_7@OM(OW^\[L7>^NWGNSG=[ZOF1R$#@HI0QT9I8R/;(OK?UTDDJE1):")B >+MVD+ZWT4DOFRWQ:4T,3^$@26]S?ZTE9(::&][RL3T9W)^,EA8U/A,.:='U&,6 >+M7M:1$-3=C?[8V&RM8:UFLI*A?2>LB>+UO?X.?W.XAF:WIR=2N*%`H>Y,='HV >+M*:FV((.LM>4&\RO+\>GBYD2A50-*NIAR:FS.$;7PE;4"Z>D<L`/N?TBZ7C6" >+MYJ?9,@&"/5*WY)GH+.Q)/P1PKF(D56)>T_+:?FYYJ>`SO<L&9C=4H(/9,,#K >+M<'LXOII24/&9W\I!\V9]Y0NKC7#J:FKV*9E-ZD@Q1TY@^-LM5I<IC,2BC\4H >+MP^"\',[K"8S&QKK-.N!8G/I`KWY3[E^YZGHY+`:+)Y#&>K@='H_]I.-:M\,R >+M.4R"TN/6:J,]_&R?K\\W[KH?1Y\U[,2$P[2,YL\K:PA`D7IY[;4=M7V<W];T >+MKG7':HYV_4BA:6T']9!^,^_?[(;P=H#"`FP)>>IRQ>G('UYC8U^Y!V=5^-$E >+M>[Z@L5;'M")G.B&OM_E)[G@<EBZ6LD@]G_9E,A`GF^%VE(.WAF8*CEVJ.OCK >+M="_6D>)VUB5B3I_MR8Q\>Y!XBER0FLVFF4R>*W74&'8U+2._-IK8Q72<D2[U >+MRL`Z=4(\T\G'Z47@/CL0:]/'I'04H\G1NAVP`\/R/8+`^@.<W$K<`H%;H/<' >+M0Z(2HS*AT!CLT=JC.J'0.J*^0V@%;>C[#X;V].VYIGV61.1?@-9;7;94SVJ^ >+M62]6:0,QER@F*+PC63'^CA3?C6E#I%;UN47.J9<-+@9!T(NA6*!0#_]@H;K` >+M-:>S!V;DP^;2$7!YA3B#X-JR%D3D#6_?ZQ^.A@9'PQP,.A\,9@UF0':4+Z\7 >+M=?\!;8.>@\+&P_9SXSXI^SW]NW^#VP<L_GT!>.X;SH.;_UBB[E?&[G&TH"/[ >+M)R?GB3[;$N]921X8\&9-:^Z?!O+F=%4&/>H!(HMW.7[$+:)KI7G_5PU"EDP' >+MM`-Q#[*SP!G6^9GYM`^L:/)C'-!XB2P+:=9=M7UJ:P47C6+OXZ)VKJL1SJVK >+MTL;`P"#BP*R0X*X<(*DR^70&!Z.6%B%KCY/?:PWMX\>39]Q`Z`5"YQ:J>7*S >+M941WNU'TEA"K>/)`K)(1HMCB<E!'08@8-SF``E*7+8>+L:ETQ[P#T"Q"1G84 >+M:77&]RM9+5]9'D846)3_E=*+4T3[B+5<>*:=_)M/G5M,U33:%-E0%3D,=S[% >+MAGO98/G;3:GK7!=;PD(F=N"9G%.L%'*%C"@2@AW,4U&!%?*L3,"B`U^5MJT: >+M@XA35S2:68E^KI/]@FHI7]:P!A':V<<UC:?Z@H1SQQD@F;'`]GDMP8D5NJ(- >+M+&C<7@]O-=(IP]*&K-/,%72Z\%8D*]@$RL,KT-(9=>N1)>#S>M:,+*FD%Z)< >+M[6A463%J4&BU:YK_$GDM5V>6\]]4.M3S5#-:K<C:E%ZRR8_!5-:IC-JD7<)A >+M:W[R,98XAIVOA?.ZBXVJ=."$&LJ;WJ168\\W=N#8I$=!J$0M=N@]I_X8GT,[ >+MJ^EX-5/JRZ$\)'E`'K;WQDEW!)P$RS3YIPQMLF[S45RKR30+V&:MMRJ`F1.< >+M]BUD4L9R_GUOQ*@`IJ0=D/F;-:OC.HO9EUKUF[>QFSV\+Z0_&.)H!`)_K.H/ >+M*2J<64!G@'$I(\=@D%V7":^N)LE@KM!!*$Z*3K4&?4)!6#-]]6VQL0Q'L<9V >+M9944KX07%#W"9(>UQFQQ54+D>?)K:9G&!77B`T/.MSH\F:D$\T-AF]*Z3H.B >+MJJNQ#R`E3WIQ^>YD(P#K8V$]O[23+:/PM>MD:S`#WTVERAM4";\L7S:!F,O1 >+M'YT_^^M=_#O5*P`RIQL@R<RO$G_?R0N]9VJ'OKE=@!9/"[]_LBD\7Z[@H<LL >+M*$]&^.WVEH(V,8X6A<9YC_V2'9:_4$RL'+?V+W`J2PP-`6840!`:0P\]3;FN >+MCR"X)NR;#2YX5_R\R6XE=,J&@<[A&LE3'#G\U2VV.VE`^'<D&<<"F@<M$6K9 >+M?FZ/PZ*JUAO7/_'=!3/()]ZW!DE#MX3D^^+W%L/I5,TP6);)(Q)-<("&@^4R >+M#7K@)]4R&1WL9Z9D%"S'`NNAK5A(]AU^AH7XJ\;%ZI2E,B!'ZJT:1G+@-^-< >+M_([VB`2>Y[Q-`_%795.=<Q@:K!>\V$D@.MCW^)"XSO%W?7\=G&<K^X[J2HGX >+MNY1)2?3-U]6`"?Z'0;,J_B[:E1(OUA@:;&?;33JXMD4OZZIL%&QG.NXY:#8: >+MC>3*O0EZD)75''&_T)APWQ=G&WT_<[W%_VY^-&YVQTKL#25D%_P?LQ-Y3S/= >+MRS#(QN3'--AG\A]/G8[P2X>GH^72F\5QD&4D)/<NLI'Q".4!%'%/DV](Z.WS >+M^A=S?_*"-`VAESM:8I$$QHC_(QS\UT6#/,%F)WMA%5HX1F314.3;UA_/36.# >+M;WC^"',;&EXP!B5>>=W($GJ\Q3IWL;83!\&H?'QGA'M9A(QE;1#>.4[':&". >+ML1JU:)(FQC8,KSICISK#O.CVTEMP;.JH1W2?4":QJ#R7AL&L.$E4\%8TI82% >+MV/M]Q/*-J9+O$*;G4B%W7.$3`\];I:%JB?_]/53TRD+L_>%9N;(B_M[&:Q5\ >+MKQ%3$/?2N)G:],6"[_UQB?*@W5UYA02AIQ?&<3"U1H\S@>3V+CTV$WA_,C&E >+MP14J_=]FQ"YVRA,=W'F:S/OO\Z>5X7N;9I$.[AF(OJ?^_[,QPG&U$W]/$[TF >+M_.Z)E1K)*6?T_U+1REI,<*"5_O]2H22$2>#M]+6*Q+O!_J@A#S38QOQ,AM3; >+MT:.%V%NRP2;X?GIJ1^C]@0!TH&4X(/S^>(3T&KMQ:2+[?KH^C_3[D@36U*IS >+M*Q)L!X""='#5E!=X#R;P4VQH#]0S!TOY[N\+V3,<.R(&Z1I(50X2T1-L5*=5 >+M#^XU>6H0!@@;"%5.&$)Q._NL+H-".NUF1VIPLBE+^[RDJ3:0"]MKO188&SF< >+M:[[IT<@T)Y_?%<T&T;TU&Q)&CWB^N:I!-[\D-"C!CO/SO89+'%C:5,;3$;3@ >+MC,23[@[Y8K?5P+ACH!AM?L88$(NRM5SCPU194)+_!!^E5UJTR.EU6,:YV)=2 >+MU%N?I"ZNLBHV73S(S\?Y$X/B.B8(MM@LEF.[S`%A\@;?Q#$)6_R;WH@S\16I >+M+/\&;GXE"#1TS9\J8S9S`+[F>B=N%IB!HNP(9;=FM=(&M,F<9/^9":A1-JF: >+MG/;WWG[?V?TM8#)B^5G!(,=G;4>0NC5PA&Z@47A/WOF4*6CP2WD@!$>6^:M9 >+M4>US1JOS$[;X8,J3OC^TO7);L\IWN7_E\B<OMD?3U^):YK)?/$M;6VO+F(A$ >+M18T`J-4*C=CMLQU<SEHS!$)'1Y8)#J$V)S5=[+CFZ5'=>W:P0_UF;U6'\L;= >+MDS/A`N646W1%&DF-F)@8;$+3DXT*H3488E)-:"QE"X(#V-9:1#Y,HJ9<_60; >+MDB-16ZY])H)@W,7H\P<$V.D"=7]WSI#(441QDL/=W6,1C/Q0&(ZT?!$VK[W8 >+M/5N3@?/N"@5Y&NB0=B8H5Y23?9W!<6E$RP[KI1L"Y&:*.^.<2U\_<9TU_<LW >+M=SWQE<!G;D%T`G:)<Y4FW5M^G-PI;0[&DN#T"KMY?W2S19'<[DQ&5:OV6``E >+MD<Q>__&$0A?+8Y^%F)AK.2TG-USN'`0Z@F21WB5YCKV4./(<.L5^A^H-=9./ >+M!EB?SVSE%UO(KQ",YG,Z/,]EV_YG7YB%U7.?U\-6UE_`G_0TX;LY'R]$U2)O >+M_V0N&^`30.HY1M,ZA>#&%'H3#4P""<7XABH.I<S!T,74!!/)21`W537-[=V" >+M7Y>O?P!VX08I8M/*PG`M0RP?N>D!,O6F.T,5OE%/]&50(="G/#XU]?$]'/&C >+M9L0K(R?CI^Z2T3)R>ZU=J=G=EM1;J._A*?!:\_.UU.342U?.<FX5'+@\S<T; >+MUU4T59342*N\8:U'=#W;G40S<0JI4J*BTN(&<_FBE\UUXZC9MBU:5*/0'V9[ >+M;+UY>)!4BO)M58?_-XX*N?1BM>ZW\X:!T1#*`BVYZ>29ZP`C=C>;+F6%7C[Z >+MW;30''K%3(YKTQ-JU,WM#F?S!Y"3N7H?)V2P!/F;HCJ/&8(DNR#!R_5LM6ZU >+M,-K<+!#*<LU)9N)4[@`#1EH6,H_YGU3]J$1*HOZ+8=@3"L0S?F%3=V8L8_4N >+MEE]O`?+G215.OHR<JA(;++M/;J[G>CP`E@U,\].QF$D(,./!@'A<&P?LE2[B >+MSFG;W9'O&_53<$*^#-(6[YC]+NGJWY/^,I1R30^6:Q)C!?N<VTRZ-Q500M81 >+M=7%(6XMZ\8G+..4<WR72.4SYTUZFX@'7Q/QT;ZE0W:+:)ETE)?]+@[DZ^H?( >+MI:T6B-,(A\XVX9+HJ>T/-%75@T8.--O;,;TSTM/)$?-7ECA&LE+IM>B5>3T^ >+M6[L/TF+#Z7:W4&06UW_K[2;#QH?=K+9D_1?0A#-GUP_UZT=G&SX2\A=[N((Q >+M[%=W<%(0]S8\)1'MV'1OQ"Q2_CUR<8!P-QVE"\^RQ,;M:5NM1QYQ[TFC+?;M >+MA`,6DU;$.WMAE7AIDCUS.#-]2&OJH-;D[N2C$^H':VJ2^_G.H?202Z/:,_K( >+M4P;P.'?XPJ3;IYEZ5P'$O@RYWXZFB@1J#U%&@G3$!@3@ZX&P+\OEGZWHOX?X >+M#]=7,/.!-DK@"G+WGGNY.9@#W71`_AR(Q4@?=WB`\/L::,5NR%`\V`0>R*F` >+M3?D/*;4?\AT^=1!06C6VWQA2VT!W*4Z`$;#HL!1[8[C"&(AFY4+ZKCG\, >+MT'G(>"2KO#Y;QEKN$SK4D:S:$V.Z%#GT07F".GP$%+$_7H%VJ)=ZD!<D`;H[ >+M2D.%B=Z*X)*I!;X\,^CG:NZ8X0=;.90?6'KPG=T=C&]#O83]CUT5K%O%=7!? >+MPL@&1(?@'YM`CD5U3GT<S_VC&6*G;+OO"DX!EVL+&)(CJ`Y6-ET.'JU["1LJ >+ML`":ZG)N[^K]`*$-5O4$!.5-`S[X=C]:"'=]?2D,8SA<,V%MP.5J^OTH/J2: >+MVR@GM[TVCL(`0N5683Q<ZD=^*Q+)EF$@[\^\*>6FD9/UY7C^^:_2Q?0Q1;/) >+MBIHKOX="$<VJ!=@)XK47FS):63M*IJ*)&#VPWB%K^35P*;X0R?3]6"F@@')# >+MF"4>/<AJ)(4$Y(DK.Z8?-&.K>&\J)8T%^2DDK/Q*+D5[Q(YC(&9B8H-_X\T& >+MM`>3!EGY9?C.FSZ/0>.AL5=3HR0&ZRF0\FI`ZJ8+Z7FHX4HG;[/JD`6)D$0G >+M6S3_0":O.4T/?;`BE8"Y@`"Z8,,TC!MV\V%!^B70S[UG@/"G82.>_"F]@C"A >+MKW+B3W@!G>YZ7)]!,5W2-520@NI,:=:I(SWT0IC`>B.2"31+**SS+P4$)[\+ >+M>#I@)`RC%.9(]O3(-TT2SKDRXX^SH@$8JGPQ7RTQ2),G.R:8K`FXC"R^D@D0 >+M4?-S$&;$\LK"CH+I73CG2G;1T71X9T?F1U_(?%L9=JTHR5@7B)KTA,]M63Q4 >+M$=5%-*/`Y';B&$>CDB`E^^Y/2V(\4\\='`TV+5X,AR5!;0K.QTF_.!0$SUO5 >+M_HX9>6`=]*0705[P^$+RO.9]O,,T@^?V;WLJHB>GSFR'C-)S)^O^@7^WP(=0 >+ME.B\-$3CB0-/=C'VW$/Z<;ME]+W@%I(T2,T"0_UQQQ40+FP2W+A7@;XPPZHB >+MP;AJ*]+A<#_N<BJ6H@3.+`,/1+($]M3G'_O]P3K1$'+0DY@WFC1N9`--'IQ/ >+MZ@>U50^CLOFMX)R8U$?[2$UJ<[0-QI9MR%U'",V&T"/C1//$&>@9#'LZVV*9 >+M^;NNV>=HGW)\C6U7HT[C'>;><>R%0T!L<XC[-$3O1&_57UC/V[^HQW?,D;,= >+M7?(N9@6$X5#]*%%^:V%^1,[(R'":5W-#NX>8AA%S9H+2R@7S:@3I9?6B!BMF >+MALQP]7A#()1B";.K;:=3'7T%YCZOO#O?M]V_/3/M[1P.L\D,)=/9YM0\SUI7 >+MO9U+>*HL(I+6)-J7R9ND)29FLF6;,$YD.!?D$RM>![V3!XDI.6Y\8`4S&M1D >+M@L.^Q_?IIZ;4*A[5MN_B%8Y4`(7E[M]R/=N\,1T`O$$R=P#TF_CO35JI]8T7 >+MO%XD*KZ@HH"^-RXUK,#;^UC]S^:FV3!N3Z(V.]BI_21;^1)`64&D.N'5$('E >+MDE9`M$LCHKM[G9M^5LKG7@\"^9!^&G6`,>AJ?V6+G(&:3\A@]:(O+D,0YJ:Y >+ML-,0[MA-2D.:>?VO$\KA/I9OVE"#EY$_#GR8(/^;X4TZJ9N\-U7=9X1J;Z5^ >+ML4NF9X&6'VTQGZF[9D[C6.Z4MBZ,!#358[3,IDHUSZ;Y;!%6*WE\3H0CXWU< >+MK.];_FD?@0@L,H"N)G`8468"SA-E1@#VD!$7_F"'8K*%,8%C\7EAZ6UK"91? >+M-MA`/O)P3,G0^N-4P6[XY<$X!GC#><(`0A2Y?]$(\HE8A^`#JO'*/\#U37;^ >+M($%ZK\6FV/HD@=`,_.,=JJ,W$;[$&+`;'O!'\N5I.*=1!,B/,`-O#O^\"<GW >+M/E&]#E]<AX^',ZWC9&PA3B0D6L"IHY`L#6%X;:!HX*Q$[G64&"J2#0$=B&.1 >+MUT9Y&G9RZ:N2$RD)=*$$)*=I^`FNLH`4G?@K!^G,K;6&]A<RI6_](^@(55J, >+M(VK2'YBZ`%OR;5K619D1L3$M27X5F`4G4.&U_XV>`^I9,X"Y61.*67+C%W+L >+M]I"C>QHQF3;F$C&D'H?SFT=OI"2*JIDF`V=V,151B?Z#*S=`X7V[`D==T1F' >+MVJ_V!+#IY%F%#@=N<0P1I8A0$%I^T3D<C@1".B*%E_5_'B[2IV[KE+T4DMY% >+M9J_0!)T&%D*%-"U;3(71[;=MH@4''%(-0;`IH-,DNOGJ%R^:A+,7&MA]J2/K >+M&/E6!@F(04H\;N\J*-$GB/;!)S(7\BOF'V\R;MW'Y$K<%6^V!0P8$`<V&NTE >+M/N>H%-3$-UW!CMB`J9P+WT"N:<7F*.10[H!25E0UL\$`X)%0\6+=%12Z5;72 >+M(<C[1YP"1^P1<&WP,^U>ZI<`@[M5+]!$/%(5UH+H#2TS]Z!,`<:821XW:GD) >+MW($L67,@[$RO,E%`5"G/!,]Y@AN72NDWS$&2.UZQ7-B;S@MD,&S^[Z0X\;5[ >+M="DBPX[O&*`F\]'@(\BV20T32G?IY5>:28>)YM^`!-BD&W)13\5^W6O9$MU8 >+M+9[*,!#%[7W7TV`>-"\16-:5UB[(/HO2S=X((?NE6^Y;2KYZRA(])TG53\'J >+MD^&DNSR]FV:T'Q5?H_XS.D1900_`V"_/UL1EA*TR2=+B*]J'JSMD>7294ETW >+M2]]:\6F!0P<W,]<46&4>QBMQI7YG*A;K+]/,:F_9)_:="W-D9VO\N/)RCNO0 >+M&)C4Q3$4S9KEZO'T5,9:47"8J&FGHGQ9[9\PZK"RJ\*]%TL8H!R1(;7-;4VB >+M@Z.O!+D+_Y+8WLZ2K6+9_"EU,-]!P1OCT58HB<CW_A]QI[YZ:72K)A;X\V$< >+M027F*"2VC6?\F!I4U'D74V9W6A.S&6^P!T>2)]H]?_73SGLX!@-`;QHAE*'4 >+MJ>6[1H#?8U'F(GKH3-=DX#O)3@56^-IQB<P9>,#%<PO!/)ZAX^Q95S$[[:WJ >+M<%+Z('!0(&?.$9_SP[X%4W]K26S`]^6IUX<N,,.A(W"0A%X6:6$//2BERU;* >+M+#I^;%HPT`RH\O3"H]:/A10<A\NSHM(,N+_&HK&)W68@BP[2I"3LR=E)\.-7 >+M_6/;49?8!*))A(8"2(.(W14RLS?97Z8FJ9.*PIE"HD+DQ";<-^W]N[(A1!]W >+MF&=Q\"+VY3\5<+&)GAFQ"%$*,8H=)B/(HRK2#<^EU>41!>*$^=.[S>ZRC)/N >+MXJ&%`[+,IL8?H0^6`#7W`E#!#67SN3."D*#)LN$HG0\IG?*:P")=)I:[#;F5 >+MV1M7UDC703`TJ=U@1:WO%UB;1Y=CB#]C7+VTI0<BEB1\ZL8+X>=6?G`T;#I* >+M@<KN<`=2Z4Y^=97\4NI#,R%*L*%@+^"N"'@7$$%.<$8KC'!>D!$6@-/4ZU;! >+M0=!A%DCZ?$A3%9H/^Q;/8LQ\,@$&(X7SC*X0GN)*0LI0PQ#]#T(S54=<X`YZ >+MMGDB8E.=,I?VSP)WA'[9$(YSX&V)8<!>]THE\/'+S^VK^!)Z4A+_@+O9U7`* >+M38%DJ?F`<T#XS'5UB95_G`"F$T4(<%")_[I%LE94>F`5K']0H+(!!,CC)_-W >+M9D`^PT/^BO5AZ-WP%^H_KQ<XEY%T-<O8-0KR@TW>6:U]=!T)9H8SE4F,`S+" >+MPQ'8'/D;T9>M(5"TPHF-!`:\\X<YU[5F(B/1VX.73<D`2"X-5"#2HR8O'1,; >+MM^.7IJ\5!"$:-='7\?59S%@Q@D\UFC)1"[$OU6DR@]D&+66GM=>:-,GKS<C1 >+M,T8U8&JJA(14HP""#?2G=8<M::WY">HQ!UV](*HX!OZ--,2NQ&-WBJ,W]"2O >+MV*]2!=JM0[1DHW[898?>S#=NH4=D'X13-_VD,68@\4)2TF,P"AA)CX[ROK9( >+MDP+BM@H92NA.6JB[3,^GG&>#>X1N^%LCDD)3'M/7[ZE#!<P$Q_E_86=)B'<@ >+M.>&V#\K[<P\YK`Z`/E*Y&>(B8TO#6YTB!>)#*(YZ[ZT@+BJ8RTR!8INT*N>P >+MU&TX41NW0EMH8QVD:"JWB7+%F)CY(N`M'U(&LV+J;7^88C/]DDF&F&AL43+0 >+M^PSUAAK'^5VHTQ4^V<YG4<]>TRCW%R3\/I+J9-21C%?V[<MI22-D4_NZ4,SD >+MT]4C6+^;R%%B_\#*L73_T1NTPNQ::"W5`")"VP0/I$6??^!U_40<U3:>W-E9 >+M<BZX!IK:PAGY@2!K`@_1;/Y([E$%W/]U-W)P!*!7E>E,AN;#4KAV?F\">SA+ >+MJDNZ]^-_;$;XLN=1Y[\J?%/&S>C,/AXE$2:%3I9&NPYR&*"<R`DK-V)2B!<H >+MV2XE$%\+I@\U)]\GDT]\8P24M]P^*G`L?_&G$06PM!9(..0^<$");03XFO<= >+MO30*7!!4<.?_>G2(&$+JZZ8O$7*3$%(H,GHI,B'+H]->O_:=Y[&:N2QYW.;% >+MS_O'#2X'8\>1!]D'C7DY^^G=LB4:A'K0RD'(1:8CD.B@U9`$AS4(EC7W6A20 >+MO!Y(-*P;\^ZH2HX2V8X*?T>XW>0Z>?L-0H?Z&+B0A?*PJQH^(TONXGF3L:?] >+M56]PM\EI6=\X&%MR,4ADNY,?;AX/9\M/:./2'?.<M4G0YH>Y[/BCX&'CT)^_ >+MX-6_0S4_Y>QS*2ACI3#S,XQ>!/F.R$(F(C-\P>,E``O(:@'^;@S)&*G?"-%9 >+MWR#E(G,0<>*G2@N'6<N^3]L`^`%K'R1ETID_!'R)R2B^QR(B(M&G^='A@P9Q >+MC:C9S<EFI2/3-O?M^<)>XL%?L=J/*E7S(]JX-7Y-Z)K`-@`T`#Q$*O@NBTBT >+MLT,#\QVY=T.X,[#-X$?(!\M!!^'R(;[D,EO:1V]YTSH"K!)$[JVFN/)P.LE$ >+MA=SBM7ZJ/Z#LB0@>CL`3#X)5\._B93RSRA5,#77],CR;+RG8`FV#S=`;H(`J >+MT:%GA"B6L=N&.P=;)[/9%!*S7U?!P/*#/(KC3,B9*6,L7H^_9Q,`C><7EW.H >+M^UJ3;3Y-R3+O2[W!\?!5TN"!^;H,X"0_UW=\/VOVI3C:2C-&((FLFQE^```A >+M+RD[3(),"A0";]AWR/>:T%,%%W`3-'U<V$HM>*T8TN$=L?X+1V(ZXNJFX2*; >+MQ=F\"3"H.'M<Q:/J'7@DLZ@69"+/R]M]-'K6\_!&E=X!!?S,QP!"G1Y[[!@H >+M)"#,3P*6PJO!7D*8TC-FBCT?2TC0;\K4FD/&$9]!#^R-_F!?$?*HR^0?33JX >+MUPC/??^X'XF#!H[?-`9;3*D<)P^_`V1"FA:6!85'N9$D!9(.::E=B*]<E<_' >+MXX_4U]6K2AU`=@DPWR:C;6JWHC>KE\O-[[@&R`2X&,$ORLZWSHA:`\WK?C1` >+M<J\$90$/@F'!EP(.L2D)W?AFCT,4S(.S7(1-@A<4<)@&+$*M#%[(SB0/KLZN >+M2684D\8621H7%:1,;\!2IXW.9J?RR\U>($X5'N`O2=4%.EC3(M;$)R-U"2X0 >+MM=9IQ+&``H[VC[Z<V$@;KT"#5Y&=;![F#,\KJL.Z`,%H)3G7H6DRB8W8S&\F >+M===*[V@+T9N#[Z9`5]6B"IS*)6DO3-V'#-AG%WG/(_J?-N-_[/I]!T)@TX$N >+M3<^)ZO/O>N;T#H(EP:^!]DK/ZF0DR#7H%&E-;HFFE.+IZ#=#2T&N_*S+,H;Z >+M6Y("H3^')S7#'!M/WT/I4;B&N7(0)#F63;.=CI*0^`5_[FK8Z[6##039D?U( >+M5W)>:K`EDE`QF9/;AE0W"8T((?H==XD$1/DA,A%*D0IW7-RXVH8$TO(=99<C >+M=K1^WJ,!01A@J*AW)6XM^D+@(0YY=C&G`&_HM'RKL9R;DXFA+&$EE'Q;V?,@ >+MORT\&ADFL*8);)QO&J&?U,HIW_6]K&*R>2%P&:%<#57,DTNV6-C'[1W\BDV* >+MNT<;NAGEP?K\?"I&43'Y8%1A(BE%#\?IB]K/N1G*.O,G("MCM@_I$Z:P[!G1 >+M\#1J.%GYJ=,1MJP</93)`U7H=BNDX$9-JN39;/J6;23Y=,!F/A1I#BG$^L/B >+MF_*4M6P56;FH$?ZR33NW0BH^#N2K2;TY/)7/O7@)_.&)TL<JNV"/CMJG_(7[ >+M!Q<2S3KE()RY_TQ"X6MRW/W6W9OL/>W,V\W>0[XWX7Y>#94NMS*CM&%KOM&# >+MR[D^,5CB*W,89XWYFT17RHUJB][.+Y,O6-XXP]`%2U,?NRJWO\_^W77D!DK3 >+MO="[NA1L$#T8V[A!^AW>2\^"E5A6R;<].D#)'!S:6MCY0"J_^3\A-(CS!GI4 >+M"/`9"_30!TQ!49#P0"P(>=Y\N`H1N/TS5SQ8'^B@J.+P`0?;H.*A[CW7,AGP >+M#Q-I.P4B@$D\REJQN`+=+["YEI,;!NJVOWZ#`D^_LCL/OW1G%]0/%D1P/*,8 >+M7O>$&5>KF`)"3S5(`.*.4->@C8+(B'S!>5=9X3/(2-F1Y7^R3OJ+6XC'"/WR >+M..0;6!2N+?4LT*C!:Z'H)M:GAJD!IVV4,&<.ZN),`@+U%"GH`26"N(NAD`#/ >+M0*870"R(ST$1A6D[Y"&#.M7;-2G42[:IH!@B^I3LS[Y5NLEF6."1FZ]%7-K$ >+MQV,:/PVSRZ!;EF^-V\(M]I6;%!DLO3BLRQ4(RFR'L,^#>3K`U#D@5R8[R[G- >+M8DD'T<<U=Z1R4MGI+_#\^5;`,46(,*"NR8VHG=@%!+,)-4[C>JM:ZJE1_(@P >+MGIK$=+?DVKEKJR[)D%R09S,P7)!/5GI["N9J`<UTU^3:\`D:XE;>`FPK9A9! >+M-7X&;`:Z+CO%Y7>EGM^M,?HL!+6IF,LO\?[WTG`:J:B>JRVM)289_HFX@C'1 >+M@Z8@32/S+&2>=*TI13)"F4T$8C4@?J4XE%41OE!4G9D.OY;(E0:M[>V88B^> >+MJ;XOY704]5--]39_*-8),GJ&CZW8&XU$)#XU-/M@A-AI*E"V^I>A.(-1'`RR >+MW@.932DVEP@<0XB@<\<X]S>QEK[B_X+7Y<U+9M,^S4LA]4P5G[-_%';QU >+M\C&Q6C%QZ]<-'+JL.*:MH<;2<A7-+,.D/H/Q9MOTI8A'G$?1`+1\CGA:(]L\ >+MAY]X(9UIDN^%ME7;>E*8Y<N;HX)3$-B.<;C2/]NVJ$I@;:_153U].NB[\FEA >+ML^U1T%!]9DQ$M)BW>BJRH*Q0)0ZVROT+MDL?=P</O3ES'(@Y>8&G6@H5U"CX >+MBB\N<=GV?,--N;+B&L6>"8:VYUSL"+#F[<2_7F1O8:3.T%:SB+70.XV&NF[/ >+M)P-VU13IW*S=K>?:=96OAN&6?T^N3(KT0_&P:'<Q^6MH,/<@H=RT;ESA8T;% >+M>5=S8X1!Z7`X3UKZQA5[@U8%ENNOYUNO.GT2F'JTS-LN]`LT-F"CD.8/R>NM >+M(2A>-N'KT^8096*\YRI"I(F1?8@_D]W]YD)%W([#FC];9]IL;@M;,&F1=48? >+M&&`Q!)ZV*Y@0Y135[N5YF=_%92&1(47.^/L@0>:`E\DY4*E)3@AY!WX8]5O; >+MC,A^=.</8;_C4]6M4?1GQ8<-38H%!^7.A86\F341AHZ+:C2Q-FURI,S/7%Y" >+M2`$-@Y7)FZ.AVEE\]NZU8F=*S'7K&V2`03UJE>ON.'_F*<#DDQ#KE<^/?>7, >+M\C)>S+UWK[^<)(-4#)T1=^]4I]#G=^OG^<DW1SK/11Z-!_I*TN"9D6K">S$& >+M1B95V^_&Q=1W7L&,E(C`?/:"G?WK5`9/2VWAZRS)9QV=\PI%Y.'C0BEF<EVR >+M(D#\#&NVNU@R;PG-49^B[G<N07_SV7+M(J"V-D!H'`AK&DAF(MA:@7<:98'1 >+MGJNTT[.Z>(;95A&A'_^,:!X&^*+&8T)'W#[NZF8,#=-5&<'<$-/Z4IJU],GH >+M0,#:3W;WGGGW@)6KH$!*_GG<0&GP.HI%C<#Z/=R<L+=1.N$6?3A\Y[96?370 >+MT,`W5"^=_?X-USF)GW218PP'AR'A`@Z3"31'`%6&CFR'/<Q->Y'S8:;<PLI+ >+MIG^P\(_`P`3K45C2YZ+^C+>A(3$66ZN>5$\F9"B=W_/M10`PY&>:5+I3G*M3 >+M?%5)VHIL;2(9EKPZCLJY("#Q*O=HI^"W`*^PU90]!"$7%U15]`^DSF<#?X6X >+M^'OUD+$KV=$0!%(*?0!2:,TK`'Q((#5/T720M&55VQ+S)4%!^SCJAU;H7*?_ >+M0XI-]K]@A4C]3@]%)&9U-C4CX-,(_',<$[9P/)-;B=`F^D#1>,3:>?!I,XF= >+MT"EURZ*-JZG#(\>;]]!SALJ9N"23O<^C]=GRU;BZN%R@030%_SB(74LP1IS. >+M#(UW&T='C,72%DN`$+:WAAES9L`8>'V/)BA2%P[)A@ZJ(R+@1'![#M\_LW_/ >+M_!>$SN<L)Q+0ZHXCRB&*M5_!9K]_&OV%ZJ`FGH$5[:&](3J/VN]20[^:JMRL >+MWV5TOX3L9#T[:D"S[BG&1IU/H?7:CU/F6UQ)H20A8Y`.7'*`:C-=2`9+S%'` >+M3$<]$_0\RA?5?L<OD;9?6J'E[6]%EB9+BV/YUC6AR7EDQYGO.H4LK<TQL[P< >+M_GTOAM/V-@'7>?/#<ML(="RPW!*B6#5/&:SCJI@!VLOUV!*>'\\AL1R.92!' >+MN+3KCOA!?"P*3EL#8$C$]>FN1S85RYM@_3;_W`99B#^,/(QZ:"K`7[%%O3X+ >+M<'!<K%S8GFY/%#T`38X=/B7C6&*R5[`)"D8AJ4BJ<HT)5Q&ORUP-"::E:'!7 >+M"/Y&6RG1(8S*6F,IK&&XDE[I%@P31\^+%,%24S?-,E.#BP;@?-:.R6&5'J,. >+M]H,!($0+IQCS544-Q-Y:7"Z''R3PXHGH!`U+Z-!NAPW\<R-129;$#["<BR[D >+M#Y$/QLGO'5//''+DWI,,3F5BBC7O1A8!Z[DHDJZ>+U%M(:/9U*-@J1ASO9BO >+MO8U?%5J[VA;(O6/?6M$?&-S"6*_?JHXCUTVLK14%.1%[/X9;ILU[#A`RV?YO >+MKP/P(I^Q_=V2;)J^@9%R6W9X56V/N("XV/7(PJH0CD"`ONHR`BL^VY(HH`+- >+M@?=8UWZUOS&A!+*!/+%O/JK2&''SRO@NR4<6)-<G"O;:.$RZ)3WN*,E3[R!C >+MO7-A%MX-*M2WT@UG]R6RCZ?>.'E62X!=`ES.RU/<A'+SS'K^PS<-=#%`YP;# >+MEPE27&S(XLD#OO?,!\3;-_O)^4R.!$A*5`VF%02%(K&3LUF)BEV_H/^I7-++ >+MN:%-#$MGTN]S=X^'#F+$3:3G+QE)Z<9:#?S$B')OE1!@+F*XU7'^6;AVTBNH >+MT\7IH;$%)<&T^:[I,^.Q*!_4]GN0=8H@NC)V*"`.W4SW78_DT5O-2XRC*P-_ >+MJ4U#8.VF[F?^2WEZ1J'Y*S:_:L#"7QI;%4(#I:T)I2"O!K0>&T>87"N$^T9; >+M3?F,TTP]I$KK+U6@1I`'!3(9-NJ?N+C"F<*,=]:'ZV_CW>%L[XRZ_SIE@VJ- >+M"D<%MGU+FD0@EWU;1$P[!A<'A&H#.)UU??4EU("N.K1IU#WDH[+Z2AT<IO0R >+M^*V8<.V."/YWBU@%?ZB/)A2=B9]*NYR"_HEA"XGL.ETA8'9LL3JLA^97Y4T` >+M'E]@.Z39H>F&WBW%NU<)C&H8B;4>H*UNQ>+RC7":^DJ/JP:ZU>`E+2I^B,Q% >+MX69H^-4F7>-X&92E:4@)BZ(ASC'[Z?SR[&.^1*19HHI@DK*U5`7\/1>K!,ER >+MP6#4#?W8O:A-US2[4?5C^=;[3&$7.$/[29>)C<O&.)PR5]7.U?N,8HK(,:Z& >+MM&+/H5704!?LW9/Q(7.<'+=JP\WHF4?K9A+RAD<>'"W:2)OV8<>R4\99H^J4 >+M5IUYE^)(:A1ORG*HQ>P2CWW'N>R/J4%L`=O$Z^/(":%%(;,"*_8@^(?Y"3N+ >+M-'`F>005$O6:!KQI%^W)B2"H=9<=*I\XL[MHL56"GAU]+[.%^U6<%EW8W)@- >+MK^V71-<*JU7#]XE-M2#9*3$'%(>ZL"`R$U&E5ZM??`WP(TXQ>@DZ#5Y-/[TH >+MRX"IHEDUOY`#S#`;:U2_,L9/*061F7#'C&[]7%4;#6]SABR+?P7R(/H*>Y;$ >+MZU4#J`"NS[9GQYL5QO7N%,_PD-3D:?.RS\WZ(,BHAI]8C.6.!H$!4Y===]_E >+MO4N8';[WEH--F4O.6MA!8LF@@@&=FSQG!?9!44+]&+M'2&6/EGB6_=P_,;/3 >+MB5F\CVS=@AX?XG8Q((ZL(W:4BN-ARHR>;55*(:<,.LO#Y1*)H?VBU'A`5HB! >+M%(36JZ":N/!J5;'BER\$2`8\*X<Q&8$:<=N?</2/MMPTARL)'U'#JY8H00XG >+MH]7(]'N_^OZ1$<G"1F"LJ;\?!A/JJJII1;7!2TI?"1T2&-:`?5*`JL[(X&KJ >+M&?A7_^[R6L75V$U2J?3.RIJJPH!`)<#BDMI%LS*).95&,1^"VIB4;/FV96;4 >+MT<^+;S6"(0EFSM:D0E-A$&AP=/2N$BP;V?'*<=I"4<""H)J>187FHX#T)0>U >+M4.W0>[=OO@>U(]KG#XR=38":]M<8X$&QM0*QH>&LO]:GU?B@A;'".;&\B`^B >+M5^WGC/NB`/5?=#ZYV22K$0_'P;]4._E>%D_@FY\;J[TWR8LN,G.Y^8'THP(P >+M05\([L"3-JM!%CMB>-_$3YL5\Q/Q$7"/0NOTYJ>N1'J"SXQ:FE""OB>#-] >+MD6_5N9(95/[W_)5'5CRWSU(E2;K+4_YP(MNVUA9@KBD]+L%E`!NCGDL@C,WP >+M\1Y0SV$)&J-JZC;@C),NP9W!W1Y>>-FEX3Z/H7F1`5-70UGMOEL2R^D?M;/) >+M4VJGK3/L_3F"Y>7/WIZ:GCS$0C1[_Z].1.Z"X-5'Y2)>,706R%V-VH"GAY+? >+M[4Q-O]NF$DAV^4HT+L4R7X.*OP*AYBZ7WRAV],?9<''(M'PG<&17N4TSBO\L >+MB<PXD:\J/(QS?#Z@>!KY=HL-3C=WKE-8BPA<`L2]TN&"$#%AB,:`9E:=J?MZ >+ME_1&E06&PYKHU&SP=JJXC7&KH\S1;85&.XN(=07`GL#)M>#*S/%R6\>,^JY( >+M3!VSL3XIX:T'W`KHLSR)^.'(D=44G(-";>YAOJK<[\AHB5YK903R&:,;AV]W >+M"]1BA"3(77)_K`V-C=\1T:]02I0Q;]\#RR:8E&JB%Y[6DTTX65_U5DDOVVZE >+M<?=.:QGFU'&@Y)EW@:O*^#B9TZ2@CGH6RG&NN-'>:$&.D9>87=EK;*YDE%2& >+MF?:.8`SMK&'"L,".<$7P*D6*S+*X#4G'7(0RHU9&SC9N8(ZRI":G"VC6$ZR1 >+M(ZQ-B"RQJJ2Q."(.61+Y"&$\]_S6>R6SEW8F?$7/H,!%OF>'F2@5^W,>@.5* >+MN5*9AA!IYC>=;-Z?5I.N="36.R/YDPFQ<U8TU3VKD3'$8C!I0\R[*"K]GGC7 >+M!*M=%8$X4ONZ?_FH-\TTVZ(O:Q;#"LB?J#=1#G+QDY,F`[?DK[1OR"PFH5/T >+M,^XROC`G8#8*WUETWB*`)6'2$?4FY;C#K19CH[WJ@?9.LC7T77>9R)J(A%-- >+MG)-86NPLKRRO[*XF&L/PCUKVS^VOW^/TF]S+!-P:M]_IUP'OH$S*T!@"+R[, >+M$AXJ8F%81SV1L`N65/L]1S#6C5S[FV_P',*[=O`<S3MWJ!R+X2S8@M/-\D** >+MT)K\5QRMJ<FV)!<CG)Q[I=KN3$^>`]/+XTB3/LUD#MP)K_?]ONWI3%6:[]A* >+M`\_XY)V@T)0R&"ZO9W9>FA?=T6=*U#SGTD=.O.EF;CAL5<F;$Q[:CP<I']G5 >+M:4B>/<[S=VN-^_3YF$R#.W'S2TUV]G<-%I_,1+O3:1A0.ZZ]KYGDXVU/U]OU >+M!BO$(R/N9M=?_7F][]5K3$,[29_S0LXTF$<71<_35(=-AG70\T?,5IO-3G?` >+MEO[VMPXZ:M]!6,SV:";,GLVWP=&F@G\1E]O5ZTY8UP-O_W,>XSH*3HEMG]VO >+MP5+I#!;;?_73*7@_Y9?ADMM5[U:]P])H#)]W4%R&BI6M=D^&Q]T[G;+@3)Q# >+MV6,B1M-Q4[23Z>NHH.$0$4I"J3U>-DV;9)?WC:KH:TZ/NX^^+B8LD0]@2L#I >+M+?L8Y)`=;WO!+M-+W%3%FEW)G5A]X)X"U#LPY64_,C@ID4IKVIS>]]6=3A_R >+MX/MJ])@R#&]`P$X/R>ZI+/CZGMXAG:`\R,*/]^/U'06?X)!T'-Z`'GZ:G+Y; >+M<:U?/IRBV\,"4MGJ;>'S0=X9GGSV<J8W_<9QG!>X9!8NG^-SVYULF1Z[Z^5[ >+MR]9Z63HXAU">[/?-?<%0F1P>9_O?FAY<?.TPOH[#\3[O`N]/;IZB[W;LMW[3 >+M]7YO<O*Q#I>;]0[TM6$R]%9CSE;M7J?)TR+$<)HR!TS&TT2APY&8:,`$&[FV >+M-K+^75R/8:O:].O>L'6B[['/>^T*>3A?1>,=Z_$/1Y-9Z(''&V3$WK1(4RA, >+M>"PTU,CTR<^'AE`8+`8S/B<@7$G6G-%([T!DA-!N'B\U`P,!+RUIY,OK2])Z >+M(1)5PD;GG(_;>GAZ^'!!$%@P"&&3#M\O5N+1<EU4`C:K$1HT#BZKF_7X/@%" >+M$Z^(:9?OX_1%4U\>C]_O>]JXM=^O[T/B>>)O&Y(8ZA9ATP<=.C.S`T,)V&ZT >+M)B7]U@L16>R?ZS.]V[K[\SPV]>]]`]%V0N906"PVEZ,^"^-6\8+#`P13PL:K >+MKZ%!JRQ;+.[7RUJ16"PNC^OSN;=QJT\?+J?[^7V"7APV1^N?CS'K1?8Y0-#A >+MD!I^$PZ_Z5;O+=>'VRC,U=ZH(.J,5KZZ?B9:]+0I$Q.C)__V_GM<0A3LK)`I >+M%&X=MMTHV,5,TX,6/6/6S'/]^/DZ0!"O6#V34/Q&X!C5_P@$=)HTX]-475BY >+M;PZ]Z2=@&I7;UUL[GGC\FQ105BJ>.!P>.=V&_V^^[7,V--0!3'C<<N#H*+X5 >+MXB@HH?5`@.#G!U6QT\_ZFPZP"L2HD8(`74,F89V.O-UN4:TH"!1&<C.4)S(B >+MGN[9/*S`KO=AM-[`#O@U!H?[GT;,%3;:@MBRV%Z7VASN;S\,J,/8@-W+L><E >+MD.?[UP=AG<.M[R^A7U!>71Q88V9UB)K872J-5CMA5<2Q(\)YRYXNPR:5Z)>= >+M/K-`F8-A>BI`5<1R[D'!SU<7I0&EMM$:66=<5M!J;I,?#OZUD!>G8VQVD(*1 >+M7=Q+9\S+)TR<WE:8LQNR$*19'7%I-M9Z.M97PM3UEXN#\_(Z%R<G^_H6?MJ) >+MMIR0Y+;T#\8=+(*+]])"P\4Z>0S0F3YFP[\-ZK/1FJP+C(LV.SV^2.O4E(0, >+MFLG5LAWQ'PRV[A3.,"YVSEZABS?86"80UBF)'@>>FTV5V\J'3;ZL^'2U)<6. >+MY<RJO^+2DE\?^(WJ.+A]:%'6+?J]05,?Q[J2DE)=J1Y7FIO-EIIP%XX7O%N\ >+MIQ5EA4J&FSN;]J%OFIB@H")7T,8-4>.FIS$Y2ME,66JA\QTM5W+7]%9B0"F, >+MX9^-DC[2,HUQOCTQHBR26N5:9CFAUO7P/<2$F7^P_W"RT0C7=UO'32.H4%ST >+M(8&3@ER&K>ZO41EIN2*U4]L=3YH-$@U.%\#?;KPGO!$$!]WLSM&29L"-FV*B >+M9Q#59(4.9_4RPJU79V9W=7E"%F-Z=[&`6:6&C9>^A?69D-9F8INJ+!G]9-VZ >+M7'69^(9^AY7',=ZEMSHB<G32:%U;6VVXOOYI8:CPXK8J:LV6<GG?7!M,;43: >+M3%MNM]`V(6S96R8)0@;5669H$Z1-%B,B_FNZ$3D>IJKU'%'Y6]$F@1C%(F=O >+M&%0M6K&TWF@1,`QQU6[-51S2F:+L1#*H*[CDJ-C92E$65>DW4QY(W:T0C)1Z >+M`I6MY)%`489(`I/466GWC=C#/CG/9I1L6:M`M-,&HY0WXH+1TD,^<#/CZ/R. >+M,>S:*Y=LK]`1CL'!(29,&'<<X?$=@MK`*`=FKB<,V&&"S:>T;!P`@6Z))P_U >+M9C:))Q\1#D>^S0D+I/Y':)A()N\J1:(;8'N=WU*\!7Z!S;"Q&XSGKIFP*<AC >+MN61C`5.*)`,CU3*6]4DMX:I\1DXB;!6*/)ZG1&A(1C5<:RLI*P[ZFLP)N?:] >+MDJ)ULX>[P+)"O3,^D=/0Z/+/4O/D;B:R5<($Q0R>LJJRJES7WW]RJFC#Y08: >+M=)TMWXI,@4P(+``2-$%F"O9>2QLJ#FR4A20Z&1J`L\@*2HRFC,4272%&$0OF >+MFY&K4!J27%U`!#E_7(*E<-Z,JU)3L((.*$0SW-I-Z`:Y&%0@A+<.8<'UAAXC >+M.5K8"<$=$$/T5GV*WE(MP,`_A[G+/R=^H1BP2")^0;D_"'&KWG!?((MSM)D( >+MA;"#]%HR94/[!^[VX9]KZA8^U]9XB%Y=^A>*TY]?0L>#2K"(,0/#T02/$X:% >+MH'0NSD/TNUV3BCO"<@=E(<F*62_Q\-G+K<T]1:62V!KG8;X>@_%/AU/?GVZD >+M&'#?;T![+\=[$Z[,`_K&-5,?SB<DF@`ERQ/\X2!>&N5"K2Q_FOB)YF+E56H$ >+M'P[>)3#*D@NOV_=][T3[B@%XT/?3X\HR'H([2.P^U8X@&?;7_:8#YA)L@!N@ >+M=2.8LW'(UZ?3=W^`@U`HR:O(4R<('8HU3I??3,O=N8.GMP82?G#X):X.>S>= >+M"3:ML0PG&R4IJ^WX_'#N/%+IS@]`1?-)=`X@>W";EKY%5S2GSFJ)D%<2&D"L >+MP<YE^C_C3`,`=[K'W#8'M*ZQCZ>T<UQ/Z$&'S,\`K.+D<RO*R;]>=_NY6F(8 >+M@C+#3Z*M%T,C,.NTBI=<I4:E?AJK79L@KW.UJZ@HJ5F<C;^EV1/<8.PHP2]? >+M"`\;HT=B:TF&%$6<CT]#`(WPC+7DT[,S'*YF.I.O:]-@;WK0JL<OG>K=6R"M >+M0X`!YYG&9&]LZ3]EZYW+2VP%V9&('[Z_=I="'(*?4W[CDX1IL`RVVNP=OE\: >+M:T]&DH\-+'`2/Z5N1^CX2BC]YY(ISNQN'@MDUGTL[5797N>3.*>RV&O=U/,8 >+MG-[LQ,$J/0@H[+L#2]X5$]SMCQTP@G*VP#,CLEI.I]LX*+19["R$%;`N8/C? >+M![*S/ER&PZ,/]N,.+QEO&3?[NU44)GNFK`L:;[\J2_/M>`$'(*/"AU]2'0:* >+M[R<J[0<VO*&<@`PU6KW=W#Z[JTT+NT,=+(<%!`2%@=_WW&T&1[STQ_;W=@\2 >+MP%*];GN'IR*:O5XN04AOZ\@(_[Y.O,_BW(U^QB]`D,L\)K,Y>S/H[_:'=EAK >+M2P01382E@&-DA4B'SW\4#F0CME2IM9H,+L+&^U;&%X4.!$<T68QH#CYZ$V-4 >+M'^XD>'2)<!,2`Z'[L9!.)CW1P%Y1"J*+EO*B_CU7QL5^\72WH)6M.J[T-#>? >+M+Y#)">4"JHR.I,SL]R[;U4H;UD""V^T9NC'$']@X\BD,,";$S.\QO.Y\XB., >+MH!Y7KJJO$L"_#J-/C(A(CZ)YN>UJU8<M0199J'2ZC=='*$;Q#;$LM$1@8D#= >+M9)/CF<TJ>+2:C=8?D0?C\&:EO>JBJWU@[#CQ$'#%WN%KS!F\HQAY%]N7:)/B >+M+B(?TQ`!/4"=_>IGEX,5XX9$"J+Y<'E)"$CCX&K:"?-U=G6X."K!VKK^@HFQ >+M@H[OSYFB(<1T?'3D]7)R?ZZ0@JQ^D2X=O^A7;J>'#7&ZA,1`^<!]J8B"I`>W >+M]Y-2'1\=;XRU.N*9%@B),E%'F.`32=:T7:>SM>FYOSKV08$?:,F)2Q<8;$NU >+MNIQ-/B)\4<G6,5$6^"030)[=N[L8)<:0LOU4B4I+MKOM"9X>-'^M^"1:8"WN >+MJI*@(I\NUE%?G=),#X4_E2=2J30ZC>]#<+LHQ<9G]^A6%!V`BHA7:RTM4)(3 >+MB7"G<WKT)N7X)'C2X;5)B$Z?(K>&,Z=BOCH\6ONN6DN#']+2V*#2X55(2$]\ >+M9L-FT+JX-`_NQ15,<(**+O@<'"0<'3)*L1`3GW5LU7_FL^?IO,=7<V=P&3A1 >+M@H1(T>-4`!XD^'7`QR"`BE8B]F[Q&FIDQ*1>),J3R5;\&!BG>F1$HEY<++(Q >+M.'X=F523+&OYX<_0M6@(/\9>7%HLN:NV7IC_VL-*QSR)QQ9RQD-[L"3#>?H/ >+M0<F>Z#JP_2_Q>&;]`N\RTW_7W[O#W0'J:63)J0+K3G-WNMSVZ,!@:_E;.W?; >+MPZT?0=RYQ?0\F-_N<4%[P3<(?':BA(7KSH3^B450O\^5\+@#%5STAXVGML'U >+M\0M3.F2C[&ZMKH;BH/G=+W$:UY>0$UWT]<B+>N<C8X6$QW=UR8OB%D47E^+Y >+MZ(HZ2XM>6W-L86)Y_SO<1JB6N56J-O!<??F)@9#@`)\(RLY>E0_&?%/(6LT6 >+MI>A0TM;43D]+^KAZ0Z7X^.[9/QO3U&MM:3%PJ\S\$R60\,M^HW\;R'F&`@O3 >+M"#Z>RO7!`I]@XV6EY+`%8?7Q`34[].,=]P'G^=B_G4B.`Z'X*&R;8E(LO%L6 >+MK>G_Z2^]<]BIO.SOU?/=:'.;N[4#)OA@K;;+B4]GHG-*LVH]\ZI*D8<4G^C= >+MX7*[_?0,P"=!"GVI2$J<U$+3KW]1KTF64`#TW9PP%C[@HVXOB$8_8>2&,O`D >+M`G$+PI$^382AF/`_`B!L/`XZD2*%A7U\(\"C1M]P<Y:CQT.H(SY*,>Y.C#XC >+M$7I$8XAXN,_=M[[AC]8$T:73N-)S(<1V(?Z\A'!5=!X^V*I&':ND"5"$0%$` >+M^\>0/92F'V!94^!%<RN+0$8F:2E'O)Q^T"_.&SMI04(*6])<E+US(WD3/VYV >+M/1PL72(IC%+`M:H6(0:WC"S<"I(B/X0.L@;IDR;+R,*)MU4@OR&/TDM)7!0J >+M6>.._DG9U2(_F6W_-"/<G;J!ZC.X4QZ8.4J.K[(VM"5!FG@4M&Y3P/AZ#A\[ >+MMBS=79Q?&M8&I2(YG![=1F6U,+<%@RCM"1._QES)=:P5P[^\0@I>%4Z&BC._ >+MA14G;THSK.*WOA&DR/<OD-,=A%"73C"G'+Q)4</?,I#[NCPM#8K7:"5*13C2 >+M@[]1-NANM_>4L,G!)7#/I8)UV7TIE6;&Q359/!G<<["/ET;W-O+%HI0_KM:" >+M75?!^A=1+UUGNGOMDS%&'3$"7I:1))&])`DKD%H4/CLNZSX=GP:K>I]=!+SD >+MB6>97YB#I=CYI3\IP%0/>/C)GQ1A=_CU&4WKG#IALD6GBQ0R81N#4YNO2DK* >+M"X*(XYZ;#*P2\V^Q<%XY\KC5-1\<&,]>9,XVISMS2S*<3D>:19DO\A.1C=HR >+M+M4A+ATI`?+TZ^;RUKRLWX@JNR[UT@?"H@MR#Y(VHC5EWU``!="#0WR]@A\V >+M$R"C'P\BY"''BO\O/W]^'AX&V4KO[%\JO&WRNAK?Y=1(E-B'I$_),/Y:IWD. >+M.UE1$#I<!V2MOILA/(2;Z7<?&?*HZ_3=KV$%O:RQSJ-@`WT+_]"]80=]\YB8 >+M&?,?)?I[Z6H?E"C9C10PD**&BBX^QLO$7%3H0W!<*6]#@#5Z6-O@%H,>*79H >+MLJS,N@[_'RF.9SPLEBO$[A_<B%&"L#`GHH]6@_@J`-IC6"&8M8`@.VR):G;H >+MQ4H+$M[!X6X0->W4-YRF3->KW5&^934JG#Q6;^=O_N(XQDOHX^"7U;QKF4K" >+MX1A<XQ\QFTOV[#W[6R18[0/TVB$$T5$%EYQ,=L7G'5\TJ)#++@-WCYK(Q%'7 >+M]DYD%"Q;1:VQ'2_//%"X`L]7$($F%U\?/S>.TW'``#&C2L[GBO[\E>7CK#Y2 >+M141!2I[3NN/G<,&-G,6(+39_NICYB*:3W;"FPY@^8A;E&PD6-*>.R\K0'`8` >+M2',F4\TB=&>C#/E#CI@Y1\V%RW:+1:>N36(Z95OUF&,EU=03-;F'^L#>^"D2 >+M6:PM1^=UT80[YT7`G+M-WBH<N8\W(%;[80#"I;HIJT\#9$(5Y514HCT+C'(X >+MR)=E3.VW[FK)$%-#G8O**U*X;MG:Q2V0Z\`%9-&",:/24R((*'5'835QC`%6 >+M3NZQ/0?*V<3H7BPNA[?[W`<)?$T5.9_$+V4=O%HZ'``-Y.(S:*AM)D<)>F0M >+M.1U-A>FZYR/PGLWWT(5D2/F@O/W?KV6X*FJ6I.T!0`GWCTY0G()Q-7K6^YH0 >+M]5/;(2:WK)#5>%+5\:5)V9TOC_/Y?N[.6YM1V/'9R=G9@5BRF6A9Q&\L;=`_ >+M)`S*WO!KOE-G5XV+`D*`GLAMPJX)"T<(4(<XO&-&9Y?8#T;\"T;+<8_"):?/ >+M2#*R,9=72"H:BD45INK(N_'#EJN)1)<PV.NMIR;Y\@/9UQRNC4/KGYSK:ZXP >+M^D-@CCZ8MU3CO.@\/47M<BDD^ZF[WPR53!_JKF+X,7_H-=%U=6UW7S/(6_== >+MU@CEY)149#259>](0-D\7$0<1+QJWGJ[.[G_'IZM0/2U?`/"_O5VGZU3&"S[ >+M(:<+I7[R:@J1WC(1D1!M`P\!7P'?WR$Q#K<[8R+%D]?O3?N0+D6/9'B#MZ?1 >+MF<*9%(3@@RO+501OTJ9_H;';O9$]7Z^W/Q]ER3I=C>J@67A-]^9/15';(D\" >+MS42\`8W]E;?%Z0>Y9F@U/+[#/)1>[^""MT%>;HV,=G:@_!L83QKHI)EOAC_> >+M@$`]([LK.>(*!@(R,QK<GS53/Q=E>7Z[/TC!.UVN/^U$/DBGN8!'XD:2CHZ0 >+M:8;BLA(:<1]?P(<,,X&1F9;;"A:TG7,[=#UO^[L_7F]WNU.SG3F^5U[I-BKO >+M\(V/<=>9F9>+2_3?-)(]?G>W.5[4VQ.3DGTN1D"\3(V^6Z\VVZV/-%H$UAO= >+M'U]W;-+$4>.]:IRG*;$>)4:Z%^E_/IRBC=")T]<T4"XYF1\_]Z5FR]&^D_'K >+M!$`US=,-+DYZQ2:N=I_>`^VAFJ?CG7!8:XPB^2:I,WKT3+NE`8D<3K_[G7"] >+MGY8?4"G2#!J,KLOKXEFAG*=K+H<NIRIT2PS>T&A*2)O%NF/?G;%:9IEOC#A/ >+MOO!HR@=TY^E$4ZDRR,[3=E>][W'.T?\=B9;::]W1DJ&EC%B&S3]0(CF<,K:_ >+MK,0/9V"V0D-X\@P].#S.YZ>.D'#=`CZ1WTIRL)F'.LW3);=VMV@[+AU:M!2L >+MW.V>+P;AJLB9OU)CWARYT[XPR=/]`9X)MP06&.D)>P_3;Z-)OA=%%B6)5?], >+M")*T7%04[LX\(N-[?+(S@5CJ,>^10NM:MEKK286-ZJ"Y@A_\R"Z,6HHO6=8T >+M&WZ5))I)5JWEF9>CN:JL1T9Y-KFF6%,4-.[9F8ZY>JN5F9<DL_OVH0>Z/"6V >+M;8*G`:!"H)6OM]N-G$1'MZ*4T0$F.#$XO%$@.!@660,`-?E?XCL)75W;VR"N >+M#0VL?YQSDD?:O="08NS?]L?EY^8GWZ&09Q.]/EX=/2A>K[<;3TNWQSI\IH2^ >+M%2('_.WN#X!+;`-')D=5AYCG66+Z[,0=*_.=U]-;;:M%.^Q&[%ZGT$HL`T=C >+M8!%!E7O5:BRD.K.VMFT?93N%.]J1MFNS.%NVA6!-S"$TE<7%]7Y[!K,#1S4L >+M,@H+/5UOMX&)'5"<Q$Q'JS-85@H+P'Q%YK>!&.U0/X"6I$1'IS/-=O(+U5O- >+M%UZW7@^BMD!MN5I6GZ[46)/=BHQUR=-4)$^2$]]W2HR#ZJ!X6\Q2E\O3S^7] >+M9BO2UG%KGN^K51A.W)SNN2J,(_G&K-ZM]M;`Y!F9F%&Q#&.'(2XQ5NEOHC$8 >+MFVH^2:O(=Q4K]$EF(0B'1T=OB#!,),UZYFHOJ4MC<#952_1`\V:;+R:8IM9F >+MM4XQ<4\L0C$B0]#\935QGR&?)LU<9[H+R=:<OM_G<&%IU!A4YVD&Q5M^Q7K4 >+MZW_**\F[,G]'^UWL*PL7-V$#PA%+&<]T:W2@91X!VOHB=(T/Y)!?MTM-!)IQ >+M3"52^3K1)RC_C7(RTF5&L89R_:B04C(=FY@4>"*B8$E&1DE%BOR5FE5.=#\8 >+M?\N7O83!W>[U?8U5U^&W@JY`@R[T669`-L87Q\,>QQT&?F=WO:%W=NKV'3/7 >+MZDVN)HE8K0V>]=/A7W>AI\KDR$YT_';+4E#-]*8K9#L0%]'_'?BDBWB;E"@Y >+MVFX/%LFNQ;'.4WAJ>M_O!_P<_JST?7\C0;YA4L4$EN74ZO1$BN5@FB<'DGUH >+M^WKL#G6'P=WM]24Y<.$D0%ZR3)Y0E2NL-Y#1JGC7.%:U"#(L=/-LX]Z>1>;Y >+MBKHT.HV]:EE10X*4BJ]"DCB46)NL-(-"DIP!O/EWZ0$\H98JV!;[@/I#9I,X >+MF$U[U3M&4*G!(L%5X>K4J3AW>DUT)2:Y1;@Z\%VZ6F]]#K$(,]*;$$HN,*P, >+MGHI'4&%1IEQ75T]?3U=+SZ.VV9:6E-:*EB2^1RM.3(^WYWAP';F*>G[.9*TI >+M_NF"=`J]C:3I^7R,I%D)6U7RZ3UMF.7Y=E(*H'=V+U+4.4]2Y3Q*EGVK72"C >+M5Z0[K`6&*K/+<F5;T7-_N[@J>=?/<T.\,0KGUS>>*57P,-"P[5N6/CB!:$G) >+M](M,5#)*,FW80;20D-Y-M=^[[<"I#3,OIU\%0SFYZTX?YT2)%>8"2VXD]NX: >+MA]V!31*,>&=L*OAX,GGKJDG!7*U@\WJ:C(X!S4Q5A&*V6H8D/Y\J:J\R'0WY >+MDXH!D6)\04EPW!RWLYJ/LOU-+Y4#L?SB$R-[4:D+PI-BCP9?63?Y-Q0ERK,0 >+M^HMZ!B/(A;S/"G+S]IBQZ@=+A-\!/K`N[T,F/GM;PQ-0QS5^JFM!8GR']C'F >+M163'],&R1CL'ETZWQ0;R!K3[/,`,8)?S>OG7N60CY/VTE'467O2TP-SG%`"X >+M-I-ZB<(36>OHR$S=!\HCL&`%C',>]0+T9!G$L2\*BL-=KI69U?7^!`9]O5YB >+M/8:F95:L+?9:T:%AQHCXV>&^J)K!U*8`TL=+7)6WM+G9.SLZ!L>)3MS^%$.> >+MO0(0'!P0`-SD@)!B0.P4:YT7X5]+Y&"ZRF6"QR&J.C*FU/3TU$B&PGF@D\AX >+M=ZZ[+'PQ&]11_^G-Q&+>AEROJWT`NFI??0.Z=F_W.KA20YMGX\00Q#04,70S >+MN%)#V@7C_,%:!..P@7&/Q19M\LW%VG'\!^I#H^L(%<]_G%R8"3AH`B%C\#N% >+M5V6R.GK"F0A+(CT*ELR8EJ^')T?,7PJZNT76WFMCQ5[I0R?+W.UN;[:JIP:& >+M8I06NKX+1V,B'Q[N1I8=#I/#)'%B?_$.?[L]1-0M^>75G9W5^?A`2C+Z49&1 >+M4%!0CT^R!_4P=QJ5RL\;6M;TR6AHO/KX5:1VE9I-+'PF,B,BQF-9GA6]E8W- >+M@_KND?#T_ETL<CQPH:&DZ-3VH+"\IWT(\GET4W6TY#6ULY_7+-WGJ]U%59U5 >+MP(S?'G-#22QD;KH4]+H(^\4?*QX?('%X9#M3LXG&#L7-S[]!V=MA<;AG)WP4 >+MY-2"B*J[![?*9GL=3F^RNS]\5DYK`_Y$=5*NJ<D'ZD7)_V0[?$>24]3*>O,Z >+M':=6@``CN?62S5*-)]"]<=P5'"!LV:D+CA?CN%KOUAN<ME9IM%@16M\4\^HF >+MT:P<6S!C4)5U,D!*X!4D`TIRO4/;*M%1Z\0Y0HN,@E65'8O+LP=0P.U-@A<= >+MX^V>D*PC>/<8\H@T3O[=%Z/F9V=K_8"C[516O7Q6-C:6P>59]WI-8WXZ^/+8 >+M@VS\VIY,8(4MP>KQ.?)PW,RG"&DHK?HIP/V4#V*V)U;G/9Y;M,C";:S9LQ1" >+M"FW$GZC.RU'6^%=53HQ2"(G!0L?!BRB'AO6\F*J?^[/_^E1E*J\"J*FJK,77 >+MK?EPNWS>1T0((8D1#X^00<MY?^5XK,ZC[D,"KR;`K?E^C1R&/)W-I+,960ZN >+M2RSM9G&X.?(X6US>1$]3GQ]Y57\]].I)SR,>7?Z$R47(7<A=;_5Y[8G:$K6I >+M4Q)[0/U]P!OQ3H315D^0$>/U]?Y).NM&S%(M?.@AY(@DDDX_%EOO9C]VOV=W >+MNI.PO$R.*,5$S;54K=7I=/F^:!8=.OW<7;U)2>)JRW%]"SXDO*Q_B]?1C;>[ >+M%C@\))Q3N9#`0;Y\=F_]`Z29T"S172G_%G^D>G)L<HJ4^M7=!J#S9OM#K(GU >+M30#FZ<SS^7H]W,KX0T(,=GPC9R,;(VM"O>*+)]#@31OC895@I#%\LS-\7O## >+M%_7(@Q9FT'Q7>"SXXX]^U*46-5/E$V:H!&2HI*:A\4AO^Y@M0(M::*5`@1DF >+M-YKLG+LJ</H%\U(#1!UIJ*GR]-3WSS!`!>Z)$"U28"7!3!@F*2_/)XPBC"1^ >+MJS1'%9%0!HZ.)!CVEXI>2ROW;Q]&88D,#`^7`DX[!P$@`J=5P`X.1^?7?_5U >+MZ0PS0/#>=7ORUNNU2Z\+6W*1S:FM?,J[S;V\=-KL6$C]@+/"%.AJE*BH'GO) >+MW.Q?5SU4N?DF=]A]AO/N(8T>.\+JYAZ+><$^NNJC+G02VWP6LCX/S.<0"!`8 >+M"/`%6`H,-/5!W.T@\GD8*H6A2A,)#@L)"Y'->ED8G)]+\_YDC$5V.W9GI=/* >+M>5E*^.&S&=%ZB$SK`,W('C\6)B7[A,L&KQ4E$&=:V?&A]*S)P>J@TT9%:;$V >+M<`ZS1<9IX6:EI77U4'86^Z^#X56?CT_B.A(HNQ.^YK1+%Q/C@=7WWJW$9DG- >+MD;RW[O["12CX^8"_0=G!Q%9)SN[<G(\_T(;U/;N4!],">3,?TW]P>XJ[V;'$ >+MUE5^S7JWYU`<R16B5N=*0_WCABWQ(JZ@*YO26TQ$XP<A1AGW`"JFV>@]-Y!F >+M7_PXBT/!]=N;F/.H6I&[LJS,1[WG>Z5_%MOLI,MS)2Y23:0C0Y7Y-L26P[7X >+M]G2KQD9NP-C74%&!NF:9*QOS4?K4U5F3)YW'ZG#-;JD]A!ZW4,0M*OL<\=[M >+MQ+?YKE?%^^E^R0?X#01(YO4E`PO]_55=/_M#?MCULB=,_4%MK;O>'5?F37^5 >+M%'<:%M(=C5>SZ?<.?!?,:7/WJ^/%=ACC/O%W+#8ES6O\2)`$]R/&"[Q&"%>< >+M!^U4D71P@C$IC4\?M,U,&-J.:,.V/F14CR,#2V"XGNX*D[QS7%,F9Y=C+4;` >+M17XL4)!QM2IV?$HUD#+S%>R1;B8QU"7@"1Y=NC>ESH`Y<\$0OZ0[S=\Q"TB* >+M,!+-VN52`+P+TA3"H8B@-A]CJS:_55WR3ZAI))HV?49G-N5BWEA4,%+?%5/M >+M:`QY8WDE+@)JZ$KP&OC26'34G#<?GO(@;5_+.>+?I!>3)80@!T='M[:,+.W' >+M/G9VU=S$2(<R[)2MHP`YRPOY1[C2@T*K^$FH_&/KL4WJ5KFQ)U99,')-A)Y0 >+MS<)HDI\[#$K<VKX[2\':/RV)=:FAB3#=2@@]R=\L.I,J"XD/:VXM'$8O5_%Q >+M:T]6E,&\&49,\*&QM;&QM;4QM*]+'V\:GPY9Z3#9:G>L`H-#@\^#H7,#;0:1 >+M2)6["?C+M3G<K:4?Y]?[O+6X1K4WH=8[F<>FYZ6""^-@3-5NFX#X&)CI1T,. >+MFR+`0&]R+!C$==<[@PVA(/*(J*SUFH$0=1"#(;$(")A@CZ84F7V&@#,_&%QW >+MPGK$"R8%N6(YI4PJEQ@T>`:+(-KX`$*3%)$4DHYZE"/#FX,(Z.+&/L"U`TA' >+MF@HUVX@(#:445"64)%412@HL6FUV1M$?9$!\;ARX."^T(/0%`U41%4U$7X>' >+MX6V?+\)R\!]`=X*_.'/X2BIB09G)>`R5)Z-%2H(2TZ$4J(<C[2^X8M#+'`.# >+M\2*E`&#"S1$Y5Z?+<TH<SEGXH;U@,8EY5LNFSM#LSKO`YS2Y(H'.VOFP%:E- >+M=90G$NZ*POA8\U+:\L*#1'NX]I@R[HB0W-Q`^.Y)2ET5&Q+#5YOU^I".]H`- >+M^X2#Y:=(E5S[@0\8R^JJ./X@7+198I;\F>*%JDP7LV+%"DJV]MB=L#;/_XQ, >+M<`X'2("R^DP<?!-^L(9D,^(.3687_,,HF+#DTY?$G%(\3ZM.%)-`%3*MY`E\ >+M6CDS@O7\_**J*9!"AXE0E&A<J&B)I(!Q2RM4Z&"7-%IX?6WB4IF-^$83TITR >+M#'$:NPO(9<RE1%7TC.6"0'NF6+#-R"K'X.I!$J,-B599T=$DN)J:2;73OM@K >+MN[V3`Y+C["XSYC5#PJH7/ELQ]?:+S7;E>%L[OS0I>";^^Q^XP.?U5#;8DWVN >+M:QT:U*#4O\$PG$!Z*JL]<]A@%FIP-!YKJ,%N;CI`0<><A28#14M5?WF;7R=\ >+M[C24JX?8)+B3HC=C@?390'N%EUA8`?%-41MK``-GF.J^Q=53+[=_@TX:RJF4 >+MD^"#H<\-X!YKQ7W@P1[=W"OH1.!KJS0$^--_]4#PO\!6OMHQ^-ZN-N.#U\]H >+M`?#,6^@"[^0[3#U`\+A`-8A$X%*MO>#!^0[&4.!G?5_<X&YWXOT0E&FS`N.7 >+MYE"#/]8XG4[P@C@66O"WLJ9Q2P#@>`@6/^+_#E+N4L5"9GV.3F:#_G>I?N`# >+ML7-!*9Q_J_C5T@,4F^\'U.!^H/"_JPC@5$B(J]`'_._&V/M6!W8V_.H9B8S9 >+M_O09DJM^8/C>B+""<G1M8`8FCH+E649W\I3*>(#UGN[VD/V6!BNGL?S@-D6$ >+M6OSMB>4DBW)T7CQP@H49DO(S#('W&P,*X!XJ>-X`X%1*[A25;C'XVD]C@,SG >+M;U-+>6`&)VY7Y2Z49$3@5W0PNO$N]R#XQBQ2T?C>Z9<>]Q[PJK:`-81$X';? >+M]X#PC9@Z,?C7C',W'/"JM3HX,44J/EP@!&5%,.!4:PTN[CF!\35$MD"#D^]U >+M&T?._P:OA#7O(/&WF4R&Z='(#,;.!)"`9>"]0^")SP80Q-'NT2,2"#3^23?Z >+M0EC1ISUI>&(/F0F+S]Q/NZ?KG,T@7G.'0:>NI3,)%FOV2R=I#CJ'3J9I4+<< >+M-GC?9`FJ+YG-SC.?7A3`CI1W3A$HXP1AR+AAL9XB)C@E\Q^3%LZK]D/X;.J( >+M$^C!7WYUE@B4]T5_)XYYND(<RH<KSA@Q^UA/X].$C`9,%>L/G?,>`ODIPJ4/ >+M28.`/'5!_1`,+ZB&X:KF5_P?`'*`C7\+HY>!B!\KX@>AF_K8D&_U@GY=!0:! >+M-UL$0+UN_AP0<.H-$:E8`4>#``T:S$A=!V@P#UC.+2P,+"=H8UL6'[)#T(S: >+MV?YU(72<L)R,+(B'149@O6,OB%O4CEF'EQ;KM.IB^]>L>-B@U<G8V*>K__CC >+M_).*ZY5_W*^K70O+(BE8A"MOD:'0DPAF90SS>UB?=17,XCCF*YD%6*V)EO3H >+M\U;??J,@').S4?C![;72KIM^?Z.G[=TCO7HFW>LF!=MAVE(H$HDE(-NBN)IQ >+MZM)E`&/W-S&S\+5N(8RMK04,%@_K*%X[R=OK;65K[\CLK&ZG=K-=?<?&SI*; >+MJ0$Q!X/YB%@D$QO+K.QB:Q'))(4P*UF%Y-R%5T,0J_6]R.#2?MI)0V$U:C6. >+MKZW=:->5M"^^MFZC+1#DG/'4T"U[>P<'^WZ]9`!ENH>VNRV74=I"9F<'_0?" >+M%@AR)C5TSIIGK11;\5%/AP$NV$7_*<WC($S#U*.%A1D+=0,E))TTHU1D9"S9 >+M-$UZ&S3<Y%(FES*YU)_I4I`NIA_2ZE7AY)JFWK%I>6!N`V[0YZ/NJ'%!Z($1 >+MF\\7%Z^!G4LEA5^\'7\D)Q9V#B<DKAX]\7`Q[/#ZJTGYQ1A"TILU1#P&^KZG >+M&@(_5B^#5P*\[>247#OB?7O"J"D\5%:EJ'I$-O@NBX"7@O3'X?6!F^P;TJ4' >+MRA3F"DW9/P]=1A!/DR9^K"A**U.8*31A.VY`81UW2]-\3\,C$A6*_`,*6J$J >+MB]B;7]I<4<^4X_*Z_-2KBG*%8NF7%TLJN-KL;4OS?0L97E*[7/'U@:OEBHC- >+M.TH?U#37KV'*R\L2,S,/78WX_N*&BP_J+[/'8N\5\`8U=[<`]:L47U]4E-XX >+M=.AB:=E)15-S?0VCV)!?3I7C$GTYA!;*J>_P^!IF;WY)*:\45ZAJZNN;;C57 >+MU^TZ=UIX6O]U!P?M1@3^!K<@[+!%HW^:+/C7MB#U>T=>>-%@PZ$;3^;E137; >+M<$#LOM.+C#;TVIOW&=C024W*SX2!#3=JB'A8>QN.MY51,NW086^:;/CJO-!D >+MP;^2!=M[H7\6A#[98;#AVY%;4E)&--NP;^B:!%>C#8?'I[P#-NRM)N7;@*0C >+M-43\G?8V'"Z#+*%O#Y28;/@JO-!DP;^>!8D7:BJ>UHU#;R(!H_434.AOR(+1 >+MPF^>;D#86U,<,4!J(%QDK0@*XC-;,^J9[*\W`:-TD=,8<^^PVIMQ16>OE/J: >+M4VR1MS6"%TLU#VW-V?T`*;?_^"U1FWV=LZ3M_@!IF_WJ=OM/^K?C.[?:9U-B >+MMF%KVU=ONZ^N)O(SH5M;)G$-5E:3!IG9>P>(`M3>]N9L6=,=)PG"9M82J5#Z >+MS!KZ_W/UD^IGJCOT'4WI@CXB9(N:7NOCZ.S<W]G)D7+4./0FG;8UC?8K'.UH >+M:C/9T)^[X9%M-O*71K8^B/N;03:9@>Y/-@N.Q)^0+R\@R"89/2MD_L>+PL(7 >+MSND9$O99%`@0ZY%?D:2K9!,8:&2HWTQ;MJ*M6M'"5K2H%6UMT-7\9]Z*9V.@ >+M^48N7EC<KJTT*6M"6-V=;`YD<VW#QV'O(/R5+\))G@AGI2!\(P[AZDD(J[+) >+M]B^RW2';$[+I2%UH%XI$*MRUOW-7C(:@1OO82[=+BXLR(B`IL%7<O8?W2V\6 >+M7+OT,QJ$ZKND/U0\>'"O[.;U7W)A=OTGR+D="CFW+8\K*AY553[\K?3&ORY! >+M$I*<O9"M>W<PY%&/N?_PT9,KYZO*;]^\>`AF\W-^W`6IOO<E^T&J[][%Y>55 >+MNY+6I93>/;_C.*11S]F;<@!BL$(05@'2IA\Y=H(ZH=ZU.\E/0*K71M\M>U!Y >+MD&'NIE[XD4NC#A%8=VU/Q(E:",)*#I^X(PDG*1,3DG8D;?X'Y#.Y4'SKGN(@ >+M3"V5'#*D4>?BKFY/VKY]Q_;MD*:R;F-RPI:$Q*3DI*0=W\,ZZ2;)K]=OEOUV >+M.A72J$.`$MV7GR\V7ZP-7S0<#N(WP5O@K9O@2"S2^&;1M<+BTCMWC\`,5&41 >+M3"@YNENXZP?#TXWQ0#E"*)1>!9>O%=PH+CD&8H]S87+)T5U@%!.`F!EJ%%W+ >+MN70U;W\JFT?],>11=W1W'^Q`.^C[@^!8-]J-`E$!4AT^\W-NRCZ(W_^H@GP+ >+M(*[K8!A=-W='&-U5F=EG-^]G&,65G`=<(G5'8.O<(.Q?;;?3&9E9">=*+IXZ >+M>[KP%M@4F$0SL>G'62?23YP[EYYV[.3)XV@@TO"_R4@[2AU5_W0H9=]NP(/P >+MJ[2C*2D0'V77=@(7+3UCYVZ\6[UKY_:8CY`K:K0)#(^/GC/W[Y/0NT@CL+45 >+MD%N34R:PF<#VBL!&CT)1A)9*!,@--5H/"HP*7[)HO!.`C1ZR*'KQ#'\?[_'C >+M0+GYV"\63Y\>&.#O,]$+&I8##?L>&L8;$_79C.#@H&E3?">QUKYQ!GJ4'0=@ >+M&[PT=,:'OA.#IT_U'^\.8+MQ.@N&X^S)53`<PI!ETS\8OS1DS-3`B8LA7L^S >+M&V?.GX-(C!"*D8S>E=Q+OU"_J+.R,U:)`&QNRP*F!Z]BF..>DV(XL$$0QJS, >+M$_B$%N(PDL.?.)6!,Y0GTC-.91Q?"V#[9.:4:4&+`&Q'X@U@XV(O9F9D9I[* >+MS(3<B75'3Z:GI9_(.)F1<>I8%("-'^[C'S!MPC<`-LB%I-N])<$\09NX=18< >+M)#IBF6"9+L(#P"9<Y.WC/V7JM-6`HK0(`)O'7(NY>GA+7+\$*`\`F_"S\=X^ >+M?OX!&T#L?""`S6.NP"@F`#$"-GJAY_B)DT:M9\%V&<#F,7?NE-'T:#WD_M6' >+M!=%!%(@2L/F/'>?U_A+2,7R<`JAYS)T"8QLTUP/&=L+H,6.'K&"88R'34CFH >+M>0!;%^0!4!,$CQKM\?ZWFV:.#@CX]D>P*#")7F)1I^F>(T?.F#'2_7V_J?X` >+M-3Q@RL01U`CU\&%#WW4C:-#PG*=Z#<5#U>^]ZS;$%;"&>PQQH]PT0UP=WP"H >+MF77OY^S0LV?WK@`URIS<UT6C+!/03$![!4#CSFF8Q\,`-<JJUX1Q8\=VM4"# >+MD5(\PF?$ZS*I-;9^ATA8CQLJQW(LTTJLK:%=MZ!=6>1.5&L]9K"<1SC8V@+I >+MRG^%SOQZ#%!F/<I%+I=8R^4RF;404%9^HPA&XF;!8:*AD7+VE,N[A4R2R+!, >+M]^$R@%GYK\4W(6(;A&PC(W>[M.P.=4==]&O!82G`K,L$F5S^*<-LD\D7<3"# >+M<&U%A=?Q=2U$;".#>1WBKRFOYQ<4%>2E`<Q&.)(Z;.J@Q$@#S-@H;06%!86% >+M186%NZ#6M8)\G*^_7D`5:(OR?B0M47I)9#*Y]'.`&:03U>6</B,XH\O^"J0/ >+M[MPCV*/;&4P@I>&-91_[Z&P6`WZV^0#,@N,LXO1A`(LDH((!9D2.",JZK`"Q >+M(V\!S(+C!$8Q`8B9DZLC3(2(5[`HRP24!<?%A<V@9^AG@MP/D70D!9*$=B!V >+MT0D_!)@EL3`+C@N#P8V,"P:8#1);6UO-9Y@D5X=$#F;!P-9%!D-X9CQ(C,6- >+M=I'A@\5]^RU:#_8$+M%,<"8=8"<6N[B(1:*W!C@26&DM'=\0\458.)B0`]X0 >+M81%/J+<B"-&;"7E";*43\,G-5Y.9N<"<;\:GT7L(XVB4;4*5"55_-JIH#W(: >+M:\`\@4@BE4I$`K@B\@32.7?4#*.Y]RFL9(*T;>R+56K,%\]J8,P82X(S1D"3 >+M'^Q<GC<+2',E/<-`J#9(]0:)L23&I&^DSWSI#<8"TJ=A2*?65T(1MIYJSOUF >+MAK0\<19CR9AS"P2TSC*:HBC#`@J@X!D^*TJ3,[`@B+%B@`,/KH5\-AT9R^01 >+M/9(ZPN0#DQ1RRQCT;`JS+NSJ")UY$,/.4\+3<:V3U,`7-F>9TXENDAUVH8(( >+M$K(9^")&"7PD4;)<:YBK,;#$C$K.1TBJ)QQ(>F8!%?NWJCCP=0O,L0D\^7)N >+MHL=XW"8W>Z@N:6+Y6L@_9M5*P(II='-@#RTL8!O.2EBV:KHEH^8D2./-?8@, >+MGY,A\'UO8'^JO\:)&P4-)>SI1/9YS?(4C-93=BBU7!HU[<#N<BF6:B7LH&KY >+M0@G9T\O!)[DJT$#!)%+%'#6QZ=3^F[TS@6KJ6O?X/B<AS*-HK;=J;ULGZE#; >+MXJQ40%NUBDJO(FIIM0ZMK:U>6[F.4&KM=:AC"Q25JA29!&2RJ"VFJ"BBHB(R >+M)$P)D`"&*?-T[OY.0B`D@;ZUWGWKW?>R$-?BG&^?\?O]SS[[[+W_O6^4C$E1 >+MWG0H/@K2.1D?G1V20ZCNGLM):N1(6(U%ANE6@'/"WN"D!@GC.%B7,#B=W!)P >+M.CGH_=-PHC$AT1QP#C*=YXEP#CH9$M,%B4E;MWGWI%JM[,$"G.\XG6V=()V= >+M;'5_69/;FMS_%Y,;^L70YN4CP**YPV#1K+ZZS0&ZK>9+8;9I]G[,J+S=R >+M`%3Z[99%Y^??O-D.)LTG?^XV:59L8U_-/F&/+X;$;3M$W+I=*('GZGIH$I%$ >+M&KLTYU_+28>YM,3+Z,@[1<4/+T#P?JC!]S)ICL>QB</!I'E8=/[.I4L#EP6O >+MG`6/U[/F39H;;N6D)WT$)LT;\T,"%@<N"UHY#6:73IYCR:19H>`49J<E[@4+ >+MY*B#`5,A:8*GPI>QU`\MF#2W@DGS_8*LU(3OW1#*"Y@#:3>=KCO`>?7R:&X] >+MJ!2)6O,O9Z3$[QN.T)6%\'POA%P[E;C1U**Y5=XN%`JN9*<GQ6T;@M"N-7`H >+M-ZOA\)(SSRXWY]"L.2CCD3SQ;QD7+YS;X(+0["_!M>1R95WEDWM_9*Q[1V_0 >+M+.3&F!HT<W(2X[X'XTW\MFJ#Q(F%]V[GYUU.CE@Y1F_0W%)\PLB@N3(K_J== >+M_J`;?J%P$P^P\V_?NL6^LF7A3)T_<\N#R;W\F159:>?V;X'>@IIW@O#_TJ#` >+M9>\%+@U8Y(]H@^:6.R<,!LWBRGM%17'"]'.1G[\-_LR!BQ8L6.@W6>?/7(N3 >+MLLN?65Q6<*L@MN'LCY^NML%YK`E80!LTSWS(CC$8-*L?L&%V9M7.C]8Y@HGS >+MT(7H):3)A+F7U5\LL4'#D.B%_5\?V+]Y];L^KZ&O]W[DO^XMZ`0^4-?1WLJ' >+ME0\K'^;Y8/ZN>X8X`R.2;D;\QC"`D<=R8`2GMX&1.;[>++ADSA%9CQ^7E(B! >+MD87O]6"$/=?/YPWHLRP9$@,13TK+9'!)CD`#E"3`F)&Y?F_-?`4N;P0=^;2< >+MPP4S0LV%+::,!/B_-7.:`S#R6M;C,V%AX1'?[E\#B77%/"-9'^#XOP(C1Q\? >+MV+,W/&+?_E60$.S-EAF)_@R7>162,#-I3S`P\BV\\6GR#UID1";NW+K>9\;4 >+M";BN4[Q[,Z38^\`(OH<FC&@P(X1(O&+VK.E3QCH@5+0#("D#2'*N'S4+B4`H >+M\/69.6WR2#N$8@_!L90TPO&Q"ZY\TP<D2_`>)KW(1&CC3P!)(5_(KZEX=.O[ >+MK7I(SH0%&D'2Q"6X\JJ$@&F3)T!_8>TEH.1Z647IX^)"=MS^V7I*S@4&&%&2 >+MN&3*&Z,'`B6;X`5<G/CP<>F3)P^+(G=^J*/DW'M#>U/RWKN3QHZ`>3(T6Z&K >+MA71?>,37X6%[=GVJHR1^54!/2NYA2A9/FOCR(*`D?%=HZ(Y-03I*=JU?9*!$ >+M6U9`%,AC&R9-_.M0L!/7[`ZE,?%8LC[0@(GV`9O!5HT:_B(#(!F_$T,BS:2] >+MAEYYGJ`AB3X9$_W-EQ\$S$0GCX0NV[88(&'I'B)60*R`6`&Q`$C74X0$2!0& >+M2#2N]C`PD:\"1H(G&QA1N[HXPJOQ@$O%?)*OE0,BT_RZ$5%^XNKB#)9_FA'7 >+M<0!1KVE4PN7(C8<TG&%,B"N.A2$(VDM\`H<J&QJ%3="S37/[E"DBHW"P,[Q0 >+MBOV*^7^DI:5?RLRB9UTN,8_(&6\<;PN(Y/)S4NGPO9`.95&6$%$J=_KC,O:0 >+M@@\*4W<!(IGT$/3R'`N(2*">-7^&L[,3P*NN2P$7-.W7P$C958N,>.&].-F1 >+M"%4G`".-P,C#LEQ31A0T(R[.A+/<";H`Y5^&H^'#/&NJ,DY)ACE(.C$D=3S> >+MRW@7CC#'O^;H=:"D2M0N:A'P*G\]K:?DR&=^IG6MXR.<G>QMX!SN`R1EC6#B >+M6U5V*RM8#\GQ:;.,(/G!R\G!%MP!-"?9\"9^IXY?C^]D7?7O2=_J*#DV8U`O >+M2I3C7G&T8T&.G(;O5M+,]$N7TM-2DW_00?+CO%D&2+251421/$XXQM$>[P53 >+MDIX<'Y]P<H>.DO7!,PV42)[>PI6M1D=[E@T0D!)/,V(W.=C/F!&U+8N%\U3S >+M5A)&1)N52"2JDA)QF>$8D?!=^\(W_,UWLA?:M>/]61],PX^/!58RK&18R3`E >+M@WD7:1@$KD?I&EM?16IW.P:R-[2O>B*"&H"4LO4N-M`0!\/Y]`VKSH@!\Z*1 >+ME`<.4>7#8$)\U5[&MU??W$D2MLB><D5,2EWA05_RCRA;2@(K@RAJK"V,%72@ >+M7.`BLUT8"&VF[*$H"<VQWO8P_M"1PL@.I9B4:HT=\1*T77JR'*'Q<:0=W6'8 >+M`?J5LBB5Q)T1#&V5KP^U9WE"YYL-`Q&,V,2I]SIE1VG6V.&UBBEC/%FD+2ZN >+M'8$/QA4:A)?#VDIGL,*9,F809<]DP.HW:9,;&RAL3VF4;OCR:D+>Q-N501`U >+MV,D7#G$:;<S"A(W@**T[7B;;,WXX14W"0?@81OE`N>F(\J1(V)2#/DCN.]R% >+M&C5J$'1DGDX?B`UL`Z]6N,%0R=<&L9P&>\)L>UUKG2AUJ3/]:6[\`";3'D)_ >+MF]R];KGM8#B>(7;0HJM9-1:N]'$8?!A&MUXK.]P8S'<API-E#Y<X:=P+$!(& >+M(?`^KB%@E'S'W^P(PLZ?HD*'.^*+:$NIDB8.=X%`;PCTAD`2''S:+CGCFT4Z >+M#!XY\CD[TG8@ON'*OT]XT95)7W*<\X0MOJKJN^X`C82T=7;!0J!K`Q9/>WW< >+MJ+\X,Y$W%4:Y4<H0RAN]`+M*=:>SAT&02$RW_4X<-L#%#FR("&]W"CIPCC@` >+M0TQ;%SDSX6.!%()&>3!)*$7@TX"Y^T)P!*[?#9XZQ]=W[EQ_-[Q;5T,#,!,1 >+M(0QO9<CQL+`0;QMO&Z2R=1_D[DEXJCUP^KOKFX*'(16IF\;N/P\*]4BZW=TR >+M%>H-]"VQB(5F*#P8+'.A&NV"4]ZM7S"@5W7_8(QS[P,,O)8^%`MD=*\V14/] >+MFY=;]THC-M2K7G*"J1CZ@$.5-.XY%L3T1X<2T^$$PV;_/^*QETFBL4@Y@D&R >+M7C5X:^Y8,;^7MZ:VCD-PM`]0MR_X6G=G2[[@HL8Z[AUC7_!5[B[F?<%54@HU >+M5A/5X@(/(V/P;;N6N;M,FN1CT6)30Q?KS/<P=@9?[<YPU\[HRV,3BLG9+W4[ >+M@Z]V)]PU;_3E#"Z``[RJ<P;/C?CF$T2[;*YSG_FG7#;UI8OEBLX:3F'.5KC7 >+M"JGK>J2$B?3[,P9OXA$\\0UTZFKNY9R<U!OA>+$"3#;O=HH9_?N"-\'(G=N> >+M]\2D6-5<6WL0+[87:5K[,P9O*D;%16`,GIV5FEP;!S>$-@:'7U*@A483R^:: >+M4O04):/KJ!!7XAKK^'1Q1YZV".G,-6^8-]<4@R%X-`J/RLY,3[VHVZFJBEM5 >+MQ65PE6`)KK?9O''>U&93W%E]A]/.O<)M;8$Z(%VVRV;S1GP2]'@^O]'$#IS, >+M9F3),M/34I*3:\ZB;I=-Z/,<&Q,#'9Z-O<"?M1`MG<W"9J&POH%77<6%0I(> >+M7N#$/4DN0KK>SZ=BR5C)`F,S\&9<=232Q6GI:6D74Y(2$CCT!O16X`VQ#05$ >+M@98VVO3R8?E(WS0RVFQL(!HZZAOP#[^NIHI361Z+`UE@M,E@:VE+<"\?GS&, >+M,;)QW4:;SQ3\E)2+%Y-3\$]R0L*%7\K`)UV;A.N1:C#9))+`=).VVO3RZ6FU >+MJ7U62]2VU]35U-;45M=P.>5E3T^#UZ97+Z_-VIKJJAKZIXK#*7OZ)`9,P:// >+MQYTGSG>>/8=_SL;&GCX=LX$V\+5JC%5CK!ICU9A_F\8P(_`JK0<0ZFB0F9LY >+M9WK;A&]:MGC9TAXJ<R7J*TLJDWSFR(Z/C%7F<M0>\RH#7N$1H3NV+G<R$AGV >+MC:RH72=.[.O#*SQ\;<C:=YV,->;7*$:4]D!?&K,S@`B0SWVN6V-^C2*B--O[ >+MTIA_^!*^XLDZC;D<$;%!IS%7HX[]*8W1ERZ6*3IJ*@ISOJ`U1NUZ%=<\%812 >+MVY_('%I-K!:_AT7FUYSL[(OY,-<G(5;FH;OB3JP<_:K,H8^)C]4?>A9UDIVJ >+MINKJ;_%BA_Y<PN7H4"@*_0Q$)BLK-;$:4E-%BPPAT,)__?F$2]!1+#-S46'; >+ML^:&6IYN`W4\7AV/U>T67F)>;#I!;*+P;W8&1C&9+JOA5G$)K@JDADL:G,-+ >+MKIG*36<'EILV3BY'U-S(Y]72I;ODIN1W-@QWN';<1&Z(;&U6)IDIRTA+34Y* >+MJC[50W%@S$-N3@X,>#!6G)9FHKFS2=`D$/#Y=55<3@R.%O10G"+P#M<-?KB< >+M2^9*0HT%IRD]/8U($Z>FI::"??B%2BC?KA><'N;A?NM8ZZ2!1GK3@!\<3+X, >+MGQUXAT?#<X.M^H/-IJ7&;]TZ7X:O[.UNJ=$H>,E$LC8EF4PFDA0)\;^<+X46 >+MS/8D^J,*N(?C?S_!EOW6(2/C\)KJFFHL,M580RHKGI8^B02A\>LE--7X,5"- >+M[PN6F8J*TM+'/X#01)TY<YHXS3A%Q!#11*3FQ[5T5<8J,E:1L8J,563^?2*C >+MJ\NX`*1,@\Q\L="GM\PLGO+:%.]NF=$NAP:>WB(CPB(3<WCWV@589.1RO<9H >+M%R,W2PKS6<B:H%F.I91<E-JE,)_\?1Y"7EZ3^E"837-GSYWH>/;ZM>SS!H59 >+M`FVF$_M2F+7CB?%RKX&/5'*]PBR!1ELO1XOZ\L$P8ICX>73FVK7<GW/"P]?J >+M]"48O?ZG]$5?^H%4WEY==COK4WC542A=@_&+$J'0*/O6%Y7G=A_"1SP=G<H% >+MV).O;\.+E?"F5(C51=TI[EM?%&C[(F*1>K[GW0ZR0R7@<$">2)&J521J%9'] >+MZ8P,;5^'U@5Y1N=D960D7^"<P$OE(#/P0_:K,F*T&R6A5]%M4;.05UU#%W?L >+MUA>>>7WIB$9[(R/Q;^8E#'L"7<K)H"F\$E--Z6CG%E2(*BY7M`CK:_%;Q(D> >+MFL)[\A2&.I7D&FF*DA)E965F,#)DERZF`-Q'>R@*C'9Z5%P,0YV,%*6Y24@( >+M.P7U@OKZVMJJBO(R*-3<K2A%]T!1Z&%/Q$/&(\FYGH*BH02I1"IQ49QR$>0D >+M_I>XIT?U@H)?D7H*RLKO6-])/S<2%%X=44?4BO%["ZTH3QX?QH%V\)9$L+4P >+M'Y!ZY7??!3."91]TJXI"49.8D)B80"80%Q2_G#_W\R,HI*+%A$Q2T-)"OR.M >+M_,Y85+@<3B6WDE.)U>)IZ>.'#P^"J*SL)2J5%17EE>45Y15E9:6ECQ[>/X"U >+M0W'L^(GCQXX?)8_*CAP]?/C0H0,K=%47JZ98-<6J*59-^>_2%%Q3T4*O!3<D >+M'O!Y#E^EJO]UV_,D=!79"'T9%@"L)-XODW)%FGTJ^)JI/F)'?TM=`1\EI1T4 >+M54G_S:2<D69,$7SX*YD$7\3<*#7?$S[,P7@QS1@^#(EJ\K&A/^DK-2XD0I0M >+M7J,MHEPH9=D0IFX6JFA'`N&]:(="+XI]E!NE.N>N6U/V%QOXK*?UA=LU0`6K >+MU'-TJW@C;>';H'8PW*#/*0]*_;-NA6B,';W"%U;DP(H2NK.`>JP]S`F%"V!% >+M:H`%;;KEXW7+?6&Y"A9H=,LGV,/$5*K!F"33I;X(T=OHZ%Y*6]Y=A;\J>RW< >+M!G]E&2\<@$\EM.<B?$_PLO3EQF$>E)*[Q+OG,C7,;>5**9Y],</=J/Q`?`(N >+ME)R[Q9>^L(9CU43`M,8DI57CBZQ0IR^9,03NR`"J!:_WG3USVO19L_W\9DV? >+MY?_6*$=:7MMG11:UJ-7/[L>&O#/>#;Z5XF!\F=P'N+NZ>H`7'?YULX<OE^V4 >+MW<#14_WGS_>?.GJ@+DG>Q[=)L=O+#N:MPN)$$B2!_R%[)"%8#LZNKLXPFS36 >+M9^9S7A-<)BB]GH.C_=^=CFZ$Q72<96\A'2,'6DC'HM'FT[%EJOET5/N;2T?U >+M?'/I^&R^F72\[V\F'6.GFJ1CR&C3='QGH&DZPA&:2T>X2O_IZ:B&=`33Q#5( >+ML;<D+Z]D+QK2R_R8XC8(!`U<RJSY,240/FML?"844.;,CZGF9QTR64=S<X5% >+M\V.[F6DBE:I3U%*'3X=!B;4:M4HB$7=VM+?ALS'CAFRCE$K:Q2I5FZZ(EIK( >+MF"B=[K\H:,VG7X7]$ZZ`J2\R2RAK;I?).(=?L^DN,D=7Y`"]&Q.#9!NA3"!L >+M;FS\OH;+87):$15_M_#.[8);;/;UZWF__X;,VR.SA`I<+Q%,X')LH,Q]?#*T >+M^R\^H4YXA)LQ1[85D@(MD\/"\=I""%?(<'P[O@#(U!F9[J)IY(RLN=.UBX[. >+MC@Z0^*;#,/F**FQ_TI5N9^1F'*B+DXK;.]KQQ=4[(S<AO0EP!5+?5BKQ\U6* >+MM]/>UM:*\@\V*.C#42JE>-/U3;'55XRB]6<&FQ.AN$\EM#-R">V,?"^;LRGZ >+M6%<T'ZD*Z/,2XWHAWK0(16]J:),IE'CS<D).BE4=R_89H@5(>0M7(76;A@H, >+M.K4IZ/VE\Q>0"R3SY[WS]KRY2P)W_J/[2!0WY3*91-))'_6S%G0RZMO-7ZS: >+ML#)HY>H5@<M7K%KYX<?;NZ/E-^G@SO;V5J@;H3V1/QX+VQVZ?<OV+9M7K-WX >+M^6=;O_JD*[H5R6[H3K$#'X>HI;G+&%F-I`^P:A%(?3`C)X^1I_PM/2,Y_11Q >+MB@C3^R-+40,/5Y:JJ[AE-F7/6S)+_H>5.BMU5NK^AZD#BW)XWB7%QB:9DI=7 >+M<._APWL%>>;)>U1<\NA12?$CL^25W"^I;6VM*WF<8Y$\UI38!J6RN>+1K3]) >+M'E,I4;36M2B5@G*ZC)9:Q%@D#?KPDR_W[#\:$V<>/:90(N!S>:+6^V&O,@V% >+MEJ_9A`L=^RG.(GP-M=SR\K#RRO\"?(!L`Y_'\ZK4E^K"#^>=1?Q80D)`-&J8 >+ME32Q-(%*!:9$T@XTF1+X3=\$M@.!@G\N!0)W?Y.8;89`:%3`@:U=!`IZ,J5O >+M;,'XM[6V(O;!>B!0B@F4X'RM%\169?<F4$9K2QLF\/PFL1&!%9O^Q=Z5@#5U >+MK.TY)V$)^R;4JJUU17%KK<4JKE'!ZB^*EHJM5D009*M60=Q0B@J(^PH6BZTH >+M!`11$0&U5@&U*KC=8E%O;XLH*H*"`;+.G6].$A*(_/H__]/;/A?R!.;,?#-G >+MSGS?^V8RG#/OWBUJZ]]5".0<#)C:&_B@I@%:;VIL:JIGZF4O/*,UYH\H!!NU >+M(+AOX<POW-T^F<A,%+NY3ACO.LY]VO)P;0Q2V@+JH*C:L3LZ*-AKOI>GU^>> >+M4V=\YN7E[;]4&X--#6)UV]75:,7N'5M6+P]?&KHT-.@S;[^0H$5+`EIAL/Z5 >+M&(S).GZ&=T9:D)F5FIG`)#"KWOB3KQU_[?AKQ]]_!G_P&>B#9)^.&O4IZM0" >+M@:-"ED=$+`^)U(O`R(B5T3$QT2LC(O4A,')9=/J-&Z+H5<&O1""OZ\*?&QI* >+MMJU8]/H(;+B34=K0<&4KK:/$@;S`AB4$?HD_9.3\^$H$/KR1<?3&C43WCFQS >+MI54;MB9\SU72@T"`[3^+,@X<<#]SZ^X]WIM@\.']FU>NO'6SO`4&Z76]"H.2 >+M1Y45%6PYP6"]>A9*%]Z9.J6^:>A*?2"4ZH*P(@JTB65+5J:DMP0AF662\'L! >+MTTPU""MTIZ$4A+2E6G0F]O<FVAN)Y"6)OP<5W_V:W@*$31J@H`,+ZRD(;U$0 >+M7CEQ:^'N#3H@A"DPX(1.0W<M_+U:W$0[WMCX@GDAJ_TT2F->U0J$"?XS/YLT >+M?@([03Q..':,</2D*>&+=.>AW$R?S(>)];:=:_P6?/KEC&DS/#TF3_7P])SC >+M':H[#X7Y,-=T-0K?NFE#^)*O0A>&+EPP_0MO?[_`4)^6&'Q)IMJ`P>K6&%R3 >+M>N0D[Z3TQ*'4[P]M8[8Q2]X(@\O;\=>.OW;\_<?P!Y^!0J3T@/5J#WA`B34T >+M-C8$+1%S3&#(=_A0*/S0@4].:X[IOH%BUL$CX?3I!`\'%CE`)@\R#8<D/"+3 >+MP\0A1@AVU(-'KY1TQ>,0*'G(3H\3:/(5`EBCM<#R,]J95O"H72\NW9'?G.YN >+M2-,,=-$"*SZ'!=U>6($\L!4Y@H5^IIIYRI*WM/HI03EV(->!;;#L"Q8A<N', >+MK_P[`[#4"J'"PB)>D:RPB+R80J9(65C$%+&%/7'C0(2RLX^2ET4V<[0GEC@C >+MM#]I?Y))$KN?G]032\EQ7&P<&R>/)7^8.#:6B6-B920=AWO@)E(:MI2\^&&R >+MI6'DKU%83RPGF?.8>5*?>?-\?.;QY[$^!O-Z8C')G>(^98J[^Q1WQETYQ=W$ >+MW1(K9T)G5PU":+C%<*7+</YPDL>2/,G'-@CU[NW(./)[*QSA+Z\WZZCL#:.` >+M9I*K%Z\:)$#(S@X6PQE;OIT$$N3%VEEB&6*M!CI;.(L'DG%%C.K5!.J;D)C5 >+M[O#_+H<#RE>WUE\7*SRU]=?%94R9_,@DJK]^&3XK'Z+6^NOUX@L7LL9)Z1+6 >+M;[!Y0.U$^/_UUV"K$6%O%)>532HZ?'A'$I.DA`\HQ?-(L*J[B715V!O%ER_$ >+M3AC2GQI>@GM='N5[$H_+OWYV$.F188<NLGNDIPORKU/KM;618%UW<PIJ)<-. >+MFF8O2"+)URE,Q=\;\EV)/VKSVY!A%Y?QRB2NA,.Y&O'UX>B#IS?GMI9A%^=F >+ML]D29S((Q%*`).*2CT+/YK<APTY;[D`8G-B;(-F34Z[YK678Q7G0JC4966)E >+MBA3E^]J08:<M"I\1!("MW#YX6"L9=K$HY0!S0/(^9Z1'AIUKH_KI$UI,)=7% >+M6;2.P=,GCU5U])W71EW,U4G[@9[GR6,N4TN&_2FQ5@KA*?]+Z`/4=//[S3%K >+MEO6\P]Y1%J!(YF.(26LDRP-Q.$'KV+1&<IR\`V@%GCC3'Z<\)`L.0J\;JBR9 >+M":"_>K#R4-TE=!ZA-XQ8%E3N6-R`-'%+QBR2_&HK>$D;-S&/\*TZAOE<G=<) >+M9!89D(I<,),!.Q]%S_7JD";5+V(^9)/(-D"*PC5T,ON_QS><B.5BG,QN5D&M >+M-@*=5+Y!QJ%SV_%.JN%=-JBSOK`G%U6(G3#JW';XTR8&(UMRF?=(Q_1@@7:% >+MP79(++Z?_$MBR0"$]&,#_CUNAYJ>_E[VM/31:/*YK`L5ZB5HIU&5C=$[`#,& >+M=@_X!39@_@6]B^07T448H"N$\/N^#N&7,"7R0VX42!>!\!_H15%!P>&Q6BBJ >+MH82_^($NADI*W`B&CN0RN1R&:E:!U8O25A@Z5Q`M'.Q$#3D,Y5`,+:Y.UHLA >+MTD5V6S.&(FO@WCGYB]+)>C!TKH`MD$20^3U'W^*<\0A-KLEI"SXEO!+).#(/ >+MYVILK%M"@%,Z6P_A9\+]6D.>UZH(_^75CT+.Y+1%^-"R'8<Q0OB/<EQS]!#^ >+M,6C52D/X=Q+:(GQH<?2SZFH5X0<.;4WX!Y,3F43)P%<3/FU#E_!3:1T^^8;\ >+M"L*'.M:ZA']P/SW/T]:$_XA8*T=K"/_RUI410;[OOCGA%VL3ODZ<<H3_NJ%* >+M"?^O'JQJPG_#B-40OB9N>:!(UIKPM8.WF?!5,4P&.Z0MPM<*9!7ATV`F`W8R >+M5`_A:X=T,^&3R":$?RJT+<+7BF\UX9,8)WP6T)KP=0*]#<+7BO<6A*\3]FT1 >+MOE;X:Q'^;0WAZV!!B_#_L?E:S(4^VH2OC0T5X3\J+ZTJK'`!PM>!2C/AJ[+_ >+M;X1?I9BF3?A5(D8DCW6A0#H/A/\O?2BJ2DR,^T@+1<\F@+-#_J6#H2J1R(5@ >+MZ-(-Y@:'H6=+P:KV4DL,5>U/#'+NVYT:4E0\2)\.`QGR>(\^#$$7V67-&%I- >+MVB76M9?<6F.(-,TF2N9KZ/ME^AB$W*K3VX!/E8@GD@RM5=>(>QZ,/GAR:69K >+MPJ_:&L_&2YPT,_SZBQ\&%Z2W0?BT9:L:->$_R'9-;TWX53N@57,-X=_>W0;A >+MTQ:'/%/9RCLL=&Y%^%4;UT<RD9)>KR1\51O:A%\53^OP7CG#IW4L=`B_*G8= >+M/8\Z4XOPKQ-KY1`-X:=,'S%\H)/9:Q`^C<UFPD_6(GS=..4(_W5#E1+^7SU8 >+MU83_AA&K(7Q-W)(Q^Z`UX>L$;S/AJV*8S]5YG4!6$3X-9C)@FP:W)GR=D&XF >+M?!+9A/"W#&Z#\+7C6T7X$..$SP:T(GS=0'\UX6O'NR[AZX9]&X2O'?[-A%]U >+M7$WXNEAH)ORJD]/2)B;9:Q.^-C94A'\]/_/F_DN#@/!UH-),^*KLUR#\$4@Q >+MXRFR0"K-#BA8"[="KS2@Z0G8`)LC*>89\ACZN`5-T%4V&P-B8(3-D"08?V9M >+M`LMJ$G?\M;4ICY;+NYG!K;7FV!`VONQB2W6D&2SK8D?W/",&?:W89H.`+F8L >+M<@>#7IU-5`;];7@,CU'"[;^&B(=E/>P,00Y&UH=3,+'#"C\#6J;,AHJ!7<RF >+MP;9B"7W>,846.F"E#5<\%;9*ZV%'?DN#>X,"-BWLQA5"DXK`^5#HU!UV?Z.% >+M?4FA$=0T)'7Z0.=XD-V/RV8@VPGZTYQM#.HK?"SMY]C9#"Z,9#O1;-AKCESA >+MIK[OP9Y@6@5U3%B90BXM<^QDRF-4+3G13M6N?_[\IV</KU<]_[WNQ4:XU9B% >+M&]MMN7(#]"P<KX["3T)[Q#_$7\?@;VP$,/R-?*MW>O3LU7L,;&_6CQK^<6^C >+M]5L[GKS;U?Z?6>]U_?:WCM;@!X9O8F9N;F$%=ER#U=BI0X<!V.%M"QS2J:,/ >+MMK<7P$#P&`7+T[*ZM\G>9N-]&P?3>]D=[=??MW,P`>D6*IZC[,.9+,/1T7AU >+M!WO!,ORM#UY-&R)LR:R'3>`VO<<9,;$O7FQS>(MT)O9%W39[2!"VJU7UW]&Q >+M3Q_'WN_93*!B-#6LP,;!`:X0$O:0$*`FU258\BR;+$P-4-<^`P8R`\DLSPQ6 >+MHP4"0QJ.JI09N0Y#5D(NW(0JFBGMD$M[V+>'_7]?V(/Z46\DAXE4=R1-WK'2 >+MLTC,B)6EJ`MJ"`Y*&['GI[*R.#BX>.?FBD&Q6871<'`D<=_ZL9..E,$!K[^4 >+MY!='D21_CXR81\%EIE3#/J;5R^$)E\D.MJRM?,1(1U)0<S/C[N/*QX_(&W[? >+M#8=GW,C\0P`?;O#`?WG:W4JC2MG=[1DPH0%!*RFNO'7B;J5AI2PT^3:=Y7"S >+M&?5TAD<L'E:6IE7R*R5WPP^5EJLK*G$%4U%7FGVELJ*R,FQM\9V'7&TZ-5'/ >+M37BHAM2NJ%R7=J6B,GQ/<OD?->KZ-;BBXNZ^O+R,*^&[BK<4_U%_B9Z+?K(S >+M6Z3<9SO4?URYKKBR_'9&1G'YW5.5C>KZ,ERYI;2"K6#N*"M@IZS">KWGE^%# >+MI7?*>>7,0TE-?7WCK^KJBN_/G38[K5RGYZ0=B<';\$%.ART2;6_WX-_;@^P3 >+M?2@L5OEPV+93)241:A\.B#Y\>K'&AVZ'2KX"'SI)2?[94/#A-ADQ#VWIPXGV >+M-JR-?-CP;NT^_/-0V.[!OY,'6Z)P6@'LY).L\N&@97M%HA%J'_8*BDL<HO&A >+M2ZQH,/BPNY3D)T&2OTQ&S`>W]*&+#8C>#GK?JMV'?P8*VSWX]_,@0:'L86W= >+M!-0-&6/Y5&,6O8T$6`Y?5SI"PM&2Y1(#K%6)@39:"1:V&[?$TKGTBY8Q;AIH >+MRV<8[I%L1T,NZ\?+Y>Y&+,V:;(G@.6G9`WLC>CS#FCM^VM-<YUC1STKW>("U >+MSG%UB^-G_5N4]],ZI@JO.L7REM5UCZ75Q'XN7-;>_^$ZW%1-.F3H.'F&^0SI >+M9$<CFM=XW\D*,8:65M9FUB\MX?K/5S^K?BFYS[\O*P_N88[L46.G'GW[]>O? >+MSZDOVU?6ISNY:/OVT?X31SN2W4/>Z/_WS8S6>9.?$^3=`W$_L\C;1I7N3]X" >+M+LGXDU]ND(#RL=X^@0L6ARX-F=_5)_2KB.X?@`GQ'_F:CM!5\C96I9&J!77: >+M1"MMJDI#BV9::7,M&TMH"Y,?U;&15IF=*MT/J7\8:2UBQUEI]9:/&)DE8H75 >+MY-U$RO@Z5\/()B&6%2'6;#QB'78BMJLM8OMT0NP`,\0.6H_8P:3>T,\0Z^*/ >+MV#$14#/2;#GY@FS;K9LM"\KN[_@EY>8<R]H**L&"@)-G3XE2#B0E@.BU5?SI >+M_*RLC+24Y&_A/S;YH"&_EEQGO7'<F;QCQX]G'TG](8F,C>+J<1"?SUY$QJ/> >+M+R_WV,E].X]GI:4D@,[UU:-9(%Q_/-V?6-9URCB==7S-YE7?I*;OW@HZ9%>/ >+MG\S)+<C-SS^Z"JQ_+#ASCCTGS<H6^9N2XKKY>6E9Q_=A7!*W9\]=XA[)55'V >+M4=(E)DV>D?HEZ/FD98H845-:JBA3=&@I:/,<R$C-R-X%RT*7ORO'L+5!SVL9 >+MF>GI&:*,C,R,#&]2J>Y`>NJAU#11NDB4>1"4[AK-CB6GI!W9?@#SL0%2;%^W >+MP6B#/&8=W&&D6##7Q]A',=>9M-30*2OI^\.IZ>G)L!C]#U@F<_80>"B%\%^- >+M.9""=?>&CIF)20=^.)R:`E;W8'7-V<-88V4,5H:HP52T)^';[Z(.5F,>-D8R >+M9P\/X4?\CY3#P&J6&]^-!3MC)(G?L7M/U$ZXGMNW2!"107+V$,*0NGF`[&=] >+M\);M.Y8D8'SKX/[K.-)L!9*9VMF9(F?4:#/2;T-4U.J9X%F#,6OBUP;Z>,_Q >+M`L\*9L1$!03X^_G,G0V>+03/[@+/\J=O6!T8%+0PP'?N'/#L[;/@V3,QX-E1 >+MWZP(#)[M%13@Y^,%W;A]N@"Z\>.I->!9JR4Q`4$S5OA/]5WP>01X]O;9G\[! >+MMHJPKR*QOEQT\6?V9VG!F=PUYN#9,1O\`H+689PWXXL-U+.PH6)!WDGFI!SV >+M5"0#?S(_E\EM(N&1GWM\(WAVZ5>^_@LC8"1R-G.>Y;91S,O-R\O/RP,9Q+JC >+MIW).Y)S,/96;FW\L`CQK^,U<'[^`F?&<9P_N331*E.]+@"A01(8O-UZN"!>" >+M9ZU6S_ERON\"_XW@,]@_4BGT%?@JX5%LY1)("<&SEJMGS?'VF>^W$ZSHO3Y" >+M7V.-E3%8$<\:KISI-?O+*=M5GA7Z^DX?RQ^K!/E>9:@7WXOUI;$@F>,Y<^;D >+M%7`]!?F<9X6^TV%(O7R%X-EITS_U%$9CG+_(_Q3G62,+"R/PK%G?2:&!"P-& >+M@V=Y_?V6^$T6CADU`CQK.#3$S]5UPGCAZ)'@V1+P[&'P+#LTV-MMXD17UW'" >+M4>#9>Y?!LY>3P+/]`F:[?3+*9:+K>.$(Z,:]2Q>A&U>*=H-G36>&N$YT63S; >+M>=SXD2'@V7N7KUZY5GJMI.12"EC?*KUQF[TMO7BY<+<E>'90Z'C7B1$89PX; >+M%4D]>Z\0'KRXP%R0%Y^/A8&_4%S(%#9=.%]87'CN._#LEY[C)K@&PDBDKZ.> >+M;1QRO[BXJ*BXL)A7K-P$=<X4G6?.-UXH+"HL+#ZW&3S+#QHM'._JLI;S[(FT >+M=*-T>4;Z8C#>%;_%>(LBWAT\:QHP:JQPW'C7*/`9J"\JW<,$84J(`&4,I-S! >+MLZ;^(T>-$0HG4/^?!<^ZAQEKK(S!BGB6YS]BQ,A1'\:I/.L>%N8]A3]%.0.L >+MHOSY_BS8$<]^,MQEQ(=?P?4<S>(\ZQ[F#4/J'^8.GAW_\;#A`U9@G#5K:B;Q >+MK#-J8'C&YJ#/;DY=:FP]_[X48]EO\*]J!G5`]!YR*6-@X2W&!M@4R1C,:<!3 >+MJ1\!*)U8G\5&V(2J_:BUXSG='W)V`^O;&+;R43*@J,,)SRM9M?R/(9+S+`K( >+M9-286Q.7M]2P5\(R-C7E@]R]%S;AEL)-L,+,@"K2T$(>:<>JCN32M762R:W6 >+M*ZF*30>Z^*\P\B('!MS"L=S)6E5NIA8:4IC_0LKY4&X.FCRJ<G/<!.7(JHF6 >+M6L+\1E5D@26V!@A9*TD)^;+""*!B?ZV*[W<6,%PQF9,;V'*3(\UY&YT=H;I5 >+M(RV7@P2-J9:!*6YP[D-/;7:#=IQ:F&AUW01+.0O2>:,IQ";2;`U2?-X%=/M> >+MJG3[K)%L]]99QG"KPE6J^WIXI4JYSPI)]^S8LL02XMDT^/#5J]>NU8-VWZI8 >+M+>'7A)U;-RX"[3"Q?1Q8E%R_285?5\X#@;RUS>)])DCL/-091>_>%A\#6P>^ >+M#*;6-VZ5W0%%-\7>V2WT^PA47%/@%O>4#:1*E`-)OG3\-WM7&A7%M:U/=3.H >+M`00UZKT:I\0A*BIJ"TCB-:*B.##IO1H'1,4!Y>(0C8J`(`H*#B@("JA)4.EF >+M4$2<4`C"$XB0*`$4F0<G1%$$F;J[[MFG"J@>:-IUWULK/]Y"H>OTV7UV[_IV >+MU:FJ?;[O4M91)Z=-SENWV4"RQ"K(^&GC`Q1YHM.<^[._[_Z%V*C!+6OG^HV; >+MG+=LFP\DA#>^5Z+EIX4^S$21XF8Z+=+?Q\L!GAU?#%MO"7';.@^N.6__J$)/ >+M/#<FPL_'TQE/LC+7?P^1!YEPR0VHL56F)WXU_,BA`Q[K^B.4MA:2,P>>08NN >+MN\EK^6F@FKX(@:1X^#$_W_WN2_&,["@HXDFRJ\##&TFQ+HIJ?OC:T`GY->++ >+MTP\EIPX=\'1;B">"BP\!R75*V?.RPKP'=_>L9/7\<E(.M.OY83MKU/@:%&'I >+MS!->[LY06">-`$F_ZSEY#[,R4VX$;IO"2OKEB=S;)/TP<)\A?)AKS@SPV+EJ >+M,N31$C_8OZ&_93W\_???T@XX6C.J?GE1XV54_7@Y!(X"`X#CQPXX+EDDT""5 >+M,\T`1]<E'7!<\D\[\V[@@IYW0FYN7EX#P/'[M1PX+OW7(IL9L-:D84`8],A_ >+M7-`$N^'X;D#7"@4X+ERRV-8*:A'JO4GO)T^+2V#9GB1RFR(<YQ`XGEB&32QU >+M`8Y&";GG/#V]O'U\U\#.2U0!Q\0MME;SQ@(<`W+]//9Y>1_T70%PO.>B"HZ_ >+M[+%=:&D,._M:E,<R@*//<@!`FG^G<&RL3_3883-_[C1\O?#(W05V(IF+WCO9 >+M"1R]-]A9SY]CJH=0MBO`L0#@>",E0`D<^P$<7[Y:9V=C-<_""./J_!'P)N\E >+M>'@O(_&`2CAF.UC/GVLQ!A_1-H8"'!\\JWY67OAG^K'M+!QC3CAPX6B#&(%B >+M^LI*2XMO1\$W`?7*^I2"PL>YCQ[<N^`[@X5CW.85"G"\LFK.#`'(\DDVA\/^ >+M%>7D/L[/S\D.P4<F`L<XYV'*X#C\,X!C4P<<OYGZ%0_@6-0"<-RQL`..WYJ9 >+MCH/'S8T&H:E%1<7%C0!'FV4<.'[[S51C0WA(VS`D%GJ4E)0UPVZ(.`[HLI.! >+MH]DT,S3Y&S.3*4-)]I#>I>6550_`X*:/(AP7W`(X'K+`)I-!9ZY^:FK1E9"0 >+MTZ'A9W?`SLM0!D<'!HY7OC>9(A@$<+Q0=#XX^'1HV%FB(YWMW3D<6^C`=2:" >+MR2/)SKX=O!G@&.X,`/C])Q5'QRN;5AD+)HW!EX8%0=ZP$T'E6Y)]J1,X;K$Q >+MQ=U'X2O9?)B;2\L`CFE9%Y3`\7,&C@M,C:<()@[%U\17?P9OBFO`P^R<C%!E >+M<*PA<*RHO&^)AS$:Q$?(+0;0F%?]MOI%>>&C"%\6C1</+>6BT:KMX'C!<O+$ >+M,0/@B_P*:,PJ*R\I*LC+OGYV(8M&X:I%"FB\MN*_Z`!KW$<;S6T^+2JB2 >+MEJ?Y42=_8.`H=!BL`$>$Q-TXJHFC4>M&1=G$7JB95J6;:(!X_Z^;^%?73=3$ >+M4[-QJ&4(GZ<Y3(4V5\O=^+CX2*26-%?!P\PDH9K27,`,G9'\Z]T+!AUZ%A@C >+M/S1U)<U5C3+P%>Y9`XZ@!1K7M3#7_7@JOBEL\*<(<]T'Y8$3K#"7U_Z-V+\/ >+MM/K*7*PY$;0HS$S8`@F@OC)7]FWJ=OW/H,QU/2$A-M4=#KP?U)?FRDZFDL61 >+MC)[%Z[(R']CUM6^[J:'.E9V`$BX3=:[X6%'9>6SX\:7Z\EP-Z%<4A4)1YONW >+M-<\K*HF]3H<\5Y9J,8N0:U<OQ\9$$:N68B7Z7%E7E&I99!2R^EQ5E>7$6)?E >+MB,Z*OPZWTZZXR7!$-].U"0G7$HB4!2ATB4K#P88EB89[:M%"(=Q0DR&)KF$4 >+MNEZ^?OFRZAE(68`1R:&^&+B]5&G">&W=M-4)J:4)<S/ZIR,_?H(F3+#?49]_ >+MZ\GD4$I35Z(PU>B4ZR[7-7HR.=2U)DS`9FIST\J_?XHFS#$'RJ'>ALFAFU[[ >+MU[,YI*XH#&O.B,)D)KB0'%)?%.;<+FI7_28VB6+N@59ZXX?Z>K558<[MI_:+ >+M=[2KPAS`]I]UK0ISS@_Y[2.J,/&Q0@*MEI>?)@L3CG/('F6^>_/Z67D%\PF5 >+MGZ@+`ZD$NC!@+"[Y%&&8C$)6&*:RHHQ)#)7",$PR<75A0CG)U)DN3`VC"_.B >+M^L6+2J(+<Z8MF?I@!.NI4BG8X;#,83GJ0J4`4BDN(MAKDTPJJ9(I\/?P<G70 >+ME4DDIZ:N=`JJT6'GC<[_U)5)I*YE"KR74<N:K/_6D4A=R11X65%6]3-8:26O >+M_8YL&JFK4\":DS0JR$SX-YQ,6M06*A#W"=I`;:A?B<)N01Y%I^R"FL(/:BL5 >+MM*"@'=0.L1.31Z]*2CRQ/5]=I8(F%.2)/'?T.7,](3X^.K(D!$+UDGK5JJ94 >+M00,*Q-ED@S)K:ZJK\,PYA#DCM:514==I%!TE)%:Z[9E3E*$L<XHS"FL+;Q:^ >+MJ7Y>45[*6+"94Y29!7>(,R[(215`YL3S<>+$QHB$D<5!G,2!N\3W4U/A%K%L >+MXKRNIJH_O'K^ZCF<7HL*GP:1Q,%3Y_\;YO,68#Y'M!+F\U9@/F?NH\H0GXM/ >+M?T:!5K4"[[GXR0!-AL)<GO9<7#E"FR$QEV4]%[_]NAM#8BY+>BX9VQVFL?*< >+MYY)QI%F>\EPR'NZ"RC&>LXVRA.?0J"?'=][>QJ$[;VOK8#N7CN_NH;/VK\$Z >+MW-#!/(6WU2$=GLZ?WFAIMV+=ECW>1Z&A:\YA.8LN*8??R3%.P8=TP3C\3HYR >+M$89103C\KHUND:6-PI!1P3?\6AG?,%S$JR(<)GS"A)(**24<9C[J`\M9I0;A >+M<%,C2_"$5!(.OV\C'&:YHQBD_058/KM$FE*2S\8E#IM^</<]'JH<:DHY/K'- >+MYA_<?0)".P4;A^)33;#),GRJ!S<NP:<:B/-6!W$J"#Z5($Z1X+,=<6H0?'(0 >+MIXK@4Q%QCG\%3CUU\"9'J;><O[QQG<MN+_]39R,[Q9L<HUZ[32"Q48-03WW$ >+M<?CTU$5<!YV>&HC;JP[B5+/IR2.NLG/$J<.FUX$X56QZBHB;];],**9':R@E >+M%&/:Y0C%V$9"*#:<>4T(Q=C7A%!L.-S"ZR`4&\[PBW7"*-:7T(W)4HKU@]NE >+M?53PBNDQ'63)Q=A&688Q/=I#)Y!=$:W'_AV"-.J:%]/G3^Y=7,>KDZ9B'^4: >+M\)RP3KH81ZJV[K><IQDS:.?-0M,#:4DY/P*R%-JTT`>F[1VS-EH+]WEP/&M" >+M2RW4TQHY9*1M)7;R;5JHD6D+_DE$B0@-6&W=HQQKH,N`VMO956E;B.$CV[^U >+MM>E_B=O`D/0+(889Q/"/@&-&4X:,&SIN\(15Z2GPN*FY;F;\M>6SS?AF+?^X >+MEM_7A3A*NMUE5EʧZE?_Y0V?]S_N?3ZM(`K/6NNDT?4WK&K[`ZL78D#[O >+MV^@S:F`U=3IZA++Q3\:AU,-)2<[$S=[<Y=24,S%-]\,]WG,H-+K3C?DHK2*[ >+M\B[(PDFP40]:0FUF.F=4I56\XU!G:-#2@_A74[I/RN%4HB-76_<M=PVU`6MX >+M&/=XU\&;(1T%5GB8E*H$%S+,-S",@0L[3&5:1:W,(FKIU[#4VYQ.]4GQSK[A >+MS`X$];@F8Z=9CQ]KK=F?F-X_C'N\[5A&_?YKFDXU3Z4_3ZU(>I;@Q`[%HR6+ >+MV87K?&R4^K@RM>(M9S6U!OW>B)X[+96FTWWN>:<3.W&=`!8@2ZVQH_BZKRXU >+M*,WG7I?@398';S(7O/_S^^.TZ0!4$\_DF]DNY%O)M\&W(FT<\*;[9!@R0)VP >+M+"UY`[&3;P,,DK:(6(;:!0RSLJW:@#JS(GD=,<RRYH`7MX$AZ7<AEJ%Z(>GB >+MZS=.,,APD.$7X[]/370DX#7G@M>1.$JZ<<";D5KA>_9@F.]9W[/)I3<="7BG >+MM8.7L2%]Y,'[$&5A\*;M2_*\2<QJZWK)@)<Q3?7"/13`FUR:67YC#=G5O0AX >+MUS"=TRJ22Y6"USW1,REV+1GE&QGPKF4,/5/=$Q7!FUQZI^*R(QG&C("7]2FM >+M/+FT$_"ZWW'-C'-D!^*"MR\Q3?%,=K^C#+Q)9;<J+Z]BAY(#;_*?Y4EEG8#7 >+M_:YK*K$3UTV6`6^R_Z_N=Y6"MZ;9#K!J5\.KD<8`>&4;,'AKI'8`WIIK2;]= >+MG0I`G;0].N*.#7PKA3;\K9BV#O#6)&RX/HP!ZIA95Z/G$COY-HQ!IBTN$9]7 >+M&/#6)-Z9WP;4:4^BYQ##1,M^;6UZ0W$;&))^5XEA!F.XT>/+"7U']1O=;_3, >+MN$L6`-Z::1SP]K$@CI)N'>"MN1&7O_?4[L"]I_:>BLZ)`+/6&I,V\.HS-J2/ >+M/'C_0`_PSU6'J-41Q*RVQD`&O(QIW!K<0P&\T3FW\GX!X@X)-@+PSF8Z7\V/ >+MSE$*7OM+JZ/.S":C&'/!VY,U7!UG?TD1O-$YPOQ0"S+,%!BF)^O3U;SHG$[` >+M:R]<?BO<@AV("UY]8GIE=8R]4!EXHW(O%H3.8(>2!6]-3&I>5&XGX+47+8\C >+M=N*:\5SPUL2XQ-J+/'06H=;7SVOK`+SD[Q#"I@J/0C5I'61`P[T>33SIT?PO >+M7H-^>!/=L4VASSFOI35T[\[>:F;?DMQ[3)[?,F_WIJ5EY/X:[O&&],`MSW&+ >+M%NVA_9#-PF&HA3/7&8@O?SNF,GB+,T'!6YR9"-[B3"^XRW]XJ($S@U"Z_@=W >+M.6RIWUNWMZX96:@GNP8(QV%F^_(@N:5`&+MC2-F=P@(@'FK!4X[,9V1Y3299 >+M)*1L-1#^`%UX5&R4Z+T>I>,]K:%L-1`/O3>CCURCQ]W<OP'YWF87#2FL#<(? >+M-@H^;-P-K_4HE/TPA:5!/*0\W,EMX69/OFWA9DZI[>$FYTZ\Q3DARH6;<\[K >+M+-R>%CU[Z?36,34=K"S<YBK"/>J_#;<."?>#,S^J#/=4$N[?SNQ2'>[A)-R9 >+MIW_\I'"SYQ,VW.SIHBW<S$F@/=SD:(^W.(=PN7!SCM*=A7OU=!V#[@;=)TWJ >+MJRS<TU2$>W"GX390+]S=2;B3O=:H#/<D$NX[^]:J#O=`$NY$CS6JPQW)'A6' >+MH>[T%Z@'/9#S7XM9_-0*BY_PU]9"O6CQ**WVE_-[PDOQ97+DPMN+#&`M$CEP >+M=6P]E]F2J-B2[?F";$GP5@\D,885$)(YQOAU7>\S1XX=WQ/[ZT_'3@<3\F!X >+M3VH,1>\V(<?\_</"_/T.!0:AB:A5<T/@,5^>;ZO/@?V>9!V$XPG__?N]/#T\ >+MW-!D).;/<G.GW%O=7/>L@94Q/6<LW>BP8.$<9(I:M0P,M!#4:$C,H41?LM0< >+MAN[A9&>W:'Y0N(O=VK4A,#2\A\?'0T]>_R];6R<G6QMK^[4P-,]L]3(KGA4U >+M7S)O+@RM.77-DGGS+.?.F6.!AY;P1EKP+<2S9YG`P-V&3S2;,F;L2!B8WZ,' >+MGQG8"BK()1NL8&#M1::F4TT.'UUJNF`!/,&6PGM2*QAXI.T_3$P6+3(Q-K:T >+M@8&IT0MG3>%-X0FDD_"X3?ROK6<*!),G49.D1O"=J0%&$ZF)E)%DPD@86O/O >+M7WX]_(M!`V%HGK8V#P^MQ10]XQ.PJ9$AS[!U#%/6W<K3&3(&;_/;"J!Y4/Y= >+M2VK#B0%%BXV^Z&U`&8CU296X6%-''V])>T,!#V/"AW+R!=BD&VH$$UJ^\KQ1 >+M@Z8%I*LF$O-THS"\@`($=V6*V)MX](@1\#8>4T,_'<\/H`)>NW=;!?QG_9D* >+M^%9*4S^2UB:5\YI,Y;P&E'OU0"V4AN[<MX3L1@K%7OB7'FK@:>O/S?XHE3;^ >+M@038-;ZV#A3GZS3=/WG$;<._#.!YSLHM^/?'+9N<-V]R6K\.5L0TOT7Y0G>0 >+MY)7>AG42A=E961$!Q]RV+P8P-FU:MWKUVB5SH+3L-KIWR0W=X=^1^D+')^GW >+MT\^YNVZWM<!S`"19OQK_;CX_073I`/FP`-RGX8^4>RDI>U;.7]@=^R<9X8CS >+M4Q(O%%&BUH6+IVFB0>CMP,,'CAS>YF#UW41TP&N#Q0980R(Q,T`>Z"YJBEJ] >+MS&+J!+C1(]E^$!P_Z.4-P'=S9AR_MFT%U_'LK(A5*RV^&S\('/=RV[W;=?-2 >+MQO$`U^7MCDN?I%/I3><L9G]G.)('GKOO)IX/<')U:/=<^D<*+Z5EUN318S7! >+M\_%[L><?XX5"D7#TA&$\XOC)HT$GW9R7S#5%1P]OM7:Q!,>'=F<</V]E831J >+MJ"8X[AL&CH>=#CUS.B0XT)-Q/'KCHG;'I8595%93Q()Y1H9#/P?/3P<>/WYB >+MGQ/C^<$==ATA?WP?AWRBD>&0`5#&)PDZ3ASONW+'4CG')WPU:!`?'#<YB1V7 >+M7A-2PA;1H*']*>*YCY>?C\L*RV_'(Z]]CC,=IX/G_32)YYIT2YT^7V,^5*3U >+MT<*XI5M%AOVT8+:Z#XYG]G#VH("8K6YQ-XKJ-I.F=PW^3*L/1FF+R&BP#MQ2 >+MDPJ@IP!Z\N#0^BY.EX\0KT?_$2/Z=>/A+,"#;!\_I"?<J-.%]0V4-DX!\0-2 >+M^H=!K*O7#7\,R<7ZJ1,-1P[0U4`">A^M3[?8TP(T$(_5&FM`RA;Y%`_5DQPT >+M&M1;KQL\"Z4$!G2+`*'AAX'=J':AK@;<>/P(G4;B/*7(HWJI/3SZM,<]^*B^ >+MO^FL&3-FSYZGCX?MV9Z(&HBRYPM:[$_LVV<OT!1HHE9M@[X&?:@^8FT^!;4, >+M)"4'X2,*159/UK_J$*+/IK(;;J'AS!(^430ONL&!*T7_AGX=%W?YRI7+5R[' >+M@A;]I4*HWZ@G(O2,'#U&J)1HT1O;:ME^-)?1HG_^C'I65_4,_U26$S5Z*.30 >+M!BUZ?HJ4U)`:V]I.X4]IG,K5HJ^,CHJ.CN)%4:+FR$L7(_*AD(,2\81BD*'' >+M^2@4,6+TQK9<,7KIFS*J['UI>6E9:5E)2>'3QX_S0T"-WEA.C;ZTI*2X%"K! >+MBHJ>/LW/SPT&-?K@<^?/G3T7S@MO#`L/#3U].G@-AI@7>L$-5%;6+63(+(B[ >+M<8MWJV$7-TZM=#4.$G6Y/A;*S4B@P.UW;8'"/^GI]TF<S!VU'#_:R<3I6155 >+M):VLXE4UDC@]R0_&MCU26O$1B43)W-%Q!G]&HT5'E"3-%5%:)$(7+_R2!]W? >+M"2$\^)^(_#L#'VSNR(W0FS<X-&R`BI\6X.\>!`$REPE0\R,H[2DMYA53A50! >+ME2?Y,Q`'Z$UP>'A8:%CH&7QH.!,<?.I4D(-"@+*R<8`$S+JRM/N\^PU'N`&2 >+MT*]P>*C8^IC8F&B1\-+%"P509_".11$W0%8[M79^=)`)4!7,WBHJ\0^#H[P` >+M;-L=@$2E2($B06RU<R<\U%O$!5(Y"05/2$4V7[P0\7/N"0"2D!))A4#^2X)% >+M@&2U4Q9()53)^S:,%#S)^S/G.,3)2@Y(Q45%A<6%18481D^>Y.8\/`9`.AD< >+M$GPJ.(@7)`D,"N`%2(ZM(''J*:M:WO:TGR-:SC0I:)8SS8J2Y4RQP7_8NPZH >+M*)*M73T@IG79M[NZ^U"?HBZF5=PU/B2,B`*K(F#`@(""Y&185!!HD6#.()@C >+MB`IF,*!D!P4=9%$Q`8LH`C/,#.!$9OK5[08!%</Q_><_YPF<.3U=?6_=V[?N >+MK:ZIKOKNAS*6FWQ.QO+O_R\REBN'_(0[M-<?3V7;G,((?325+9/&KXGZ8ZEL >+M6V5'^F`J6V%3"B,Z_6`-#_VS108C&MOS$S+9JA=IM97!"%JP]K-R&J)/S6G8 >+M1/[1G(:MC/&AG(8?-\8GI#3\F#$^*[<5^FANJ]:V^%ANJ]:V^%!NJX_;XA-2 >+M6WW0%LPKNP^D\^G&O)][3TZ?QC=W[TOLTWCI/=E]F$P];Z7W@<(/YO>A9\8^ >+MG.`'NK2&#V;XP0W/5[1`O=4E=!L&FD;"=H6?LLO2RB]ZP$JUVDSC28:3U5I! >+M#--O@QZ59Y?QFZ#0Q8",^VC@+MU(/*"49JY+#\TZ`^^YI+69.[/6I7>CYR3K >+MF!->$TZNF(H<:9-)#1])RU3++LLLHYEXM05YS[/+6KUDH&72Q;P6(+IJE.+W >+M2,H$V#GA&>%9%QF9A9MSPS,&T3)ES`D,<T&D.J4815&6]#UFEJ25GZ?EE3^\ >+M\R*S1+\5JJ\:DC'%16IOL':QN,BQYK2V67X^/BZ.\))"RMGJ_R>@K=/BF!-8 >+MG=<(>//=&^#K'U$]0/%FT=/>N6A0V^;OD59ZM2QQ(6V*U`DF^I/>-7_J@[*T >+MTK;,'YP2D'IB$6V*U`UIP2G?-)J?/FG+_&FEJ:7QCK3,NSE_IY6.?\?\='%; >+MY@^\'IB:Z$C+S`_%9SJ-YJ=/WF/^'C>*KY8E@)*\LL);SV\4Z[UM?J:X#?-[ >+M+UYL-W\!B,L,7^*]R+87(XXY^4+S=T\HC'VP9R*HQDO0GS#&^!WS\Q)N/4@H >+M;,O\#O&VI[>;@&Z\!(]$A_C.C/F9D[;,GU"84+AS,BWS1M+]A,(Q;YN?*6[+ >+M_'8G[4Y'3Z9EIBV^9'>RT1[,R7O,W_W4O=@'T:`DKRC[RJ-3]T:];7ZFN`WS >+M6YJ:3C`P`G'G7*RGFQC]P(AC3C[-_!K-D_W*ILE^9=-D?U-)]^:Y_]9O`RK: >+M(."U?%T`)3_BGVK?4ZJ_Z+<MG5'M>5F%3*0LJ(=_"NNG.'_NS)F"#@4J+AXZ >+MB?2IXE]Z&UX.<44SQ]UB`*_>Q<5B(9$:11E<OG8YQ&?INLE[WP^,A:F^HZZ< >+M,KN:%.+J,C2<`U1O8++HZ6F">LTQNQ(R7WL5AX(E>UAZW*T7G$%K^ZV[F18' >+M):H^8'7.N+T<;/5F$"TVS#J#HK=C5GZ"HK=S;\>L"8OZF**W<V)6^;U'41U& >+MT5LQ;F\4U6,4W=.L:*^V%!U%*YH2[/0)BJ:DI@1[>(5^0-%O0='K5X,=%[U' >+MT5Z,HBG!L]XH.HI1E&Q6](<V%.W6:@H6WFDUS\8JWIF;50%^E`+PHYKF;AL8 >+M_"@%X$<UE2D:\:,4@!\%A7]A#63G*RI>BB0%ZN!R/W\NG--/[T`Y]?5:N,RC >+M)9X3U0+/B7@+S^G;%N7?X8]::VBF86^@F5@FX:U`I%@FL8CES,,?*6*YM(9E >+M8IF4(999'6)-E2.6%::=U0FQYFHBUOPHQ%JP'['L#R'6PJ.(Y8CK6!S/P#*I >+MH0QJQ1?\8YTROH1_!530KD&[!NT:_'<TR/PB#6!O.JF.OJ@._/^%["O:Y;?+ >+M;Y?__R>_O1MHE]\N_ZN7W]X-M,MOE__5RV_O!MKEM\O_ZN4'=R01R2(_D1I] >+M8K6?VJVTU]=>'UT?ZW]AEJY=@R^=J219[0.2KUQ^NPM\]?+;7>"KE]_N`E^] >+M?))@?R+E_\PH^+]=WV>N?X&%*UV;U\"T7/<R$GU>'C/X^Z;%]W?RF*'FO_?E >+M,6,U+Y9Q27Y+375<]A"I+=^#/['X<[[U@AG7'Q!KVTW$RBI%K!I;I/:/<J2F >+MMQJIS<A':G/LD)I]9Z2V>!Q2<Y^+U'SK@5,;5A!_1W6)Z4JO3&(!EE',(1ZE >+M0:EX@"J.NC&HC7`7@`<.UV!#OG+0#?J"'*4.1/2&U:8K#1/NE3;R/+]K!'N! >+MF&L$I:H&0(-J"E;H*>8\NU346,.SA/NS\-<.E`#H*'G&@PPY/G`>9&!Z`LD# >+M"X^MSJ=I9>BA]];LY?B[.J6,@3KK,X24,$,NAP.E1DE0UP,%N]?X<R"=#X5Z >+M_#J4&,H:\GIPOI?3DNO;<&M!9J(8@%2O!E`#A3`#,W:@^*A/+&=K6-"*[)2K >+MR1?/GSV3<`)6,&;EYMWAYN=S\W(\'&UM8W?UHG,28'X6I<1\!$4(6=0K(62E >+M&W'^XKHPTG_9FH`_O=V<[.=[',85O$K?LG)U\!IRM9^/R\)Y,Z>MBQX*\%C` >+MWP`:JU,5PG3,;'QM7VA(D/]R;U>'N3,LS"8:6D>!^,MKE_FM7+5RN8^;D]T< >+MZRF3G&+^#4O$8O!]TNPLZJ4P74)U<CB[(2@P8.4R;[=%\V=;39D\0=]B(TA/ >+M7.WEX^OKX^GJY#!OUG1S8WVSB&D(M69_376<%QNRPF^9KZ?K(EL;:PMS$R.] >+M/TA8O'ITN;,KX5KC[+3('JJ=9/3OB0&FP-]"^S2L_>B]:WT\W18OG&\S8_H? >+M6/C8R<M!^]V>=O8.]G8+;.?.LIIJ.D'?:L6OC/8MC:<4P@\G?M^@,*=%=G-G >+M.P#Q-#.3J0"JT[#!R]&)Y53ON,AA^A138P-[1RU8C=>R]=+3H=%9J.8[!])V >+M]@RK`&]/=U=GQX5V-IBRQG/)$E_?)4N7^`::3S:>X&31#=;U-7M-NE2<!E[# >+MPCXF59^\U,9BJA,.0JG/1+:)O3Z]=X\2[#S(>&2Z1"X5I3ZX08N3#W:8:6J# >+M:>4+#29;_X*K95$"%(Y)50T5<D#@%17SL'U82/&#E07LQ"0@TY6UR>3O:;A4 >+M(4TKI]%RA375?.R!^'8[CC%HC!MC74`>TZ!$0*<2U]4*!?QJO@H'#NQA[$Y3 >+M-2`M0!GKA,FA,CI>.U(:^(H&ZH*OAD?':,2HHG%DJN,R@!_K@B"YTS]HE([. >+MZ!MZ:Q(+=BV%172*:!'^85LKH;I*.OP)6A@D8Z7+Z=!G76@,W(L$$_I-5QKZ >+MWGK2>`O%V;V9T(=K.&8J(/0KF-`?__#$O<8:'AZ\.Y8)?:"C9,G<9!D^7.<F >+M,Z'OG+=K<4YCZ.?/"KAFRX1^!-19G\RG^,DR&1QPLQ!(MOEVF(?C=2;T44<- >+M0H/50:J>,\-\SKE`P`ZF5!'@.Q5<\!U^<C+8G4""J.L!OB[VU\XFGHP[?N3P >+MP1C`6+F:D9G%R<GA9-ZP,C,RB@+H81:P8X_%;-AW^3CP^1#XWQR/6^;K[CC/ >+MPVD!CK&)AE;;(?22_!T6NWFX+[:;/762P9CAR\(AJ2D%_`V@+PX=?A)FUCZS >+MT=O3Q=%VEH6)_FC=0?UZC8+$([S37O/L'!8YV,[&03M^U-`!YA$]('0B('*! >+M'4<N/TE,$29'_%R<Z>`V-1PW<JA.7RU=@&![=6CQC-DV-K,AF`W&CABLK35H >+MZ7"$6K/74<@@RM/>;AZ.>5,CO5&Z@_OW_GD(#;6UTW:*!6%1,\7<=")4.Z!W >+MCWY.`X&_A?:7L/;?K_>:;3W]CTF&>J-'#,'"?]2Q!>W#K(TGPO8=(_VQ(X<- >+M[*LUTKXCHWU+XRGY,/%5X^)K;FJL/\X$:(</ZC_,`N3[S3`S9\%V*),10P=J >+M]YQH!MMT6C9=4A(TN!H2F+@;C1L]TFF6M:7%%+-)QGK0=-9SYMC8S)D[Q\9Y >+ML(YV7W-=V/S7["])DOI+X"\L[.LRG;EZNL/,<1S+9O?KTW^B%KU[3D!N83PQ >+M22R3""YR+S`AKVXR9J`>)E5,ZJDS"I[#..*78TJ5XKE,(JX3"8HJZ>V[#2-U >+MAS0&?,.H_CJ8$N(=*(&L5LBOKJC"?@=8QCT;`UF[*Z:":,=4JGJ1D,^KJJB" >+M:.^(+W>D0QSXZ9AL&>++PR,T(E3A'PGQ!C9VO6^I+I8J"C96LR%Q82=<:@BK >+MD6LM;6(!<^G*Y>1+A^@<>^P_&`(%VUP?GO@B2YNXE%@<%P?V[=UWGL*C(H+= >+ML""/31/)V7<7&(R`/=66-B>N']V[)WIWY,X=VZ(HU`&3*98\?L'02=D5CWP- >+M!R-\#P),F7I\_P:&-&0+)"HDV/*0Y[E_,[02=OGMTA"C,9".I@:(8_=XG_+> >+M%16YU?>4!RS-)MBR`\7IIYXRY&+VW_$I1?N,QL.6\QK+N.O'#WB74"5>.[9[ >+MX0,XF81M?OG9U<2316P--F&$^R^VU2*-1>)G\;$)]R^:C8<A@<SRQM']&T^! >+M<Y5X83[PCG+VW-0'E\Z>CG_X5\$]+O?NG3NWC1!BWW_T^.G39\2S^B>/XV./ >+M'KU]=8X!#`JDEM?W[MN+)6/W+F%1>5@RF^V2DWO^;,+)./@<.W)H?]Q-W!;L >+MPDOQI\^<.W\V\=2)XT<.[KMRP\EP*$59INPA]C1$8N'J5&Z)!\5F^^5?3TP\ >+M?1*(]D9'[MBV*2H5V///QIT\G9B0<"H^]MB^'1'!43=\C<8BRVO1K.B&G;3N >+MSTH\(BC3+;?/G3IU,CX.9,3LWK5IK7]$$O#G)AR/@RW6KTX</[!C8T1(X*HU >+M%]8:(<NKL.5W!UW![1*/,,IT8W9"7!SLJ3VX?T_4EK#@@!6A9Z&"FR>/'(O% >+M5PY&;MNT/I0,\`M*((W0]"N11&3#]D;]W2E](Y^TL\>.'CET<'_TUHC0-8&K >+M_EP3#^SIL8<.'SUZ.&K[UDV0]6W5AE-NA@/1],L[B9U*KR;[Y6#[Z1C:G[EX >+M$`O?B6]^\P9<Q_JC4,&U^..Q<<=C=D?M6A>Z)L@_>O\\PQ\0LDR.V;&6:4$/ >+M#Z8%'^I;[;^X;_>F]8GX+HX>QBX<`RV8</;<N82X$W%QB6O)P,`#6RR@VQ!: >+M'KZP>YLG=AF/=>'N^(`'QK#%OXLF'O22P32L.+D:0J9.L[M?U*X=V[=NWKC> >+M$[N^G%P73"?Y49`1*R%B:C6[KXST<%J(N]89L];BB"5(>;2`I&GDI&"WOP/F >+M$FEV]X]VF3/3:IKY)&-#,W@PDK(3$HHADY*4)"YP!L2+4+-[P%X/6^-9-.5P >+M/7AFD=)DE53%D$I(2J9*#O:"<!'@2O=ZS=4F^TZ9:L[N2_:$AR@IN:.4B)0, >+MM9BDZB7*N\%^$"T"S971'G;:7(K;QW1B;WR``32YKEPEK<?T&B01K$`4N?6` >+MQ@&QZG5]O?)%Q`HZ6#1C7&Q-2#`U]U^8K0.N-:I:*<6=H+*!:%!72.1!")$* >+MI5)%0*Y,E5A<7RN2\W;[TX&B&8T[Z+[0D1-<%G632U$D>:Q.(<%$0I&PAE?U >+MZF5YI0RK2S:(A'6PDY8>4`EJZD5'`FTH2C-RYJR9T_IP\;T5<[4P\WF%A-FX >+MR:_&K'^7/"T6`[="**A]+6%)*L7U=57%W.S"NC-!/DASEY65Y73S?W$!5HVK >+M-8**R)&+A")"Q(4Q5F7%B^=%=])RA'0%@AI1W6NQ^'5=U9._[M[*O)')SPQ& >+MFMNG39LZ97)3!<.I"(Y4P*]AU3SD5U>]>OXH+SL]Y68-\,MK^(+:NOKZZI)' >+MA?FY-].OI5>G8_YMYH1Y`YA;G9)P_TFM##HK%?$`]K6HZL6CN[EXR'$UJQKX >+M97Q>C;!64/KH86%^'BZ^PSL=:($TMTPB)BE[-]DOATNAJ8%':NJKJBHKBA\7 >+MW2_@YMW*OE,)%4@%`E&ML.39T\?<W)RLU"=E!U;CQ[CF)DOCWYC6T]+BT@.G >+M\E6[RL6OGA?FBWC5U565E:\JRJ$%7TLDTCH^P7_-$]VZF9E17K3]3WC`:GJ' >+M337HB=U%ZW?=?X+78$.@91%/ZA[>S:O";J,(\L?,G4A)358ZI^)NF`<,(BG! >+MM]V]0LU':Y%:(W[7'?(SV0-+%B.?X&N5#SFO2/S;7$)6I]XMOQKL3(^U!*A; >+M=\\0DU$ZOXT8_NO@@3W[@;F0<W!<Q:,7)'Y.$?C!*"5?_?4\-MB"'A,*,8,' >+MR=8=]NN003H#M'\#MT3F@7L>ES&>+R/+BV)6#Z3!WD2H6P_WP/&8\)?^?4?X >+MX2B3(.M56V\WQ6C>EC\'8<).5"TF=%M#DL'!08&KG2&4D=POC"%K($,!,K0+ >+M_$;6[*39!8]F?0+I*TK2C=XDUO0T5BU!1,L'L@_]0%9V90!Z(&V"MR=T,(2[ >+MBNY@NA)VH6N"@P)6K5AN#1V,US(WIH-Q7[J8[F"Z$@XA5K@W,-`;/=8+:R7U >+M]0SGN3/*N_/"G&=`!].5<`R?.G[,R.&#!VCW&@3WZ.L9(Z88,JD[)8YV,:4[ >+MF*Z$TWHK(^VQ-&7GG\%PWNXG51(50RIQIZ2JDVX+Z`X&5[I^ACYR1T.'#>Z# >+M#[CLM;=[EE(L4#+48G>J5JS,=G.D.QC"(=S*&'$H#AK8#P[0P7@M*U%):C&] >+MAKO,#=?@'K!98[-855=;JRQ=ZD1W,"ABJE%_=W!1#L)L6"'/T`JEI%XD4"H( >+MA;I<(G-%R%W>W,'@KD,@JPQSICL8%#Y^O!Z-]45P<`?#H2A?SUTB.1#Q(<9? >+MEI>5O)!B==T5`KZH7DHC4XL$O.I:P0Z7/_"8/F3,V#'#$:`O%G,0Y>UQ')#X >+M14(!'I9AUJ>/'A35`[><S\/]$TM<B7NWET6<:WFBPZ[V"*T9.?*W$8,1[`,3 >+M<W"3+[TA$_`%A(`+P[H7STN+[V5=NL&G*^!5"T2X@Z@3O;R?FYUV^<+EJLNX >+MI8.&#Q\V5*>I@L[4TNL27E4UJ_IA5<7+\N*"S&M)9U.J@5]67<43BFIK*QX5 >+MY.5DI"2=2:I(POR!@XG!#?UH_258?Q?7(Q)!)5%)5!2]+"W(SKA^^4+BU0K@ >+MEU955O.%O"<%^7DYF;@XJW*_BR%"_@.(`<HW]LOG4&B"RX[JVI<O_\/>>X!% >+MT33MPC.[+$$0%1$!<\+TF$44#(\1Q82B`HJ*"064(&84%W/$1\6``3&@@F01 >+M,PHB05&"`H+DG):-[+*Q_ZZ917W?<\[WG3^?P+6Z['377=/34W57=<],#^;& >+M[SE?/Z5]>/\ZI0842)J;N3Q.84'^][3DQ%?Q>27G77IC4Y?M&S>@\^_31S', >+M%O\R475I9CJWH:ZNMJ:FNJH,3J%0+);P&\G&U@;N^S<OGI?E^,%RJ5QRI=>H >+M7I39Z.M29@,,X[PSCY_]\4,MMAOYMLT8K.TF:7J5\+;JHY<]S3"=2#N/X0;8 >+M*O7T=5E@G,`P:UVC:[+?5KL!P[C5Q7\LBW*U4S.,#KE\^Z"N1&<]'2T-&,D" >+MPZQRO5Z56^[6SC!NU9]+K[I.IQA&A`'+W/KI:FNQJ&6%.E,4,VWKJ>\EM.U+ >+MW<IR3E(]`(2B0]JZF+!@D2^EWCJ*8N9M\4UJ]](/!YS[J"E&AUSJ[N;FZKK5 >+M9<M"FF(V>=%B"C>/-13%*+`031:8#HBU6VF:<5OUKS2SX5]IIB/O[\C[._+^ >+M_PMY/S4AKOU[1DRHK;\!!^/=/MZ>VU=2LV)ZZEDN76I27*"MO^G`XGFS_YYF >+M:3&%SA*4@\+5,UR1@Z@Y,KZV_N:#\R>;CQ\S<MB0@:.HB3"%9>)GM:+LUU.H >+MZ3*>MOZ6PPNGCL!R?PT;8M*7FJ&2+TF_DZ)6]^EF\F)ZP@PK/+S8LA?;=/3H >+MD4-,V#WH"3.O=^>VO%%/F*6L\X]WHZB+J[WIX,+ID+.9C!QFK,[TB4[GWQS: >+MMBD>NY,,$=V'#C73,!._7>>X-?*8#C51+M7VFS_U+SI5-#;.HN;)>P=&^[BY >+M;(@+?_R0.LDW8,8G)N'%J]=OWKQ^F;#68<6J&Z=-J7GR-NV#DZ=,-FW/5.NS >+M8+IL1/#-'6Y;-ZWW=,=?:U>O<@G$"NHB]V]RV>;FMFVS,S6)?/BL&4R7:1\P >+M)\T58TT@5:[+ZH'1E@^/N6YSV>3L9&^WQ,9ZSLQI2T_#_D.]G#=NWK(9ESNL >+M7&H]P]+A]'A\V$KM?>/)\?)Q?QE#BEJ;U<,8::VXN=-ER^:-ZYT<5M@N6C#O >+M;\N)\PYB#>6WW)VHV>HU#LL7S/E[ZN2)?Q^80Q#:N\>,&3UZ1#O>"&DMO;1] >+MPP;<;OL5MHL7S)X^9=*$63X87W'9Q6'UZC6K'>T6S<?#.<M)XZ=Z89/5]AGY >+M%]7?T'Y#W/XQI[R<5CNLLK-=-&_F="N+B>-FP$1W\VGG%2M7X4'-`NNYLV;@ >+MXOEN0ZGV>P\CARF-VSM0F47-E??VVK5RQ;(E"VP7+YP/-C=W'5;!.;QIC9/3 >+M:KOERY9BQ9/-5SKTQ*52;<\)0WK1)[!'CRQZJKR+_<YE"^?,<L='Z[3:T7XE >+M3+FU;'%S=]^Z<=/&C=NG64Z>[#A7#_,M5]M^V]@!1MA:>ICT-*03?9@IG^4R >+M_^\9,/O=MF'*)*N5YNJ9<FW]52ZC>O=@]S`V-NK>G6U`3YL-MK.V6@0SY2LG >+M3E\P0#U3KJ6_8O-P4P/CGCT,#;IVTJ-GRKO-FS.S?:9\P;3I7=4SY5KZ=AO, >+MC+!@MRZ==4W4,^5CS-5^,W6DIGJF7$M_^?J!!MVZZNOIFJQ2SY0;J"?8C$EJ >+MIER`A6PW;L`'OLYIS<(_IM*4A):VMG:G_W2F7*GY*V7_Q0V:Y%QL3VOQ65UN >+M\6\SY@)-<OZFT68#^_4R-C2"_3$(U4VJ5DG<@<7?$%^37+!E6`\#?5U-!C87 >+MFA6,GR:KCRX]VHAB!;P3&]>1IBPLI\6@T@M,"F,2`UZI22'I]//1-"E@?:ZC >+MC7'NHZ.C2=#Y.28%^_A]-C%J4G@UR_V1+4T*Y/PM(WM3:1;>.YV=DX1T?XS+ >+MDOF/:%*`!7U@^8U94Q?=\:"FT*7$UF&F6G_FYB3!];^[VG;AW-";05<#+U^Z >+M$'`*<KA[81%1L*9@9-A,JTF33^VB<JXV8DL/HQZ_<LMZ6$V!8)T_#2]VG[UJ >+M&?Z:.6WR0G^PR#L;YR]<8FN[9,$<:GK9=2^5XRF)30:D@4*/RF[KTF!-`N.K >+M'DN7+)P_9X:E^9@10P?U[S66NOQTQ7Z.]0*;!;C<RF+LT#[&5KOTX>J1LSZI >+M+^^L1677M6FPJ,&DTXX+;198SYYA-6G<J.%F_8R[FL'R.TUGE\V@YK&G6TT< >+M/JB?:8^N_38-PFV0K-75U=%A_:%@[.'E<^?BAEM.&C=Z^,#>1MV[#%@-"M@+ >+MK:9-FSYMJOFH87@$9MQ=W]2^'ZR3M%I3B^KO]@/0];&?,0W[[+A19OU[FQAV >+M[=P'7+)YUYQ)%I/Q0&3XT,$#^N#B8;:P'IO*@4$R?F?GRC1J&MW>R6+2A#'# >+MQXT>.0S,;3"LV][B.G_ZC!G3S"=.&(O5]C"PL((7)J[J@LWBC]0<N[FEXX21 >+M@P8LPX<Z`UX#/P;.GHWMLF6+K.=;6R_O9=RCQ]3!&"HF+9?H$92Y8!>DLW), >+M,0,6#NO7!R;&I7.-NIM8&%!SZ!)-<O)";3!`#4)))>),0FX^U&043*!;=.T] >+MG)I`EQ(L<M("#9Q]PGRXPFQ0__:)\^&]>E,3YS(L83X7"VC"A+ENNS^;:E(3 >+MYE`[<39XY.0_)LL%N'2<]5Q\.+-FX`3K3R]G84W_L9=W),T=27-'TOQ_/FDF >+M5/V(KH1R+!>N4G'A);;C_;"?$0JTD5K3&%?`JM(RGYHZ8PTLB9G\I`9.GZ%" >+M!WN\LNL=N+XW@(7K,*L]-`3O&TNO@ZWL"ID'7<=$BF\](0A#I2ZB_S+5E1I( >+MP;>`@`6%>HA%*&VYN(/I2A:NW`I7S%5<!*O\JKSP'UEML@;!A<FXO;!,)KS! >+M0G4'=4&*^EX:,,)^R**&U"35AFZ@"7_+OQE1)*$@QI;!*IVX$!-'Y202]&!M >+MW:DB_,W7^R]*>E.X"56_<=6+H4Q.D+V^_]Y#_OA>>M3BH0I2YS&TIP&7=T72 >+MR$$F.B2T'[.AUD$X@(9/`UAP`))C`WMH$<1X'CYP6"7<B0\7W,T&:`Z0]]+0 >+MZ#6`A17(^'O[&\`1*4@+'NX]6,1S*I_JODXL%DNN01`:^"^F7?[BOM1RR)0@ >+MK%BO8/3^_L=)D.6/[]V96@44!'2HQ<I-'O]Q!F618TTZ40N*@X`V/L-MI/99 >+MA*AJ$LDN#332AC5%J6IL,GS(-UB;BJEZ&=HUH#L+#[+PT7?OJ=E3EY!K=*7, >+M1C[(N*L&H8]3,*864P]G>)2-#=)@P-K2D_BT)FQ\DT^Q*.-SIXP/5U#&=["^ >+MJ1>]?^5%%A@?KJ",SX!JNIDF;7PXZ=*AZBCC,\B#XZ;JL/'],*6,#U=2QC>) >+MZCVJ$AN?<!IE?+B0,CX'.`5T)38^H1=E?'S:^/;#N6M,9Q%\,!$VJ]WXJ)/= >+MU!=.MC):L]WX<!NZ@28PC1\F:N.;1!D1+L1&5#N--CX^&!DNPM_"SO]%27\* >+M-Z7N-ZYN97_:^/H6_M[#S\E].ZN-3S<&VM.,R['Q)0SMHTOR:>/3/@$'T)QM >+MI@D'(`DP,\;1?K*`-C[-+4(POA%FFF;ROBQ67S.6&38^(7MP#TW*^*8):.-C >+MS192W:>GR=*4LW`BB/]BXQ.N'-B-11D?%J2-KW_A'R=!]G-R?WW:^+``;7Q] >+M8OXX@[*$27WT:./#`K3QZ00B1%5CX[MIAKV(,CY<C4U&",:GN;V<JI>A0V9& >+MFI3QZ1J9:IIBXV,94&8C']K+@/6G\5$VUI5%&9_Q/K8F6[4/C,]D!@,JV..H >+M1=%QA38;&Y^ESRX]6&R?9"OG,,#X<(4.&QN?MBT;EW5C0M/92KM.8'RXKA,; >+M&Y_V-C9#7<=D*]ST*./#E;IL^B]37:G!5NSO31D?+M3#YJ0<MH^MH:YDX<J) >+MU-*^^]B=V=CX)N,_,I\-#&(?6Y^MG`I3E%W8N-J6W86MV*7/8'?%[6""\;%) >+MJ@W=0!/^EKOI$@3&X!&5%]N`*C1@*[Q[D:`':^M.%>'O_9K_5J+8K^^/]XI3 >+MMYV_@/*=0ZE";'[Z;K_WX6ZB#V@P%-8*:-%N7-Z5+;4WZ,PBX0B4ER'5PNTU >+MI(:3#)P):KB2VTC7KDAQYP2\6YHDQ#T7[O#S8^]>,0P?G+P+W/C'1`+7P\VB >+MO.R8)V=/KYD#ZZ;)FT$>1E.<R7L]')8O6KG>\[AG?Z*+MR$]`>+*YLJ%`B[) >+ME8JR71?\3<`J[;M.D"=DB$*R4!,Q=>^JF;/FS,.#%?M])Q;LOF!(S7VT8*2B >+ME==45]E4O?_,[CE383>MODBE5-%0)LHGC'8[+UFZ;*FUS>*ERU>ZGS]^$;#( >+M-5`LEPBYC;4-W!/'+U_VG@.31:*#JLR@-CF-9:`\8OE>S^7+'7R.>#@M6V'O >+MZ+[A$F!=`UME8B&ON;Y!%,R^=OUZT);98W`C/_HJ@MXGR=I4S==A!X31QOXL >+M/>ROO>V.[G-T6+-V0R`&NP:*VN`::D-#Z[/=5\(C@JZ&.,V"M++Q@#S();^F >+M582"*/1?>CUZ&X#-E!A[G-J\UGG354-BPQY>&RP#WE`GS/*]\?!10OKM1_<< >+M9\)A-OE*@SR2VD1\-9SLV9>Z<:VXJ\_I[=L]O*\9$DM=3Y5+^(UU-<*J`W<? >+M?+':('D9%?5X[G0XTN8#DLR@5HF0IX9W[=NO$T:WZGJ>"[AX^<JU($-LI_6. >+M7H^%8@Z7=R(X)JUL[M:VJLR$M[8SIV`\9W^K0M'6*FA1XWOWZ0>C*(0]L`[9 >+M>;D<SA4+;P4F?*SA5U:+JT4Y'^S,1F-8ZWZAI$TBXG$P#/LE#CY8^H*[J^NM >+MB'.O/S355M=6-PI;6XOM*#MIV,OG"W@";A/LQ)!.ZR_LA,6XY7H#!W:AYD?J >+M[7Y>\_'>X9Z67,L52=IJ/\G$8B4-;]S#;6QZQ^,T4/!K.[T\/,_OP4Y-R$W[ >+M&9'4P!FC7T>?VK?G>PF7QU\]9?!@N432CM[-J:K*+VEJIM!7-V]TWG;.RQA> >+MI=.]=P^]OW[!$^*"V-4M/'[+:(NIH^62-C6\W*>QZ&=B$X<R#L.KFS:N7[ON >+MX-&5?0A"6Y?5?Y/1'_C(!VU<?)06BQ99*-K:\17>];FY]1A^QPWCKVSQ6N?D >+M:+]QU]&]3BOMO/8N)Q@4/.T3AH?)N'P!=[J]_72%5*J&B[UJO::U4&CLA8:7 >+M3U_THB;(EJRR7[G<>9<1->E0O\TI/17P/+Y0,'?#IKF_\1*/JJ0)[7!D>&F? >+MS=E#:U<L7[K(9OX\QSU3\>XQG-CH%)$1&2;G"82RA:X^"Q52F8J&MVTO?_F< >+M1I.(:[BK"S'`Y\SN+4ZK[)V\]DVFEC8EB<8YCD\^TVA;KP.V2F5).HV6NI?& >+MQ%!@')TZP7D6#[??=^SH$8^%,/T&Q%)IOOQZAEPHQMWE[FYWR&ZMSV:P0\,+ >+M;H5%A6[4T>D`DVD2,&W,,U]VHC;UT<EM=M[;UKHYS:<L1[HWP&GUFM74G`V\ >+MY`C'F$Y85M+7UFGKGJUKYE/7JB2^VST]/.#*,LS(,'',TT/=X);'O9ZDI\*; >+M#92IHV;+UE5+ERY;9F>WRI[*)`)V`6?BH=](NZU;W=9.8L!K!I'`WK5!\#7] >+MWJV]NZ9/H,BR`03AF$0]UJ^TFCC*8O8J+[@"I7*@9X;LW9IE?%XSV2P5I"\= >+M/O8/LJ20+-1"F*Z?W'_`(+-A(\=8.GL/7^M+]5P+!LJ%G+JJDKJRC7O6#AGS >+M!U=22)B6XJZ=,V;LA+%#1XP>.]%BV7XO/^J,<>S]13(QO[FVLJ;9VXO-=C`; >+MTDZ6$O5N,040$]>OFCC1:O7VE3,F3+*<NFSN80QN1/;^0JF(SVFHKA&<=SM^ >+MXL1)FZ%FT$I@RP2I1-5P@F(,PAJG&F+S'<Y3K:;/G`MW@C;8^PLD<#FXID;X >+M>.V1F[=/'KLP8R1P91-P95:Y4(!.4E@M@L&$ET.7KO19,'/._&,$L7X=1P)K >+M[=94\=,VG[IZ/2SQW/5+4T?^8LH$B8"K!A,L;>KM/L7DZEW+EZ]T.$X0"^U\ >+M?HJYM57E_-)-%P-33.:*(T-"@@;_]8LIA6(^1PUG==:'+$I,KMIWP(]]Y/A) >+MN#-TJGT07]38S/$^?^]MX>!%DM(/8;'C^H]H)TK,LTUJ>#<#P]]$:6Z_T/63 >+MB'_6/^QU.;>D3%0FR'AAKM^_G2C%`DXCAF&B[`)$:>Z[;.G2L[?W1;^HJRRK >+M+*OE"X7YYI3#M`)1<GC-=5@:!^D3QX^P#Q_R=82CE&L9&&C23&F>=WRU@]VR >+MM\\KFP5B26625"12JO'`E/&<QAH*+SGN:+]RU?YUD/@H.NEJT5QCGA=]U\=Y >+M769!,X<[#8_4@&?5:&#*K(*Z!@K==FR!]9PE^^QA5DR#Q22T:*;#\+#0DVYE >+M31QNDXZAJ8Y,+&F'`U,^K6L$P\"-/S;?>O;,65MV6,"KL^?_VG=8Z)U`23,^ >+M1L-1HPR!I=5@H,EJC`UPQ."6(S;VLV9,M;1VVK%^AH6Y_?J):OS;)(R_(6WF >+M\II[6UKVEF.:-?_-DTT4G$%PV;O\[*DIPS&3+2TFSG&B:<YN1N(;0'.X?-[@ >+MN?,'_T;3+$GOFX.(P\XC]KK,G#1Q[*@1P\RFKC-5L^22&;??W[DAX_#XTI%+ >+M5X^4MTE5YK]9DD;#%"S<A"U:O6>MS8S)EC/LG7NTT^2XJ;>2:?@X^TWCE,J" >+M1//?-$FA&3CMEVA8.GOLV+YR)#5QCQERZ*03[V5\$>ZI9<O,7<QGKK;YS9". >+M%+48T.0XU-R[\LWUG4O,'9;-6;5PVG](CD;F,Y9LL)MO\=]#CHL)-!`I)IE/ >+MG,"<@#L,.''5/'BG$.DH<7!T<W1PL(><CG14@8\++&P>A%\XX^F^S';L8(H8 >+M0T`:M]"Q9?N5F#=OWSV_M=]A)>'HLH$Z>IZ%S>.(*]>O7@NZ=VKNR($4+29_ >+M(;_(8N\`#K?(D7/B>6SHO;N/HIXGQ_K8N\2YT3FDA4U8U*6S)_P/7KPV_Z3' >+MX'[`BZH,7",-C*&P&JC`\4S"W<!K-VZ'W'_XY'7RY6>I@$46:Z(>!P:<.<X^ >+M>W>I[\U;VP8;`RUFH*;L4_]$!P,4YY".[L\>WKP=$G([Y,'#Q^'/4I/2`&NQ >+M)N+AQ8"S)X^<#MWH?B?D[KT5@^"JBS`=9=>XGSH?>=N6:MQWQQL)L3=NWGGV >+M+OX)1C^)CTK':(LUX??/GSMSZMBI![M6WHZ.NQ<<-F\0M#,%PQ\]\3UV)AK@ >+MR-']\2ZX7.;@=>O=J["P\">1&6[$N%FAC\^>/G7BZ-&0T\N#X]Y\_A(:\_CO >+M@4"-'])0=IS;R:-L-=QOH]/:-0X+B"G+=T0G1SV)B,+P81:VU\.NGSAR."3( >+M)N1)WL'0UK<)SR.'#:!RI(_XT(_C.AKOX.BTUFG%+&PTK0M=GB;'Q3U]]@EB >+M<;W]3+>'#R]?N[?T2D)&=4"TN"([,=5I8%]X:"@%'S3WY#%_ORBZ":L=U]C- >+MQI@BQXTQ*1_3TC,^?8;N<SUDM^#LP_L;_%^G5PH:.:V5@KQ,UY[&H"$9:V@^ >+M<91]B-9@MW3YJ@4]\"]';<=J!X"&'/69Z[S#ZUUJ?55E=64]ILT*5\J$A.]5 >+M"/G[^_D"$HM3$5?9:?)L<K8*DI0ZY%H;=?Z,V_I/'ZN:!:V2FD]24:N"QM:_ >+M4ZI4KH</[H_$6+?/GS+2TU(_QFV$R\W2Y:LW;'!RH+RZWK4V*^5>X,7"XB8. >+MSVGJT*&8-M4:5&\4I(+SQ,?W"*7BT_.$^&<?G[G`<QMB1X?USNL<[2F3`!6? >+M4V-OU38VMW#&6_T]'JB35E'R4B:5;O,]&GZ3TA`3'16;$K-CN37AZ+!VW=J- >+M?LO^4)#\2H*YMV7J\N53@3YI!<H$:2O1JM2G1GY64GLK*TM+RB>M5.!"VE9X >+M[->C,S7VLVIQO/'Q1]'/[%`/JRF$E>T">NQGM3*_[/73\R<VKI\PE/):=Y#' >+M!&3%.9J5_OQI[*L/V>4?MUC:IMO3;FNULKCV:U;FEZ^%T?-'#Z;<]B:\M\R? >+M`N*AG]69K+B[#QX]B8E_\2Z_[.KG&KH;6JQ6EC9\37D3'Y&2:GM\Q]"!5#KS >+M`*D4<P^[&76FAGY6CE]?/8F,B8V(??;R[;NLFO(ZP"*K[375.1E)K^(2OZ_Q >+MO1ZT=:@)N.T#G,V,G^FW#;#8;:T>9*???Q#^Y6?F^U=OWW_(^E0/6*OME95? >+M/Z6\37CS<Z_[K=O!P2O,>L'0[YXB")F.F^:[K0NU`\=76V?9S+.RVO"@..]] >+M4DI:!H"MW,M*X%&7%Z^++]K?B(P)OOG0>@CEM2'RH$SVX+\F'Z;1>Q:N<K:; >+M-HXPLUB=7)&1FI'9:$],LBFL^)#T[LV+A((8^UM1[[(^WXUX,&L('&9CL#2H >+MWF3,R*%^-'R:_08G2QB0_!R_+*/B:U9N7I,]\9?5^M3*K%?/8O/3EMT)RS\= >+M+WGS-#YLQ"`XUJ9;;9E!HT>-,%,K6+INP^Q1$'RL;#Y65M?6-30VPZU?]2OG >+M'?U9FI:9[W0E/KTV.*FM\NOK#ZN&0'I2'R16J<;^-6PPK<%BI</:<?K073I6 >+M)':;C0=6K'A:4K3;_V5:M9##%U<)OZ5O-#$%E[LFDBM&CS`;!$`LS2"4FD,6 >+MD`M40RA_VWC[L+?U[A/>B1\;:ZIJJAL$(E'91MK?+O/;VH8/&S+@$`;:-S<V >+MUM?55J<N,`-_LUBP;=M2*]K?-M9'GC[AMCXMI:8%CPYJ/LM:Q4I:0T,`5]1J >+M;#:HWT'0T)3_/3>WZK/M8(!9M:W;XCC-DO:6C?4Y'T/^.5]0@@>^:RS-S.38 >+MW6@-)6<Y?#[;M/\87]#0F/7ETY>JE-468P@KJQ4;5RW<,^F7@B_IL4&US2V\ >+MEK&6T\>"NZD5G&SD<(P&C-WC0BGXFODI+?7'SX<;K*SFV<S<^MIQR!\*4EZW >+MX82CQ=+6UA(2#EJ!ZD@]65_=;]P>%Z-.5!.^9Z1^>/<QYV=61.B#C.S0*72R >+MM3'W)U;P7@;#TEEKULQ2M$G5"L1^M<'NX_8"'&<6]@U5==]2D]^]2HA[GA`7 >+M]?J+XRBZL_>YY1;0"@3\!2[;%L#`D%8@V5]5MD:-;T;V]5^N5?[\^/;EL]C( >+ML-#XK#,6],"2V.GV_`?&XX&IS-9CORV,#&E\VZ[RGT4TG$1-]AFVD[>D5WU+ >+M37SQ_-6GK*-3NA/TN*31=EM"$8U?L9N]0JDL_T+CI5ZE/WY0<)R:+[`=0XRW >+M]'R84_*S\.,-1_/NZE2D<OJ&!P4R06N;TL%G][K3&]T/>]*YSPZ<^W2BFJBT >+M&@OCRO$64ZSLK::8]\4;5#(TP_ERW>>H2[LW'MJ]==>6)50RI-@;L-:)=&+\ >+M6RXT:+V;C[_WIL7_/;E0)V#8UK%#^II8FO0=-!Q.LV)$+Q!N'=&K=[\!9F9_ >+M_45E2*0.L&WS^"%33[W.^9Z7?F5EGV'$B''#:;8=89%5&/UPO[?U["X]*;9= >+M!O*:J&E\WQUIB>$/[T>]2/_YVJ;?N$1+FFU'6.17?DS[D/(Q]^XP':/?;.M. >+M`3';#MR3%GHQ\/JM>X\BXK,*CR67TU[0,L+B1\W'5S&/;K]Z,\[+CFG\BVT' >+MN]H"%+/M7U,_1MVZ<^_^[?N/(V/CT\I_5@$6C5A>7I;Q/B$J]&GF],TG3BYB >+M&;:SK7[_K4L`B]FV;V!ZXN7`FREY'YY%Q3Y[D994#=@1RTM*/B:]B@V+R5N_ >+M[.RY\^<G:1JULRW1N=?F)7`[*1HS-6K1@!%F)KWF!N9_?9:`V1K`(Y85%B2^ >+M??$T(CK?S_+4G7OG3U\=J@=L*P:V=2.T>KA2-I<[9-U(RWD6??L0)GVG/2]^ >+M_^;]AUI+PGQ$;O&+A/B8B+#L>Y9G0^+3DB_>#AR@3]WK"G1+Z&J26RE\6]_> >+MTVWF#(#;47^:F;\O_ICVZ6N=)3&B_^PW)6E1C^]GO9T0<"-KUR-QS,-'-UC= >+M*:<#OM719A&T!JGI9)O%8_H"X8[YZW5)665536V#)1"NA=F.O!]O/V3-./(H >+ML?)\@J3D8_2+R80AJ`#"U=-BJ%6TCI@S?_$@N$VNMXF6274O_,-ZTZ1)#PN^ >+MKW6/?%O&;^2*2OF?$ZUUN@$6.%>'15!852\,4$'KE2SC*>04E3%%O-;G7!V& >+MKO5V>/JZMKRTO*R&)Q`46M.,`<2KP2`(>(!`9-E06UM=55GV9J0),.\(BU6K >+MIIC2S&M=?6>7M^WLMZ_*F_"HHSQ9*A0I:15R8%X8]6Z!U-"R+BOSTZ?2Y`D] >+M(=,9-62![:S>?6CBLZ[.>'WAT/[L`CR4GFZ,QY@BL5J%&*@7)X*ZFV&BP+(V >+M+24II?35M+X#B1']+&VL_EK7]Y>&E,3[)RL;FCA->L:]]6"4:OV;>PE";]U" >+M;$26M1\_)+U]DY-W=6XOTZ$C!RR*GFK\AX)7T9+&9FZ3\;AQQC),WM9_<"_1 >+M&2O0`@UIF>_?O(A_G9&7=OM*X/OT*[UH[K7^E(<5/)/"0'?`].D#8$K0^C?W >+M=EX/<$QPEC6E59_?/(^/"@L-#PL-B4Z9VIOFWDVVG[)I!3SN\(5+A@/[6__F >+M7C6^&5E6IQPOR7L=&_GX_IT;5QZE[>FMYMYUMN$Y&(\'N])Q*S>.@_&F]6_N >+MI>&8>RW?C^MEDUCZ^<W3B/"HI+0=O?3;N7?:DK#O-'[26K=)2N7/%.O?W$O2 >+M`_KFX>-Z$_U[K[J:49"7^_K4U+[Z[=P[=EY@MI0GE"BM5J^=M<MZF:O];^[5 >+MHKFW5Q_@WOY]>V$V[-77L)U[Q\YC5R6''%YK[;)^B?.*V?\1]YK.LW7:L=9V >+M:L<XM&,<VC$._5]E'*H-61(9)XF-2XJ+C8FFO#*.'HEJXI&HOA8U$HUK22H7 >+MRA4J6<WGV"=$W-N7=&ZDV6.ML\W<,7\9]V1I4'Z[`N3Q2#2.DR=I%0C%,MS+ >+MPK3HMZ(DVG$U>VQ<9S%]VM]SEOT]L+,&Y;A?"\E"V68[`.+,+*ZPM;F^F2>2 >+M*N#F*E5)JRJ)]ES-'IN=QPX=T-O(8J'QL:T:3"HY*D(JY8B-RP'+1,*X)(QM >+MX@I$$KD2;O!5U0,6:0[<NFK\B"']34?;&>]\$+I>@PF>^T-5DVEBYKP,L`PD >+MB*MJ%555UTH4,IE<H225-7)JQYH#-]N-&C%T8)_AJ\Q6/<9>-1NC6:BZ0)5Y >+MMT?/06N7:L,>XI):TJ/#(^)B/]8H%#*FK`:PF@.=EPX?AL<^0U=,G/3PV<N( >+M1T_':H#C5N4K,R>PNQGV=Z;!V2\?W`F-NDSXA";SE%*&M%J91&CJKW$<-GC0 >+M@+[]%L\9<2\QI_Q;Y,NH81K44/2[(G.<H5'WKNLI>&SLW5O!CXYARY%??2M4 >+M2$EII0PKT-`TL5TS8V`?T\5+34/B2A(;1,GOWL?I:E!CT2QY3:91#X,NM(:X >+MT,#KMV$:61;W2@'N1Q&XH%`H&4HE;C]<BC08Y;AJRHP5QN???&[\T=9:]CTU >+M>QL^?NP!7V0(]33LIK^.TO#HZ,F`R[`>3)QV7'4L_LL^.]-P[JH59A[O/Y<+ >+M!!)1!:\PCZT#2&&&%*$>!ET[`Q*+JV+![PR]/4@/E1?E=^RXFX<&#!FSXD-& >+M345Y944=3HMJV93U"%+;$#+HIJ^[%F.35*2*H90K!"]]P.]"P^[>#8^E_8XM >+M2'WT8-N*+^D5#3R1N.8SSHH4M(:&9`E"W;OH=7*B-"@4<KE2]!9N!Q;'Q8;> >+M?1@;37L-6U!=]"8FLNQG?2-W_8R1(V6MK6H-_+=BA-B==(W7T!I(18M<R4L. >+M#2#B8A_=??@R^]XO#>4_/[ULJ&UHYDSZ>^XD2(K8:L<5X:/0-5D%=Y4F(95* >+MJ9`KY#4?8^,BPZ/36Y(\_U!0D"VIPRG43`>'F>"XZFZ(%R($>'U-4(#;I%)( >+MVZ1R"<X21:U5$71.Q"YMQ/AO;?5-+2TV6[;80$I#X\6Q`I\))O8`Q[EI$C8I >+MGE(F@<4:&FN;1$DGU6/_DZ6U@&_`0^KE7CN7PWB6QDLB^&BH&MZ,DE!KB0I1 >+M"C@--0VBPD?JE.C,R;3:@F]2G-2U.>P[ZH"'LRH:W_:8AV0T'*=$2:*W86E" >+MI)"*!3RN4)P7,:4])7(]D5J#\1QNVSKVV75*16T^C9?>YR)$P7%*]/)M`'$M >+M^G.U5"&7"<J2[EBJ,Y+:98>?5TE;A&+%IJ.G=MUAG[QVDDZ)[C23S2I-.B>* >+MNP0YT;70",Q]$2%KVG.BY8<>-WY[^_`"^^JY0Z=V.[;G1&=.D:?^/2<:??#$ >+MN2LG?!S^>W(B36H\>COD;FA"Z-W@6]1X-#B48CTF09(,)E-#@QZ/LJCQZ*V0 >+MA)]\F5PE+4^^=YT(CHVD.D;")&;.&3%8%](Z)8,BW4D`P`/26_>_BH4\ODB* >+M29?_]DZL(($F729A/<NP=Z]^@R;T@R6Y?I'N`G,`XMW?RQ4V5#=P!&URBG0+ >+MA*H$R@BE3&+!'#VX;"\Q'$EX+`*PFG59UA,!C%DW.`&#ZYIY`K&,9ET1@'$O >+M+9JL#W?HB77,"<?`*SBU;*==@I@S`<#8E.^7"@6E995BN50JDP/MRJA=X_V: >+M:[/PH$%C,C$YZ,;-6P-)!FZH'&@7CGOF6,IX!+<2FA+OWKP=>O]UN5PN94I; >+M`<TDYHS5@&<+!.2DKMVO/HZ\??TA/@C,O#)@7LA*5',H/#\D/3(PX,H=-K'Q >+M\G..LHW1)E$F$"QB^E2XK8,_>A#KTM.,GY_O1(8P&'"L<J!>&%3-IH>E=^_] >+M<^;<57@D6GXTEB]O(]M:I5B!!DF,FPZ/1')'CR4NA!8\K1$\CW\6"KV'!V9` >+MOK]U2$,O^Q\_LQO8]U84#],1L&\"L"_.LZ=.-NHSB=@?DUR;(Q$69KY)7P*7 >+MO9$<V!=4S*('II>]=_FR!^)NNQ^J%5I]'_]PV]N?&#QY$K'R6?)/'D\L*.;D >+M?G5C4EC@WW:L3JB*ZLXNSFO)M:KU%/VZA9YVP6.^22_>EQ?_+"FNXO!XE6[T >+MD!+H%Z`SH0<3:/Z5\R(W`O_^<R4@X/I]FG_=>&^N!RZ9E))87,,1B,J3V_@" >+MN5H%\"^H@,746A-4<KE,IA3$K@4SN7WG<D#@O3LT^[GQRK['W+M3F%==VSR[ >+MCZ:F5"A4JY`!`5/G$!YE56(=I+Q%IN0\O^1+!-^]^L^5B/0+OW3\S$N*K*FL >+M:6CLWF]P=[CVJFX&4#"@)X^$H6T"D+!<)I>5O[[_(/A&2&)3PKH_5&2GBZMJ >+M&QO[6UGU!Q9W^TW"!#%Y)*E!$`D4"<O;)&TR<659J4!8>HLF8;<?M1C_65)= >+MU]0TPL9F!(QLW7Z3,&$)<.A,BH0Q!7(Q!U?6"1)VT23,WOFC$O`U>&P]T=YQ >+M(@QLW7Z3L!K>C!*0L`"3,"AHK"FO$>1>59/PWIUO*[,_M^$H)+%RWF&%@X#* >+M[3<)TW!,P@F"V.MO^4C>)N)QFOFBK[=&M9/P*N\WY1C?V"R9Y;9WEE)>F>7V >+MFX0I.";AR%A?XEA(<EF;7";E%2:<&]U.PC-=PTO;FO@B^?P=/DX!;CN/>_]! >+MPAHT"8<>!A(^=OD6IL5;YQ>VD_"LK4&UGV.O^KH=V[=E]^8E_Q$)#W;QWG=T >+ME[-UQ\"T8V#:,3#]7V5@.IXD=`E%_PO9\&Q']MV-$-$5SEP-N(5I/;?\?0R; >+M/6,&T850\"Q(`AZ[N("]35*QF>&,D#'<\:]:C[,HI3-)Z!%R!$*:U+,/G9#J >+M@_KV?@;(=$+*E7"'-0M1FEB$*AIUH:I)J-9%"OXDP&K2]7!S,2Q[@.N)]:@S >+M4E;VI.YXHRJQPBQ8W017K@<EWXW@02TDY>G@7&8L=BT5W*:O&,!:#_>H/X)G >+MOW20I#N3("X@14,M62L_/,@F`A^'<L`$N,_].MSVI(.X/;%$MC3Y>4+"VC[= >+MM*;`<P:*`8;O0<0-GO;003P0:7UXXNB1I3T[,\=RL0Z\&R8R1*I%E``?!/ZV >+M76*SH$<G!E&&Z^5\W$Q0$3*/DE#T9`),6JYMU'^PS4+&0MG``;TT*(G!AI2$ >+MLB<3"W#Y-D;:K,E;W=RNMNIKXO!'/12B]4M"$_'Y2_KHD=.NW[P=T?;-%#K2 >+M4-W?[3H$3Z8RUW[._%H@0[=[:?PAH(V[&TOH(!D7QC20(R\V9/XA`.V>VYT) >+MO9P_0)?\HT83R?AS#75(6&W"U90ZNW?IAU,(>+&YE*HDX*74KP=T@7.EU`B@ >+MGU.A[OIIH^NI95$SL%7(\\?WI.[=9QKN@F<8*#&F>A^4'\GW#?2N@HX,&6>B >+MC4^T7+.'#3PP(>''@'4PJ'R+DL8!CKN[?S>MKMX1L-IG6_Z=&?T-M<&JY"R# >+M!=6XRP099ZYLGC-X4%\,).&JK:*[#AA;BP8\)L+0[&+4N_^`_KT-.V%[("J8 >+M^B/R4?7WVQOG#!HXH)]IS^[ZN"<(5G\K2\LI3+!AI0;<UJQ@,#58)$NAP01? >+MXC`Z&?4;T+\72&MJ:#`9)&6PVOH,?>5DRMD&!^6!L^6%N5/.YLIG856MKOSJ >+MM%?GSEI;DX0^H1!,H[S-(`B\K7H'PQ6A7M!-JFW@;:ZTMX&0)O6P!_:V3^KG >+M&1@@@[UMG=K;0`A[VW-P%#-J++H-O$TX3>UM4(_U.H"WX7IB&WA;K2GM;5") >+M%>:!'>#*;:"DT(3V-@%TQB3P-B%XFYGF-CC-,5JTMQDQ8>%717,CV2@_/71Y >+M/'B;V42PX;N:M+>98HD\6?J[Q$27`=VU9\"#%0JS'JD@XD,;,0]$Q-'_G#_G >+M8*K/G,0';S/3I+QM!>UM(&#ML&KY,F,]!D$9B1`W$U2$+:&]S90),&FUCLG@ >+MX<OM&':DF:(O[8_#C6A/,:6\3;C<1$=SAI>/3XBXJQ:+]C8S[5\2V-N$JP9T >+M)N?<??`P7OJCCR;M$51_M^L0/)W-=,GY]KU8CA[V9?TA@+U-:$IY&U\FE<&4 >+MFV*E$?,/`6CW(B/*VWZ:=2;_J,'>AFMT*6_;V8<ZNV'TTSBTMU&5E+<EFW6C >+MO(UUG7XPA_8VNI[RMFSPMI^3334I;S,Z!-Y&B3'5^Z"][8C9@3KHR#"+/CK@ >+M;5K&RX7@;<*78!VTMU'2V-OX?H.[:QL<B/\)WO;S\;S!1M2J,]A#E\'*K8+L >+M*\';%PP?.E"SW=L`A[V-!<_%,+2ZF?0?;#:XOY$>[6U=Q_Q$=86A[HN'FID- >+MZF-JU+7SOWD;2^UM+$U24\%2>YN>R2"SP7U!6HO%^A=O,R&)@43K.-^=F];, >+MGC5H`.57^WJ3\,1-U_G;V"1;OFW9.#AJQ=A]<,^M:BQ;FZT<2_D6&P3A>9KY >+M;"VVQ'L\.9;-UH/=8Z%.;.5(J,29.YM2R**>>>G$5FU4/YA#@I@N6[&_%W0' >+M$S%H.;P+!W87M@Q+$&/AN11O/:J:25=CY</87=ER7#T6BRG==+%F)M+`M2R2 >+M<EQ<J^C&'`N/OJQ@8G5,Q&++<)PAC-DLMFH_6P?OO1<\0K.(B;L9:B6XT<1\ >+MMM]N'])'_K?!D%7X<!3==)U!R)Q!G7P6FPM"VPYM<%JS9DP7'8T^\&02W@^# >+M;<A6F:EE>"#C:S=[ULQA>EH,XWV4'B8!>FP'J67X(--_V-`A0W1Q@[VPB'R_ >+M6L:@DUI&H<<`K-1+0[>KP1`SAAG93:'/H&2Z::AEE'H,+,+=/T17@]E[HKGY >+M0E\M)M9,/QOTAXPFF[]_:!=-LM^B)4M7'73K3+G4+QEXQ(E2)%C5ES'&Q67K >+M]D/LI?J,?Y$Y3+"1[@G5+CQ:41+C^I!]Y+U,J?NR!7)I&ZPAR&FLKZGRQ?FR >+MZFV.7HXJ$H8:?@%D@,`OX!3QXMV+J+O$J0`_;-HZ08IGM&`&]A;56RS8<NSF >+MC:O'D("(O_S/Z1!"H#H&([KR]_`1,\2*H*J#_RK/OG'@JC_B$4_.GCYV@RA7 >+M^8/\4Q?X@/,$51X`^3WXMT@A$315E^1_34W<#4B_H+U7_!"'"#G"]KU(E"JA >+M1=+G'O"AD!44T@>[J1#6!DQ-?!T?^?+-+H`>N+KG\@%5(Q&X=\_.$T21X@!] >+M,$\I"-=;I51\0YG*-U6W?UX/?^8%B#W_^)S?JZHECF]WV^I+%,CWPD!=(9>( >+MN`U5/[]G9I;OQTC.#EEN;G9F6L+]V[<#O9R6K?&^`K?*[SRSX[2WLHK8NW[] >+MFAU$OM0;L!*Q$`^H2PNRTM/+`-OD+OJ*/BN?%@07^6\._U;_]?Y&_UOP_/GV >+M8]N.;E>4$%OMEMNN(W+$.P#-YWXK+OB>].US2DKI/D!OJTU.>O?TYJW;^\\V >+M\K@OFYI^'@.M+5O]-A_<*B\@5LV;.WLID=FZ%="-]8]3$]_=_)+Z_GW)'NBD >+M+7X,/^Z&*_D7W;@B4<LH3B.O9-M%+-FR8<_Z/1NDN82UY12+F42:8`/`*RL. >+M1H6&^Z2]?_6J>#=TV,;RTM+"[?Y7=CYNE4A%`V&A1N4M'\`[>:_V=!)G$I-' >+MC1HYGDCFK@%\4>&R&^>O+4YZ%1]?M`LN.VS9GY^?X[ZGP*E((I-+AI1^^\Q] >+MZ@3PE6XK7%<*/Q(C!PSL/YA(;%P)\-R<L6<.G![]^EET=*$WP->&[O^2L7UG >+M@!VO52%(O]]_F&WM:SN`+]V$/]PDHD_/GD8FQ,NZI3").$VTW'^'_](IDRTV >+M%7@!W"DM9'^RM_\]IV)Y4^['O-RL0F$,M??YZVS6SF]Z31CH,77UB=BJ!3"* >+M"?8G_57N^$L6/#8TWP,4K'9TW+)___05VQ\)OJ?6Y7SY(BB_3!W]+,=Y#K/J >+MX@F6EI,6DX@HG07-'QOL[^;NYA\\.C@D;P>L<["XY*9K?F53;DZAB/=AVW4` >+M3ELQ>\6TZEA"[V+H13TBO'@J`"-&!?N[^@>/"KIUZYL[)#Z&,"PIV7\JK;B1 >+MVU*2?'Q?JQ%"A(7MW[8654_[A,0\C;K=.[)X$@3"IL*LT<'^P7]]S,W)SG*] >+M@".M@%=3S"S.RBO*9V^XGI#\[.J&PSF?J#7ZERY=/*ZZ++^PO*H\/[>H=!R, >+M,E>O<1@6/,Q^S>HUY!JQ4\!>Y/LM]?$)3]*3].![G@R_LFW9@F7;KMSP]E@# >+MG#UBI,9(_,4<*1\Q<N0(F`=#GAX>J\T</3P\809ENR]"&;'1L3%D3`O\>5]4 >+MU]C44/$U.OJK!!'=<40FO64>7EX>'MZD-\-3M1>9(@/B,'&T@[<Z>*N#MSIX >+MZW\^WOJB2J9X*^H^>9^\IWP"J]U)L+_*9&V2##!EMUUZNU0;@;*>?B0_"IY^ >+M?'>1*^`VU5Y\]_$I>'FVHHH2Y'J'W`F^?>OF]6NPC-0__[B!E[\J_OGC%4+_ >+MM%24%=?^@]`KH)36&O@`I61+TO]`W@#DQ7\N4,@7Q:\+7R`4T%A<7%@=($$O >+M`%GX"#Z_D:K'<..E2BYIY7/JJQ\#[EG1RX)G2!50^Z,@KP+CG@&N-`X^%*X5 >+MEDU2A0*)E9;\+,R'!9>+JT(!&EOP/"\6*<]5?,O-+CXK1K'TX56V?@3(78`4 >+MHT+TI?%IY;,OI2$`B?SV-#L*R<\4?\G\].-,*XJ"&0*50BH1"EL_`('=1,7% >+M/POS4I_%Q4?XNZYU]0\#`@O_$OTE#+6=S$]+2_EV4HC"\/A,K%+(VEH%@M9D >+MH)^KJ`C]0"EE<96!.]]4WZI\L?-R'-#/_?0G:0^0Y%CV^_?O,H_QT0/<`:+F >+M5CZ_1B+D\T5P9;OI8FMV]M>/D;%/S]YN4RASY'+!C3.`#?[P*.D.:CV:\>KE >+MB[2C7'0'G$"ES.;4-62(^%RN$%Z/HCH73H:WA/F'E3[:KT2JM@D*F;)U'_1Y >+M2]";>V]N(('_AZ=QL>_9''0#O%\NBBLO*HL0<#D<X1O`GVPE6Z6"P"M11U_" >+MV%II!E>KE$\A;+5<?G[K62#B^KV)B'CRRJ\!708-4M$_W])S+_`X34V"EUA# >+MZ^G[?'[+I7-EKO5PT69$*Z]9F><&\/,QUV("4-/!%Z&A#^(/UJ'S`&\5N:>] >+M3'-O:6YLY,,UI4:_C/N<AL`S3]:'X_9_VCEXE+WXQ'J`GWQRZ<EQU'`@-B3D >+M3LR!:NI]'M28(TQUD_*!&Q?)B_)_+EQ3QV[)K]C]``YLR@R]&2KS/V,W6X[D >+M;3SVK]B=1`ERIUT-O'#NY)&#>[VWNS@[.4SY(XH?DF6D?^0=@BBNC9@0O>_1 >+MB,O_8,2AO3NW;]W@9$\A_&\=N,I&O/WBU)3DEGVE=!ROS80/'<=#H%'P/AZ1 >+M2MX&5\%J*TN#Z#B^/Q#'\5V\I/>)#3[J."ZJAP^-O`/(RU0<S_^>D_4I[6/R >+M]Y)`.H[OACCNV?CF]<L:SU]Q_'W%36AF`%*I\E&N,JWJR<_(CP4!=!S?B>-X >+MG6OU\X3X,M<?=!R'2XO8)UL::FO+KX,;G%+DYWW/S4J,#(L(W;MNV=I]]\$- >+MO*DX7K&Y."8FNF!S'AW'Y3+<\9A@ZJNJRJZ!.1^1?D,YRM<%X47GMSVO]JB( >+M=SGSA([C;D=W*$K6Y3\)#\M9ER/>#FBII$+4POU17U-967H9T`=;/F6DOPT- >+M"S]R32Q7Y,MDO$ML0+O@..XB+W#\$OK@?H8#'<=)D>@=OY[SLK:RK*PD`#II >+M=R`CD.L2DA_BI50IQ*/D4IG((YB*XWNI.+X\-3CX]H?E=!PG>6VW6RJ:KU>5 >+M%Y/%JK-@BY[<EI:FP^=##\2KD$HZ4"&32J/VPZ70-=Z.$,<7)UXGK\O>+/I` >+M!7(QI]FWY2=G?WE)$5E$O2^FT?ML4U.=W[&"=;58@7Q(FY`KRUOW1R2?_^+R >+MY4O/K!.;5D`#ZD7KN?DMZXH+"PH*CP!\\ZNS=56'_>^O."I%RG<+^@];VN:\ >+M@HKD6Y9N6L)-FA47$'`^>M;+6BJ2NXM.\+[QCKMNVW:]P`_@SE4OSI8=O_9V >+M78U*_GE[F8`GD'];]T<DGQ9Y<.G!\&EQ5?-AN4B>*H='\F3(,3<?TCZ&$V?' >+MV?-_K]H9)Q=Y\@4\KEP4!O;4,A-'\9EUSZ8<M6$O])M"1W'%&L3+)K/;>,CQ >+M:U;>+CJ,/_3D8U;C">72!H_[@)QJ-WO%U.K824MNA`8MF11>;`6G_/MJQ,O" >+MN$]?OW[S^AW&V=>:A&VM4F'=%385QLV7_6UK7O5TS?WH^*B0U4_:P_@WO&.T >+M^C.$\1TXC$LXG,I"9F%.[H_\DUN>Y.[.#=]R\EN:E`KCBQ>/J2G-_P%A_%MA >+MZ1@(XTY.SBO1JHU.3"?Q6@CB7U,>'O\5Q&_ML%M@M^-6>Q`?/D)C!/YBCI`/ >+M'S%B.-R;#4'\@-V!/X)X:E1D%#.*&QD5E5A4V]#84/XE(N(3_S\)X1WTU4%? >+M'?3505__D])7QPBD8P3RO_L(I%#UE?*!ZC*RC"Q55E(A7*F0P]N3Q*TB`;\( >+M#DRGDUXGE0XXPOTWY!OY_3?/\N`.S;QG;X!>=#(5-?Q"L.9.\-:=$4,'#^S7 >+MV[2G87<=RDYP(A")!-\0UHJ^"5`D6&7V7?C`-&(FOX!&C@'D$(PT,3(TH)#A >+MS2_KPI$@"\GE4I3%1^&`#)H`'[#G3%X^M.T+3$!^`?E'=<^K'R%!)I)*)2B3 >+MC^#,2:^/@P\M_QWDT_&I8?T@\^4%?)0&L'M53\ON(4$ZPL>+TGCHGOJ0>-D@ >+MG@2V_P/]4.;4OBE-J90E`>1V<?3/VXB?@H1"`4KAHMMPM9R;B>65K]`/Q@]A >+M?OJKEXG/C[DZN1Z+`:L/R@_/OXYX[Q"/UX+>M:#K%`"XH^DI`NVI12]*@WS> >+M-\YL?.]S_168[,6O#[Y>0MQ7B-/<C%XUHTMP3VUY0WU#.6Z?LB45L!'BG)SL >+M]+@7KR^$R)6H&"%Y"(3?EK/I(6GG$#<!-3;4HX0F=`ZP\1FI&?$4-HGB@70R >+M790:&%T8@_E3(1D#-;YP<L3'W@6].XXX<:B6K)6AV`9T'.#^H2&AD$LI.92O >+M!,.;$951MUZ>?(.02C80:MZ`6;7XO;B<X(>:(E%5926*K$5^@%[,WL=>##+- >+M8.>\D$2$E!%7BEP;$81GJ&BD['Q/[/F8O:CA,2HO*T./J]%>``]T7NE,[:`Y >+M'JS\4EDB4D9=>;W.7HI0\H3^PY?)YD!T%7N&GPSS1+4/4`E9(D,/*I`G>,D$ >+MV1P;2YLY$\@)"I^F&%!P'I4E*I_%_(2]?UU9A9N`Z+UONW?DWE94=1?E1&>C >+MNR4(DAN5APUIHYJ"OV0>0U!C!%;`/WWJ],W$]^L/L/&Q.TC@M-.'[GS#]Z8S >+M*@^N#W\;5A%<A)S![@9YV$PF)[?9>`R0H89'.,:TN50\Q7W>!LM\^@+3MJR^ >+MON_::E1R*SP]*_7)S1_($>A)W,?#9I*-1V\^0@WW?\?G\P^5@$7*A^>I^+S\ >+MRI[`Y:@T]G-116%&;"%:3L7GYE(C#QN/'GGU]75U(3@^_\C.S4QCIN5\^)Q[ >+MR?-%I5/E"\]+7YX7XOAL<^GRY46HC2M4((60VX860GP^=<JOJX?^OE/,4^(S >+M$)]?Q`2Q?\7GT'UK[=;N#VV/SW/F,N<J9L^9,Y><*YLS>\[<.>TA>H[^K#]" >+M=-R=X#O,.]S@.W?BOE76UE47I00'/\O]3T)T!SUUT%,'/770T_^@]-0Q@N@8 >+M0?SO/8(@]-`@0@6/Z:K@5C18Q[L+TB:Z4B^R^;_[6RGV)EB_MKLA9;$.P?RU >+M;8!4S7]L=L=V2S#^V%2*X':Y]FU#I&+\ZZ;&?WL3@^$Q0?5V)T+!Z'0#7M)S >+MY;=&K(R$)<:-J!M+^7![)8FZ(!5(Z"&2(2.Z3)EA/H8Y1O[7A!5-N'_:FA?U >+M[4)H=(*[-#O!C=RZ2&)*$AH3IYJ/&:DQ4CYAP0,I/N=BZ8-IHWHQ2#UC+%AK >+MK$<24RPMG83.EI93\`^K_BR"Z-S-H)L!:5`#?WJ:39H]_^^Q?0RZZ6D3&CIZ >+M^EV[&QKU-":-R9YBG*ATU=/!N]+7U5=I$Z:$C&3`@X_:&B13R2`QA1WI.'T= >+MI^__W]-WF#B%VJK8^P\<V'\8]ZDJ^K'>8U4T<*$IH4>P8"E@;;C%20O)HQY7 >+MJ9`VDJNJ'D=`YF,Z36>:XMK`:?#2`%]<@;^TD/*?PF:]9F7A/R!!,'68BCB2 >+M"1('\-F1**7"YIIB=``$_1L:]1J5]9`TZN,="?=!HBCF-U86H7U0SZZKUZA7 >+MP1=9IV)3ZB1Z$BRX%\FQ'*>VM`#G?UI(Q*ZIJ:7_U=9HU%"B/(+;_"K<A>L2 >+M_JJ9^\QS$FZ`T)-;7U-56O@],Y7K`1D!NTJK2EQ=57%AJ&XGTYZX=1B4%.1" >+M<`F7H"3NN'^Z`FAST9?/&:E)KQ.BBS91H`KM"F')<N/ILZ>-TN^*\ZNF3DUU >+M=2L0"KL2Z!48>`GG#A?.GSUSZN26XT>OP;-U/JH5R5K)@G>[3+;8(61EJ=L5 >+M$=]UOE?F^)D@=*U1D%[$YV+ZKZNMJBA+C0\Z?/PA5HH[DZ]LZ3UG^0R$1H\; >+MH$655$`)0E>;^8W/[\.[BF[#JX@>?7.9>$J-D<O+6?-PJ^4#&32"VD97F_@\ >+M'K>%TU1?5U-97EI<]"/_U*-V1`EK!B#ZD]2VA-I&5QJX#!P3J7=Z5V!$(4:T >+MMTM>TG.\U6B$!@XQ9JGW@DL0"JSCM+0T-S?"N[@KRG!V4I!W\A>F_$27*>,0 >+M&C)(4X<J$4$)0A=*J^?-F\N:2\XA9TMF97\]^OO@B^?K]1O0MZ<6BZ!*A%"" >+MD/N]T-G'0L\SSPO.G3T=<GCF]6N;*(@.$LCKBH_T9K%,3Q)T02LN0&CWLY=V >+M<3(-F4`JYC<_61H>OB,4JCLAH;REHJ2DHD5.T-MB>0M"NY[Z;/,]Q#K$."@^ >+ML-4[C))-T4U1)2<QDJ3)*02]*4WN?-+'<YM(5R01;-WJ>K?S!8+3E2-]@8@+ >+M^)<>1W;@Z!W/S5O(+9+-6_`'OL@MTLV>=XX>""`,"3)`GY`==(?$E_24>'AZ >+MP"\/*GV6>;H?W.[I07K`1ILGG1U3FS*<)?^J$:IKNOMZ>$%23'I**26>^+<4 >+M%_EVW^O)\&1XPW^EAY<W$TN0>YF_2W#F<++#ZSN\OL/K__?S>L[E<^?/G[L$ >+M7O_YBMX5U6?P^LB[>G>QU\<F:B>J8N$!KT]7WJ=V2E6\OY(!+AB9HI.BJ(E/ >+M`8]^"3[_$EPUOEZD)U+6PZ21ZNX3G2<*WKDG(/$<:Y2JY&TB]!S$'O,%>@(E >+M_S&(A03K!>/]/`4)I4PB1$_!O1[Q]'DJ&*6I@A'.:V)@Y*2$MW^@&*JZ1;^% >+MJN8%*V0EQ>&*\.(2F:(^]QFXZ@.Q$%Y_TE17+7Y`"3<SFP5-S<WX7V/R"6\O >+MW\/@X[<5E=_#]RGVA7^O5#S)NPW`JU6E)7ATF_\]I^H*-/-10R/9R&EHQ)^& >+MNCN^V*O/[SF`T.VV3FUUK;<1>O$P]$AHZ/W[=ZGQ_HV@?=>NP.NGR*LJOWRM >+M?,'W*-^H8.P/MW<=1+?J=.HJJY]Z(_28W_:]2B(644VLK\M-3GI\[1E"]\!T >+M%7XW@D\CQ+YP>B>ZB6VQ:M<EA!X))(*/<;&QT5&13\(?/TXHN;C_!@;<A6?[ >+MA.Y7P6E/N2+(IMLD&R]0\J2D6=PJ%/"H/6`O+`=`"`#X[H$`..F*@@#0NO$\ >+M0@_Y8E+<W"H2"'@M'.SI-96_`0+^P8N!;(1\SQSW4D-VXA:&<D6DJ%DH@%T` >+M9U575I0%84@P0(0I>V[C=IRYM',ON@9)OB3)G<HI:_T/^/H>\`<["U^CMT85 >+M#G:VU4'/@05+A&K#O2OP?-N:A-0T[31Y:L(:R@"V7M&YHHAWN0)V]``L#4ZJ >+M\FQ>O5:]JJ&>4:_,/PMBJW;J[%1D3-L)8B$08E2PIDX+[B=LNP=Q3DC5D >+M;1L=(@X"9,5*O95XU[=`6B%K$_$YB&J!;V55525925:1E:JJ2F8ECF=8>F6K >+M7BL..E>14BF#E2::T%6P+M]R1CE9QBA7E963Y?*R\C(0YMEQFK\K,CF9BN_- >+MG.QG,)LJ/,EM:FRHKZDL_<D]"6WR+2DI)HL%)<7%^%_1R^->G@=.@F':<KZA >+MS"!.4";ZQF$G>`%T;]'W;[G97S,S4HOV4/LL8A:I"HL81<*"FWYW0VX%'<"G >+M:%%]I_JZZCOM$0A>7!/P+Q'(3;7DC=8;P<M@O\^1V'Z>[3V&YN?HY%1^#?/[ >+M'8&:&JC8D!:/:B`"S:9)^-#CR),(^=VZMHLJJ8`2=01ZH(Y`03@"93Z%Z#"= >+MCD#N]\'2+KM1VQ74-KK:R./C"-0,>ZE21R",F$)'(/>[@+CD2FU+J&UTI9%+ >+M<IMQS((05%E>4EQ40$$FTB'(]\Y=W/A]5R_MI$HD4()=KI[#X&#(OX6@,70( >+M2MC_["96'+;;CRH10PD.0675\\AY[2$HZ^M1S/DCU2$H:-_E?P("]FPFJ!(( >+M04$0@A[2(8AQMO4N6QV!S-01*/[PCAV'7P^A"]01*/[5\C@92R9L:Q5%+7U" >+M!:"!?P:@0?3V?RL`]4W235*]2V0D2M\E]:4WI>_^/0#U:NS:*(U'O2[@7WJ- >+M\@-'0[RVZ&^1>87@D-/#L`<..3W^AP@Y'530004=5-!!!1W99T?V^?]1]EEW >+MQ/?@05\JY-SJI==+!0\`JIJ;])I8L!Z@-MS7@`G_1B_K:5.UI\JG6?>"&Y)5 >+MS:!"V@KSN45@:$5P:@ZF_F#^D!7^@`_CA_(C%4(:05*>")+Y(%D`DCN^X3&^ >+M+.][WC=XM%#54*-7@^MSH#X'K&-[-IFMRLKNE*V">WY5-=5ZU2Q8,D0;OK10 >+MZ_;,SY\S/U-?S,]D)B7%JRDI"SLTH63"H;"RDBIN)5P5?L'E:?*4W)>4SC1F >+MFB`U+0W_2]G76Y/530\LKJKDJ<L$HH28X/*T)+O@&X`>%/W4_*DLN@\-W9[\ >+M@?S`2?Z`/\GOIM-#;FV$*@LZ%=1]G_,[DERD(LGI7Y%DF6IJF%:8X.'ZSN.' >+M8R;JP])&Y4DZ296)VSLC=+T!1Q*P@T:*?5/C719!)"FCN=1PX/#^"/4TZ:I! >+ME51`"4Q2"!I?P+3&'74DF6`*)%],1Q+F0#`@`Y+:KJ"VJ4C"AVF-7Y&D`!`_ >+MZ4C"[`^(KB2U+:&VVZ<UU(&$GM9XA%`1'4@,3/KT1,C`0(])E4B@A`HD)`>[ >+M<6-]>R3YD0^1I(".)/[:?;%0=P,-#:I$!"4(!93!O(;&7(9Z7N,()N]\=229 >+MI=FE6Q==IB5!E4`DF?7'O`;C7.L#?QQ)-N)=?%='DL/&3&;/XSET0?NT!D02 >+M;9DX5CVED?MG&,FEM_\((]J'Q+Y;O2G)G&C=:%54!"-"&A6=0V]*H_X]B&05 >+M=BV4WD?9%_`OO4(((MXXB$B](8C$1!E$R6,"\%^]J/\A(DF'AW=X>(>'_Z_L >+MX1VY8D>N^/]^KD@H!]:4,<OT"-5!N%7T(,$DE"]KJ#?=ZR)M0L5&^DAU#I:% >+MJL'UZD()%$K^M;`;8A+Z_^EO%2S`WKYI@!0O"`)U1B2A?*""^Q]B<&T/I'2C >+M"_%^NB*Y"EY]8HB47'5A&^J&%#WI,M5_9]E_#;O]OU+&4)?)?I=!<W&)]#\K >+M43"85(DI`]:&(YGZ2$[...=:KU\O<STW@^P&A=WTD8PUP/QO:SSDEEC/PQ_X >+M(N>)K?\V'\`R&;-@P?PN\]L6C#&A?G::+R.UNAAT,V`:R+L9=(._;=T,NFB1 >+M),O`P$#.@K]Z!AWGL.,<_L]_#OV0:AO!(G!<"(35D*]![-IU0N.$XMB)$[A! >+M8L+_VL!I=1733'%"JH@Y?A'3I>+V$UC04>0+=[RV\;YP]I_`W27,???NR=ED >+MDLG-9\(JS/*PA\="<$B2QX27P6V?*GB6L4W>\K$^%<MW0K+WBNSCV7C7FE@D >+M,006JY'?JXV%)W*5^Y6PI*",DU577;T'9-_)`PX=DFA(J'>F".,>Y)_&\2;L >+M=<V),"PNW*N`6\7K\V[^<WLOY"WOI(VYW[A<`5?.I=;2?YCX\2Q"D<UWKD"& >+MM$>ND$L$-85),5]V4]+*QHK$J\-T.PVZ!&M)2Q[FW;H=7IY_!E9LW"T5-C$9 >+M3(:T9M<>Z!!-+([D7S+H*_)Z(/XDJL(Q@GLF`(NW[)0TYC."_/T9%XIWYE+] >+MPD("#.!?^W4Y7@M)'R6XB2//X5USO$1EJ8P@%W+-C0JO'+IC-`"@$I?\NAB/ >+M`:_<Q)7'KP#`4_#M-2.(=-&Z5^>90_>.!NX=A)3UD(D/9(!XVMO&MZ>"07P' >+M+RV&0:[6W&9:ON,KW3TX^W@'ZT$*0;X_"?(OFJZ<C+@$\MLYKQ\R]A_=U]U] >+MCFLFW4%J>;'DUU5X321);DQ]\N3>BPA\S!RWIL:"UQ\+TIZ8GQB77I2=VK3K >+M%Z;MUU5X)N)_>9E04AN'4/2;MQ&14?#^&E?N-I=-+JY;U]D-7^>7G?&N<>=O >+MY*_+\=@.,K^^2"AJ>0OF$U&:%W4O(@Q.FUOQAX2'GB'WWK]H\&K'2:3M%^6Q >+M;"[Z@&(?P>W6;?$/HE%,6"S`<`]F?7A^-3(RML[S-ZS]XCS>6RI*PCE``JYK >+M>W[_'8I]'(./4HA[,C7Y9>RCB+":';_Z4);$2%+`A7H,^QCR#CV/*L0G7!KS >+M',4')P`*]^>K%_&1X0_O5;G#B7JO1$C&87"JX>H](M(2'CT.?5;):1$(.(V5 >+MSQ\\>OPB80@HWHJ%FW''-C;4U]765%6Z!79%J//9G'>,=YI$70`B9D5%A!^> >+MX'PF./SQI2-N2TY'/(FDEOE4[HP(8X:1&V7.&S8X.Z\GUY/K5!?ACN+]I^*C >+M&%$,G";7X(P9$58/PR+CDC.^E926%N9FIR>^C(]\_`B.PV/G3F_\SX?T(7>J >+M?':2._D^>`N/W.C,W)-*FE5[D0F2>GKL\,+_&%ZJ'5Y,+W*[:C?<-N[KB7-O >+M;W2H@U<Z>*6#5SIXY?]Q7M&ZBYT^%4@E'4CE>;)&LB(I.9DBE5=X")X2F1() >+MI/+C[0<@E<^%A<`2B:!#U58I>YT,I!(?%!2:)#[WI/3FD[M`*M^_O85E0N0% >+MA2*8OU/!4QE2:86T&8MCGK@EY:4(@S6"52$@_*/J:PH(9[459H#P:TJX3BJ1 >+M)(!P$$I[_QY.9C"0RH\\SOM/".562Q)S0?@%"$N:TMY]>`YV$X0JOG]7R/CY >+M>8I@X)3LRLKW"/V0?_D`!_>,&NBW\LKR2I[1TI4E7]/]MFQR3[L-))';]"D] >+M6]3T#C@E5J64[-O[?[!WI5%17=GZWEO%+(@D:6,28WQ9T<R=:#K=FD'R.MV= >+MMY+NSGKIV)W5Z3;:2DD013`:9W%@%@U**2(@!D%DD$)FBF*>0:9BK$(@18%5 >+M4!04-=^Z][RS;PGZJ_^\7JO7\]4?J'O./G?8^[O?/O><?<[F';#,B?)`'\X@ >+MKI)*]YX]&W4F`-8'F>X.S<5)Z<IBX)1<QJH^,-#:>J!L*G>44POFE`0TJ2C- >+MO(10C-`_&-[A]H%4U`$WJLFBC:,'!HJ_RVG19OUD5PR?:S#>=PE_$>\//R&` >+M!GUI:*:L!!ID6.?D!_J_*SXLU6?\9%<.AFH".SDA`XXX_@V(#X\9)"5E()YF >+MT?0?^"[C4%F4]L:873T@SDQ,C(#X,4Z\SUQ=4L;=3JKI?L^!FT59)RMO)(_: >+M]0.W8QD?'XG9C]#>T",[@%$J[B:GI<5<30)&238:)SL&)H=J+C>>&]7/3IM$ >+M7!.S0C$B#$<H-$H0"(32D)==(TK!'^^)5X674X!0DK17$^(3DJZ</Q666Z_5 >+MJ(RY,&B08!P;&\;=9_^_./UEP<U=!J,E9O(S;1F9F1PBSQ3XQ>_]8[P`$"DZ >+M$V=W<X7@YM+L;J['D)P)B,R.B8D^)_T@^/J&X,T/W%PJ@$STP,VE<E#0]^@5 >+MR<!3UEBZ^VS/E_POV3^!=%[E@J>[PWFZ9,[3,?,R@WY>".(QM#`\W,`WL%_: >+M/9TT\BI"-Q<\70+V=`P]-RK*P,;'.(NQW)=V:Z:;S@1JON`2)(NKHQ#*GDJ. >+M`T]WD688VCPSV=W8?I&3MFE4=VO"]@3NJ_X<8/9C5\+E].&N"*QT^IS%JA/P >+M!1;EN7A0"09E#&N2W;-'$0#$3&DY`U_?5D<<!U!&F?2C`E:K%=R21W5SFL&@ >+MC&'UZH+%$`*,@FMY@;H?3P`*3NNU4@';ZA=6.G:ZSZX:/C0P3/<N!A#@!EF[ >+MYNZ>.`P-CNE4'0+&K]6_?O)8GUTY&&4QC&Z6`^4%>$TL=XKE0<<.@OCW6D6S >+MP._@SH9]HP?[[-H!<7KJ_C"(Q_F#>,YX]/'=AT`\1#-<+XA+O;BK*B)8:E</ >+MW(YN7#&\&#:`0;G5W_N#]]U7OPZ@#%)C-]<PT)AUL$8@U4PJILYQ3;2C(T.+ >+M40,8E'M^Y_O5&Z\A]/IS*Y]Y_BU\$LVN@%W^?OX!_ELW?QUY<V)\1!W%-9R6 >+MR_L7HP<P!&(_?O:#71]!JF6SS\]?>]KY"5^PV%%Y=VU!0F/SB%QU&H;Z8E2# >+M`]*%&`(L^N=7OT7+W3Z$GQ^Y/(D^7+("6F'EC0]U5'3W#$P>XUI-]O5V+L02 >+MX&OYO_MWA%S7@(M[V5F`WG5["YP5UN%/(P-=[5*I\B"G/>780*^$DM@@K`"W >+M^NO2;]`J+R!6R]*5Z+>\U=`(:W)8/MC;W=6E`+]O/=LS,BI74^IQB#5`Q(XW >+M7=U<?KW@X3YS=G7S>771P[%!:E)-JG3WP<4%V5U<2@P5X_P4Y^)6+5W^TD,7 >+M]_;37L\]XN+8'=O)[>0_S%NW;<.>[M_6=79PBH-3')SBX!1'M]G1;7Y<N\U3 >+M3E,N$#KK_"#,]NX@?]#6CV$'B(RR&-#FE]`T(++D2C(@\F9=.;BX(4CF:S., >+M,CV#@,A7">*U.)L$G7=#:@!98<&53`!9<>TXY/AB^SF032"$Q3'(>#6=UV2P >+M;DL%PF5MV;">G[ZMEL!F!DP/"W"WP.X?K2!-S*0D)8WSQUDE0+*THB_I!D(B >+MZ60BS+HR'9RT6=/16-L.*".&HH\>&Y9+CNP:AFQ3AMR6^B2$))KLJY"UJ9GA >+MI(W*86DS)RV+.AET>J43;\DI2%UD*NR]>?WV>"],7-)U-F3F\7F6F=I*4(@S >+MG/N'_<'VP8O?@'1FW>#?\J<2PP&2$AJI*<&GGU+B"4D?IQ<,2:(_-N)+>RR% >+MLROGKTIWZVYQHT,E%J2@_-ZA_/JF2F1VS6"#$M+HL(.+D13@@O;-M<4?AP;Y >+M7`/J'7?5?+[<KAR,,:(C,N(P8,R'&^VYTR[?_L/W()YMPN)4D.M':Z=SY';M >+M@'C+Z5.<N+=]<&@B)2[@-`=X(Q:_)1&MW/Q)VK!=/7`[5<>.'5H,H,"0_'J; >+M^_KUSD^\"%.JUPV&L;K.G[H+-@1^-@H\:ZCEVI0?.G1@,7X"8W+GK]___&G\ >+M2/_AZ;7LJ9?P6:B4V41A8DIB[-$/=UQ@$-)+N'9%^_>'+(918-:-W+1BPY9G >+M/(!%W)<M6\KS>!<L=GMLM*OZE*B=1?H2<%5$;DA(T$(P!1;]?,TVY,E;!S_? >+MI=S1.B<O:(651\\JJ^_-XI]<JUO!08$+<17X6EO7?8D0]0PXN&>I+>A5$IYP >+M'NL0,<8Y-8UT.9SVLI)"CV53V38(LL"M_N2U&?GP$\#!.7FC]X@G8&(9:Q)2 >+M"],T@^8RH!6U#[]^@]2@"4(O$/'U6I(D#;]:<'&^^,A&//?0QUTWD`92KYO7 >+MZ>9F?[3[N.<@T53N1!XX.1^^Q_,/G=PK'GRO1YR<,?[BA0MQ/_QP_GPL&?OO >+M&W-VL(J#51RLXF`51]?9T75^3+O.!.L!6[LITPDGPN95!OEM;1[U+H0+@<UW >+MG%A*,"0W5::$>C]4`O5Y*!C7NT&]!\&V@:&A&G,%NQ:_B_0;+.K%`NX@X$YX >+M(&>"KD-(09"$E;R/4`NN\T`>7,4\ED7'"6(/9NQ7%LM="(,8(9IPIA$J(UP7 >+M2XU\V`RO$6&N<2.\X/3.]@@:;FYM#RY<"H40#L-^"^E,20U$.8[BN_"&"CY4 >+M:/%EV'>`%-@7<<4R+GJ&97&I936^&>;)1PN="3/?B'\@[<-2+>0S)N6(W;Z9 >+M14WXH@_*=^%GGW6JU^-[["0(?)?S4SGX!`]J8><:S0LV1+/(1E(D:46L`5F? >+MY!0$`A1A<K:@()X)!3I13N:_8V;\/:-_M#H3)9$\-.KF07H8W=WZT;/\_2@1 >+M7WY18!I]1DZSR[V\26^CEZ<G,^OT)M;Z@@#-(\@>K`[#[J=6//OL,RN6_VPG >+M/F)JN720)*<;3+:$C>3=A4C>983+S]2,X<1;Z];SUYO6O77(P&J6N6)9L_L+ >+MJU]<\\KKD"CV#<AX27J_O)':R/]$^5\_7T'P7-RQ'UNQ<M4++ZQZ_OF5SZUX >+MRGN)"VRC-.:Y^J6U+[_Y]B]^]?Y''__NLS_^]Q>;OUI'$03_Z36PK9$/WX=Q >+M@KN8X[EX>"U=ZN6YQ,/=U8F"?+,4C^21?,J)=.:YD*Z,"^2:9)P]O"@O!WP= >+M\'7`UP'??PY?/EJ+K*$G3X4+T6ID"5.I(L\1R`?1S?FB9EA"6UXFEIS-JJSL >+M1E[((KE677--@ITU9;98>F,Z;55H"3(TW,KJOR>79MUJP-T,IZ.V\W0E!I!G >+M&1_QV^CNT9D2C#FR&D.PFH?8JFJJFJYI:($N#EV?=[D)BYJ:$O+J$0H/L6]) >+M1"%K^:4B+>11)CMUHDMEZ/)[5IAM,>IUI(Y;LFV-')C5]F.!Z?ZVENI(])7? >+M'ZS8+'KU2(\&HI2,89I9_0#-L/CE9.\CEJ$']+.:,'1GU?&7+6B.I[C7K8%L >+M%[)3XNZQCAF#A;::S5;:8ICI&.N^>0K5;5D5M"2/HGID'=/?@]R)R=B,%H5* >+MJYO5:&9U6I6B121L/(&DWY:[":@$JJFO;1KR+LI.(E/=F9+>H>&A_G[\I[?D >+M;/[(Z!$D"^[?0_DE4#5=$%V#Y0ZB<;.I]&)]5_U%^!-_7:::'#V(AD.ZJ=#0 >+M!*J<BZ6AT/A^U-DY8M;'Q46VMD;&10VI1GL[A_>CT4`*\PQIH>Y4E:@@.0D3 >+M@AJH!GW=R=QQN7P\-[2JJ8%LT,I#D&)G3=S9Z/"+MTM$DT%PY2!6+!:%GNT9 >+M:&UI:1WH.1LJ$HME04@9(!?EY69EB_(RE9`3TK2;R0T/+I%6B_EB5;6T)#@\ >+M5[8;37+Q,(6BG(Q4!:QLL@1T;Q>VE^6XYG24M0NW%P>@B@#8<79""8'Y`=&Y >+M*-H_?L*LAR4'*EBZ,S(LERMZPORC<[=1VVQ;MVW%_RP[(G0H8ML6GRW6;1&P >+M&(6_6P_?#0%"]&"-"H,+77>;N,*]07OV.NTU[`[:<Q@A[L.!W,O@,K>]-%>V >+MQ@%G!YP?)SBSE;5D+=L(>&Y`J*F>PW-[8V,KX%GYT_ADS8V$A`+`<VM#?6U] >+M,_X$MAI;9IFK`.;VQ@9)87YQ36TC@+G*UH02`,SU?$1U6KHZI7(SMU"F!;ZY >+M+8S%J&NH`?4W-3>1371+^U@4X+JIIA+>!1W4:QLJ)#4(B;@%F!V`W;J*VN8& >+M[.7FN.KIAAME995(S,VE]T%]:5-+,VQ6KK77JQM24[)+T24)3%VS4D!%4?O= >+MKAH;=F4VBV%..ZU2UM145A2ABM"ZLS"V`?9CH7LC*Q@0UY7,FV&;N)EI]<38 >+M4$EQ;E<!JB\^7;;_7F"@!;$(1G)D^7,)U_.GM'.STQ,*Q=AP?U?^C>+Q?-1> >+MHP@I"I0'SB,&P:WK\Q'='7YW9.3>H+2+[%*U-Q5G],_K<U%GL^%.8*$\<`[1 >+MJ!5.F(T,-GU7_MWNNQ7BID;)[>99DU&?C>5T@>WM\D#\:`@6IZDRT<R,WF;* >+M+2D?'R\K*-2:]+,S\YG@8B.B8V(Y3CHWI8Z+XVQ8FYLCP5JR2LHEU>=CR!@V >+M&XQ8GE)<F%SP@)0&XKOH6+!C?69F7759T8VT(K!CN.T2#4.!GIF8E%KHSGL: >+M&$AD*G)P&9/#;>(GJ:0JZ:JZYA`PH#C[$H1.FD3QJ=D(I5^Q[\B";2.*SQTJ >+MP#6S!9>OQJ4CR8E'B"F-(Z9F^1!\\4^77+IX)1)%W([#Q,1:]%J5)I4CIOMJ >+M3?&CQ%3<7%<5AC(#6X]8D'ZG9N:^)ME.3&V#.8\24TYI%B:F_$,A+8'5`L&( >+M9G+ZBIV8HJ]E/$I,&0DIF)@JSI3[MPE80=^4<CK>3DQL\ZY'B*DLIM6$B:GJ >+M;'^<H)45]$PJIL[;B<G&ZH"8FJ]?;^ZJ3RJ:ULQ@8JJ,ZA-HM:R@8WQ$'6TG >+M)H/!S!HNI`@'!X4IB<II[;P!$Y/DA$#@1_I9!*VC,M49.S%I*(U!%B<V6ZUF >+M<5P_/@)>JOR^)C7Q2L*M=GG_)&Q4:`QB)R;Z$Q*5^EEJ]KY>F9C0/S&!>:GV >+M>UE+2U-C:V^_5'G8SDM#Z:=:M?<G^!.J^]K64^E#F)=:]VN&Y;*A@=Z>3L5^ >+M.R\=RIP8D[G*.L8F,@]A7HH*7N"ET9'@?\9+`E+`^BW\L?C_BSVM`]4.5#]V >+MJ'8XW,?!X0JO74ODJ.G'&4WZ9<Z&N>7EF6##>G%5T\77".)5L&%A0VI2/21& >+M,%HP-=V[V='.`SOF5Y8?_MN?=Q6570<[)ME29F`W4<\L;,>#ED,'CYYI@<U( >+MF9PTL*-5.R%/NPIV#-H;1`;1P?NR8"$*G2ZJ2`([0KTTJ31#B-`?VNP[5V`[ >+MI9?>/`9[GTUQU6WQ'\<7)Z(O=EIA?I2V4!9V"*3$<<>/<CE=[%+UL1^^OUV, >+MWOX6?R$X(<;8#]HJC8J*.05\99E1RJ2MM>6G!-NWE:)O?OD5_CS0\\P(&<'N >+MLJ*!0\?W8;XRJD?[.INKBK/W;?EJH`C](^V%_UR2Q:/46`[,)+LS]ZW?3H5* >+MK1AHJZ\JS[^9O'-[EN8.\B^L<'N'$E`*A`PMG!QBRS^KZ6IK%-_)OGDC*3X\ >+MYAZ+;B/_JD%_ZAV[7#U@*1NC:FZRZ5I1@:B\]/JEF/,M5E@)GXT$E3W4IY_Z >+M@:2^"B1A[E?/SB?D5:M45>EY%L@RE(EVW*'XE!6$($,'FPYI&&8J!V'1T >+M+$RZI*/MF8UYM\A;EDK\%//</@"0,X4V-#;H841?W]!H@.,?4<@M!4]A46.E >+MZ&X#"Z4B6V^)$N/"H"SIM:%4%'O+B(W*S$&Z(6NRLK#+!E[&UE6H3$9$^CPU >+M3^KFYV:UVAO`4%?%.HPBDTY\-3I7&!\OY`F-\4+A%6"D"^=\SEDO_$O\K`/, >+M#C`_+F!VN-?_^^Z5L#:R;,M28C7!0\QADO`AZ/4*Y7K"%9:AMA%>A"6#Q3WJ >+M#&ZPWI-@/IF#>=ZY3P@G?.Q!>"(^_N].L#M@(X`=!(6/7`EF>1>V.MVUG,O] >+M82'<7R%.VY`WLMDBH(`FO,-@-3T+!R3!?/SH`6_Q@$<\];_Y@<_E^?#$/,87 >+MMDE@>!LQRFAOC_>\\1'MO6'CAHW\C?H-&S>N>=J)XF8YR`T,+G3=:.4*O=R] >+M+![.!.'LX>7CQ>!?:QP:^_^C,8)@$;Z>:<-O8K//A9^YYNOL2V_Z@"!\77U- >+M&<<.AR:'?OP+@B1(-//[S:GYPNB`K(#PR/"3_ED[$<$C3+_<M"?Y7.@57_S$ >+M)M]K!\.$@9O68W$*S1"_W7Q-="'Z2&1XV.F3)_8=002?,*_?]+4P]H(OX097 >+M=2;,OI<CSO]UTUK<@H^TN$5*WOG_:>]:@-JXKNB^70G$UX@X39UI6D^:--/I >+MI)TF[3B_<3SY.1EWQJ2)P1_J-''\$R:QB4$2Q/8*[-@!"0@&#(BO`$L8(S#& >+MP<$$.8Z+72<3$TAL,,:`"3_QE=!O]7N];T5<DG8ZG:9)VHDT.M+=O?>^?7OO >+MW7UZVG??`_$TQ;X]*6D8C,/=LSQJ?P:1%V%N1;9B]?+;0#8`SQ)9O3)5P>Y] >+M,R7M&"G+^<O'GGW-)^E<D;#RD<4@*,(F$"QM:*BOU^OKZM08'.)^]`F?E'O% >+M$\O@S*&_3CT3)8J""@51GF7+>9YGQ>]`/8RX!%,_(@_Q'H+M13C(;RV_M;XU >+M:S&41["<#6.=B9O%C(P-9^U/B$,$%+5$QH:R`LK-_%K."ECO;>(`L2N<IL/% >+M0K&0=<H?BPAB^`?@/Y&Q(:R0<M,_E;,,ZQ$+&2'CHBF*AF\!"-ZW2$3#07C! >+M8#8`B'`)2X,@0T50#.N,6Q(>B,@3:B(0Q`8"$?8BB^8%:-89\^,P(:("?0(B >+M5D0YD.`9EN79B'4^![5%<(X\.X#URH%V,@^\QO.=["/B8(8*!:XP.#0@-(1R >+MT:)0&CBNR%"H5SCE170@;92G'5-'/T11DDL-#?KCQUL-);O6KEN/UG.[=7'+ >+M^$&`8]L[KWW4?JZ-FYB>G7YJX\:G7`Z'9SM%TO!MISA]BJ\`1$U*+C4VZ^N. >+MZ>K>-317%*L;WRV*YN-G;,^NKBND@,GI6=.J;9)5;@<W7X"]T3Z[8UY_'$O^ >+M>OYB\_%CNFI-6:6FK+BZ*>Y)7FJ,2MKUWM5S;<ZI&1/W_,Z4Y]T<Y_45X&BP >+M3DWX]!&>DEQ\]_#YMCIM546INB"OXE3Z"["?@1NT,?KUT]T^_1A9:HS'/7C9 >+MI\_I+48CKT[C"4G3EA=WGSQ_NKZFJK+Z1/-;T22!2`#J-Y_<IKWBG+78W1ND >+M\DV9VQ,.))*5,!]LJC6930_QQYA\><M*:E5,<LGILX:VAKP=J^^BR/04B)I] >+M<NN1L8\;\U.VIR7'R[=%09PB["X_6:Q&:AJN%<^ZYV"7;=4?H]=)UD5'W<^W >+M1HBR_V+++OF!I*U1$.<(VZOR"PL*"OGJ,"20R0@%,1S66UZ("BFUWXU^-_K= >+M^+_B1H9UR7\>3,,]W2G;\^:>O7!/=]\73(:"+>9O[M`J8+B]@XP0L1&L*TX< >+MP`_'>IZ-O,5'+,?S*1!P_SZ,[/30*UGQ+0$[Z^-3["+6M5$L`IN1M18?`?DO >+M17Q'(-9DO9NA"7+%+0DE2Q6ZF)![Y=#&V>5K09*B:3"]BQ>%.K*NQ\0/)["! >+MK"MJ29@`6F,7$W1O`K0OYLU/KWK@[LC(1:""[@05-]%@*)OLT8@@@>CAZ#@X >+M3T=<U-*(8`%IM0;IP-OCV`3)ZM_>'2D61X2%!@?":5+"I8_"+WR:#/J:IDE+ >+MA!A12'B$."(\6`A-.#6'A"%DBX@S-*)I!"86A=/A*,62;:@S9"?+Y4=-I\AZ >+MJ2GC[97#ZO+V[>/8]7GNS9EI,_Z,7VZ5K<ZLVH='9,?S%+FUL@&\CW2K.PW( >+MX#T.'\Y.R>@L69/6*)/*#E96K7EMSVGO;+YU9FK*:]7SR[W*R@Z5R?!-:3'; >+MP!9*KWO("`JWI--0BVH=ALYM-X=GR,0QLW\>ULM--OO,#'2S1V6U1#.A>']Q >+M`AY(2KMTY5+:[EXW&;)@'MG2:3AFZ-S<-S0THR>#N.X@JTCTI9>-69R<VSI< >+M\K;K3HPI26%:H00/9G;VW;S>D7G='4<N>)MI?%.GH?.5H>DI-&6O;7H0FT9' >+M^[N9[LFNGM[LG?5=^9WZG5E7+\Q!W^+5(^C(Z*O89;%YL,<ZY_"\2BX,M3H_ >+MMC,V1\VH;<4GRW'JQQ]JTY-0$DHT)66>J)9N7+-16JV1);Y"0G!#+!.+-@AB >+M71MB8S?PMP&(]/3U;T.XDY#/K\+X+_5U]7JDGR9?9_N,,[-30QUU=1>-\\LU >+MJYT%144%!>1Z*O26\\LUT]CO.[_O_+[[[GWW@UV?E_P`<9:-3JU=&R.(H:/1 >+M&ON+UWIRF^9G`W;/EB>2OFS"-@J3:3&LED*,]YYH6I/?5,J4HA)+\8F<%W2Z >+M1'[VX&`\9Y_]4!$?K[A8C#&9<\/FMF!\\-R%S1^03!*OQ\6UOO+>>RR47@)G >+M;G'/F4QS;J!!.!P[W_K@0(HJ6YA-9]J4R6FGB5AQ3TB/M_LJ?97K[H$R\ZZ% >+M7.-Z;B\\H$AQACCMCN3D-T_<?D9MB;!PG^+B,\VY7"CG5.;5ITIE2&:7PM4C >+M)1](QDE3Z_.4+:K%*G=+\X']H?N=F7L5+*M`"CNK8`E%:.@J*O9FEFDJ4`72 >+MH`J'ID*CJ:CP;3HK-&4%ZB)4A-2H:$Y=I%87%:GO4K&I;!I*0PJ.+T0!-`>[ >+M5'?I-+2&KB3P5E0**I'&H].H:35=0N`M*O8;W6_T'XC1_^^G7;9+]NY)D6W] >+M$Y\6V]%<6GOA%!DBY<BIU>6GYU21:*@:O]'5?J:G=WS$2J;,GRN<&QCH.RO= >+MM$G:3@8ET087/J(B4]X[:C)R\=$L?HHAK=,T_47O9T.C0Q8MKV3N[[_NL%H= >+M)$K@4&?/MV"L)'G?CK+T][%&64:R8JNXJ<GQFS>&C0-SU7P&X-ST\!#$C;OG >+M6A[1.I/5@M7O])*LV)PB7'M(390J[&.C(U\,W+C19R:KB#F+^Z>F)SF:^Z(# >+MYS5CRE"I5&8<L[K=7J_;:=6G*Y6Y9>O(8[94/DW3AFPD*=8R9S:5UOX,XU\9 >+M](5TH7#_R`'032[(SCD85]!RL>.RX63YP7=RLO)\*;'*L^\S[Z,\Q^'<PSDD >+M*19E>\D$^^Z&UKYNNIN&\#(7J0LP]<8G'5U7!H<GS,ALG9DP#M_H[>ZZ_`F? >+M@@RU@K<*J9#2JU(BI4D%6R]AW%BMTVIUNA*F!*F]&I(3F_[VH0QXTQG>0QE, >+M!CKHS2)=M49=C;:&JO$[T.]`OP._3P<&^!/\OI4$/U?'N?CX'6@'%S_)V7$[ >+M.1\M-M)&RU!SE\5LMG0U#TT8D7'&K,6?MHY>_NC2Q<^G[%9,LO-M5=Z1D?Z6 >+MM@G3)#TY9IIH:^D?&3%7X:MMW.2$T3AIMICQ!^2_3HUWX)R^=V:<C$,=G^G5 >+MGQLP:_"@`3L<=GZ=$FP@?TB6#VO;)T<&18.VD<EV;6\Y+F@E_R-ZIUL-W?AH >+M:9O)[7)R'%&Q((MMSFRV&D^7'NUN#&KD3K5B7'DD+S+/>:12I]5I!5H+":[J >+M"SA=I51"['F4*J5(:2<;Z34UNAIAC55;HVO$N$"5J<Q"69Y,5590EEN9J2KP >+M&\1OD']MD-#O>!R&EU!4$^`>RO=:#XB<I^\'!/E(M`T^GB4$0/QT_,[=\J5_ >+M>%F^.6'IIM=WRHD$*0AZ\A0&B.9I:KZ`+^G@!73(`CIT`1VV@%XT7]:7K\`% >+MO,7S]..WN$QBW-<J*X!]&123=!!P&%#V%3Z3>`%P%3`*L`,_$'`'X#[`,L!* >+M0`Q@*T!*-/=%4'@!OOEV,'S_'=0^Z($LP#??1BOP`E#_@;-#%SC[^_2SX!:7 >+MD;[PCWZ6OD$QLM<!*8"#7_6SM!Y@`%P&]`-F`!CD%@%^!O@-X''`:L!+_\3/ >+MWQS!7P/]7\97_8S_'3__#7!0A:B3>`,`4$L#!`H``````")R9#%=R2MYD`$` >+M`)`!```9`!4`8G)O=W-E<B]#;&]S92UT86(M;VQD+G!N9U54"0`#+X"*05%Y >+MR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````P````$`@&````4*[\L0`` >+M``9B2T=$`/\`_P#_H+VGDP````EP2%ES```+$P``"Q,!`)J<&`````=T24U% >+M!]0(%P\L++APD`X```$=241!5'C:[94_:@)!%(<_<PG!SB;>P2:572"66X@( >+M%CG"0KHTPGH&"XM`M@WD`A8>0AN[!6]A,\7PX^V\62T"8;]FWK\9WF]G=Q_T >+M_"V#R!X"K\!SHOX,_`)7(S<&5L`DL?\$[(&+D7L!-N&<-B[`!W"PDFM@Y@B> >+MA3J+3V#I[%^&.HLCL'/V[T*=2176:63'N:G4*758YY$=Y^92IS1AW49VG-M* >+M'0!/QD%OTF@E<8]"&JTE[K&01AN)XPDHC5O1>(X`?=JY`D;&K6@\*<!JMNSX >+M<R@<OXN(UN93`BK']Z@=WZ-Q_*2`*N-URFV^N$-$D_$Z)07\2/.EQ',%%"T? >+MM<>7-#^2>"OK,,@>F0/O#\Z![ZYSX%]-XIZ>.[@!55]#3J)?*P(`````245. >+M1*Y"8()02P,$"@``````AUYE,6.00_^P`0``L`$``!H`%0!B<F]W<V5R+W!A >+M9V4M;&EV96UA<FMS+G!N9U54"0`#O:^+05%YR$%5>`0`Z`-D`(E03D<-"AH* >+M````#4E(1%(````/````#P@&````.]:52@````9B2T=$`/\`_P#_H+VGDP`` >+M``EP2%ES```+$P``"Q,!`)J<&`````=T24U%!]0+!1`T#=S(&8````$]241! >+M5'C:I9,Q2()1$,=_[^'JT%*)#8%3BX304"V22Y,4[1$%+07A7.YNADOA'$1# >+MT.`@+6D&A9#24A%DF?H%11%)-`3O&B3K([\/HX/CW3OX_8][=T\!PT"2OUM, >+M`0>FD`Q+K=@U)94\GC4KYP&06A%]MMTU7&\J`#P_DZ9W"#VU\5VA44**:?3C >+M94<1;;L\7$`ZC,G$$*N,\H?0TYN80*0C[.FH:)7!*F,"$^BQ970DCOEX0]^= >+M.%<&8#&'1%-(-`4O5<S.++P_HR<3F)Y!=]CL+J#Z@RT?7P%O'^9H'0`UNN0. >+MZZ=K2(>1VT);0-\<(HT2:F#$&9:Y#*Q:R'P6M1^WS_9\S_VUE3\$7A_*%[2U >+M`,!KPQV6ZC$T[Y'ZJ:V%K]CD$LZC4ELSK=-AL_15]C<LE7Q[Y?YBZC^_ZA,[ >+M17(H(EFPKP````!)14Y$KD)@@E!+`P0*``````#+F9,Q0SR)N%<^``!7/@`` >+M'``5`&)R;W=S97(O5&]O;&)A<BUS;6%L;"YX8V8N9WI55`D``UX9QD%1><A! >+M57@$`.@#9``?BP@````````#[+T'7%37$C\^=W=9.H@-N]BQ8\4:5`1%102# >+MB!T5%7LEXJIH8M>8:$QB[$E,5%!L*&HTQHB]@HUJH;G(BHH("[OL^<W<N[OL >+M+F!>WOO]?^^]_V/O9\N]Y\R<.3/?.>W>LS,U9-9<I\63ICA-"9D9#/AZBV\7 >+M$%X.^.8X_*B&;XM^7P/0&U_5\2W!=SB^:^"[.;ZE4X-FS0JB5**H[M*N2Q<7 >+M>G7HT+VC2_>.W;IWI;2:6DI.H.0&_<.45::BJ&U#9@5-#6X[=7[(9&U^SL)Y >+MP<*PF<%.(;,7!L]?$#QI8<B<V0M:6CE/F3IISLPY\YV<^:^V\Z=.#')R:<<S >+M=BGG1P?MCY9(.K$<T@ZF&<O^(-+%"^8&30J9/=6I0U?=52OGL/(N:J^U730[ >+M9"$*/VE:,$F]>,Z4*0N"%^KE(NJREX0KQJ10^N(*`5Q[`O38#3#R*,#T#(`Y >+MWP'$>!ED>DTZU>J\:K^@23.FSI^S:/9DITESYH8UZ4@YI%I;W2;K:W_3R]+@ >+MMY7!;VL#V]H87+<U^&VOY45YG/!M;I"F0U7W4B%%OP"T^,%`6DP77<)K*_'] >+MI7%-1*DHPCR$F"-`H\:4,!$*Q=VGKU@VN9,8"])\":WA0X--D8<._+ASV^(Z >+M((8BJ\8MCZ4T0&DUMY&%9A[6^7V]/4=/G#AR8,_W6U;6`A$4K4]Z]4SQ#"4N >+M\>V%Z26WCV'6DLAI*,M+\;HC)R^</7YH_]YO-LX6@]58Q;GH4Y<>SZ3<6YPQ >+M1\'MDZ=C?HLY=VP9GJ@O_G;A#^X/U?&(:=;(6=[YP)&8HORSQ]\6?K?QB];0 >+M_/+F&3/GS7#"I)+>X2C>A]L1QX\=/G3H\,'Q2/WA4%1$Q*)&_+L(<V4'[ >+M(T^\97EY+&?K^B^&0<^S0P"&.B%529>S6+RRV9W#49&1$8=%AS5!2%W\8^3! >+M@X<BN`AUU/Z)F)X6NN]`Y,FWC"GV?+7N\R#H=XCC_;R7,\#.X\A&X^HG]=.X >+M(ZEF'/URQ4)S%^S8\U/4.\;>[-ZT.GP\M/P%,RJ=F*S]@;A-5$%7/[^NXJZ: >+M'D0U:J!X($=T8L@=M>V'W6^80L%>;_Q<-ACL?D!FA<ZWWN?(4_:-`3,H<?4C >+MI?JY(F%:ZZ^V?O_^U:[MV>_7+O\,FY;VJ["EV'<CYN3QS3Y2M`"RK$(?9O!. >+M-&OCEUN^VK1^W>KE8>-%6*W\%G8(7-^IDT(F6D,3**D>MI9;JUS]Q<IE83.K >+M(?)*9M>`%O"AVN3P\.7+EGPVMBJBN:25!3A#H:BIU^C``4U%,)R`(VKLYCVH >+M1P.1'CA5/YTZ97+0J`!/>P).%>>69U)YX#PD8=81<!S&A\R8$3)Y_$C_P78$ >+MG.V9>2_SGA,4Q@\FX#P\3W4\LX*`(_(+F;ED_O0IP1-'^+J)P&9.7NS%/VZG >+M+:#</[4CX#S\_=*?5_Z,/;^5]'KCRK6;W$W5A9@5M@2<AI-#YN5G+UF4^7Z, >+M[^!:T.;NSVO7?[FF-0''[2L"SL.8"^?/GCY]]M0B`L[I<S$QIT^=BSFYD8#3 >+M8^+4F>DL^R5[/G+8X+;@=GL2P#AG`D[7.`).VT=GSYTY$W-6=%:SF(!S[,RI >+M4Z=CN!CUN1-A!!R/"9.G+LQ@[$7P<.]!KN!Q40Q0"^"3E@`_7R?@N`=+@S7# >+M"0(+Z9<[`<=]S/B)\[(8>SG5;\C`+M#^#P).$[:T?53*KU1!]^#@?N)^F@%$ >+M-2=0',@1'0*G2T#@^`SVX@7+'#[(LQ4X'"3@M'F@?)N;<7(>`<<]F)0:3#A- >+MJSW<?_3K9Y,F/GT];(`[8J;7]KH`44\N_W[AIRF6!!QWLI4[`8=S\QT>X.\W >+MS&?H@/Y=.`*."_9VEE._6+Y:9D?`L?$8(AI2--AK0/_>UH2;M;4)-];=!PX< >+M,,##O8L5X::3);2$HAHM.W5TK@Z?$FHXQS:=.SC7X/2HL>GFX>'>MW<O%RM" >+M3<UVK?]XSJ,FA2393:BQZ3,`>;KWZ=VSDQ6AYE">\HWR!>%@UBA"3<IUJN"5 >+M[P@U7+<!7OX^`SP\!_1T;<.!7;CR[LU;3W*74.Z3G0DU*3=NW[EWY^[U7TBI >+M#^[%/>0>JF[$?F=/J*GN/L#G7<;H@.?O^KEV<8".R6=^_O70C]T(-7U_)-2D >+MQ-ZX?O7RY:M_KB?47+X:&WOYSZNQ?^PEU+3HYS$HA66DL>1/7+LX@?NS)0"S >+M70@UKB\)-5U2KUZ]<B7VJN@J5AQ1<^'*GW]>CN5BU5?_V$RH<>GC[N'_E+&4 >+M(=V[=FX!`Y^8`=0'Z-,*X,@S0HU/J#24;ZDTZ^B7#Z&F[2=]^HUXP5BZ3[<N >+MG9I!EV1"37.VK/VIEW]0!7U"0X>*AVH^):K/IXFG<42'J&G:JW??9RPEA;WH >+MV;E#?:@>0ZAIEZPJ+%#$KB'4^(224D-]"#4.W7OTS4D:-"@QIV?']MAZ#(AJ >+M"'`^\]Z-&Z>7V1!J?,A6/F2KUJ[=>_?LYMJM>\?VS9!E?G?LLNR6[?WAQVT. >+MA!F+#EW$78H[=6C?RIP@LZ\A0<;<N5.GCAU<VC>3$F0^L2+(V-5OTJ2N'4*F >+M,12V_S9!J4SXW@7YJY9<L^2PN\0VQ0XT#$&DMOBNA$F8NN0'2Q15M8Q%62-Z >+M.&:/;\2&Q7EFP8HN8H?<()Z)F/*V-6<;--(2:RC"+")F!IIOF!53?0].CY"- >+M,LHZJ*1DF1159,F$=TEK-690E[2+8&:LL&2N521CO:5H,"M,M&(BT'S-;%C) >+MMB),_K#!V=R:L6OH*(R2K1D'FCA,UCQB''M75,!*-@[+JU*+,;D3,&O,@93P >+M%C,H\AE3?;F+;6B?Q[I<QO0FABPH1P'FR.DZ?I%/'LI9@ND&$MS#],('&4S> >+M0EHE#^4HN=\8E:^K@68C)BN_FE/"[EK_@JGJDA&.6$%!`1(H::["D@K4K:IL >+M9+GUK6XS,5.5'&]!ZM2I$3E8L==?8;_1P+FJQ#J*L5?RD-96'*H1C<!;`G5M >+M=A)U77*:=)-G)L6^QOHV<V]=UYJ#1J`V6U],9E)MDJ+ABZVCFJ,=FT%ATW6W >+M<A2W-S3'89**L[07H5R=0"T6F4$]4"\)'(37E0ONR^7I-V81*C5PE;NJ@I+G >+ME[#`XBT`P:-Q4*6>Y&"+T-%<><.]*8;LS!=GR#LQ[]&C\.ZRZB!2%@7#A.^S >+MIR`[]1@'.Q0A_\K;]_GO02%/?W8*"\T7<A\]$CJV#Q(K';IOO)$=NQ-+X18J >+MEXYPL.O:U0VOYRUX\[ZPJ!#>O,I\GAQ"`!?HWJ:M'E03TPL'[<R.S;Z1O9J$ >+M;3?60>R@Z84_\^Z_R2]B10+9[Z5D45%'<G^C=F50](UL.N[NQ$2.J=.0EG,H >+MZM0JC;%$TJ?<H-R'U`@*#'*YW!+%;WC^OC:\NOGJGKR=6V<<)7+PH42M>MHJ >+MV*%WDZ<J3J5YQ/-0Z*N<](AXE/`\CG!'2G)^(^&?N7MU>M.==:3&1EW(%7Y0 >+MVD^!0F6A4OD`Z=4X5D8%*Q60^2(U(1X9*`4&.:^X5QJ>P7./#1ZOVW5O1XU> >+M\?M\+E]U$6Z]SQ?E:^YB=DTA<BE\)<^$ITF/SY4*<(@[5"(7!$#ZC/,II!*- >+M!I'*Y7,Y)>DWD$SS(8J+*H#,]!=/DY\\""85(C%L!;G\Y4N>-@UIDT_%GR;: >+MNV>MSJH.`+R+$D45PO-GJ4E/'AZA[J4$8!/``>Y`229/E.SKX7K[MP=$].;N >+MV=WQNN/L3P!^8C\E)"<E/'YP!+-B<2^SLB`S,R.#],VY9XP>Z]6]I<W(P:Y= >+M!@/<.;TS;F?<CCCZC-F+`HO]BN#AH_ASP82$DJQ,+I/+$*6CFE"1[@"#Q8,U >+M,%@T6`2J"[MV[]XEVL7M5M$/TI,?M7!_7N`N<.?%OVGV05_R">J"T2>NG-Y3 >+MQB>^XK[2^T2(SB?.;0\MSR>^"@K2^X27WB=BMB\OUR<H=WD^<4D9&[U]Z3?? >+MK*[`)XBN?)\XLUV\7;.A`I\@LH_XQ)GMW/:BSS[F$\2@0I]XAS[QK-5OV[<T >+M>:92JQ]7X!+$PL`EVK@TUKI$H4JI+"RT_PU'OH4E%7L$T1MX1+O1[8P\HH#W >+M"#PJ\@BB-_`(I*_`(_+/<>=,/>(K\#7P"*0U]8BWYT3G/NX17=LUK<@C@L7! >+M'_&(`1E!DX;U:6<[SK=W=U_!(W;P/K$C[C3O$<$5>\0``%^QKP9\1;Z"1^S: >+M+=Y=3%^\0P1_Q"'F>KN5<8C/N<_U#A&D=0A-`'V8NL/G/CYZ=^BK<P?-,/PH >+MZPR4MSQGF*Y<X`70JE77"IR!Z,IW!E\R38<*G('(/N(,OEA]KI7J(\Y`#/[" >+M&49!QR9/U6I51?T#L3!PAA:M&VJ=X8.:=X914%BHY)2:^(J\@1@8>$-+OY9: >+M;]`48[>@_AUNY8LK[AV(VL`7D+H"7RC`88&I+WP._0Q\`6F-?.$@0!X.Q3_N >+M"QU:-JK(%T+%H1_M'0)'>W9M;CW"JTLG+_*%'7$Z;Q!\(?2CO8.7V$L#7B(O >+MWA=V4>\@WLWM0M%#RSA"-9`PA']0C((I8OC)P7!FSC1#\%?1"R8'QA#+$H:# >+M;9<;-#*\X8+R63&<?8I!RBC)'),42%.B<,'BK8D6Y_0XZK/"P:'F!K-D&M*Q >+M#8XD+7"\3(-.31`.7M7H6?P8UI*&H)XXQE1[0@PEQ/`)(G[L:H\#7`5=5/`7 >+M<?#.-,#LZ,.6"5R)WB1;Z<4[I0QU%S5#J2S#TNN7BDBG];1UL:&Q\R#,)90X >+M%*LBU)\2U&SM6ASJ:J;AM$`0<RB>%NO4B$0/P1XT85A6T43`1$;MQPQ2QV1^ >+M:;8H_.'%BP_#";KMH2,4LM0LN3PKE1$>U4H+)5>D>4\3E,WI(?B%-E%@8Y') >+MY-FO7[Y\G2UG``5[O]Z\3#9_?NB2\,VK:>:6__JEO.W2,7Z-0C-7X6D!^_K! >+M@\W?7;OVA'AZ8TF94I?-R7D%>3DY20"*@1Y>@[R'^?F/'#=G"4^>><+EH$)Q >+M>'J3$W.IPV$YV:)L+D>33#(^+A859WUX]UZERL]5I`'D_GSAY/5;MZX]>G+W >+M1MQCHGYY8E.')FV;M`_FJ0O8NLV;<Q9%1_/4Q<CIC5R!U&^/?6*.U&<SG[\D >+MI"O4F8FWJ7V)`>$X<^(>D6M8CIFVY.)L<79.SKO"]V\SGR6GP-O+<GDV1$3` >+MR=?<:\UMK)H%4\&F$W.0ZAW[.B=GS\$#!^X!VI<*?2?/SGD9D?4\-04I8[-I >+M'A_A1TW?:]5M0+B)F*81?JAB3MR;@X6IST?>/2\^K[PR:RMRH)*+Y-GR7L]2 >+M4[B4M_#VRBLL>)$?%O[Z-94L9@4-&6O&L/BY>/KF3Q4K9L4J5;$R__<])(`D >+MFY.KS<U$R+HX[U8.1/"CPI,*;=D%3JS9&A9SXM%LHBXNS/PR-RXM*37YR<GC >+M=9%:FFU6K(+"!(5>;/5)OMP\=L1S:>-F08Q*GD6TUQZEICQ]EI*8E)2XXALJ >+MV29;C2T0JDB%A<))[N3K7+[03JQ9L]9G&>,KC(1W=X_W\QOFZS/8>]A6/:'R >+M,3;\8B@^F9O[1BAOC>=JSY=>6-YW)WBRFQ?/G#A^].CA7R*.'-VI(RM^6R`J >+M$)_D"HJ5N@JN[+&5RCI!*Z)%WX2O6Q<>OIQ;KIPS>WJ0CNIM>II%6O'SV[70 >+M(]&AWN)45P5C`GKBQ!!;!,I3%0IT\(A!*Y/O1.S=&U'J.Q>OW8F+NW/MXE_X >+M3OS]A_'Q#^_'D^\<_&'[^K7AX9^OWOC]ESSX%9DOV\K0=Q:EKRS?=R2MPF^] >+MRDU[B`TZ*/S]_`,"1X\-FC1]\4J>/#VR_8%7KR)"&D?.+,=WN.+,HC?/<XJ+ >+M%4GQ5Q'^^R]&W[A]^_JC)_>TSI,9N=:E<>O&[29&SBC'>;CL7'E:*I++]W63 >+MEN<]T:`](F_-,/4>+CM;GI&:GIN3]B0I2><_,3$0;>@_:R.G&_O/!*W_9+U( >+M3=R5D)A<ZC\QP7K_B=;[#Q8\W<1_)O`,LN19&>FNB<D\`_2?F)B-P5BXB?^L >+MQ6J;^,]NX/V/DZM>2LTXG0/%\(/(:(6V<,&!HB/C0XP=Z/&)8V4<B)=;'6WJ >+M0&LCI_$.]#`EY>E3=*#$A!5;31P(*:.Y:-Z!HO4.A#4.$1QHK*_O4!_O04-\ >+MMFXU=:#HL@ZT!37-.U#,\>-14>A`AZ-V&#M0M-:!HO4.%!T9.1:)5%N7KUV+ >+M[E.P;/GL62$3/NI`(_Q<R8$\=`ZD1PB:N2:H_-W<_`DHO/NXS5X2%K9D=OC' >+MW2<\;.FJ=>M6+0T+1_<YLF_?-ULV;-CT];?[OA7ZCN2GK1>/&M9P;N+"\MU' >+M5,MGQ^W[$:N6S4+WF3@V:&+PE&DS9B]<N8XG3]SF_%-&QJ_3ZF\;4[[[%"0< >+MOE=0<&^+;![B_Y=+IV[>N7/CT9/[6O=)WA;:LGZS^BW\>?)RW"?SUD$DOS7= >+M25R>^QP%X3BX[<*8<MPG*^[PL;C;4;]>3]"Y3VPLG#)TG]!MHXW=9SP9A\M^ >+M*W]ZY?"/DP]<>)"L]Y_84+W_'-7[S]%M%T:;^,]XP7^R4N-O-;P>GZ3UG]C8 >+MO:%8NHG_A&*]3?QGE^`_Q2\STT6T+L:[3RP_[CRET)8MN,_1;==&&;O/H^-' >+MR[@/+[;ZE*G[A&X+Y-T'*_@T%=TGX<F*+2;N@Y2GN%.\^QS5NP]6.%!PG]'# >+MA@WQ'NPU>.C6+:;N<ZJL^RQ'39/[7#A][.B1(Q&_'(P\\H.Q^YS2NL]1O?L< >+MW;9M"!%M6;9FS;)ERY<NGS5SVOB/>H]GWY;D/?UUWJ,#R%&A^Q%)+2QHA1+' >+M?>@FJ<]R:14[D`;.@?CK@\2QL[M[9T<)T+@1011`H[X`?L55"ODB1[\?SI__ >+MP<]1)"3;,!I1HYOL1P9%*OF.+N;&"5:LN/A\?\O2BQ*F2499.6C(#XB%7`UU >+M8V)-!QJH!@)K(%PI">A`8]A`X;P^$REPWJ/(47`*S6O\*,E1".-I3$G@$JT2 >+M[+4G5U2Q5_#@8KDKFM@KW!7M=<VQX[;'M;^M=HOV<+NU)]P&]?H-ZS=P&T3K >+MN0W<>LT&@:TU4V4PQHL0%BH)52T*#5V$WS1B_H1&]`&=A(;&0OARA)>&HUC0 >+MGWRS"B<K+_=#QY6*BY&CFP'.^?7CU54T9.0XC8BSX/`'TPSHP_51]S]+@^G2 >+M<>D/_*B6^U8M5:N?KZ$NI8!]P60C8[KVH8S%62=.W/,#2U!S;"V3,-6++](H >+MDP4JN#CCQ*83@/;!1ACQL0RA5?PB+#F9[D.I%HV?1O1I&4B/$R8;>VN[FBDX >+MQL",Q>&,O9AS]4,R1^``Q)8('J7SO%CUKW\*JGY(R*>\$OYLX^7+N9@OB/EX >+M?=^Z/8/P+WBNZ0)7JZ_V3K+>S>=6_J%234NY\_MS0ZZ):2>^0ZYU3VW>.V6> >+MQ07*=U7UH:@@M2#M[#..L:`^;%:?0$9WFN8`I/%,+]A=_'FRY6+*?.[18^ZQ >+M\N&3)PE/+Q-7.9R@D1Z\Y+FR"W5_LEE\@4JWYCZP-3X#D-D:!B>X$RJ<W*3C >+M-R]&T86ZF(OA+!-M\!1U^![&T4@.5H1,0$"*6,G/*9BM)Y2QN>'H"_0G6U>2 >+MS7^&#BMST.9-H3^6I1MGK9CY$9OKAU/;9GS<YAF1D;=\C&S^0F_SM,BUD65M >+MGF1D\S2D+]_F^4F&-G_!\V+5]T<MT-F\,!9M_N>?KQ/+VOR%P-5J_^%%6IL7 >+MDLV3[_S^+-'0YL\CMR#7NG_^?#ATJ<[F^<H/*1]>G'UJ;'/L=)_S3"_8W3H6 >+M*MC\[,-'W"/E@\>/GZ3\*=@\D@8GD,5S19L?*\_FD5RD:BS`"_RNR.:!-/B` >+M99-&?_I1FQL.&4!_LG$AV7P7N*Q\A39O0@^KZ`<'L\=\Q.;Z,4#XF(_;/&G; >+MM@O]C6S^5&_SA&VAV_0V+]+://&)D<T3D-[8YD6"S6/?/S&T^1.>%ZN^>=]8 >+MK<V+"BZ'IVZ\>.G5H[(V?R)PM=J\9[S6Y@6_%Q5-2[IU/N61H<T?;UN.7.M& >+M?[EGXDS!YK%%[POSD_.?QB0;VSP$X#'/%/W\IPF"S4_'Q7/QROL/'CQ,N"38 >+M?!OUJ)#*<T6;[RO/YMNX;:HA`(_PNR*;#Z0N$^;Z#G0WM+E4Z!TMA*^:0E?( >+M!5A1=^@`M5E5?.-X:P1>58_`[K(6?T^3@[K8:PGK/?6HXJTJ_B@!(D8.]9DM >+MDFHRF#W^P'XPP)8*H<>D(%3[3!2]>AH\#Z5[YLFQS--93K."%LPP?$2+&3RB >+MQ9D\HF5G<)W8B8V?MNI1^K25L[WQ<V'.K0%<F^"[O;%$SMBYM1D$X.(-T'D8 >+M):R0`/OL7SO^17)667YE^97E__O*KVP"*LNO+/]_NOS*)J"R_,KR_Z?+7R&Z >+M_Z^*4'E4'O])QT=FZ+K-<OP>.8]9<Q>&.0T)"@N>+TS3.U0T0P?XZTU4]/JK >+M352@G:J7MXDJJ'1:[_K*1%Q,I_NT/5;C>XMQ6K?&>,T?W\'X7D0)"VDG0P\H >+MDM1K<3"Q`72#HK`[Z4\RG])-%_>VT`$*S`=G'CUXZ-1UNH%9$MX(V10V/+W8 >+M>^BGPZK3WH(>L_"*TO67+@"?U*:EK\X_XH42MRV8O0"KTKTYP)8==*G)>GJ^ >+MOSX+:[<W=CY=L%I'#^XWNY2;\?S!)D\L*Z_Q;*SPEG.1!_:'=9-`1\AO@`H3 >+M]1PT8,A`<^@.)?Y5H!>4.$DAW&(UB;Z)1+=OV?),2GT2_?N,O*P\?B_7^$$D >+MNO7LO-C?_[C]8CZ_[Z8MB=[F[D]KUFU:+6RFV4RBN]U&98YMH=TAXP+O^O\N >+M`G#4;WE!087]+(W9TG91R;_2A2H'M!M5WKS..#&7)._U?5V`(X\O_W[^IV!+ >+MDMP%:V(Q9>6R+Y;8D>1K:Y'DG2QUDF\FR>MV;GL]C9?\C(85,GY;R)(0DKS* >+MURSQT>-TU0JZ=*4'2=Y=?O>/RU=^ZT^2]S]!D@]X_S7`,MJ!5=*-D>2#WY@! >+M-`+HUP8@IH`$[5E(DCNS<)<+[Y/H@N,UDMPE@Y5H/CS919(/CVT"<.M]\J-' >+MM[;9D>3]L.X.6W\[]?N1ZB3YV28D^4!K7O)P!.U?OBV-W_A:#/PF(O[52PM] >+M4P^K8K(.5I%[F2Z`_2ON!16XUYS2Y)ZZ794&[M43W6?D]_C^V3BMYTK4?0[` >+MH#$`OBLH(=QB,BA%,`1&0Q/H"@75(!R6P@((@,Z07Q6^@#5X.A?&H][S.%@) >+M&V`U-D<S@?;':`J@+>3)8`WK!$N@-@1#`[*Z)[+HP=K1_=`0@?`SO-(55303 >+M)H,G9LD;#HNH46,M80J,Q<IJ&+0`]6R@_6=*%]8,QD$7RE<?9H`33(?V!>-@ >+M)''R@:EX3,9TNCV*6!@)DV`B4*HM2EPP$-F-!EK8[`K%M:`O9OD4ZS@%BFM# >+M?=0^UE`*K<`9FD(=,`.U)3C0#HOJ*'V^%-I@?9Q1#_7IAG!M=+'J=+N[&MV^ >+MK(X9-770%OFMH3UF:XYRU21IZQ340N)&E-&"=D!51\9U$$N-D'U!'>3A"/6` >+M[C"_:@%M617D+T4U6>#1#%H#>;5&)-#51;JZ>"!=7:2A-PFBK(D"5T5*U*<3 >+M7N5`TYH^:M+^D([T-&8-S%F'/[2%$BD=8LAMSA,#-$9>U6G3"15(7QH'*K6* >+MEI"44=!0?R*&O+I8Q>9TBQ:EK4/Y.Y$L8B9&1;31D5;A#S-0.O(5Y57:&"M& >+M+2NSQG/:K(AD$JB&I3<E1581%&D&>1:H0DM\VQ?40PUB[1SH>5]0-L*SIO0` >+M)65&NSBB!`U1?$$PC0WE$:,>6Z(432&_#B;5XY4GH4?R)9BB-X*8KMB@"HHM >+MH"H*0U@X"6I[M#%:O26R*.X*[=`.R+<%%=B2I.L,-4#9L<`%.H$'I52AZK;$ >+MIL@%CWZD*1<D:H<0-2,:AK94VL-@&`&T^TLC%;)W03RZ(N`PNRN>T$]7`>KX >+MX4\:;4,6G$P6;(&)G?FC#^7OC*==\.@NY)<23D4":R1K2OP;HG#"@?E[ZT^L >+MA/R:::1U"R9%Q07JLC?$PXF,U1KHZ$3[`!D]TVI.F<TQU04&$G%#4D(GTE`! >+M[7)KB'[#D5MWQ&0S(4-+T#C210L8CDHUQ[Y"8XT-IZ86>OH:5')3*'3\=IIR >+M<8(7O[&LYS4)O[%LJFYCV7L+KY)IN3Z*0.62'R3\UK).468H4(F,=CS1IQFD >+M68Q6#<KX)*/?RX&O%US$5JW!A%=35UG]9L9)@UK3)C.U;*Z,GD-@/:@:+P:H >+MW--[IO?.<)</4BSX'IRF[K<(E(ZTB#(+\D[J19O./LCFUF<R_D!U?A!^R39\ >+M0F?/:JB'I/=(<DUW2^LG'Y*[I)W/%5A>[XL:,_O--8MLD]6`-)\OFUOO\SK+ >+MZRRO?U1&5F,UESN&U0BKM_&3(DR-^WIZ1N]4_W%='DF&>[SR*1J85GU_KS^Z >+M7YRVH9JYV:,NU[!)E\UU6E-_O=.FAE^Z4YF799L:;'3:U&B]TU?8/4+PV[X9 >+M/8/3QXD]I5E#<B8\&K-J:-%G]Z9M;)%G46O"ZKE.,'5.P_4--SBMQ\]8$N`R >+M:[JAT9=.&YTV-OBZ+X.W?EE],KI-3O>4I@S.&987&M=`U7_7O`V.MZ9V&;>M >+MMMP!RW\ZY(YP?$KEQ\FNZLY'8_D+<SVR^CT6>Z:/Z_-JJ&),?O"W\[NV6]3\ >+M:?K!R1MM#LQMPFL`.8QYAD>*H`'/![YX\/0</+LW5NZ9*?&4!J>/'YSC]V'* >+M4V=Y-:E%@H,?-]K\6X_[57BM/QU2U@9$CS9P+QHL]QAIGN(^%;)\<^=\U36M >+M8ZS9+\T6U5Y5_^<AQ:UH7YU:]E2P.5*(X5GSL#=#7GG)A[SR?NF;.T9=O8J[ >+M?&9]LYM#8OO\V5<YH@5!RQ!2SS<N>CTT9VB.C\(O=V2)!_;?]LZ6$K.HGN_G >+MR3NU-N.WW,ET6^[>B4XN>CM,X?O:+W=,R4AAXYU8!)S9F<_<:]0UHXUW[T7K >+MPU03WX\KF*OJ3UOO5&9152VQV2QLVN_6?,6D#57YG7<2>[J!&F[1A;95B&E; >+MA27FK05*5/IL&CO4!8T5>6,!?F`ON)3<N!TV5WP^*ZPLYK$$%69?BLU:@7#5 >+M`F@S.I^FI:H#2BNPTB8I"X"2"NC6+$^(+2D#/EE*99H9D3I"'ITAI3GP=&;& >+MI=I`$3;+Q%("[\68(J9A#>4P-Q`;JS`$6?"LF$A(9_P38^C\.D;J)MCZ6D`! >+M`]W![W.L0BRF""QJ$4][NHHZ:(GJZ4:##S&6+>+?(NS.-/P3X[1-14T7M%]S >+M4<TC0.T%[EK]5M?J=Y1>O]6QLJA?2^(]%`89ZY?ZL`(O'*2,PG=7`_U6YY.4 >+M/I@P"GJ5U:^C5K^4H:.Q?JOS?:.@WR'8P-.#5,;Z=23]FH&D@*?+IW3,::3> >+MZGPF[,L^IE[*HC8'<U/UJAB-!FR)2S6!2RU0%=`U&ZV2:>CB",6Z_C_/'%/L >+M4#H;5(\U=@=JNFJC5;HY:=N:[Q7XKVK4H8]"S2^@#+P\K4CL7KHZXH5VPN\> >+MAGK#R_6$[D"C5XBS\$5GAEK"#%5!+>!/):8DL9"#UX\S%`M5Y70_M$KA2S!1 >+M15>@`\>\4$`_^$JUAF*A_^P!ZDZZGK$M=8)4K1K(E6^P+$$9%*B0*0)I#T.^ >+ML[8=D^%X50)%L]A<D-%^D&+9@8XW9#14=+S1)T02()WM?L.1GJ-D5UF[$^W8 >+MU;&U&/W?@9+U8[+3WL2VF+7/&T%M3IZCHJ8?^,D"S,;45U`/FR<;*#OA_E3F >+MZSBH&:--WX6R1-FY=@$#!:1@Z1<&\ZTHC=ENU/3K[M.=B0*DXQK<X!\,Q!*? >+MNK-&7[A=X%O8`K;@2>?9XGEM2(_YLDCG7SKE?9K0/XX:\Q=!??RZ>V_VEOF) >+M`RTF>."<4UNTG_D^_S<ROK6^V2;`,:!Z@"MI^KZGC`6?'YR'QR,2H#$$AH#/ >+M9L_-#$:8C;4*#42`"L4W_KSQ\+I$\KGL9L/98CJFHP0@\TP?S7-(FCHZW=.: >+M@4)B((&]0B_!<&ZX:+$,3U_+1E0?X1`0'!_$YJ,]KWI%C)MZ:G#\]'$1@R*" >+M92`+$.D58#U%5BK`%XW]Z_+]#;/(#LJ%)^G8?6$-9(/F><_S7GA*AI_SAMBC >+M`*V9#-4O8F9C+"=6(0&\>`'\Q2/$BP45C)T8-_'3X"?!O`K89A\L+U0VJSM] >+M3Y?!)#8/52$.,&.60;:+2U70='73`+T$7MG2SZP6"Q(,3/?D#Y_N_J+1U5ES >+MUGU]@_6R0.D8RPDV4P<&"1+(,F0!DI$2K02C48()#:8U(`F>LZIA]4J/M8@# >+MI&_`+,99!ME,::P#@6P'@G1MLT"M"%:9$U]76VPO(Q&>RZ;7VUQ%=X0AJ/D! >+M@6R"]43;J8UY#%Y&&4::!<H"S49)R0Q-[P=<&G1W=.:BR\.3Q]T&5E769IKN >+MJ+])-I3GP.RG5%D\D`?^%78UT(R(1TM'HP1PO^_:X;?QF$:?6,/0-IM;ZP\$ >+M!C)`0.G\+$^VH$YHG<_J+L9CTU1LK%Z%R9CAT1Z0@AJFO!D&ER>CXV*+-@3G >+MAI.Q_U!^C5]3<*HHTK:?^J,Z]1/"80$?EN$L=@R^IS`<?Q?883_2A9]N5J,N >+M&EN5JD)K98W>#,R\P!>L6!><H':@B^A?+:`CL\)61$0$YL)TQ5S8QE\@QLZF >+M*WCC.+L&,>.G8%5Q>$`-N0B4=IC<'1M.?EY=E?K^JC3\%U'K1P,3916<+39$ >+MEK7IW!S>EE8!4_F6L9A&N336P`(;"(/[8C'?;UKI&L9&\$:$V<7Z`[3M9!70 >+MT"FRIH=P@49.9O1'#MA9X]#>C#XD1"L%(9$.GE;?XO)-M43+AJ9O^;HR)/CN >+M2X6TT1G%$Q6+1IF`ZA@&0__:*$-QZN$-?J2H_*K\9)(..QQJ%5AC?]L:$]UH >+M?%H5^ZHJB)$JF&:F-5D58Y/U`G/6&FAS:+$PEM`.'1II3>@$SLP<&W_>A*0I >+M'"J4FK`[3GUZ8?>)5^KI^D*-K:$=K3%/6V@LV%%"7:,UJ,U04=6U=K3#65@- >+MY&L&Q?50N]0QES&H1#"H6LIKCQ=,*73--)4NM:RHU+)2DJB.H/Y"(4UG6PGU >+M[()%-9Q@9!PA<%KK\":VH#0+P<2"6H1/GD6>7BJ)UL:<`53$_-Q4;&CCH(_8 >+MTT&H3GY#G+RW0`,V1:AVA/S&J#(G?J;?@/R#[%4L#!0X83B>3V8PX_6F-18_ >+M;G2F#R?0=$%F0I_/:YVZ\N(NO/LZ&HX`2@<&J%&ASY<*&JUAH,A29KSR.O%# >+M[8G")9TR\!)]!Y7BNDC$23F<Z#:%_-;ZAJ@UC17%(B=)2XF]4#&QMCY,V_1[ >+MBJ@J'*?L8#G3.M#,#L4I\9;1HJG,&Q/299X=I]IO;S^GQF1L>U<2S["<'NO% >+MD\Q'B<VHH9!-I79<+9LGH]PLW5\<(`X0^5M1#QN\>?!F;Y")O#=/MFS)46YF >+M0?V&FCGR4VR99]?MG;S<EC6<0+WE9B24A%A-V>PMB1Q?(D-3%03.J86UE'[C >+M3[F1MX@_>-Z#L9R1TJ7FD\5+;&=:3:#<WI].PU[X,S]OFH]W0,']15]BOS-= >+MUE=@+AYKOM3FJ,U\JPE6*(L2^<KFUR45/^\@6]QD>MW/\)CG_JVL+\\\0#Q. >+M&C)AIE40,J^&UG%D-1-H$B=;$.&)XXQ!$8/G^=3Y2J;XPE<\#(_A$L5<Q?R< >+M^92W[9UY*;0T\IQM]C;[@9MF/A'[PQ5.BFENXD'"L=B-#FPH\IMAES<4/([) >+M&#G]<]E<VR"K\183K(.L)W?_3G9EEKO(\"`*UJ`!FL9;YFY-,,(^>//@J[[7 >+M_6[ZWQS^G0OS[RSJ97@@A4IFP8].<9!N(>,+F5U[J=/*1E\T6=]T5:,MLMT! >+M746&!Y$PZP9D5Y6L@;84EU^Z[NWQ2X]?>QQWCQ[$W)U%[0T/(FG+4"PD&2/C >+MAXK/:QGUDZU"^SESA@=Z6KBTDP[VSJ4NBN"LC3Y%C8\--BF\>_!>:`4%W;%U >+MK8E)36F1S("@,;HRK6K61J[2TA2)T'*JJ6>S@T*M[]CJN@O]@%T$[QKQZXWZ >+M@\.!BG8RBFPM2UF*!&XVF,YW7]@H$3_]%(#WV7=-RN'&+/D501NAY>#*L)0* >+M[OF!T;YMG(\AI,V%!3L4KDU9=E98,$VGRPHG$:3(IVF]<$BHM^`E:VS,JJ8) >+M<7=LW$J54I?^IK`TLUO%%G.$^KS%K)"CD<7:8,FT]%O/Q&+UL*VE+KX:=F?E >+M6*P--LBE%K,NSV+$X1^T&'$SM)A%68LU*(<;D_`+P9;E68Q8&EE,&.CH+-8` >+MFIBRDS#:E"\M8S'BI+.8E%\BH4ETJ<7J&[.J:4+<QLAB-=%C_@&+-=>;J%7I >+MQ=HF9FA4VB<9*]_<L$_C!%;:]08]AU(0:#5LJ&]+8P9:6F,=VPK*Y=/LA,[/ >+MB$C+SZZ4PEH_IS?B;Z`PYW)K0$H"^/")KJU:2?L/4F?2,_$?6$.AF\3Y'4X& >+M`BB]TV@/RD4/R7^0:3O1=,;/%49))@0?\KXZXYA+%/5?'UAZS*=7TT]^XLE3 >+M,[/M$S>)1C<Y-?UD7S)65BO#]I&?D1HRF]@P:F).<,[D*VTO4:N]@FO'VGM% >+M",=8NJ'%TJ_Z>PXOE9I)MC<,\S/@B/VKP'!,M_$R+7^#"LF"&T8UU(\#L%26 >+M/J0GG[WW9.ICF?2B[W<&0J'\#<-DGO4VUO-LNM$>ZR3SC!C<`[/WF^\?K.=? >+M6F79E++\YRWH,;YSJ.,(:^)OBY?+Y3^UWL9TGO^\T(@A'D%5/S/'408(!J)* >+M.Y]L*/`_9,)_?L2PS<,LATEE%C3`>&S(7*IE[AR6OIH7?JEMB&V(_32;J98+ >+M:>SRF*]N^H6!E!9DPGF$05<V`C-GF'#>+O.TW^B,:FF,U-4@@Z^:5LO'/>X. >+M->2%R7JHS8,`X^ED*W['PC]T1[C,_]9VHAPB;<Y_U[WA\-+DP."R]X8#5P), >+MQVGW]`3CM,#=`&,+`().`$QQJ[PW7'EON/+><.6]X?_[]X;I`9S*6V&5M\(J >+M;X7]]]T*XWVWO%7U9O_O%]%%VE7KBE?2'3^RB,Y35_^KE?0FY2^B<UI3%:"` >+M99?3'2E!^L\MISO]4\OGIMK7KY9W,5D>-T/\ZHZ_7![/KP:ZH\K?7!W7V:;B >+MU7''\M?$*S*+X7IXL_+7OTN-4L-T$5QGD;^_]NWTETO=JTQ6MOM"?A5HK#_* >+M7\IN`;JCD>E2=EV!,7X,%6[CF"Y>MS-:K"ZM-=\/\#6=1+^6Z03\$=X9S6]D >+M]""N;&+7`[K#C7\TES5*'*$[G@IY?,U'2T>9!4H"Q".J"7GJZ2^(9FCSZ"]\ >+MZJ#-H[_`A0AYAO$7_/&"GS9/=_T%F*;-H[_@6T7(8S^KVLRJTQU"'*95"17R >+M&%4#!Q-?5RY?&K&L7+Z$RN7+RN5+W>7_I\N7']]&0+MDG"I:-*IPG\[_K<6B >+M?5I>Y2T6S2M=+)JQU41:3)_QJ_&U&:?I!+NL)Y]9?*:92OWU+QTL.FCHL87W >+M[UZDI6=D9KV49[_B_S?NG?XTYPY_KC]]?8_.\[2GBM>Y]^G\/7^:@Z=OA',\ >+M?<6?OHWCSU]F:T_?T1\@OW]X\];M.W?OW;\?%_\[W9W]CY.I#VDJ98/%!LUB >+MDNKX4(NA?#B:?[NF_N-DXC65ML=BCV8]275QIL5,S;A_NU03_P-EZH.N:,O_ >+ML=T_^N[[-_.[&"X84[OA8+JU\/_K!DOW*J_!\BU-GNNN_6&PNCUW/$`,MJ@Q >+MO8W3YM*S$[\`?)<($+&7$B9!H<1KPZ\_K>PGT8=+:GXJ-24A[L:EG;1FJ]MR >+MB/U*+$UF1E,(GJ9WTE]F/4^X>^7\09J"&F]&E$))[,\4V6?/,*#H;,>>9^?E >+M9B;'W_P]^BLQF.Y3E$!![*\1D4<CHWZF8&[J4T=/G.9.J_;O&F:!G.7N3U[D >+M:-3R9TK5']&1W<!D2R,.&F)W[?]Y[\Z=>W=X(?6'G?MV[=JY8]^N[\=CCNSP >+MAZF9Q:RXF.5?.!D1`L:['[&/K'=E[[X]>W;M%>W5#*:N=<N>'3MV[N)VJ?=] >+M2_\%F?O#O2>I:46,?;AV]OC!Y6"Z61(G(JW<I&X:BOFD\:)?U-CF?GO][H,D >+MI"J(/77D%QD8[Z?$&K9R<VLI;JEI2U0>KF)7CNC$D+OPTM6;A2P_G^6?./3C >+M1##9=FD&):WH08T2-QJ8IKF>O?"G\GWL'^\*C_R\"RUMO"431U2MR%BM*,J6 >+MZ,OHF'-G3I\\%KE_CXP/SV:X7;,)O*^])^KHT2,1!W[:O:D6A4SRI^6!#[4^ >+M__67_3_MW1GF2"&3G*04G8UK-SYTX9AV'$X[8BJ!4PF<?P(XDN'4YG#U.G_2 >+MJWTM/D3;)H*.G8>_O]_009ZN-$?1[14V"NQGYS-RU*@`/^^![CTI;J/Q+F*3 >+MP'Z<>\"8J1,#/QWNU]^M`P>F&XS_(K!?;=^`H+RL&<%I[P:[]:P&)GN1_R*P >+M7_MA_J.?L:P,EC+`K4<3,-ZV_`\$]NOF[>L_^3EC3_W[]>[>"DQV.5<0V*_K >+M(&^?H'3&,@+Z].K6$HPW0G\DL%]+SX%#7[#45);6KWM7)S#9+VT2V*]:O_Z# >+M<Y*'^R7E]'7MA*`QWDMM'-BO@UL?#_<^GWSBYMK960CL9[#/N@F46';M)>I5 >+MU*-;U\YM+?C`?K4(.19MNG5S[=JE8POSTL!^59R:-V]@CPW.F4K45*+F[Z)& >+M\BE,AB*IC:V-E1DM@6]&U)2([:MR58L=[.UM:!U3M[T?89-.HIP@6(@=JHFJ >+M%56MPN<1F6S\Q_1T0EA)W!$46VY?K5K#.M6J.M:UM\7FT?0O`1`UZ8^>)"0E >+M)#X\2TI-24I.Y5)5C^*..!!JS*I6JYN3W*9EPNM:MK82,/GW`$1->MRCA_'W >+M[\??VT.HN?\@+N[^O0=Q=Z,)-98.56O&LY1$%E_-UM8<C/]H@`-5[XSX!W%< >+MG#A>\Q.!YG;<O7OW\5S]X.[/!!J;*E6K-GO(V(/&=K:VEF#RMP0(FM'KI.LT >+M<\C\N^@7_?EXKK5]%8>6B8PE.]O9VEB`\3\78/U&KULW2CQ*,X&HOELL7LP1 >+M'8+&TMZ^VA/VX`%+JF9K+063/SA`T(Q>1RI=-YI`([&SKYD9U[CQ_9<U;*S$ >+M`,9_?B"EP81N1&%E:U?-P<ZV2C4;*^KWC?X6`2$CLK$5VQ;;6%M9B@@Q9YL@ >+M8DI$5C:<3;&UE94%1Y`9:$V0$4O-S:5B;&C.5@*F$C!_`S#8QC2IC"#Z/Q5! >+MM'FEO?^G[!TN$4-GBADKK2AFK)R3Z\,!'OJ+F+'R9\_T`0%#_S)F+.7^9V+& >+M$MW;M-6#_V;,6"+[EV+&$H-_-68L\3"("3@LH/??C!E+#`QB`@[_9?C?BQE+ >+M]`91`9&^H@B9^[A]IE$!Y?";051`I"T3(7.?:-_'HP(>O*"J@F]CM(U$! >+M^V6,'.W9M45I5$#3F+%N%4<%[&<2%=`T9JR;263`194>4>D1E1YAX!'ADK[@ >+M7WX`Y3`N3.\.(_\B@')8OWYZ=_CD+P,H4^Y_)H`RT97O#A\-H$QD_U(`96+P >+M+P90)A8&WM"D>=V_%T"9Z`V<H9E7LX\$4"XHZPQ$;^`,2%^!,[PO)X!R&+@: >+M.`/2FCK#F[\,H-RZ6?U_+H#RH(S)4_P].MA-]._3V_]O!E`>!.`O]M<`[7W] >+M!P(HA\/WE9Y0Z0F5GJ#K%<J+(CZ!FZ#W!:^/1A&?T*"!WA/:_T44<<K[ST01 >+M)SKT`Z^_&46<R/ZE*.+$X%^,(DXL#/R@3OWJ?S.*.#$P<(2ZKG4KC"*N+.L& >+M1&W@!DA=413Q!]P#4S>8`+4-W`!I3:.(OW\@>O!Q-W"J6Z,B-U@G7O<1-^B3 >+MX1_0UZ6QI9]'A_8>Y4417U>Q&_0!\!'DKIAE.#]`R >+M2C+')`72"-'GK8E6!.9,BKF0VPT*<Z8+4V_!S/C%.$T0Q;<WC&6O\:3H]IX0 >+M4QKX7L2OZ5'`305=5(`06<U6&]=>B!IJHZ4WR59Z\4XI0]U%S5`JR[#T^J4B >+MTFD];5THI)MF$(4`Y4L<2@%*^?I3@IJM74N15Z<QD5;,H7A:K%,C$CVD_6%A >+M6%;11,!$_C'6&:2.R95:_[=H/5P"4!.*PA]>O/BP-`H[2\V2R[-2^0>8]6&D >+MJY6&7Y=GOW[Y\G6VG,*O;U^[:OZ<*5.FSUFX:FDR9BHG8+3497-R7D%>3DX2 >+M0$[/;KT^Z=M_@)>W7_!\"ABM2:2/.#`O$RM:5)SUX=U[E2H_5Y$&D/OC^>-7 >+M;]Z\^O#QG>OW*52TYCE]7.<?;S:.$BW*?B-7(.';8Y^8EPD2C8/FVY?I+E[F >+M/OX!=H,`T>+LG)QWA>_?9CY+UH6'WK4+C@OAH9%N:`+17:>-H@8!HH.T\=7E >+MV3DO([*>IY;&5]]%&YEX8@D49^R&^Q?IKH-!8.@@/K!SD3Q;WNM9:@J7\I8/ >+M#+UKUW@W+)<"0YN!ZAK<I$T@1A&A]U*1DFQ.KC8WHQN9?$3H76YB-Q4<5]RF >+M!?6:MEB4/@[TTY2$DR?*Q('FQ5,?QV(<X,VUQZDI3Y^E)B8G):[<9A+V&3,> >+MYXZ7Y-(3I"6=YI,J.M&S3F_N[0GZ]%-?OV'>/K[?;#,-^7R<#_F,>G\EP;<9 >+MO+GUQ]F3QX\>._QK9-31G<:1GH]S!25*/O-\S#P?QP[;5JQ?OV)%.!>NG#MG >+M1I!1B&<UA7BN#^BD=+%K)7HKT?M?B]YPB1/?_D;LW1M1BN"+U^[$Q=VY=K$B >+M!,???Q@?__!^/"'XT,X?-JQ=$?[%FHW?;:H`P9)6X;=>Y:8]Q($7*$;X^8\, >+M'#,V:-+TSU;R"$[@AW#E()@KSBQZ\SRGN%B1%'\5D;C_XJGKMV]=>_3DWO4X >+M'L)/Z2.V'`ASV;GRM%2DE.^CZ"EE,7SS3S)A^FY3#'/9V?*,U/3<G+0G24DZ >+M%,?$P*E2%#_FG\#P-4;Q!"V*LUZD)NY*2$PN17%,L`&*TW;`[=\(Q;^5HG@" >+M3YDES\I(=TU,YBD1Q3$Q&X.Q7"V*8^%*&13O`1[^G%SU4FK&Z6`<$RP.5L&I >+M\F"<FO+DQ+$R,.;E4Y\28'SU87)*ZM.4Q.3$A!7?F,`8,Y[B3NE@/(^'\3R" >+M\9W=XWS]?(9Y#_;VV?J-*8Q/Z6`L1V3*$<8W+YXY?CPJZO"O$4>B=AC#^)0> >+MQO,P\SR$\=;E:]>%AR_GEBOGS)X^H5P8>^@;X4H(5T+XOQC"U!([@LK?S<V? >+M,,&#V&WVDK"P);/#*P!Q>-C25>O6K5H:%HX@CCX4L6?7=]]NW[GWT.X*0"RJ >+MY;/C]OV(5<MF`;R>'3)K]MSY"T(7AV_XF@=Q/'U<+A_$!0F'[Q44W-LBFX=0 >+M_/7/F%MW[]YXG'#_9OQC_1CD3/D@SKQU$"EO37<2EP?BJ^?)@*G;R@%Q5MSA >+M8W&WHWZ]GJ`#<5P<Q)2"F)YX+3GK;0SB<:1@+ONM_.F5PS]./G#A0;(>Q7'K >+M#%",)5XZSJ,X0D#QS*U(RZ,X*S7^5L/K\4E:%,?%1:_#@K4H_@U^JVZ,XO<7 >+M=@HH+GZ9F2ZB)_]X$,>M$Z]#P&E!;".`.(-`G)B2]/#8D3(@YL53QVA!')^4 >+MG)J:G)#XY/'RKTU`C!ECN!@MB#O.)EW@)X%X5^#0H8.'>`WP&K+E:U,0Q^A` >+MG(ZX3$<0WSA_ZFC4X<.']A^(.+S=&,0Q>A#/QLRSL=I?+UV]>BFWM$"V=.:, >+MJ>/*!7%__J)K)8`K`?S?#&#M>%@DM;"0BJ`I:`)I$2@0E5`H<>SL[M[944+_ >+MN:'_9V(K)H4/(D>_'\Z?_\'/4015H<2;$DL8_1^Q%:V;[$<.Q2KYCB[FF"IB >+M../@EX3H&3A5\?G^E@97)4R3S,3\*DI5T,0PCA9<\..8EA=_V5M_F?XZ6-.! >+M%F,":5VF&DCIH<`.M$X3B.?50<PTF4AJQT0*+J=$D:/@%)K7^%&2HZ!__AUS >+MAZ5/%](3N$2K!`?(]V;LSH^P^1AC8U!_F'!%%7L%#RZ6NZ*)O<)=P3QL:&NL >+MG3=]\7DTQX[;'G<`%7-T%/ZXE[XIP6JW:`^WFU):MQ926FM)N`WJ]1O6;^`V >+MB-9S&[CUF@WTE[QC&!/^DI>^1=J*A(5*0E6+0D,7X7?72L/\9QJ&O,8%-"<9 >+MZNDQW7O?G!Z"@QES9@[Y[Q2OVRT?.[Q1V/>;L&J%;++W,!:RF/];BIQ+G2/? >+MO(F:V?RK)6@9CM.(.`M.))`I+FWOTMRE>:?9OU):"?>=6JI6/U]+&SZ*V;`A >+M;!B%`LFY="EA)/W_*<?68MFJ%ZLR*8.8E8!6%LR=?6G[)4!38P4XIEK.1*SX >+M15A**L\I?=3P+<"D:.6T;.0%[.R/9UG$CP]P5H!Y52L8>S'W:F&JP+0`],(; >+ML<W#K$775CS;&!O[EL^J>2P@P9CO@[,_,IYOT265*B3U[L7T5/JKG$*JS4\A >+M)WFF\DL_ES*]IBHL5CXMS#R71OG,D9E"KF5&4O)"GG^2P"4H'R<F)CV/Y;E1 >+MC=B8*3RWUWIN-IPYST"3?8F[]`'8@Q]_Q&I&T9_CH+`Z3:U?.".8\L^K-.7_ >+M7TP9+NY;H6>^S<YINVS,\$:?;5MC:LZ7T1T.*A21TYNNF5_&G-G1FSLV:=O$ >+M9>K.N;PYORW/G/+HZ/M^1N9,*VO.K.C-T:7F7":8,SG)U)Q9R,O4G.%HSCE7 >+M/R259\Y2MF1.Y97P9QO_O)R;6,:<>KYZ<RK_4*FFI=RY^#RQC#DSH[>7,KVJ >+M^E!4D/(A[=PSO3DSM<STYCS[\!'W2/G@\>,G*9?+F/.5GIO>G)G17'2%YOQ\ >+M^L11'_/,2E/^UYGR8Y[YXE%"R]"1/@UFKIUI:LX'JYON>?[\YREU)OF6,>>C >+MU2'-ZC2JTV3(?%_>G-MX<ZXV-N?#U:M/]A;,N88WY^?)9<T9OSKD_ZP5'IT_ >+M:L#167']"GIT7@*:A1J=/W[6`:,S[_#'*]BB\R+<6&#(__AZL.YNU]X#+RYA >+M1.<%F+GPZ/RZY\>/])NG=M^\A!&=%UH+$(8>^O'QVZ=;GVYONP&/3IAA\.C< >+M<NX\X_D?9R]<N'CU`$9T7H>;!H_.<ZV,K3BC,]W5UAQ?SAR-RB$7E:"<^:\1 >+MZ/Q_D+/U[X/.UN<$M>##09/6H*/T03P>8)L?0@.['&%`F3]A#`S_.:`B/.`9 >+M^K^-H-GYO^&0&7L^^(P]:3R@8WB0!-B`UF+A_64`.>(?Z,!WJ(@(@@'VSY]" >+MAG"02>&@?4_#VX/US*`#<H@ZF9X'Z<@>7*?U,-#AM!YFA/3VCYBG]>P`FK<C >+M$XA+4>5V:`*Q)1![`G$D2**>A^$_29@3%>,*-P`E:?:P@;@``%!+`P04```` >+M"``B<F0Q3B05*SP```!#````&``5`&)R;W=S97(O<V5A<F-H+6%R<F]W+F=I >+M9E54"0`#+X"*05%YR$%5>`0`Z`-D`'/W=+.P3.1FX&28R,#P__]_!ABI^).% >+MD8&!B4$'R&8`R3LPB4SIUUP@P,\<7'(P4OC&''GQQ/DM(@S6`%!+`P04```` >+M"`#8F9,Q_V'3<E4E``![)0``&0`5`&)R;W=S97(O5&]O;&)A<BUS;6%L;"YP >+M;F=55`D``W<9QD%1><A!57@$`.@#9`!MNF54',\3+KS+PN+N#B%8D$6"2Q8) >+M!(($)[A#@.#N&TAP=[?@'MP7#[`X)#@$@@5WA[O_W_M^NW?F5/69ZNXZ-35= >+M54^=,^$?5.1QL:BP````KL([677D>((D'@PPDD,ZKUF0`]CLO;PLX/E_=UYG >+M22)2@NGT[J,K`(!-_#\"`C*R*)!"=#<%Y;?HLS@D`#R(;<%P*`#``%"0E=+T >+M6CS,]O32G+NZ?F,]CK"8QI`@E3YF>/N!X%/\.TR370KB3\`_KR(84`B!'`6# >+M=I#=2Z.Z0HP7/D5A;*5!#&S*WVVD,0D8@-/%A]>Q]=;"Z0@E%KC6VAK_O??V >+M`B)=XVK!U_^W9W(GRL/CH@`\$AZ0IQEP!8*`#D$M`=PG$@18;(%38AB0W/(& >+M9S@YM*M#T#B`?F<GP[3:NHP!AP&Q.A1_9JW<^W!+X1$HW-OQ9RPG!=?QJN'@ >+MR2G$^\D/)Y#?6W_7O/,B]ZM6QP[C.H;354U`ZXJ.0AKH$]DZ<^&7PL`O'SF[ >+M!*4[EIC4.^8DI#D[6)0NPGDQ"[^`O+2^S.AD7E]H+*#HXH7H.%<&_CS=]@;4 >+MC1R+>YY+F"%V@ON#`B\K1R060?I6B#1&CZ-E]K.S,UDCHYR?8V.D^DWVA)XK >+M[JF`IIL/%KU[;EC0OV.4^T^`WC].86N!SX;VRRU3`BFFDCEO6`"F9&?BS\2U >+M^26GD]<S!;&.N;Z?5ZM%%+S;MU_2KDE>+\JLJ4:246]3/P^-U"L.Z53I,?LU >+M=OI>:S<%%(KOL(J)Z?_=WHY@URCVRFQ7TSFW3`:P2+<J$I=KHJQ.9&AI).:T >+M<G\AF]-"-?&$IAM^L/54MPT%?<6C6S)$Q+_8^0T'Y,D:&:]1D#Y_5#*P7W(: >+MT;U!$(F^#B]T/*9NVOF[?84:`<,P:>FP*CI:=#%_-'$+E.M\1@.DIZ>3D).? >+MCXL=:[K3]8<(%.H&W(`.0O_T;@1MUTG4.IQOCS7J-=IN2>H6RN&JY(B'KS@, >+M.337.ZY)WEWN>X);,.?W@"8X8)"WZZ#ZCRT.`%5`LHRI*>.;YP?^W\:!$O2! >+M#[R%\K%@"E2_;1$'QH?]#'[K\0_M'I^[CYGZ_?J&C2O=24I\@J=L6A?^O18$ >+M\U`?A!Y<34.^]M2)M%7=-A1PNFFK#>NP=`<'J?I'*0."85I:_M9OU1XZ:]@X >+M;T#Z"V])@A6/)<N674898FB&\UN^A]"*!9A=_.R9K2%7G;HU1V3=]\[!D]IO >+MIT/,9HX,VIK+/+7H$IIV-5;3)71O*&\2E<O+%(XOJ^56/H#D@@67M#_9BX1\ >+M66&WH<@_\[KG.5K[N+P?^\):D`?-!E#9Y3A%7?4-7['80>!K)/G[\+#:DTNA >+M3%$!V[06DG?HWUA7)*\O-4HF3D=W(!!`#J`R![00\"`,,!^**4(2#JUHTLF) >+MDY'OH0!A7B\H#Z%6S-4UL'^\>G3^;WLLTZ[1885*2TN-!"W5I*P\@@"E9$8! >+MZ?R/G3[N53`0>A>6`?G/A\#+.1WA;)4?/WX(.V^@=OI<;NS7=!MM[?OG^%]] >+M3$A(`.BV>W"117[%HQ4%?$!.GX51OMX]U*K0+MJ+_9I&5ZQ5WV81U1(CQ0X* >+M5SD(F[)I6(+0V6R*!T*EDK:>K@864/(0[F-=P2(/OK=M07_+U@\^&1FZ=3?G >+M2CZZ/T^\=IP:=ZWJKZ9=<U$>HO:'92(02O\[$>7E?F?#K$K9HLFEI6QT@0^G >+MBD/F7"(3JX>Y?.:KF8C1C%%EH4N@2=\WQ_#HF.W-V%1^2[_`\>W<RR(&.13Z >+MW=\="8**&*?Y$$"D<KNK2(*.;OI>/JKM*]9&U>\V/4.5NCP(:@R]"BR-G'\T >+M4ER1P'I"Z3ZFVB7[L`0^>S!/A@Q/>E12=O>[$+4_.5;YB.6/KX<9O41>=MR! >+MA)1U)_^--V0NW)T#`^H7U7"P"`GC9\N)Y;<[L;]Q#AO%878T/;V)Q4U[_K7] >+MA]S54\+M;^IQ5\JVC0@!Y)8YM-JP?;K-W4[4XP`#*B<'SA;S9.'GGX&$63MD >+ME:<3V[*A8UW9HF=/;GE'J\E,R-?RVE7HY'H.1E$:(L/E:WDY1;0<,BQ42F9P >+M3<C;7T5(UUN-I?%9*J:F&@=XTYQ865:LM'LZCN>^F7AZO%^HWR&_.EK9-_Y3 >+M7-2:FYU2;#IC,MGP24I*JM45F2:2FSR/C3)>?RI(1!5KVJ`Y^-K.&R(T2#1' >+M`]]UB\BPW0N7&Y].8'OO;BYB[#64(U.YT,#$`$@ES;Z^U0\3Z=\_3=AXT7UM >+M\,-"H?48TGFAOFX5E)49ON?_L>/&^<</.@9.SI"-#;X73#)[J;/QNZ)J69); >+M,\Q/ZP/D.=;3?\4>)'=VIPH[KE?%$-GW<'1XJ)%4RR=/;I&2<7--`5/><O`! >+M'FNY5'[I[.!VYY"7Y>*848UAYQ:#=KM'M5IG@Z0U)$G=MO%\(27XX7HO/,E( >+MN*3[*E>AKKC=N$4R@:=>6C?MJ][$4;]W7="#O`9[G6A8]C6FK2:MX-IB1B1Y >+M)%M=W\S]^YL_48\#_8*&_,8!^\3G0NVQ]3N[WB3!$0LV<"-M1+%G+D/@1!LK >+M+'`X[TN=_D0FMP<57_3.,>U#\.N^B;TU4W@0\'MQ,9_7B4G`_:%0AN#GD>/N >+M9Y5@,*[7X^7OX9&1,[]KB_7W01Z'B\YC&X-^5_>LI"S=E[=X]AF7B3M_,F$" >+M<'(QSZ.#U+2TL&&+7@L^4\',.KVJD)`0IZ-E$7M!_595!P=N_[N+6\AD-Q^Q >+MS^W9%K=^_&JG;[W_O<?=U>&^.^Y7`O'3?N*T,2O`],P,/K=11XO"1(X$T&:U >+M0T0Y4W#.F*-2FV-G/)L#W<14(F;*(RS.=LP04+Q[0-?U=)QIT7TFHN_Q5]W* >+MO>6("0L;FYV-#:J6I/A&1$3$P/>P<77P>2!6OWM?1UT/$2WAX+)VKWO$^*OZ >+M]DL=\9$!YO+&8;:&AD;=TF&E7F/$[*RF=J6N&J4#/<HV:,-MU>'JJ84H:#?$ >+M@]/+AO<8\BQ(<!";@N#(4F&-)),8/UAP[<A)2TSLFRYZ-C48I"`BRF0,^2!. >+MJ6N_F#WZM%ROBY`;L<=#?GZ/T.+PZ')@YDH/?>N07\SV37ID6E3Y/14CJC0& >+M@N605\C3]MUL\/O;"7]V'Y;]E<YJPE""^6R3QL7:7!%8F92^K545H`2DX<<? >+M@??XI<]AY@401513Y_9/5*>G4I7MMNNXTR_'FV^?'5?-T6@DIG>^/C6Y1_,_ >+M_^9:@'O"M?,D3>I2#/XN?I<"X,+8:(,&@H"@-%'W5^[_9H%P"[YDWVYD@&DT >+M.QBJLCQ-6UXA2RPR3TJ/;,RZ,#BX?2>UUDF.3TR4Z?3)T'=9AP,SA!R?BCI4 >+M=]+2**ZS1+)5*K4K,M$Z&]O<]U'<\&05?2[_;3TU=_NV+89@$E\89R(R!/83 >+M;O_UP+NB^`=,Y$SZ/]ZA>\P%K9B"[+BS:_;'`]LL34I$(WIT8UI!P)K]S<+. >+MBTFFR#LNHPNGUN!6$?3;@WH(</7$_0]KKH%>#2F'=JWMW"MU]0[T@^O#)?D* >+M[2JZ)(#'Q%X72![H%7C;#$SOC2CHP/=;;UJW6AU]0-^I.\D/Y0BZ3M8QLNJ] >+M66+GXN*XS@0RY!]&FYWG%#YX'-#(S07-60U9>:X[8465]XP5LQ1&2%W20CF; >+M%IU%LX]B1R]<@**O^V53MYV_(SZ6"[42;TIKV>/!YO"*M,6\8_'Z[H;HE.JB >+M>0>$"F]^.@2DNV)[9.*6$&>A_`NA`!!QL3#=[AS:WT_X>ZRCK:\8VJUN]]?H >+MYX!7CQ8+)_3'])K"43-01J>/,U0_AHL%%+7!J:FI1W=R`U52N0V7I<T$,PFE >+MX]+3AW_&,Z6__D2$1"+5##&3P4AD18!<%Y',L1!P7(/CZ,<!^#PBJGZB1IE; >+M]10U/R]\@(?N$4K;WE>=VZ8'P`L%A?;!D*#$JMZTV6Y'F`;O.JLMJ8!D0X]. >+M<\/=4-!^?OWIAK`2KSKP9U[VJ*S5X]UEI7YSC/O^+^?3C;=CV_29O(.QRN$\ >+MLANO!\T:%]F%.Q,AVEW2SLZ4@C*O59AI!O)\<,FTKG@I<!Q<5]_K7^Z5Y!(1 >+M$O90UW0"&#R>6N(3-M0E[RQ(C5!T'69><W%%_^D+/5]VG0#>H$*@HRE<G?2. >+M*5`W:;'K:P&[7R>_]!WKK,:H`"E<^H/ZCIT#1RM=B6+G=%E#O6CGH[#K](,2 >+MRM<V#*?.SJO!NO*!M]JM^>Y?;)*3Y++E/C_:1A?4L_H]7:TIB[%S(ZY]'_?Z >+MNFL]_6]+JU?8V5PQ4%4.5+X2A!+.OC\H2>,2QK$Z4*G%=L*`R6!M3,V@)5%Q >+MKC>0OOO\Z\?)WWAC&.B2JO'FJCUZGVEG7!_^3S5:OP3BE5'\N;W6;VD*ZX?K >+M1C\F0$U3L]_<W(%15DO$2+.WI#V025P\JZ;[*4,E6Q08EYM;DS2QAF%/%%?' >+MRWLPWY6]FT8AY^_&47/IGYJ00$0"=VC>C+`6I8UQZ5F9J]#Y[<*;NTHS-C%1 >+M@LRR-&(>E5DN;C:_<S%#8+X7NW_`U?@`3X!'I7Y[2JRDGEPLG<1\HUTJV6J- >+M\9J_NHT-V_/=;VKQZV57I4S!PQ5G<WZO\S7'6Q,3[%Z28(UH6=[4T^4$]#V_ >+M3=FL;SRHC*25:]`@:@`(Q(9Y21UY+%0UAZ)DJ2U7I"R,UW_?QL#(F)\UW79_ >+MU%Y!,4^T13%_J,_,FGHO:=8?IOA[9*_6U=6%")L<L7-5UWP^)4_/[S=/D(6' >+M;FG)S)`E63@YLGIY'*9M@'):)O-&1[9C^.#\CT=F\G0DJ3+G>UGWW'6T&)K6 >+M=?NU8E'A;)3VCT7#7[;2B#/4W'1G-/]$+TX^#:O>VMKK'.!Q>)2LRX83K_\, >+M?X/WBX#58Q"$ET?@A8]AMUCL/[Y_[$_F78WSQ+LIQ:*:._$U@:AK.;[OJ"HS >+MOM7H3S2:9G#O^J`SYQLO$B0^5%,C7&ES=^4W^ZI`KG(@*.;3JE>W0>QS?=37 >+M]'FI=HEVT9&[3S]H3/O(*%`IC2=?6\&9/=^4S':V-'_LN4P#"21C:,7D_/S$ >+M0_'I/>J=C8SHX$W0PLGJ[3-+B<48QZ[;;T@,9/::JF[!/DV)Q5XPDYJ3>^8I >+MPVZQSGU?>_7A-]%@](3?;YEP`T7*5^4?<$PC>'2AP@M7&M73E<I"?VK%G+&N >+M6Q4M`5>H#LSK[HT7U2OW*C7ZS0Y#WP/*Y"$&+;M"21W(/J*FDLK+Y/V-Q7I' >+MA[B9F5E89.3FS>GFWZVM^/CX/Z`.O(";/[YM*Y/9=NT&0PWM1U;;"%]V3L[O >+M)WZ,Y./DVAERK]`W_(T[]8O<IA:M2WPD5OE=XR$G*)7W5TE5_FNZQ![!7Q2T >+MU'K+G4_7)PXRLB,,H:%O1WE_APVRX.AFHV3*G&C`0":&SCW#:\:^IV4'GR". >+M$0'[\4MK',(>NW+K`V+DW.&<&H6ZW8<,'IFDH<17-!"KOF;]F]/#5I5UWKQ2 >+M,[QZ\>+WBHH_Q\>+I8+!-"(N_:0/[&_"Y<S1`EMU:E:/?$E)/\6RL\\I74]/ >+MJR-]N#_;`QV*)(^X-9EQ?/`=@^A1<;1R"6:.C;5PG[1)(E-&'VGXQ2]D&]6W >+MN&\V"OME&>!K][].RJ,]6Z-$Y>SIGI['85G8Q=6U3*T07%3$3*&E]>H5QUMR >+MR(<**^6-S4T1CP/=KE1$B%/Z-!;XPWKO@'K-A#O:J+C4`6Y+<M!\,@@\#SR0 >+M=/^GR<J@#Z8R=H-1>^G31R4\V7\MQK?G,FQ+0H*C'"`(K,E38ZB1X7KQ^J1> >+M%>PP4QQM_'`P7Y?M(.0VY,`E(Y#AQ7*O$$,_46@9298EX9H@<1]8^'9&+GD; >+MML)0O2&'EQON\&8=3??'8>5CSLK.P>#VG&;EE7I7:V,V2PO>&/X:3QVYX-NB >+MR@:<S+[A^!>L[5BT>":83@\GQ;'$V@;B0C/:;G7`#\0_LW)2ECOL!GM5U$ZY >+MG.>KTA#Y\^_'3V?0L;.N$LYS@>U!6+<86EH<@);*RJB-#3.)W9%&)%!WN;O8 >+M>\7>7F^]8G4V\L65_&;W7H9T''F,';9G@J_A,!#GQQ\6%34DZHC-Y^VRDIR" >+M8T2Z`[VNHXJOW5+@0WRI+6%(B"X%GP4/VLZX&A<?2F8C#B,J7@GHCUL!&]CC >+M8%ZJ2D\`Z6<*(XKYOE_P+3(VNAVO2Q@'J)H>$+A8IC'$*.'K]B;I$>':#D.K >+M)@#PK&P*203MM']1RTDJQ[<O*BE)S,DY\E3>9YT]'8$#>'EY7[*RUMLO\.DU >+MV7\$(O9_5[)(2L;(H%\E8PN7ERN.TX<V7I@6RKK$;*,UQ,LLM#]ECZ[0:N3? >+M`B%P8,EZKNHA)/O69HFG/%.J3M^079-&Q4GX<#Y+T%ZEIY6OA[I;WQDK!]T` >+M<ZPR*]M8`C]$0;M1]/W$Y?+#8D,1$]TSG_OAZ`S;3S$WO547QA/<N,BFB3:_ >+MF+K**%LKXE%\NJ*\645D/V]5+\(P<XAL!-R.EM,_+S7='JIF"</&/-@?Q2U^ >+M11H=EZ#78O>CX]&8S->:6@<-=PTZ(VM(",&RSWY5_\!`J]1^+(R+D?&AUI)C >+MS<%@XBOVVSR;'OZW:M]?N(\`$A1SOW?YV.=T48E%/MULXD=$1CZB_+H\?O`[ >+M=DZ!:-<LH\0A77D7-/<*THW6D'*]%OC&TM+R8G<J^--,<7Q.CHJN+D5-UYUM >+MJZMR<5P0Q7PLO7BY8[<4O:9IFYP6V$1<8)>T:83,ZRB<R#JR]0UYB=)GLWR% >+MD)YL;I>1H.058&ADUL/^-9]*2C@$\*A-P^$D+3ETU"L9UW58:"U(1K[M+KW4 >+MG8E.\E,U_.@1?$$Y:2<`[V#=+EAUHB4?S]Z0[A&9YI-WN9C$!.,=(U^,?'>Y >+M`J02JC$;739*/OKK%;>)35>9#"BKSSN\T6TM&R^TW=,`RPQWH<7B:B0G/?*D >+M6(GD;<\?I[C4U*$?EJ,&"+'TLR4V2-%9##TD]96HST6I\7K;)CF>6#25`(/D >+MDV"EI7:6S:8VH'T&-F?;9Z&YQ<T;3"=KS:V!)ZN%&(4N%K#F5/J+=*,1S:/H >+MMKF5Q<ZKAF?"+C]?'ZT@@[>OD])FX8=E4E(2`26E@JUM^>KG^\E<,3=F^!U_ >+M)J:7+&SO<T5%,=Z<5L$8E@I#C>:):WZP,1:M!W"B0(OF(ZC#4;B6)*W*?,6E >+M=\8:"CF=VS&&H.R^*3@^P,KP7UAD?Y2_\%_83%MZ:=`=("$?0Q,/>X66CS&1 >+MQHE!@,6&\@%5&MX?3FQHQT.AN\#O2DB=FN3[0)G^2I0)I$V_X;N3?+.=Z3B2 >+M?MOU8F(HAM8<::XO@-RV'WOB,?'AP4]:1D9JRB#T_5.VU249&1E#"!)@:!@8 >+M;$1`W[`+N7AE3*P&E7N!VPL*"ZT-F6];E:OK.:IK7\'7.L:WD)V8?W&D!=V\ >+MLHNJ^.OT&>]0=G:N`3U;R^%V?90QD#$O^%D%X.%(`V!!4;"YSR)=]USG6'=? >+MAUMV%*+Q@,A?BAF/"<J#^[E+E*%+S-M$E<DZM=S/<=XG4/WB+%5/JK)R?*4C >+MWYEE`;O?(J\.^LMW]^\N?`L+"\F?<2V=&$],F'>6L<69QA:N(><BA5.?_]YT >+M3W^YA/?XK+^AKD1RQ1"1.+)*=+Q?H/,W2<TF$B>D*C:U="TN)^!]6(U20/`E >+MO%H*;1^&'`G^6T7\'T?_3X+<;B+A5$LGK(M/\Y_8UZ['Q^0_[2;-RI25Z"RZ >+M^'Z?3/^OE5>61$@%F+]`J==B_R\UR$D.\__)!AIQ?H%TQL>K_S\+C>OBD*8\ >+M+_[_3PK8OT#/RGK_;7S0^<_V!AM*W@Z9'UOV#3[K3ZC:^'X@/8G:^.XF.N'1 >+MPAI%:E;E)S]O_ZZ'HQJZEJ_[WA$'6L>;-G?6RM**6&#H\+M!'#;BQ*=I@=,Y >+MGQM=B'^@R"7<\TRH%#W'+QGI)2O@'?7KM<N8)-UQ%)GI?Y]ZEX2SU#^)=NN% >+M'TOB[X9HX]N7;^@>)VQV#I'2M".$H=HV@:L@4;V$^1?'Q*5GBR@7TA4-?(JX >+MCN!BA0J+2/&:7G%LQJ[$S<]"58*Y*(=N0S,PBEM?;/H)1]H@'FSOG+6KB;K2 >+M(-,-!BK`H$+S)!%/#+W2;&Z>>(6/..$[,NF_/GO\'!^[U8RV2XCCP!>7?(&% >+M3YPG1M4G1N/^G%`]+GY!$_B#-@V:C_CDET)H+J6R,/""FG2(T@2L9PO%W[B# >+MZTH7J@`3RZ9N""GCC3BD*M\11"7VDO^SYKW?9;EW;7@H:,%A;&,YT!X',8$Z >+M)/7X/AN:E(H+:C;OLNR-SB7NO/5-WPF`IJ`Z3H.F:%*&-+9N02]!]V9F?V3" >+M5B06K_2[C_D=Z;#R+/"*000^^F^.4'OYT7G!/,I4BHT`SA2HSX3@3_SY'W^/ >+M5V-8=<Y6GU:%.`0S]('FP3Y1:'QC5I(`<-FK->!S&(8YVJ1D-?=H11ZBAL"M >+M47_5-9F.)<@A6:EW3$#@A$5B^9O!^K>AQ03L93:I+#=5\[,@8+-=E#CH4/6` >+MX?'O<+^'-W4MP8H#CDFQQ_Z4.F]+FA<-3YC>&#Y@A3F/H\.S_4-`\G&G'-\\ >+M&R8.(=RW[2N'&\\^#)8")$&S47%TANE@3)%2O/!EE-HTV\`IJVVZ,3?!7'UY >+MV\EXPC-)K`M9D+HALLHK;.@J"-*9?$),K4!I*7-_GIV02ZPYJC0ZJ8!6$D3/ >+M4/,\',90&2PV&!S09J-RMBH+.97FAD"&I5.[G8"[G*Y!>K)!"XA+IE:]Z(S_ >+MS_KWG_QA5^CT78EK.@KGHJU$-!CPV4;<&L!F8:\W%L]LE3+5Y+R]A0!/HP)* >+M1="JY.!*><1(A1;#>I7.L+(?[^<!R:/%`5'COOHYM899U9'>7W]15LB,^X#K >+M;?("!-=9<U$T>1/9N#]!ZM]FMRI?ERP!9<+V6RB#TJ[P43#[/7PH2F7ZNCP5 >+MY3KEOWA13H+?7VX2H5I!(GE!\^@&'&/:I&G<3$T%1/7>E).]"0@Q*.LPO(]K >+M^`#=@<_3-!7?E()US(K<"QV3\8=[%)]FC'F4IJ)YD;<@-Q1,AQ4">`;+Y6F9 >+MW!)O$YYY%[IU2M'AGZ>%<C)HQ'CF$;P0>REKWC9[9`'\5DMPZ"_:;/6"0%0@ >+M.<7HQ1QNV=R#CHE%D?_EMU#_:./QV!,7\<7<Z38BL$,2W(NA[N.+4=@I&7$) >+M3&E!-:IJP"KO\R.%X!WEM0`T,%W];*X$9/@0/82VBKHA*H[:3_C[28I!Y4LA >+M'>Z]WX8U@?O6[91L<R9H-MX?!3,[%]7'A"?9N^T]?+9RFP;-P:^2*S2$@$E4 >+MBQ6T*]Z,Y@LPKTPWA:XA[K)0OLTV?P!?]!$E@V:+]^#-L*,&NEN!R>1M&<&? >+MT'FS]`A,H!(%PG=RY*0K-?*P-4V?65=^^"T]VFS*H[L1"^1C225?W[=:/`JV >+MGOTCKI6%S;>MK5<#T?&2D`3O^J(3B_T<(?57^6Z8!1^3GI<TGRA:"/4>;9D: >+MND-)C3%!GO&()04PON_(O'2!)MU'NHFQ*T![G3>H&&!*J\^C@!%/6PQ;G*_B >+M&@U:P@73M-VW(!X(/M&FP?2W[F.F!E`T1?`;_:("E<+"V]V[NMYSCQ'FBT-( >+MXR!%E]D/$NGO`QEXXN`I@*@$&+&^@%F,9IJ6J?ICQ[WZBV;@;_EOKNV02#C: >+M*KC?,P"G5'ZY4=5FK<87Z]W+KM$9T?Q2KTX/(W],[=_NN`J[!2LEJ^X3@-^^ >+M!KGI!JDH><T7_HZ[VHE*C+(.8KC]Y7XBYTE@&G1UA]B=!I+O$O#/#72G84I] >+M2<!KC>8Q5:(.592QJ28EO;^],46;_?+,'$(G**NRM.<^5QJ=/'5&P27>H+I6 >+M)O3O"AG%Y\Q][M?#J=)ZI."8A-]HO?"^EYNXB4JB8@"PX,UN)^\)5,*\XE4A >+M\#RH6AP0XO9I6!9*.YO="K4PP_$<N8^:DQ!BA)Y068P@4O'%Q3E#Q"Y&\N5> >+M7H^*X,RB5RN:<%28HJ2+@E5P7J:L]QQ(8\13$TE'(`J\0,?19-C$G8CN*,'? >+MGP*$XMAZ4MC&5L%$_>%'7:8UR@$4+>$=U?FHOB"AM,8N24S#Y[T_V"0`F6/' >+M0>>\5-332T-;/C76@VTQ:F<""N$ZNA*8?H*=*UW:5UXW\@_T`R8R]S*.->\3 >+M/7D)HJ<ZE+^4\,=)1;-``'4V[3]L=\E.HP[D%0=IV0/IF<D/K#_]P$H'D=`A >+M=OA<^8*&4TBT02`9G]-ZU(!O!!LRFNY!XI"98)B!E2V#I),PSS`V\9WY>JCE >+MFUYTD.?)"<PPSU\/W$&7^JC)\%YM]S`4B>K^?`<Q$O43&BZ=81),E1->_X-3 >+M;_?`84&>+0;D@6J6KJ7A.[#*C/CE_:$-IUP(J+`,_E[K=<6E9&TDS/`\C4'A >+MI52`XXMN>>^;7]4[_J7E.$F\3!)>]Q31RQPA%(2?3FE))PI\-DP9OK:H+#U> >+M]/GS.6U$KZ$Y=5H#++=KO<91_(]GH,O6VOQ7;6DZ&/%+/Z@HH34*&;?BPA(Q >+M?K=FY#`ET973`E0M\CWR-?37,HTTR%)8D+&&SJ+.=*K`\$70?#419WD^$W]N >+MLE_!Q*!R*GMHB97U/*\9$!XA"L7@I=6B?1F25FV;$6"5!M[@'"Z=D4J68'<A >+MO,2I5/VS6SA975K#@46+%85>[FNZ_B1)X16"AUI.#CX"6%`V;$8SO]N<:JKX >+M=[^GSMY1"G)&`WM<SC6Z\[]W];$WHXWVUDIVEJ00)CAY-;U2REG[]\Q[_Q76 >+M/<=P@B;`FA1%_V/T/O^>+6\M@9E/:3PE5$AKRV-]\0-_?=!NV`<Y'UV'Y"\W >+M@N6L=.QK0L*[H;#$<(='[+A_4_<H$+@J]*Y![B]PF#_#18G;B,_$@;XH?499 >+M8"G01(ZF!):?7<B&PI+_C2;%>TQ\CSH=B#T8]PC%M67&0R.Q;58%2=M,'[^E >+M!"RR2ZVWINW!;Y(P/!3R<%+M6U6O>B,7TJO,$8S28=5@4/W?QZ,S$TV=-UI" >+ML<1__8M];]Z5<W]]^=)K"!A/%`*[@RL'R5N^&<%FL@3R?[>,._@3W,[Y#>;B >+M)Q,DG!AO;9"I%$*`__Y*?>II.ZE=R*X.N[`\`7^YT$9QQZCA19BO^T1"ZN8* >+M`(#Z\+]_`;H'T+WDO8(\;9AQ<";)YKE)QZ7V1N]!OM_ERP\">^")AFL2.84Z >+M+V:BY:PP&263MMV,$XL/;*FBE_%#9D_H+*^!&Q5D7Z\PC8*^^^A!;=??-+"Y >+MKH'SH\#2Q8+K#'%NRDE-^2^98)O0?S:?$X=6;/07VCXP\:+OAHGX)9)\\0PJ >+M?JW4A1_&W+3)!)7(N-#'^IZ74<D71'`8#:,.=2+:A?C66^3QT'>9DTW6)`QX >+MP'XQ1WV:5B*'\F-V54_[ET'N.=D15K3G,6_O[W\E%G6+C>.#K)7+!]2RO1UD >+ME]JL+\[HI'=<,_]:4;X=))363#Z%EEJ,8Q3"T/@"XB`3>^P]@G`=2$@:[L7% >+M@?O$,16#5_S$A4%HL6CK$K?YBW>6G=*LL9]!"^%;S+5STGQ.!:PW5(I@AYDT >+M_.HPF`#_;1\/?S,&XP^FOA8T#%Q^5VR]/;>46+9V50+C*G&GC-Q00=`V3O@V >+M31S?1_[$>U65674YXGUG+(HDPB%,!G<E&FO8DL6_LB:+J9<O"L[_7C7Z!&'. >+M_2!]ES]0JPR%Z.$]@W>C>;]K9EB,=1[LCB28S_&?Z*:[M,E<K:J3"$Q=R;*B >+MKE+304IP1H.;N[B9$_+-5S'V[@7+7^)GH77(W1XF<M-[1`F!!6VXWWZ?O3%] >+MM8RGJWGXV,?LU:>5'`[5F5N_(A7"9CQ*L'=LB3*:0"85(:WJUF;WTII7L]?S >+M#;SO,NX5DM-S4]/UB():D?4=B(C_+?%O#!V/_QQ`0$DX2&)(3YJ/]O?%"^DT >+MG!"J:`0.26K@MDHE*^Q>SDZL"JPZB:(5/,3J1$610*@JR>/6`%Z=BI>C4:]O >+MR_BHHHC-?B`W_'(41LWSS3AN6S/G=8G>OH>--Y:4[GOLH:#34SE/@4E[[V=. >+M>AQQ+6[M)I+JD3N1W2ON^S!2"X4M0FY2A>\6JW(!'F:7J8\VV2+_S%P2+WC' >+M5BDH2C]-#@I-EI[0QMEJW@(I;-47L*+B'GF"P:M79VV$?-8.<=06Y8OM.?1? >+MFY(;4S3[!;8Z?L5).N*6R5:,DNA]=<=H;IGYL@J/?I#@@$ZSD\\GK.M#N')= >+MUNTT8YUU?L*9*EI`GRVTX)X"%"T_K.*VA_T?;34`RR]`6F6?J$I#8R*FTH2D >+M!QC19EV)ORG8.J1JZP"("7F?DUF<$I852([1.I23"#Q0"F<Q!%%`47/SP.^4 >+MTB+@9>NH=7V3-,:HM2`<&>$W/CQ.*4J\*X108WPO12/^>8XP".;E2_8&)!;1 >+M;"+WB<+K\)DLWKN+P+$WH2*P$SP#3,)-3!@G)VW63?/JIGX20XD+8?)_3ZVW >+M;M8(I*,2@+)]EA<&VX**C@RXOWF=;J&%'@^!X_`?GKQ.23&P2[5=.>#!R=US >+M->7D4WNB""^9/?QF5:`58.$65:`K%VU8]L*5]&C?;"/C9A[$U;.DGY'>]U)X >+MI1,U>\?YT6PB81V1<D#WKF:"=5^JDGRZ7)/)<MC0PME%W+EM]]0^]HE]A+P< >+M(Z_3=ITV+[+\C&52.>"XN+P#VXV_O!(U03-YXGL@QW<S>\;?QQFCNS7:=A69 >+M0A-^QY\UJZ@JI$U&C>F$N[@Y8%VX&_.,OW^4XSP$E@O$+]$W#[-9=D5-<Z<P >+M5-IJ?%>@'7@N3OH\3LH39A2$;IR_=!;[2C*PX&@Q;90FD,,DA:`@%K7.A?)Q >+MK0Y-W4S8,$?L']:O[KEDO(MG('IX*'</FF8I`'DIO%61K98V^?)_`%!+`P0* >+M```````[8&4QG"C/2W8'``!V!P``&0`5`&)R;W=S97(O;&EV96UA<FLM:71E >+M;2YP;F=55`D``P*RBT%1><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12```` >+M,````#`(!@```%<"^8<````&8DM'1`#_`/\`_Z"]IY,````)<$A9<P``"Q,` >+M``L3`0":G!@````'=$E-10?4"P41`3;.,%@E```'`TE$051XVM69?6Q451K& >+M?_?.3#M38-M*H07J@D4"I0U,I(5V9&7:4H50C5!K05$)XB8&EO+1Q=6NV:R[ >+MNHBXA<(6K?@7&M&(:.QFV4T,!4PQ-=`:L2KAP^[8=BW0$LO'5CKW[!]S[G`[ >+MO9VYTM%AW^3F[;GW//<^[WG>\_%.%0)6"KQ+9+L7J#>Y[P:JI6_!NJV7_D:Q >+M+8IL"$W33'L)(?#Y?+2UM3%OWCR`!X!](=T.:D>JO<+79/GKXLPA[+_O:``8 >+M!K;`;GS0V]MK"O#Y?'@\'O;NW<O2I4O?-5-"^)I0/WO+,HEO>Y6H8.VF/:Y= >+M0>G['A0;PI5,5U<75555='9VXO5Z:6AH^!!0S*#:V$S4^W==)]=^'-%4AWKN >+MJXC$;@2KFMU4KG9C__I#7.\]0OP_*YD]<SJ)B8ET=Y^GM;4U+`FUZTNH\Z+5 >+MKT=T-*-,N`-U\2MHDXLB!G`CV$$!:)J&?^1X^F8^QN5[ZQ"V>,8V_H$G5SW& >+MGCUOLG__?DLRJQW-*/7KT3YZ#JYVHQ8]B_;+O*ACU5#R`+;O/B=AW\/$'W^= >+MJW-_A^8:C:OACVC]/R"$B,S@UPV(^VH0]]7`Q3:TMQ\-$%FP&2UY4E2QJG&U >+MT:_^L=E<+7@.6V<SKD^V\=_9J[&=^P*N=%L*0-OW.$K:C,!U9P6,2D7[>%L@ >+M/?-71Q6KABZ9FJ:1N&,J"?^HX%+A7U"[6KD6ET3?I$+0_`RUW`YXZ8734.=% >+M?',D2$0]>QC1?APE/3>JV$$IU-_?CW+E/&K/&7Y(RJ`W?Q,:*GT3"_';G!$5 >+M$"OJH:H#L?(`RK^>'?BL]?VH8^VA"JBJRKD-_]%OT#\V.["RIF0&^X0S9<(= >+M,&I<<(W5]CV.6OIZH/%]^X_"]J5DP;A<R"H'105'`CS]'2D"+OS)/G?$B!$7 >+M317P^_WX_8%TT2\]O2(JT'84>CL1WQX;D!+ZWUK#9LO8,V>_H;!H/LZD5)R) >+M8W`FC,"9E(HK.962DA+[J5.G[-<56&9#]`5V)R-'$51'>O/-VAT<Q3=*`WZH >+M'#]YP!1GALU\*Y?=NSYEU9-K:3QZ--C/DY_/]IH:D9V=/?)Z`)-`7+Y.>`!I >+MHTH73'FUB#.'O,8MWJ*UR+/-D-A1=;-Y;5<33\@@//GYO+:KABQW[B%CL.+P >+MPW#-/_3(Z]9^"5;\G2^`[)_S-'KLV+%?K5FSQK9SYT[_K%FSCNBG4?WY:LG9 >+MZK6*&-B)$R<N#9KX47IWS.N!X=K-40\,QVZN>F`8=E/4`\.QG[L>L/]4*X;: >+MT0P=S6B3"U$]:P)G^FN74?_]252QZD_"/A;U0%3G0:SJ@:BE3ZSJ@:@LI[&L >+M!Z)A,:T'HJ)`S.J!X9^%8EP/#,]B7@_<]*?12/7`_X69U0,VP_\'E@"'@?XP >+M/A$X.80"\X%#0#NP'?!;\*HLD.J!,<#SX?K7UM:F&MH'@,LZ@2I@@1"BT<0O >+M!)Q`I>Q7:A+`\G6Y5`.W_ODN/K#B=Q9S$E@.'`22K>*DGRYQQI^$1".P6`B1 >+M;N(W""'>`5Z0092$%C3`K;L7T@6X+?H\B5LN25G%N5_T<EX&3Z@"Z<!B0)DR >+MFA6`+<Y&*9`!O".)?R;[#U!`)U%33`O@N'\*%8!C70[5P-0P)(S!3]5QTB?+ >+M]PT5O+D"F6-8":1L+:012+_%R4I@CJ+0)&>_L*#`%)E6.IG;K"I0/9]/@60] >+MF*T%-/P8!98`N&R4`7%/Y[$7F/@+%\ODLKL^G`*A(RT_[I)D;H^@0"C^MD>S >+M>09P_+6(1BL*+`&X*YT*(&/3'/8`-AE$>IR-<B`UD@*2;-+:'%X&IKUR#SY# >+M$)D1%'!(7-*.8CX'9NA!["BF-9P""^4(EP)*;AJK@<DRB+B7`ND4!VRPH,`T >+M77X]B*U%'`$<ZW+9'DX!25I/.SV(#-F^)9("#P!J;3&G@2FS4_D-D.&RL0Q( >+MNSV1)X`TBW/`_=L\:@U!N.6$=EA<A4;K0<BV/B?"*J`"Y8#[;X$@[',GL!&P >+M>R:P02I0&4Z!A[)X2@A1]N`T*HWI)$EDF)`P!N_,3*$<B`]))[>N8"0%'I2[ >+M<[G!VPU^*3`NG`)"B#+@;B%$64@Z!=-C*`4R4R@70OAD$.Z[)[%6")&^:#(; >+M@?BTD90!KN*);`1&`YY0!>S`,L`1QF\*I\`C650)(<H>RN0ILU5I2P$?A5$@ >+M09)WRO8XEX.S\GLBQ)^61YO@C]&>+3/I!KPOS@CQ,^D!"C;/H`=89*)`SPWN >+MQ#U`982=>%`03AMG@6D#YL"K"^@"YFPIX#R0IWLY4D%?D<-%,P7DV690_PA> >+M5V!ZA'[C)6F=_/A!<P`H7)=##U`4XN=+TKHO`4Z8G$:7RQ'525GQ;KFO')2+ >+M0[C^&3)M,F0[U4@@QR3'PGEWC$J"Q-`;_P,?D`9W47L`U0````!)14Y$KD)@ >+M@E!+`P0*```````B<F0Q$4X<V=P"``#<`@``%P`5`&)R;W=S97(O<&%G92UT >+M:&5M97,N<&YG550)``,O@(I!4GG(055X!`#H`V0`B5!.1PT*&@H````-24A$ >+M4@```!`````0"`8````?\_]A````!F)+1T0`V0#9`-D`\<*8````"7!(67,` >+M``L3```+$P$`FIP8````!W1)344'U`@>$BH3,;IE'````FE)1$%4>-I]D\M+ >+M5'$4QS_WWO'.W,:<\3DZ5IAA.XF00!0-6I2T<!&$TF,11$N)B*B($(*(@@CZ >+M$]K6RFAA1(^5%502IJ+FY##J.#H/9^[<N<]?&Y.+:&=W..?[.0_X2NP=UX!! >+M7YX$;@"&OTG:1:@`D7L/GVYLV%'JZNH)U=9SH"',E8'C;X#+0-;?O!U-L9:1 >+M!X^>C`T,#(QV]?1++\9_L/3Y)1NZR>"9?E#4CE,G^T;R^8*SGEG[!CA^O7KK >+MSEU#""$F9Q)B:2TOWL_EQ?-WB^+5EX1X-CXOKM]_+);7\N+\\"4+Z`0(^`&& >+M84HE%\(U-<S/SY%-I_#F)IG(E@GU7Z7GV%&BC1&RN9P,'`)^^0&*)$D$9%!5 >+ME?1JFGCK8?1\!JT^2)V\2FM;!Z8%KNMM#Y?]-PC/PW;`MAVZ>_N1A,.1]G8J >+M^B;=)[IHCL>199!\K_=O@&6[Y(H6J]DB<J"*U$J:6+5,)K-*(KV);54PI1`5 >+MR]D=8-@.2^D"B50.I:J*4LD@JLH8ALZ?E1Q(+EHX@NMYNP,<QZ-LVNB&A>P* >+M\H4"YGJ:XF:!<L5&QJ5<,1'L<8+C>NB&35$W41P)O5@@\?LGMB7(ZP8*@K)I >+M8]E[;*`$5%`4@N$P055C.KE`9CE%)-I$4WTM^[4@K;%&`JJZ*\#]]'8L,STS >+M&R_K)1S7XW1OIUPLZL1:0HR.7!1:*"2T\#X6IK[K@+438*62B:%4,M$':$`P >+M<K;[=D-#(R$MQ.+4UP_`Q)9P#9@%W)U&4H%J(`+$VMH.?KPP=$XTQQK+P$T@ >+MME73_OE(^H^=%:`=&-ZR\&M@;N?4OZ:[$3)57LM0`````$E%3D2N0F""4$L# >+M!`H``````")R9#$'T5!3_@$``/X!```6`!4`8G)O=W-E<B]396%R8V@M8F%R >+M+G!N9U54"0`#+X"*05)YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````0 >+M````$`@&````'_/_80````9B2T=$`/\`_P#_H+VGDP````EP2%ES```+$P`` >+M"Q,!`)J<&`````=T24U%!]0("10"$#RMB9@```&+241!5'C:C9.QBNI`%(;_ >+M7&]CXSR+A6]AMV7:V\@6/H2^@^F7*VHCI+:(J(5"%(2;6DAA,I%H&+`),_\M >+MEH3-)L(.'&88SO_QGS-G@,_U!H`_B#Y>+!IC&D-KS<OEPO5Z74#>7@*R+&N, >+MS6;#/,\YF\UJ3JPO`"BE&NVM5BOL]WM<KU>$80C/\TKMKR:!XS@00D`(`<=Q >+MT.OU((1`FMX0!$$EMP:83"8(PQ!!$$`IA3`,,9U.,1@,\/'Q%\OE\G43[_<[ >+M`?!P./#Y?-(80Z44`?!\/O-VNW&[W19]``#\+@DDR,][*26R+$.KU<+C\4!3 >+M3@U0)(Q&([BN"Y+H=#I8+!88#H?06H,DC#'-)6BMF20)HRCB>#PNA\>V[?+L >+M^SX]SZN44`%(*2FE9!S'C..84131]_W*-,[G\PK`^@)`DB2-%H_'(_K]VA37 >+MYX`D+,O"][MNMPO7=1MKKSB(X[C2Y>)<[*?3"4HIV+9=:LM7V.UVR//\I1@` >+MVNTVTC0%@'_?G;S_\#L7\:<0_@=?4%M6IMUIH@````!)14Y$KD)@@E!+`P0* >+M```````B<F0QK:[IVT$"``!!`@``$@`5`&)R;W=S97(O4V5C=7)E+G!N9U54 >+M"0`#+X"*05)YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````0````$`@& >+M````'_/_80````9B2T=$`/\`_P#_H+VGDP````EP2%ES```+$P``"Q,!`)J< >+M&`````=T24U%!]0("1,[$MEH<XL```'.241!5'C:K9,]BU-!%(:?^Q&3$-8/ >+M(ANR7./"-FI,&K<(B#\AC;\@K9600B&%-A=[P;^@1;K`VL44$>P-9A>YNL4& >+M8G27)9N5^SF9L<G&W,`500],<<[A/,R\[QGXQ]`2ZH^`AT!ND4=`"_@`J#\! >+MKY9*I5>M5BL:#`;*<1SE.([J=KNRV6R>93*9%X"1.)W/YY_9MBUZO9Y7J]5F >+MEF4%EF4%]7I==#H=9=NV"SQ.!%0JE>-^OS_/9K.'Z[UJM2K:[;8$WJW6]=5$ >+M2GE-2JD\SY/K@,ED(@N;FQJPDP1H3,8CX1Q\,K9O6#NY7%J9AJY,0U<ITU#% >+M?"[U;73(5CYW$VA<F+#J@GK]\@GW[]U!+72*0F_9%"+$.SEB;^\MS]\,+QPT >+MS=7K/-@MXTZ/F?WXPM%D2A2%2[=%X%/<D)0+,1.T&$#3-.;!C/&IQ^WR7<+` >+M7S04PG<Y&PV1<KXZ$IEK(A+Y+H7+*8:#CX1A\/L)@<O6AD37XVL0`R`%4@K& >+M,[A5W24*PZ52,O0Y^?P>33>3`0J=2YDLVT7)5V>(6`#08![\Y'HZ0WK-X!A@ >+M.M['/?V.[YUS!1!Z!(!A&"@=I-"8GON)B]A8?)2_.4_Y7_$+!`S.I%ID=^H` >+M````245.1*Y"8()02P,$"@``````(G)D,<;[ZUP=`@``'0(``!L`%0!B<F]W >+M<V5R+U-E8W5R:71Y+6)R;VME;BYP;F=55`D``R^`BD%2><A!57@$`.@#9`") >+M4$Y'#0H:"@````U)2$12````$````!`(!@```!_S_V$````&8DM'1`#_`/\` >+M_Z"]IY,````)<$A9<P``"Q,```L3`0":G!@````'=$E-10?4"`D3.P0MO,;: >+M```!JDE$051XVIV3L4M;413&?_<E0L2"8HI1J0:1%U.'%#ITD4"Q@XBDFVY" >+M)E<A3H+2)?HWU,&UE$"A`4,I1#"+A0Y=BH,^?-&V,2&XJ"7UA9<<!Y-70Q)3 >+M^\&!>\]WSG?O/><>:,1^S3+`%*!X(#*&84@ZG:[&8K$+C\>S";@>(I#U^7SE >+M2"1B)Y-)B<?C)6"9_T$H%+(3B405V+TO3FM'%`J%JF]@0`'C_RR@*<3MTJ3+ >+M[9(A;T]7_J?)L+?'#T1K(4U%;7!,ZB/R<6L=`-LN\^?\!SL[*=Z\.ZC'N@&[ >+MI<#+YV/R.JPSY'T$*&SKFL6-5,=:.4_8^Y8-I+Z<TMTW2'`R2/!I```1:6O4 >+MKE2'L?OU,'!Y>7&TO/`"VRHYQ,DK/P"#J4,*<Q.WSNU,DX#^;&+DZ&U\":6@ >+M6KX&THV=J2<#FJ8U"7Q8BTYA&@>@H&+]=HCA3P9GL[JS?_+YF'P^W]3&E?G5 >+M]]][M2OZW24>=_\E[B8#_)H91ZG68Z(#<M=$1++3HY*='I5*I>*L<[F<`-)I >+MVJ18+&)9UFW/E7).-DV3<#C<<5RETS^X`;-2JIH)4B);`````$E%3D2N0F"" >+M4$L#!`H``````")R9#%UM)T)>`$``'@!```0`!4`8G)O=W-E<B]);F9O+G!N >+M9U54"0`#+X"*05)YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````0```` >+M$`@&````'_/_80````9B2T=$`/\`_P#_H+VGDP````EP2%ES```+$P``"Q,! >+M`)J<&`````=T24U%!]0("10(!C*6U$,```$%241!5'C:K9.Q2L1`$(:_G2SL >+M<H46BJ:./H"-X%,(!S:"#^$S^`J^@-T5B@\@5UYW<-J(36RL-Y"(63E$M/%D >+M8[(DJ`,#LPS_-[OSL_#'4$']\0O]M@Y/#_D3%]?37I5_>>;\[!1@MP%8W#]R >+M,UOT`MZ6KZMRH_&$JJHHRQ*E%$F2H)1JI;46YQQ9E@&,I;64#E%7KD+'`,N3 >+M`P!&DSG^>!^`M<O;%D!BT[\7]B6.]:.`T63>N-GZU5T_((2$DP&JH[WA`!%I >+M3/[9"_L-&^NZQGL?M5%$,,;@G"--4X"Q'F*CB`RS,<]SK+4HI=!:=P*-,11% >+M\6^?Z3`$;`$[P":0#!"_`\4G9FD_K"H.Q%L`````245.1*Y"8()02P,$%``` >+M``@`(G)D,3A*:OF,#P``;1(``!L`%0!B<F]W<V5R+U1H<F]B8F5R+6UE9&EU >+M;2YG:6955`D``R^`BD%2><A!57@$`.@#9`#=F/M7$_>ZQK]SR223S$PRF23, >+M3&@3DQ`0@H9`0@#!1.X6%!5;%%1NP8#B`8K6:E5`$01%0%14$`4OU`M%J[;: >+M6A%0\+)9:J6MM;;>Q=NN5MMUNO;>YYS8[K/6^8&]_X`S?\!WK<_[/L_SON_$ >+M)\;9P[)8P((UWN#,F3-GSY[M[>WMZ^L[=^[<P,#`X.#@Q8L7+U^^/#0T=.7* >+ME6O7K@T/#]^X<>/''W^\<^?.O7OW[M^__^C1H\>/'S]Y\N3ITZ?/GS__^>>? >+M7[Y\^<LOO[QZ]>KUZ]>__9]OS']+IL2FSHAVIL1:QID1"``PYK]LT26NK%)7 >+MKO:#_%*W-M7MTL8G)J>(Q7XY8[46LSE8.SEKP>)LK6]!?F%A5HZO=D:I*W^1 >+MJP2,^1W%!4`#3)Y7P!L`(+A]V[<N-W_GR-JNO=<33!\FTL;L^**,EZ%O(<[> >+M7ZZ:X'5)EUDWK/I,."VF."9I6\RG^?8Y):L#\K_^3C>UR>FX;5X!@;[[35G$ >+M6I]:-'MF>PC'YU`87)P=J6?@=(#,&*M:J7'E063`/$1@UA!;0+,?"3)L5%Y1 >+MM9'8"VV,Q=?OQ:5TO8$I@"0K61DND2!%`LJ?(4F5^@)E^Q#K`JB"0:&Z@T9Z >+M_08IW@7-":!WK;F+;#)^FS?<EBXTY7Z!2M4JT7KLII&74WQ2RDLH&A4I1,;9 >+M_SD&'0WZ_I_0#Y?$?K/V*YT+%0AJW\MAI_QF+=?>VS(+12K.GR]>^(.Q(B?3 >+M?-:$U=2*7G4V&Z[=OM=QP1T36WXV[@"Q!UGWV%*[-80HB]IEWZ'%R"B#BL8Q >+MG&+'<^/T[P0#04ZHCWR:$R"JS08B"YKBQX?CLS5MTT&[+QTOF9\4#R!Z/'4, >+M$D9QHFG'</E,7TZ((%2=IP!B(A@6+N1HFO-F>U<:3I\\Q98ZA?O]F/^8+C\Z >+MR2Q_%"__,%YHOA,ORFB&HLTT!A<P@V8_LQ;:KPY(F]!N/K2ICQX#1@-_X@&_ >+MOS4Y[>,N7:DLOO_`]]5*YY2,5Y\EBWK+RAN($NALQ_P@+8)?>%^[(VPGU!,- >+MC1@+U(EQPSVP-R?L:_@^!!6^C5<H[:G;8LK,8Q]\,0<K\9&+W#XJ>A)&*()Y >+MM4$]#EY.62-]F/@P#_PV'U?:!R8U+=FJZYA*!K-HXCL:Z50`K3!Y)71I>/%F >+M`),*5;./FA!@)XTTL4"""B0Y41RG]N;/!5R8$R:I)Q&$_.;4E`14%1>6&JFT >+M/U6^]V6D6CR5X)1'H!?-!JW#X:R1TG)O>U-BWQI\)":&B"V.$8V&__@-_J_F >+MH=BN9TO'3))YIUW*VS;27W+EN_8-]\VLP;]F)]'PZ2SB8C1\!?';'EAE`0E% >+MRS>2Y^BLH!.@JL]LMMNV1F=J9T6>@`<&+"<71BE0")8&L$*P#A*H3#P9YV_@ >+MY`)$0#`V-<<','@L2NUTF-B*#(#MW6>8G>YRJ*C%X>G0T4"^&ME>-B$#L=HX >+MQ+),5Y_187?(A))^C9J14HQ,C._1\X>'9JU+O1`M.N68&XFKV91:Q3[U$PO. >+M,0.K3SBZ5U\H@8@0R^;=9\L1:GN:N_[QQH-2OGM"RXC_J*K_@[Z?K8WI>F97 >+M.I.2`@^ZVD[T_[U]N.TO'GJ3'[:30(X9<D`TU%.;;=ER*>]!"@90\.M-%A/5 >+MS>R3N,T8I#<&O7T[3OI)3\.V!*,=6ZPT<*79;]CG!(G2]6HE+A`0BD">DI"U >+M>B\2PW"FWKI/IQ:E`$FG8QP\]P,K*U^CDR_;&:@F8,Q+QZ(SL8E67@C!_CJ/ >+MD'M"NN4MG2JY7*4BR<\__L2JS`+(]5MD4K=F00JI*X7$@XZ_!KW0F"'L2RM3 >+M-)19X%L+'9ZA8,V[MD3WKE[\3#>YQ:X;E?Z!AW[/'EFBAYZEG4F=A:T^Q76Y >+MQ]V!@DD=\"4!UCPUKZ_7NZ3,$[$^26PUFBN@'9``6$$*>Q[&+V09(E1(C^,J >+M.["D8UUH:%FND68X:@F$3]!QXNQL8:*!0>+()#U/"C%295*3Q>]7:WBI1$RI >+M-IOXL@H#.3>;BK2J&X,`QA];U:)3+[>TM[8)#]@_EQPX:$<8O8IP$E]%*@CJ >+MDEJAY'E:_L4Q&YY=M4XFO7M,N1R$M$'D/0V3$B(*PI_>A^"_Z>82S;'CH]<( >+MVVT9W3T;=_95O9XTJNE?OB$_IGC3=[__)>_*/5X=)D3[IP^>P]C+N;UZ%UOA >+MW0<&(=&&OK+ZGGI_Y*!VV@:(J"C)O/KWI/5'!K(!ZS=XOMQ56OX`2V+D#+MT >+MU7(=3X+U"_@`J@#"YNIYV@.[V5`)K4<9O5I%42IUI!<E)MOUM'GQ)Y&!]CSB >+M8VL-AGOIL3A\HY5NJ]-1TSSV.=X0)$SF*1RG^FU"&*%.K5-[JSGNIP!6+K]A >+M4%,>^Y]2O_/0RJY$DH\@0\<U*^*WAU0?Z?FIBI2>Z&>R[CC*19AT=G<WU5>Y >+MC`XN.$3#HU5AQ%,%P[`VV>-].^=<F%;XC\*D0\';_Y'?&)?3Z!S)92?'5,PJ >+M]%[-WBD'(P"+<YKM5^+8-"*E*&T@^RU=\"E9%_+.:JW63,Q_2]!R/MNF9)19 >+M'P8Q!@9^%Z:F$)4"KP`5%:TVJ<P`(-*M.HZ)B2K!Q'2;Q@NO$2?;U#*2^D1# >+MP>%2&T]"[PH;3\1OL&Z+)W4*P5>"*JMB6H1'`EMLG"0<D5GYR$"E$$7)A28% >+MA@WI5/-"?S)Q8LO#\<C3;_$@X4,J:#`J)BFA*/-6I4#TXO?!%$EJ7YE,/UDQ >+M.OP;"=P76*DX3_#Y3-)J9RVHG>+];.CY9/KRVB,!1DM3=<SQ[=Y814PEY`>K >+M-E1D%G76AT@.9NLZ8;#N;IWMXIX/0)]OMI;UKCJPW?)]R"%<YZ7PX@3+8AD? >+M;"968XBNACS\'"-+"E"MGX](U2M8;G<H0Z!"BO=X`D4CH^28IY-6#8-&(!L# >+MOYAO(75RY#0=2C9B*@V;#XM/!L84('+=5OIZH#P\0KB]?N\6(AR5!;(D,?2] >+M3,:KY13UD6EE!+&73.F/BAJ1]$SMWX$>@H\N>/%7Y#!T%!:;?&6K*]?(@PNN >+MLZ-6X8\(L,4V>JK0:5UC-J<OJ+TJ>S:I="-7$WO_.^XM36U,8U8^*XC6SPB! >+MO:F^S/J>0P<B!BIE`(BH\J!Z=QW_S;FJHW:3`>^9G3(F\GH$J5.S:EZX+`Y6 >+M!)#IDKD&-;DN`FO0>_3K;V*K\]`HG]90%8D)J44ZN43"3/3(.6^.SDL8(;3: >+MPC87)F);#ID^7(!T''-//+6\8TWEQ*8%Z)&)JW>P`Q!,GC:D4@V;PF=0!"'; >+M:\B'$C1A+BA*?=N4#[_(A"J^TZ3]D*IEM#?.J&AYI_\2<T9?E7[T"/AC[E?] >+M<^[']0_ET3_TQV[<88RK2'>\,">;=@SK&^H7&IU9AHJR((O/11#_NPD&/<ZC >+M2LM'^@0%^#W7FQC8"\FPDCV2.[;F)ANQ>!*B\I'C0JG;0$T+Q=-\^`9_7IP) >+M!"LC_+EW1-(FC1=%C0WF2"0+K]1)8"`)V5`!B1KP4&&(Z$2T12,7B3R[U1FH >+M4,=QB0&)I4O0'2'JHN+!4'A^J[1&\^W!+((4X[L#9`@2RV&3`/*7=A\I#%-& >+MU\WA8"G5G6LW/U?LI^G?4';7SYGK<%+EZ'Q4%#_JW'_^IO&=F]WALXG>C`*3 >+MO_/P8$'<];/UZYIG'+CFSHS:,8ET]*2R56MR9GSO75#5D0-D+#D!VM/$74>9 >+M^_U!-^S@2W`W_A1VM/.#'XH,6=ZD8JP\;P(Q:::_FLR`\!7VW`4DX\E[F:S4 >+MGT\'`%?I*7BN10H76?%2`@*$!2^.I!V$1&G)+(9/Z-1;#+S*BSQ@1?-G<ERJ >+MQHOPC$KTP-S>12A"JKF0-B`@)1)IKX:-@&!.<0R2\2,ZKZ=1\D$K:5F$H+=, >+MHI%?P0`F44TQ\6DY4PP6CT;2M$]VQ_Z+Q>_NGQOOOM_,#6N_:M>C%<B9^%WJ >+MSYH3-ZU/V(T8HKBJBJ"PH#RRX1SP2XB:>FM7MN79N*C:%,N5Q_R.Z1V795O> >+M=@7KDZ_%O/W7QDIP!7\[TBB?B[K+C2J:]BK5J1EF@Z]:*@!PH;X(H<WRC_(D >+MXS0D!&SCB;QP-#F!)%DSOB*OQ9?OT+$*!74\(F.Q3"RFQBEP!!$BQQ&J42,- >+M!OO9L%BDFZ2O:6)B<6G//MM/.CP/B,X<A*:-I_)6,0^L9IX2/>>Y)WE$V<DC >+MSF\KK3"5$98+WZJ2_9OKYL]%/]N%Q@G.).\*_NSSK*T-T3(0$J6NT3>&.46K >+MJT6?LGX5=>53BK-'5/KDN%<7+I=65(V%%[>8T=:APJ-)&?M1(-.F+5LLP433 >+MR\8JE<D&EJ+84`9',*I&0\1DCE?-A^!X'1XN-%,EX=@J#2,2RLWD1R6>:<AQ >+M$QEFXPQ&(8LMP;_4*X0Q71I%(R)L13^I%1X%&-,*IFVP^<AGEP#QT7!0ZOOC >+M?FC98W+IXM80ZM[[XSV%W8G)N?82S/GK2N?M);O/`N@"L:T[=?1-YY_0\_-< >+M[HCL2]V9BP)PIVSX[MJK[?@8<WVU9>NEAR%AK/%T0N_9[=KJNDWZ`6U^'.Y8 >+MU.,_C5ASZT*]_MWICD#'^K1?)O-5[<5C74;&-8[GYNF]<'OP.);$Q'$ZRAXF >+M#63%[\<TI!?.\I,CA1#NC`9HBA^=72ATJ0B"45!29@FG4"H$AZ$Y/E+T?812 >+M*R4H*B$1&!:J\KX*`['"PP#S1-<2@[3IFVT=4-OLAS?/A)&V]D*TM1`>,?)# >+M.:F2#F&Q+V\(R7SQ/+K#A:?>FO4O3KI'?T+O7UOHCBBHN],]+IR&@H;O;G'I >+M:\>D=+XV]\QX4-2]WDCA`5_[&5KVQ6NO.,+0FWT7&OT24C8$T@\6)&.@Z_%[ >+M-]-X.8G?<VCY91-\\`)`A'AD35*L3IE9`"<:^?SB9(WG4"UN\E':"^:HVUNQ >+M<J,":9'HY)[KS;*>*??8FL.+(42F]Y++R2*`!+,$)ER*(2C9MAT]#6!:7`R` >+MT+O02+6T2EH;Z<"[+>#+%I@*I!O2$>DKZ+M`GFA`KLU+1_T2-L.]%0+ZM7MI >+M48\#B:_0U8B@?W/.NM=V^>R98%K.E6>=RQX.:6[V*>]S';O18JMR@*M_R_!6 >+M7C7VWMYF01YDEFR7-=5]#8'NQ9NA\X]O[-IE%@'G]-XD(W?//_CD2"SM@<$S >+M[`;5/#?F'Z"2ENHHM]OL)Y^'D+R&;()`EN]$-[R(;@+P-%\6`^XL-3'K`$Y2 >+MS"H^ENJVAFHX>80$SD6HTQZ/<R2&RU?IYIXYP%#P+D":I&VWD#,0DNR[Z6,R >+M=V^#KWR6&Y4ENI%H/YZX^8#B934AYZXX*IUH),.;EEX9J>^3CIYJ__]_7D3\ >+M#U!+`P0*```````B<F0QXDZ/=((#``""`P``&P`5`&)R;W=S97(O5&AR;V)B >+M97(M;65D:75M+G!N9U54"0`#+X"*05)YR$%5>`0`Z`-D`(E03D<-"AH*```` >+M#4E(1%(````8````&`@&````X'<]^`````9B2T=$`/8`]@#VVZ!&R0````EP >+M2%ES```+$P``"Q,!`)J<&`````=T24U%!]0)$@(+`%(+!%D```,/241!5'C: >+MO99-;QM%&,?_L^O-V%;MM;>.954.&R$:(E+%(@EP0Z"*`X@C$@?$RU=`ZJ$' >+M)"3$BQ#B$R`H$@<0)^#$(0<DKC[0E$2!;#8O7E?:K+V.@[ROL_-P``.E:F)' >+M@3D^_YGYS?,V,XR(&/[#H4PS>3`8J)9EZ;[OJQ<.&`Z'W+*LESS/^\RRK)=] >+MW^>3K,M-"MC;VS.3)'DKR[+'A!#7;-N^;1C&YM2`P\/#G.NZEQ5%R<W-S;GU >+M>ET`@*9I`8"[`!YAC-W5-&UTKA#YOO]L',??A6'XO>,XSXSM2TM+3K%8O,$Y >+MOUDH%-YLM5K[8ZW;[=;:[?8+&QL;RV=ZD*;I=2GEXP!RH]'H:0#K8VUY>?E. >+M',>;G',YMMFV77%=]WTAQ"M1%.VTV^U7U];6[CS0`U55UQ5%^8DQUN&<;_Y+ >+M0[%8E*KZ=Q$%07!)2KE$1`4I92-)DNJI'JRLK*Q;EO5KFJ857=?/3&*CT3B* >+MHNA6',?(Y7(_ELOEG_^ILXMHM$ZGDSLZ.LJ72J5D86$A>2"`B/XPLHMK[K]" >+MM+.SDS\^/KY.1$JY7/YA<7'QMPL%#`:#-Z(H>@\``_`!@(\FW22.8[:]O7U% >+M"+$&H+NZNMJ^KXJR++L"H`S@4I9EC6E.:=NV%H;A.Z/1Z%80!)]O;6T]>I\' >+MNJY_>7)R<AE`5BJ5/ID&$(:AFF7950`Z$?$P#*\"^.6>)$=1Q%S7S3/&J%ZO >+MQ_E\GB8%>)ZG[._O/Q_'\6N,L4/3--]M-IO#,\MT,!BH1`3#,+))0+U>KZ0H >+M2F081GIF'^SN[M9\WW^=B#3.^1>M5JL[UOK]_HSC.-<`*)5*Y;9IFNE4U[40 >+M@GF>]V*2)&\#4(A([?5Z']9J-0$`!P<'SP5!\#$1Y=,TO6F:YE=3/3A22D9$ >+M10`:`!6`-F["/RON*2GEPT3T4!B&3T[]X,S,S,AFL_FUXS@J8TRO5JN?SL[. >+MBK'..?\V29(G`%0*A<(WIP%.3?)P.%2EE&JU6KWG?NGW^VJGTZD*(=1:K>;- >+MS\_+<P'^]U_%><;O(3&$>7!OM2D`````245.1*Y"8()02P,$"@``````(G)D >+M,43U6FS`!@``P`8``!0`%0!B<F]W<V5R+T=O+7-M86QL+G!N9U54"0`#+X"* >+M05)YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````\````%`@&````T0-> >+M*0````9B2T=$`/\`_P#_H+VGDP````EP2%ES```+$P``"Q,!`)J<&`````=T >+M24U%!]0+`Q8!+!-VZ`8```9-241!5'C:[9=]4%37%<!_][U=%E@^E.^@%7%0 >+M04A2:Z8I-4H;=$0QQEB_.E9+TDP2G:$5@VB`T='!M%%J;3+18.*,U524ML'4 >+M!&U!F]$XS+20C&9P_6HE?A(5T%U<=OG8TS^X,+0E5.KFG[9GYLV][[[S?O>< >+M>^\[YQWXO_QWB[H?I9P-67UZN]<?D0>=U-^\B!14BP/I;0?3-;YD_!>`=9#G >+M0Q5_\Z9KG@*X7V>_S&$%+`<Z@"#`=+:X:;O3SL>5GRG]CG&_I^,KX`$<`@J` >+M8$"%C>EQUA;:QQET86U`*I"FKT<`F;KZ]P((D`3,&1=OEB=$VV3L*+LDQMAD >+M3*SY&V`N,.R?C/TJ>-&:%:UY18Q_I@XHTKQQ4:&\"ZP,#^8>L'*XG?W`>,W[ >+M!TF-BX_M-:;O^O5'EV3*JM_UW5=N3)3ZG5/DZK&GY?2N=-GSRB@!Q&ZR"8CO >+M9Z2_>=$8M&CGI%\[@K%SZOO=/[X\DY-`_(^SJ`6>T.,9FM<G:8`<.]TDA_YR >+M3:KJK\M)QRVIJK\N^X\WRA-YOQ5`SA]=)LXSJZ3CK_ERK^&'<O-$MOQI^^.] >+M#JP&PK61:8#4G.KAU9QJ\@>OB+A)+P/1C$A_!0C7;3Q)3]4#12\\S7M`>&$. >+MNX!AQ4LYW'NZ@'3-PU"&4@#-3B_7F]W<O..AJ=6#B!`88.'%.9/(+#[*N,P] >+M>+Q>3'L706$0&6UC0EH$NPJ324\V9P")_7FM+B]7;[NY>MO]0#S@)E!"4_T^ >+M$C+7<JWV749.S>-:[3N,G/PC+AZ:0\JBIW:^3_U/%O'FJ[M9\;.5E)7L96'Q >+M4DJ!*0DQK`,"`=.B]!+L^:B1UN9;&*8%7U<'UN#A&(:!B*"4(FG:2\1,?)/V >+MB\L(#.E`V0Q"0BT\FC2,A##[MVMQ/@*<'8AG6`)0RD1$,$S+T'B*6!&*25FX >+M'T?%)L;.K>3"P4)2%GZ`HV(-*8O>PW%@#5&I>WYYH*%LPPKVKMW&LM)5E.=O >+M9?&*F51M/\SKP`Q@GZ7W7#M=;7B=MWK"JF'2X7;VA''3@O/&>2[6O$5]>0:* >+M-K#:H$-A*(.@B!"LT>%!X!RNH^:`/)3Q'_%$^`(HP5$QC80GMW'A8"&CIY7B >+MJ"@D<?KK.`ZLY:''=G&CKFSY;++6;V?6EF+VYI>PY-47J2@LX_O)7^/$V2O, >+M`\+Z'/:ZFNEL=_49:+$%([YN6B\U<*%Z!P??F,KHQ!`"@BW0Y4.Z!6]'-_=< >+M'7C:.@!,P.^\OAT>,W,K?SN\CA&3M]!8LY:$)W_*I>HBHE)W<*-NY[PI9._X >+M@+F;"]B]NH0EFU=17K"59U^81>7.*@IT$&O`,-3#89'!_Q)5)_[@YS)^V@(! >+MI"3W8;EZ+%NZSLT3N;)`I'&^=#F>D<O5,^3(YC3YWC>#K@,Y0.1@O#$9.4/F >+M`3&F%<\`47HN$:,:@:+)J9P!XE_+Y7T@N'05E4!XP6)J@$FI\9S7`2S28EK- >+M:ZX6]_,H0E3/#JF0B*`M[J83G*LYR(+OQI(\.I"P$`-3!'%WX?'X:'=W<[O9 >+MRZ=G[O+)Y][3P#G`.Q#/%C9\RYW+I[ET_%=#YJ$(Z.[D6SJ]I.N=RB<B?ALM >+ME]\>^Q"Y)QO(WO`<;Z]Y@\6EN93G;^79=3GLW[B;Y9D3J#YZACS`#K@8/2'. >+M#`RQV2T!9I3%:L::5B/.,%7OSFP$I.SE9&FLSI*FX[.DI7:V-/XQ2_Z\[SOR >+M5EYRKUZNSG56?_,`A8D="$81"]B5ZMOIC4#1[&]P%AA9N)0_`#'Y"ZD&QF5_ >+MG;-:+Q<(!:QJ?EZ&.E=W1;6[O`K`V7Q/W;QRYT/#5+E**:^OVY<BPN%-2^QW >+M8\/CPCNC0FF[W(K;>\NYOMP=!KP$?`BT`.WS\S+P)R\\">Y>!%LHAM>%S[1A >+M=GM9H!3U.J"E`Y-F3>2YJD]Y?OIC;*NN8TW6H^PX<HIW@-M`.=`%N%7_R@7@ >+MX\K/U.>.+X)]/E^`81I>B]72V=[F24*8"93V4]T`'`,N`$Z@'?#YFS=`-00* >+M.T(W!@8^//H7,@RH!8J!$OT)`'RB3XT;$#5(46'H"47W`W3:"=(1M!-H`SQZ >+M]7S_IDCQ)T_I=[K[C07J-A)PZ6^V6<_7J=LA52B]58BI^SX]H>\!:G%_\GI3 >+M&3H]=NJ^C_]E^3L(%JO(*GNYU@````!)14Y$KD)@@E!+`P0*``````!*7V4Q >+M$;;]<MT$``#=!```&@`5`&)R;W=S97(O;&EV96UA<FLM:71E;6DN<&YG550) >+M``,LL8M!4GG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```#`````P"`8` >+M``!7`OF'````!'-"250("`@(?`ADB```!)1)1$%4>)SME^]K&G<<Q^\O:$;) >+MLR&A7>E&22%LA4"WTC[/N@=I6>B@%-8%1IJ%/4FZ0N$G6C2Y;,]<*F[D[ >+M-8E13,BO1U&?70-&T1B"HH;$Z)/XX]2+2&/>>Q"]5:.GFR:7@8_>G-Q7WN][ >+M?3]WWS=!DB1!$,0=DB1!$`2JZ.?Y^XD2[2!)TD(01#ROEAJU@R3)COQU_%^L >+ML^37$043F)V=12Z7.Z9FLQFQ6`PC(R.%$'?*A+`8GO?#Z_5"/]15DU(/+J%@ >+M)AP.U[Q./]0%N]V.?`C!!'*Y'"8G)Y')9(ZI7"['P<$!!@<'*Y&P>+U>T#VM >+M8%FV)K5:K043%OU05\WK6);%V.WSA?#%!`JF>9Z'7O,*J50*DWH=/!X/NKN[ >+M830:T=[>7@A11*!@@NF]"H[C8%(KP7$<#(I^.)U.,1-">*?3*:PSJ94(A\-@ >+M>J^*A2]/0/^7"CL[.V#Z.N'S^?#G:Q5L-ANN7?L$"H6B,!.B!%PN%PS/^P4S >+M&QL;-1-@OOT8X7!8"*,;N%$[`;U>C_W]?>BU#!*)!)@G=[&YN0DMK0'/\U`H >+M%*($2I^T;N`&HM$H3&HEW&ZW*('2]1L;&S"._PB.XZ!]U%F=0,&\3J6$Q^,! >+M\_0>4JD4F"=WX?/YP-`4MK:VJA(PJ96(1"(P*`?@<#A`??6^$&)M;4V4`,=Q >+M,"@'$(E$P#R\@M7552$$_?5'E0F8S6;P/`^=3@>>YZ%]]0+KZ^M@GMY#(I$` >+MW=>)1"(!N5Q>E8##X?AG!O(AM-]=!\=QF);WB1)@'EX1METAA,?C@4FMQ.[N >+MKC@!K5:+=#H-^OX%N%PN,*J?X?%X0$]H$`P&0:O'$0P&:YH!EF4Q/=(KA&!9 >+M%@;%T4S4\A8*A4)""+JG59@)40+I=!H418%E65#W+R"93(+Z;?1(7\J12"3> >+M_1Z4)6!4/4,VFX7QCY&B[43WM`I/LA*!6"P&\Q2%>#Q>M)U8EA4(BA*@:1JI >+M5`H410F:3"8%G9B80"`0$"60S68Q-S>';#9;M)W>W1Z5")BG*!P>'L(\=?00 >+MIU__A$PF@RG5*.+Q.&8F&42C4>C&1[&]O1V?F9FQ%1%()I/0:#3@.*ZB#@\/ >+MBQ*8>4D>$?C]6?FWTO>W*A+8V]N#>8I"+!8#W=.*0""`#S]H*WNLD<ED;T.A >+MT!N!P,K*"L8^>P_+R\OXY=-2;<'2TA)>7&^!R60J1R#^'[_$<9(DXV)?XG(A >+M+E]L@\/A."B:@8DO6V&SV?#K%^=AM5H%';M=K(]OGBM+@'IPJ>S]8EH@8+?; >+M1>_S^_VX?+%-,._W^X_/P.+B(GZXU8*%A84BG9^?Q^.;YP0U&HT@"&*]A,") >+MGT;=;C<GD\G>NMUNCBAS&GU4NL>JZ#<E!$Y%0Z'0FV._-^C/)>\#]:KD?:!> >+ME;P/U$U`ZC[0<`*GW0<:1D"J/M!0`E+T@882D*(/G,A;Z#3[0,,(2-4'&D9` >+MJC[0,`)2]8%Z5?(^4#<!J?O`F3^-5NL#_PL]R3X@F9X)$W7IF3!1AYX)$TT" >+M4IMH$I#:1).`U"::!*0VT20@M8DF`:E-U*-_`V#XCM>V[*>Z`````$E%3D2N >+M0F""4$L#!!0````(`")R9#'WB=KW0@4```L'```?`!4`8G)O=W-E<B]4:')O >+M8F)E<BUS;6%L;"UD87)K+F=I9E54"0`#+X"*05)YR$%5>`0`Z`-D`*V5:TQ3 >+M9QS&WW-ZVI[60@N<HSTH[K3<RD4&##=@Z$X+E)92A(*(`^4B"E-CBF!&F)H> >+M6A@T:*%`MR'6(3B5J504=0I)12ZB>$%D"V%JT0W(LBRH6^:,BU-9EBVK^[3W >+MT_OI]SQYGO_[?Q.4\LBH/`$0@`=<T-'1T=G9V=W=W=/38[?;!P<'1T9&1D=' >+MQ\?')R8FGO_KB)XO2(Y/3XN5IL2'AX0R(`"`Z#>$PP1\$/SB#EYB`9(X-ZS\ >+MLC<RJZ!=0+B#W-28;UG';H.6U6YV<QAY.\RU^;L3;&Z^?=\S<+$F;[R>1&B= >+MHY^X&ZB:1DN'830(3"O+SQD?6,O=(6=XQ2M\F6=##L&&`;JIUBY";N7A$O^+ >+MCPRHCA+%17E!]L^]B?Y`!!Z(W/Y[\YFFW)0B7[.%D>@;,2`/KBU6H.DULZ6( >+M,[CZ%3Q3+$KQTTN!78?[A,(#)9E!N2/\IQH%0*SR=#9$U7W&TYQ57J2BS&9W >+M]VT"H4%2F<&LERWIMC#,<?T"^#V];NW6"_YNSA14+Q6:T'590#(9BU8Z.%DS >+MS+LZX<*I70C-R]EAH_V\0KA]$:A:N_1>/]AWV8Q35"2)NV+3E;]*D.9/)O3" >+M0%J7V5:^HL9I^DFO^#/9\WRY@YDU<UP6)L1/GK\TQ<'S69<C=F+])(6JTX&J >+MZJ!L-1S)G=HXJ[8LA$"AH.CM"T.=YZ)ZEE97C%_>IA*_-O\7`BI`3J;QY`XH >+MJ]A*`U[3#WOTO"*/?.[8%!.7'=\N(255!WSUZ1E(C`^M;&7EF"XYSA4_C*X4 >+M]$G"#-=GU4[S5_T#GN"`JO.(PQQDDRYE(,KUTE$-3"8%FU@*H?L>DWYFC4CG >+MEYCC:XS!-ETK/,2*+GIS/XW:)H6V[^O*USE/)_%OZ6_`%`YF=6OJ4$#+3""Q >+M5,LK<]'$4DE>-^CN-HQ592Q,:656>8R9SK:W!R^CN@B%^(M]USL9=QJOMIX^ >+M[WPVD^;'QQ,DR:UV#JD1023/>]&G'GT07VK+3L4K0O!3#&9!`((V86:9(]A7 >+M?,^'B;8$J^WV[0*4SZ@;ZAI=?HA0EU\[$??Z=GLSK8+DW7<!8.23%LJ]#44D >+MRUFK4FT;4@E]&.&M^SB\'8/UQBL)Q;[^XFD?](DB&UZ0+X`Q7O15R+%XXW&^ >+MGC)N*W3:;O)?#\"*`)ZIV(7*JXX#B"6H42Z"_7;PADX;K:L"J".&<HRNC@A` >+MZAH6.TI")=`I;KZ.JH8K92F+0I^!F[7A03O;)RWH:SON+=M;_P%$/237N`G9 >+M1:@NUP5\2++0);BF3L-%]@]+R4>(%LNL[;JOWJK;2]LWKUUI\#QB^VA@94<M >+M1*//6@C/Z"+G'2OG^1;S44A73_31"`@'AGC;&'O]_5)85LCO7D@VX;D.44;* >+M*>Y!;1G&@NOJ*[@8I9.9*G;1D1&0Q\]C*RSJM_S@_W#OV1```[.77H)PW+`, >+M2'N+O3X!![$)^/)XT#O,MS=CL'3816`3LH[U44"<[DIFGP%MPBZ5N"K0'AX? >+MC:SZQKG[/_G6AB!P)XR\$1HSD)O)LB4?T-;?!M@XG<5V8?@G3CTV(\!@).52 >+M(5I18)R;4+__QN+Z-&+WWOZ)5.V3IV7N,U^5..?+Y_GBQBVHETS17\;+W@C8 >+M+YR_@].I;A7+%E&=,&TQS+3QRD].Y))"`HV[4U#Y(Z3!Q3<##Y'KI=J$)[-7 >+M0IRNMOGE&;E%5,H93,/X&O)KP&M,S/2+)OJD(GANLXD+SG#$9-TON\$#_9RW >+M4L"`'NZ0+(%I!V\804*9!3\=[F6"@1+_MF6/G2O\GU_+NW\`4$L#!!0````( >+M`,F8DS&TB*BH)6P``+YN```3`!4`8G)O=W-E<B]4;V]L8F%R+G!N9U54"0`# >+M>1?&05)YR$%5>`0`Z`-D`*7[`W"D;QBWB79L3VS;MFW;MJV.9V+;YL3F3&PG >+M$]NVDY/_=_:KLUOG?&=W:SN5?E-O=27=>>[GOJ]?OU?_4E*01(#%@04```C2 >+M4F(J``"(U??/4M"0W_=K`HZ:WP=($UE),<#7?U_YW65)WV=@G*2T70$`.+3_ >+MOD$`F=E8WR>AW*3EQ:$6X'\`()%_X#LT``!$`&DQ836OU?,<3R\U\]4O04L+ >+M5(H4-1$X&#+4:`D1*N'(GVR:">)V?1V_+SLZ+G7BES>5#'_H>0ZJ+Z$/MF#$ >+MFT"@H("D;.I"2P'CD54HB/E5I[BGK^)<I_8GS"@@G`QKMYJGW2?9S;@>J+>. >+MWORNWMH=G[]:I8#H=6#*0O#(58$F]UOGK\QSVINBQ\O0W!&V[ZB1T-?<A.0$ >+M;4C/L%20?*]'/Z[9KP$S"'5NVYF!'40,.EK"6D*AP6U4?RF`56#X?.ZG:G!? >+M]%_T].,/0A!*H-D@-D$W7S6I7W+,0&Z,-OW@X-\>HSGHMNB8PUKBFIW["=M< >+M3FD!T2`+^#D`>*8H*)Z/"2)_@:#&P6;"-2Y1N;=3'.?%M:*I9?]<,#[7PPF4 >+ML^5:S+>G*TQO;^_=[3\A)EL]_B87J\TFC^<KH/%!WCZXX%6]UH>C>_N&%%%% >+MG(CHDI26_^/860;_F*>'$[1Z?&PU6VLHZ+QFW_JQ,/0P:2X3#U/5/)U\-PO= >+M:&',7;<?/N-^%=U0ZVN9_-&7B"MB.;F;)O!'ZF@GW7*J<"K/BI(9A_`<ITJS >+M%J.R$C9MG)S`[_K/TB6[]I5@JJ')00ND@N`RZR]7KF7(4)#EAS.[C$!7':WG >+M]'L&LE+]GS3C5")$54I^5H)GBDO7H])I=V4\#P)&S#/%8.%6P_[5P+*6/^)N >+M8I1`AE>Z<X'A#I2@TR+/JTTQ,3&G[;X@5^O6_*?W?D[.F]'ZN(0XX0W#Z0I' >+M/>BNK].J6D0\?A^VV=G9@>'A^0K5LL,LF*#YDX$#E]F9F;ZRO("Q:&Q61-!> >+M*`_0R*^[BZW>O*8FMK_]_14ZKQ2_.W3XV!>]:&2<DM,2.YW(O_^QQ24EWE5U >+ME:?PD85*&AI#R=2J"N@8&!9@ZL!5'7V[S:Z,(#`HDWIPPC@1Z!_BQHN5ZGJ^ >+M%\U'ZQ0F&U1KS+Y?SW4S(V91\FZ02N85I:/ZA@O#V+K4,0$2GQ"_.^Q>N93N >+M>=`MG>&!6O4F$*;#L?9WI965#:Y'"A*Q>-;5,Z?WZMHS1W965/8W>_:M&X/# >+MA(%_?:^Z)?7U\<W-S?&X7>+?+M]85U:T-_=BSS\R0?H=Q`U/U,%^YZ&\Z?Q8 >+MTP;D5X+E5P=.>19%G,10>]:1P#O%1M?5OX]F'\]RQAPK2JG1R7Q@ZX6]Q6?A >+MW%"!QE6B@NEMD";7ZXM>5,FNPQGPSMVO2809GB$0G&]:]RG?(?G&J<\<WR,[ >+M(%$[0A27:`#:Q%><AMT><VFV-U-T0<0L+"B,C8VE$L5\?'@DXPC0CT"*_7/[ >+M2]J:H)JAW@,KP+:[+#8ZW/E55%1^1D61TM!4MO]^O!R\\&"UFB$Z]^#UZ,SY >+M^1.Z5"%'QL+B4'QO.,X09!U@=TOH9FUM'1H69CV=V8MD*4JO5:V5'5/N[CX@ >+M+@%`QL&)7+LHK*]/H-?E8+7[Y^3BXI(N&!@0=Y3K^]MN/)6^7LC?EB@G*4E4 >+M7!RBLO(5T%!9"5V@'E5(!4T\@3:MC09';*$]]MBY1ZI^YI0U*?"G9G4.P..> >+M"%>M,7[:`/TD06RA+C7'>LH(GGW%/`J^=9Q_<._[97BVQ0IL?6#>@6=Z`67R >+M.->RL;%9=;_K\7_#^8J>K5VCT,CF>^]^VO)^&;8NKP$8'4WE0!-C<;N0X?;H >+M_NG!MTTX@SV>(T<$LAOVF/=HSGL3&0GB"LF6*N`7@66X$!`N`8(HB(0)Q?`K >+MX'&1,_Y)O^YLC!<RG@J288YJQ[EXD:(B%P:;+3J0QBN%":$;H3']UH6V3DA% >+M43RW_Z=R8F$5K_WBX:OVGI5$X)/%#*8R(B<-Z"/Y<UEDOK#`>X)GC00^IQHD >+M_LK>`,R[MX7"MWM3S"/BH4,%_M;O3,S.EG-S8Q.-0#0_F2MA8V-S>KT_<84\ >+M@>)XQP9TLD>3+GKSB`<1UUJ`(FO@CH8/M[KO)U[5ZC172NKHX'ROK.T?(5L; >+M&Z=V/8-X-!&C>JV?OW[M),HR&/>'(_PJDHC1`>B!)&?!`$&F>&*"(^>)?/LP >+M@M>5H/H>+]:H&1DEE<VR%6)R<`$\/O=6V0IEYM]_F]&'+S>C`QZUSE&[1B,W >+M\-/;3+O4]^ERW7D8G^_UN$@OX.4`'I<C6B&'AUA:9Q%WZ_56D[LJG.OG)$V4 >+M0:K26VA\>;3TSJS_'@B?>P2CAFV<%+3FK&)5)?PCAMVYUE3_V+]`%\0A+\.5 >+MCA=?%\9N.^89V=[6ZB?;O>=IF4C%F6[+TRT@>>FB=9WM[4E9GHJ!P>\'Z<Z< >+MK8]+3[NMGAS]3@_GHQS/!J,_H-]5A\7G5><<J4_X9*\0&SMF<[&F/-F+P7!4 >+M51M8W-&1>3)?AH:+&[5V<=@PJ]FX75,BU^G,YS_ODY".%;)VP,:`\AI([/R/ >+M!W0J[]TKG9J4!5#XL*+$LP7P?Q)<9OIBW,/#3X:O%M)J2R%WC(ONH?*=,2H. >+MIRF^W?M7O3K:4(Q`$0.CK40'&UD)4BT>;+"#D3L5V;9=P(^0QT&M5^1)9MJW >+M@3O_$1RX_C*1)8>7>0EA80K4(>/2\PL/I^!$,2ZPB'\$1%VFMV:JFJ=49_/Z >+M"S*!<^4CM0")[)NUVMQ7=+Y70O2[AC,$_'FR..Q)R,G#5AHM&YUV1'H^'G7Q >+M$(?;@6ZUCI<O-V9?O:7UNP-EDT^7,(()P^+-8/!.EXL&D]Y3V=Q@K"PLH,&- >+MV/F3U0O/L;&Q%/S\.=YWA^;K@5\?KK/149:@FZ,7X))W#>KNXP-BH4E)K,"` >+M#P8Q=70]!L[O?4Q*03'T=:Y,<8CN9$TGC=IH.2T!O>,_E&;@,SI>/FFWZM#: >+M"C.#1JGP;C48B3X?K*ZG-64'>43&>C=5A<5NS&>,@@D@&I?I6O3NB#NU.[6+ >+MJV^&1!2$:E28>ZMC)8J:;/MI^&'#5Z7ASXJB5?!D&3+Z^1IHL7EV%TFQ)C13 >+M*"LN8'Z]_<=`J&<OEM?O-4;@DOX5*UY'EYQBP/;#Z'+K:Y+UBS?N8#S-5U/O >+M>QQ+)I*1D)#\E#T>?1*\).Y69+EQ9L;!MAJB/$F#GD'-__3*_YETT/S9^(M< >+MJJ1)LO\A4!NN;R9@@YOU"4[`STS%FU=89RX&0E.0)?_NGZR+"[([NE9E)$SS >+MWUD=B#*Z8TQ34>@ZK::X<03R&%CIG&HI*2E4L@C=MIK6CX;E6)Y:*($YW@#' >+M;<*]JU=<M(C25H"%=&*=#IF=!IRD;*7VO3[!_.\1.BC4!\LXO[U/F`=7#'OA >+MGD#BJJ.-'H01@`+DV;NG_R<IO^\CV?<"+2RH=;B?2:BHH/J_/99T=66+1V$P >+M>]^:(>+S#"202O+`SG&>^/"^/5Z$1!CM&M8^@)P(#+-6O,[!%5/*'\6"],`Y >+M37IM%]C^;J>@XL(%7+CQZ`(;L8O+Y+.&/IZV!/&]"+70ZOZH0YQ69MUT_.FO >+M;X#U./^W8V[44&W4K*/5?4K;<O$O%CSY1]Y^,X2C.`#%OKZ`<\LOZ7N9F;XG >+MQO>@&,-U[!+6T\-#HY`S^FXRR<G)3F\7K5D@JQAV%=TF@Y'6_\WOLC*HG2J6 >+MW*&D$7>HNO!PKT"-'X/AR!<V:Z*2BK>7E%NYK$1L2\NWIXVL@#EW[FELNQD$ >+M[(4\]:H>;WE'RD[KN3>[I6I++N?S.FPI>PHF!*Y40M]SYLS,S'1.1X)I@3<Z >+M:6GI_?W]_YY1A\<%SG&R?TW76$X?[Q!A<_-#&S]+6LS(84:9A4MI!V+9/+K3 >+M`]O%T(T6V2_61??R0E/34[QQ>YY++TV2EL?@NYLYG+N)YMX4U\+[E85Y!=)T >+M0M]DK*0<D?[Y\9?SD[-5L#F,OEP,:VTGT2\SNA:ET"*L*`0-'A%G2WUQ=W-N >+M\S#!>'S;/Q3"8;BQE@HD/;HLXH)T95&C/YDJ9:%I9?5J,3@B%1\\L59I?>%- >+M(8L!UXLMIG@\VB<0UF#9Y-*%QV4??E^/10`P]Z69?$/2FUEK4=K-MT-`U9$U >+MK<-VDE&.(#U]3'4U7<#7VY;K^3_F[Q<K,YW+/SHV]A]R9D)[3?/_1T,O=T>J >+M&AI+!O%3(!A9JPF%A22_NVYE?G\-NZ6B^PT,_L:325VL<]C@24Q*`J&BIR=G >+M9(QC-AVJ7HPA_]1(RSJ:R#"-^FX.9&1D1*3H(DKZ^A?]^1\9;$)24M",W?>) >+M[H<3&;TW4%9WSD%C0!"PX[2$(+/Z;8_V\NI*$8_.GS%Q_3M.2NK:08A3]AT: >+MWUUG_NBJ]_V`<=,S@\4\\DE;#L>M;`E>ZN3D))O;E6+DIY*0A_&-D)4J<<,@ >+M*"J7C,?="^;9;Z_`DQ9:1`(&6_>#]C,CD*WWMK-LE+][-BR*'8/"B&^%HXML >+MUL\SQ.M>>^YTV@U^H-=AFWFUGWD93[LW;2NMGIQ]N`$NTC,2?I\O1]U?`:<5 >+M99D5?BJHA@$OY-^%:[?,B\?C]G-B8@*BCV6O]=A*GB7;;=%<3%*\Q2?`0J)2 >+M,P21A!Q&D$[W?2>"D,7X+_CNWAZOWE%*2DK7_9PLW]?[W15`%VC*L]D,.R,P >+MT:[Z$YT87+9W>MBBF8B61B-'@8.+WVZ"=_#L24%H.0Z?3==>MVX_13=N-U6= >+ML>W%2IP])C3\7WIZ%J(BX]%9[Y;!937O/([4&M!PPT_93ZVLV(`KSJX@25X$ >+M&GH\9\+1LANR[P;=L3'P,V0@3"9[X@._OVQ#_!ONRMY*7$U6>IWRN,[]3YRE >+M"W;@XCI_+UHV(M5V/!"SJ*)JM=D0+CXH,#+ITJ-B1$%.#2,Y6,Y#30/T*L_L >+MY2E,+?&%O"AQ]R[]<]AKWT_<<WYI/",M?O<:"OG,@>\8(RTO7]+4E/Q=:XRL >+M;&F4N5[!WV1\<]&ZI:*FMD`0WV-TLSM(%1E<6+XYU>O[1-#A)KU?:C[O;;HN >+MV:;O``X:MQ833\0@L#GQR0(&N`^59>Q.;FOC8HS/9-?9V[(`<NR#?<4-FABO >+MMSD#0G2J]]3#0D/!Z6ZD__G<.Q@(<H[6/;#Q>IP7%Q;BJ:.45^Y"*)<U_F+0 >+M1SW!,X>:K&F0!WZ^WTTGD/U:7]=#)!28J#/N_]=DC5924F)F9C93I<EH8FHZ >+MF22AI3LTO$TZ&5PG5K#:L>.15UKO'!<>;%B]WV']Q/+"J8^L8L0H7*1/89#; >+M__-<8//U<F3XN#^1;,>)ZWC^B#[D`9+VJNOF%3?ILOM*@,-A!9*)4*NF\5@1 >+M_K'+;.7HV"6W,FY#@]VG$=+>:DKBHP4S&X2AZUJDT7@Z0AA,+WL%"NC8NS8T >+MQ?]BMY410?<FH&/1N_E-Y2\G>T.*C&`[/E_>R)-Q6[:R8]][]^/UX?YJ*^\[ >+M")II#UDT%E328$0-OK5^734W-]/IM<5_OT[')-"R-5`K1JXC3'5CI.:=6RM\ >+M`V5SLY)VI-5J#+X&$>-9ZKTRZ'QU5SMI<WYBCJII]PFPA5+/&!@PW_F7BB?O >+MJS^_:IA/E+9'Z\%>=VBX@\2!)$+*03H13_F;:(%QNAK<3L7`==O`JXM_,66P >+M=>+NC\X^YR@.(%X_M&#C<Y;"Z"-DRG][J@2X868)9EYT7]X?]>[_"[*W^[S6 >+M!LNV!<K@^_4_0";'+`I/F]46KZT09JNJJ#QOAR!UK6II:&!\YY#%/](/+QS_ >+MI;[CV2*HJYXWAL'!P9H@-\0ZK[%DZA$";.V$;B$:9+_7E3(]YE?8%L>M\/$] >+MB=OV1"(!@=P46DV7AT5-*)/9E9N;F]#P<`[#^7O[IMH"X>7%193O&W*Y?/Y\ >+M([E0%1>>3I8.25;5M$62M)24D9!'(`L+B]^4M8U-<7T!`?#:0M2TZC9\_L2L >+M#P@":--C^(Y!5-34Q.SL*9O=OK[ZY]\4&T;G>Y&^8^DHEAA/YR$FI:EF^T.E >+MG.-7=^N^<<!'EI@8K_[Y-$3Z9)Y'\K0E_QT=DL`]<G\$HO'?MMEJ@T8'T.U, >+MMAN9'^(%3<4_&37\8A3$]A\!3;V0_M^42A)JM%2MC2.OWY4^-Z=2._L\Q7ME >+M=G<X:;?1D8+-:G%].\Z8E)4U7I)F8,-!\LIDY;K2\`'PW'KB,FQ!>F?DK+\+ >+M/-VK&&):MS`W-VY=6VFVQ>3FY@Z-B/!]"V>VB.F-N7I]]=&HT1G\WKXGF]V= >+M+QGT-=8S*M/5":?#49C.Q6VP68N[.=YDTB+*86D/.&!,`Q:#)LW-:\'KQZF_ >+M&J3**R-IKFW:,:(@HD(QV_IYPIC(BGA3XGJF([E[$2#GEM*17P?$Q;=I5A3+ >+M%X.KH<G(3.YZ#Z+:63/N1V0!9G(]^'?7]/HW&,T1GD5MV3Q"5L#9%0H4-!&9 >+M9DE3%.S1FZXN/]P8=D2P;$<(1-`UN#M/*-`C%C3HY;-PX1_JR$O4`WSU7BA, >+MW^,-T]`/)4Y2-9R/`.ELN9:2@R/UX6P9#17U[^O#&;9@SX%%69IA0,9H$N7= >+MP[)AZV&PYY\HQI[RQ4#5HM:":)F)RSQY]47LF8S&7C4J$/_7>YBA0K3O&P@5 >+M`T.IY73N]SXSG&^3GPLM$,;\\6.FV]=S=W?7#^"WUF(/C\<U`_A5+@2P3XZ< >+MDC:;]D_BCWM'R9*_V_W7;HN)'@MK[TZD!K[MT:G$QR(:#E^JN\Q0\S!+W><B >+M:O'RO!='S<!`P<V=05O;E=BZ%;!VAMIFLTCS'[E]?7Y,TF85]4V^5E;MA;N. >+M1IK!2&J=$S4]\7D5XP7A%S_N?+8#7:!`=`#+/8^KMGF;WD?X9K5ON8NV2Y/3 >+MHZ,[-9Z?\LH[R@(Z77C;!FB^'``>JPTL'+;MQ8*8``@F]],%C",]GY,2`Z%< >+M9E,)HA<T(!JEC--XC\&?179W?)-#"H]-:<(U>8OIS.]@S\+*RNWWS(2-C?U= >+M-ZT^-=^D8-N@UQNPL+S<NB95_GFSPTWW1MRK+NGOB""%<[V0C-Z"F[]\(1"[ >+MMF(%^:`155EI%ON"X&TK2+=,GJR3-$0_Z-X07AD97`U+9[5-%YKO&1K:=.0O >+MD&5J?%L4>-=NL3+6ZOS^#(%0IJADJ!--<QV0^2-EBAA#MUDR!<#7$%PY4NU] >+MH`AH!&X,T1CO]>:!CBR:1\ODV^E^6H??GUD`W"#K/'8T?9O/WG3"NGDTA(5! >+M5$OE"BHK(__]^\>!Z['=%_1-EDGIZ5+FYN1W1]-/A$*)@KX]1[F^5C8V<X!_ >+MXR["T)-2L"*MTM;N/XOE=21^Q43M=;J?M9G<'V/0==37)_S[I\5'$*<9\;@< >+MS=B^C_J]/?M-X_@E7%Q86M==X$9'1\DH*$A"^RX\6BM9JR(E^FCL"_XKC!+9 >+MM'C__IAJPD`4Q(B0\_-/L_N+J$*J[RTTO#>TEU"O1?:C73WMX[LV0AZN5AHC >+MON>JS\-I&')P"!128E96%)GT^5IKW.5&)VFHT=5F-]4KZV3&!WB<`/,;V(=/ >+MU'MQK(S@)$N\85>H&0HJAO27(0HV=@Z3U74\AD[/S54LT-47V`X&0+A^`4,2 >+M&-#WW!B45RUKO'R;U..Y5WF\6HLZKS[<>,+$/5\1Y?V(F,1I*A"MJAR;5Q1$ >+MZ.M^VI0U-26%PV38_V:;4MU6!X,A.XNY(!D;FR>,7GS>`!HJ5B@=TR-G'BG= >+MCS4B!@9$[=3_&@VI1#2TG-*#Y\CDY,%?.$8R-K:F#0,\5&2!LT.4F`S3`%&3 >+MO&J/:3J%I.P9#6?VA1FM^<\]VM@+2L>+",B9T)-+'H.H=J&[\%DS,O0@B*KX >+MNDHB;?)J8WI+%ELUO.9AI-E]*E'U,"2A/.<J+[G#M:LGS"2L(WV5K_*01N.; >+MD[+`/)`Q#@(JBOI&3^H<I#HW48%')5QU=X6IA4Y0'._H/SIZ>G)V=G9]02;P >+M4P$?K\QNQTJ$5S\Y*(;A#/QNQ$.1%Y:67G=;K[-H5K'R9F=G@[3<PNC&-T*1 >+M[R_6T@B1?C#O[IJIJ3]XQUG/ER:DI`Q*$OH/M-BO_6MS)OUN(,;?I%->.393 >+M(/HK.IJ-HCY<".T!UY%N^R_OY?Y)F>6.DUK#]D.@\TO>Y6Y&F66][9&#?<BO >+MPE.BFE&72B5L%BNEK&T]98V)+4.O5,Q#@?%;18VF*D>!CWVPB>\EM\;4&^&D >+M36/Y/,45F+&](463XEVM>P!GR\WC<:<IJ'G#59E]`1PB@C8!JE$2E&5>3DQR >+M<Q[([@R\8ZIR%J-[7R%G_#[1-YR.B_&SI'7F\T$,O`_0KWH-O7;"\N5XXD7_ >+MCNXV8!C@AE_B_<QH3<IY4TMEUJ8DLYIL,1U&[/"\4GBZW.C.;-PA_H&"(FQC >+M0V-L;"PF(:&BKK[(`.0P(27;K_F829`>%GH]HJ)P(K!AZ<G`U>7*CAPO,DE3 >+MUY?$H-$`D3R%,$;[^GN]M;F\VP&3)A^NL'/NNS/-13NNK&9/G@\KG*.KQ`A7 >+M6S4^5,.+G9QDGZU3(ABB:A@N>3JM6F^SQMPQ$&K:+/6NIA>FJ^'<88Z335!Y >+MEO/NE9^>61G)03^CK:V3D];-'_>:-/SL$$@0J->SY!MM',TJ4W>04$'7\W;9 >+M65%;-7SA\2840B9TO+5)0/_BPB_-]H6-B6:Z5!B#Z%-77EZ>!3(U+&O[SH_G >+M)_/=0,+"PNBTZH#_C7O_R)@_Y6>7(!L8I?(Y8VW.IM2,C)3?N#$0"CX4BR_Z >+M_6!K:^N!P<$"*M@&NJ)CGL[*2FCV\@N'=N>MNI]8%@+W9*S3!;VI:1BS);:W >+M;U8]?Q8#`/@3FIJW;QRKS2PC"]2KB5Q3D.F\T#-#KJ%N)TOSKF1?@&7%EV:0 >+M*<:3I"39/*NU=8(:*ID(-JN015`#BTZC/Z#?F1:TX=B`/TD'Q[SA#<+\\/`, >+MTN@(9,.Y6J.JM=?]9"ZLMN=U[$S#I@VFYW:,]OYR(ZNNC@D5%;6+UV9M/'_V >+M3RG!<6+K8[\+JQ2G6D[ICIP1L#XLM*53W3P.U]+?O>^K47(('.Q(Q[]"*^X* >+MP[5=X5#*6/F&O+ZRA54)W:E201B^/56:->]A-AMBQGZ7D"U^"E]Q3/[)V6RV >+MBDT]N1#:J4TMFV9A[,<Q_/:0>^VTELO'D0$FQ>)^@8F=OOV[E[_`S:SQ`D?' >+MS0@L@3@1+8[0,F?[*&-EX2RY:IMOS8K37"&6A#"@:E)FXS.'RWS+8FQT%&:D >+M4(=60E)*2H[K2)JUNJ2EQ6<BG=ETDD#P<U/`0C&ON)@,%0T-F\LI'XEK[<(C >+M%+G:H!MGVRDJH&C$;KUM-`HA-A+V-LS;97P9P:MA.;XLJ-;H>EN8RL8(=S%N >+M*W`XU9[W>?*^XAL:TXO!@RK+B6"JEY"[KWSBS5O39CG9>&#J835^OZ:.2R+L >+ME8D:+*__0!/2A`39<Z4F01;*HV?"/6J67+JG90UZ1TF+N?2=1^#\:2SJNBBO >+MVV(`T64]EZL^#XZ.7.YYL6J^^1>_[IE5/Y"(H_B7D'F@`3'!2LBY@\6LNJ7- >+MJMFA\#_OOB<FK*9O]/RF??@Y3?NPL,SW3KL5EN_!(/Z-""L=[K3?LR27WQ?2 >+M3=X>(3_,H*(Y2.AUQI.PF1J[U;TO,_"=^_CK0,$7W-=,CLC)`_QF]QJ@>.D9 >+MYA]008*,`2,N5***C(NQ<<Y]>Z#[([`'H.C/WT`CE>O6^=B0B+Z(&EP(BV.> >+M0I,V5D$!HA-*SWD-UD>Y9;>;$(:;[OM6WBV$U'VY+K1G*+@IL_S/28\@#+DJ >+ME(8M#D%]L8?S(,6IZ9^P^Z@R8LT;-!O4:SB@]NMT+TXP8/I[5A[:PQ)K/QMI >+M"@!P.1W,/M]?OFEVT;:NO*;&_'*]?>@.DIY2(3O_]^_+KFH;>$585>_9K3U) >+M#;7:^N6M^6&`PE?<I$7_@<M-'Q@254?R@@D`?A)_M_%\$2LJ>-!$?!%$*]6< >+M3$B9G<(>Z,Z$J.G5D/X7+<SM$F]X*"9+2D:FL*XN?G_?+#(R\GB1-J.09-+( >+MZWOM_X,<[ULR_4Z/@J:FZ&@XE7_UIKP.FFA3I9D8!.`\0G!3#D?VG;MMV?1< >+M4#QE^`?>?5@#OD$,!P?HYK6?=\TN^54.>5HQAXD4,WX%EK-XO<.$I)<XW"[[ >+MO:L=%7_<@A#/9K0SJ.D#HJ(NUFE8'<-RH.Z/$!$0Q%/-4^FT_W['&VEIZ8*" >+M`I#6-?F`@)YE75)BXJ!?:)0J2DK`19M!BT9WZ/R08#>OZ#1_!-83F<_M=:&S >+MV9)"-U'#_`V]MV"F(Z-M.Z;/*TR_UDZ?`7<PDW5RR7JI>`+S@^=P<[MT3/%E >+MY+#*G+-R0>_0^+;?>-Y?CFJ8>(6J)D@!K^_Z?`2<#33E;A5L5,'^["XYFW_, >+M/C:7JS^.-@S#)_RB*J;]1W>':[G%[Q3^7$<XC-EGOZZG>9F)@UG,G@N4EH,6 >+MT+`MJEWW\\8%'7:T+@_\GBB!M=J<,8+[8Q^W>Y@=8$=/8_E\O0-/*+#>:0UJ >+M-)G)#BE$B,32%@:B0Q"W1KMZ='3$ZK#.]<U0\[^O=G=)Y.&$O?CE`3X6,3^" >+M^`+4@N+B.E?F*9&Y),7%B4.-9@O%CV_[;H0D_LIG<9PL6PW1&J;U'-K_RTR+ >+M!Q!CL5D9S2"NS"C%`6PJJT9&>T(5'IGFYN?CR>"P_=](D/7B<V.1@^_OV0`^ >+M93:7B=_G"BMIT-'1N?`024A!&X@ED9?PHI6C--A.@?#O?NW_FL'R"25<A7-* >+M]H:3K!A*&`&T08(@\[,BX'SY<4D1[EWIEK=^3"'W(DTY7K,=GDEFKV[+FMD" >+M<JTY/$U/YK=QV<6S)X_&,UMGN+ZK)H<@_[S]\M'C0:8T]=W186!@RBMEM+2P >+MOF>GGM_-X.;B[WJ9T;&QW>>;/8M.A4X0'B(II(ZIJ@.>!X7E8\W9\'!\NJG0 >+M`EEN-V#BN[[)Z5@4#^C4$'M.6<YN:HEO;*"SOP9-+JOYR&\*'YU,HV$:F:#P >+MQ#V=]/';^=`A]Q*SNU:O^^LB]X,RZ^OR9`Z8VS.UL8UWX4#)/?P>B"'_CSG" >+MZ!S[N%,TN20!;'*&@/?,R+/<%_BR\1@26X!%O995M;.2H?;?I<%IW&T^R<"\ >+M5<!5`VIZ\S<,('#=/F[#QXDOV.`TUD?-!%J7IW4M`724S29E15PQ^_;T[571 >+M_J<+<)-/14,0)_GD=9U?&3G=6OCUNYS&H74XOUH`H-_U!67]+,XO[AL]AJ!> >+MUCT'Q"Y'<-JL-X4*?)W/BP6Y0C'"S*+SQ>+SBD?R73)0>EH79@-K/"%50Q=/ >+M[8;O+/&P`BM@N0N*@&F&.3T[=>Y8E\(8+1N&*6CYIU9$%2EP7,W&P:%D>.0` >+MEZ^;Q,ECU1`6&WSO[=3X1GK-N:V^D42,85]U9_EZ]ZG.V140WJ*K<1QZ;K'- >+M_N$(L=4G`SOY9W9BB'/4+HH+#F%US>?CM06>&@T=W;D%IPFUW)[#[E_?09JA >+M@I96^K+^#)P#!EQ"0H)!^VP\.R0BWLAWW)R&S=<%WL<>?%%QCL(BO%[9`%UU >+M=(>\W9"1L*)$H8Z(?4*:(:8.+?6^/#8SS"LTEA]6,(L+5[\SE,8.`\]2]'Z' >+MP`4=H[AR6$N!.#0.'XWW(BQ[PW8G[`M<IB<,]I-;45C?>>GT;?J]I6F94=I! >+M(T7:UZNTO>?)6/O\1]X="/ZQ[?THM=)V^@6`G)P\.KI1U=^)D:P4I?3LS70H >+MVMKY[Y\0*/\I!"7.'$!F9G;;!@&CR/W)?$1>`(](GH`_E\O`\^?HT5OYYYNB >+M9,!M_0\?/@-DEA9.V>\D]\."NKK+R%")5YSHL,M^C8.A\[R!QG];<QMS:?'" >+MHX@*5K?%KF0%`5F-4>KLV#(43%V=B?DD",P5^O#/D1O/:,>S264E7G)J*C(F >+M;DB_LKB8&-<#`@)59/"BS:)'J'?3KRF+1N-ZG3H=.VBB!8>RRLKLX_)C(P"^ >+M5&_R:CP#SX_21\%]BS3(KBK3B$+;2<^SO3^5@4\2:]Z6Q]-908+'PQ''P]Z@ >+MR+SD?6^R1Z(AFVF>>*VZ$BE9E#/)!OK3&B$.]2A7'T];99JU!FH:&KDI=E8C >+MJ?@0QQA$,1B0<^5>*8U1Q8LX/RW3Z4HN8BS*0.4)_A#F\?[[=V?\,#`#@ED: >+M`GJY6GF(>THL$5:_I@0=NS26S,T>N*THP\?+%ZQKO5EZT3_WL(5SKV#*`?0Z >+MLUP^NAMOK+VQ.>]_N.-[97YX=0ZG'#,RROI-.,VBT/&PI`MR_'6B850U#;"+ >+MF#W6\`<@S`KSHN2W/?^(B4'0<4R['D,_#IA910!/C._*Q4LL(#_N1&C>"$.U >+MK.R6.+?*;*UZ`[K9ML":GE@VKB"+7$\'?B9!$7AM8ZVF[OA;U4.?OO.K_Q`W >+MOLX/>F6UA5]R.F`U0U179__07FYO=@QYJ13F8Y0Y7BK"9<XI^OGS>#*#=5%, >+M7'Q'V<S$Q-2ID_\;@;8]?)5^A$7"0NWL&(>&ALZ,;L*HJW^WL#\6S<J8_XJ& >+M9F&99(6QW"+&9HLDZ]<NZ(7:BVXE>0&E`/KZOW`^A)\UFP8$:)UT0G#5S6I? >+MO/*"$B4/]H\D_R)WO]/1(?VZO8](QH5Q3'.)7N+*V]%"OF/G0:KN)C?280[$ >+MYZFH)$](\9EHPBN=EB0ML_MTH935FGG1_="E%9\5J5%@J/SN`VZ2J&/F#/N/ >+MJOVH!D@I3':J'YQ4H1%2/SB@-9)]!!Z@/XUN45'LF3*%=(S+$76&9$@E.9'9 >+MTX56T8#4\)#'*XU'+;U\+Y)\!$B/"L94E1,GD:A3"VK.I86)':P("VJ+]4<1 >+M?+DY7^"1D@=JVLR4L3GYGK4"[V[WT&>":Z$PV2`,,VDE2"X!XW8Y%Z]0,"BO >+MI22`_QAF:9RQ-WM@0,SG_GC'?,:A-6NCT]/UY2"-MN/P/1?Q<?C>D3"\V?/* >+MP*2PGSU_$#.?/A%C:ZT0K$E;(L$<.VCF_NRJ]R`NT!N:")>K4#'YT&OCJ(H/ >+MP@_FG)G"IG4-GT]+Y>W5H\\Y/CFY*2&/$OA.MJ&QV_L9()9VDCO_%:!'B?DU >+ME]>(2*]VCK=-G\//N!#GK2]8%IL*\JGK^W3DIEU/>D#N_U>PQ?$LXGSE'091 >+MDMM!?%!;,VZ>O/$]2R0V^[AM1R^Q6*:I9FOPU8;KQW$(AF1_`*+[Y8)F[+![ >+M_N6UG3TP/R6/LBARLLDMD9LWJA7=GG7\9ZB20!<)-1L'N1X)L5BA,DJVC4I" >+MO!-U,"O!GU2:]HZ_DU=`=XI#/P;JU@FB#44H7%%8V!:7:\M>^Y2EV#O'^=^O >+MB:QS;,S_Y%Q33UL'V$YG;%AV<9(BU0,%L>GS99F#NI6CG[##4A6=F.)E7*\S >+M<?*5H(`/'5-:A2'"_L``<HRN3Z2_HN17#,HA>A4B"$3.4@;=VHN<>!4BYL-3 >+M&W1>MBA"@4T#,/*OO#2,4_Z9T=$!_^R(0\,B(,P^W-V;M<C@&-*RXI5P8R,M >+MTN:_0020^[G5BRUQWQ\^BSDR`])!/UI('V(,MT)*37U2U],@/]]L<.:-%1&I >+M0!<+F0XD-_KM`"]V%3%]UMLI9S;`)2%RI^.C4&M[QXPO,X0R\),*0BL%J^H3 >+MIRE?MRI$GXN1L79C8MWH*",C8_@>YCQY-!6C<&^J?2!&0]Z#'N3KZX",[6Q% >+M(DP?=J)%MXV)1TSV6.T,A:%,1D!G=S3F=>+@\!U<X.I89L]3.-HOP\I8-D8X >+M@.\G<1T[PNK,K_X'RYMG!".P;/H`EY3%VJ(7QDD$T;I&A#6A]!Z2R.48:12V >+M82+G,["':$1(=_"M&:>HJ;IIS$[]WZSNI.MG+V:SD+X"U4@<0'#\?''D#6V; >+MLC]U8>")R<G[,]JZ;$>,SO4S:R1:?0%1`;5,W8;826TKHOU?6"'@X+>[5HPW >+ML`A&8O`:GI'6@YDV/HAW-_UNH`G6E8:=`7K.M$G+57TT.5H+-ZRI7U[AP"\C >+M9I/6U7O8UA=W+U)QQ2IKKZF=3<$CF3T["CIA)\-UH5YM4#S&V9OSW<2*S\EJ >+M/?::Y'T.R&IYJ!<O-*)L^YMC-)&2"GTZGKZ2[#W41:U2C%U;H32`LH8&Q?>L >+M\^Z-09L(3$M)D>:Y;N'ZC>__X1=SUJ)B8(RCJX'F]-)JZAO+C=F5N.H%M;>" >+M$+S;R[_&]RM=52?CS9M(?[T&K)$S<R-P?(6]5)W02?GUED?C:^"X=\5:TFZ; >+M@R<HY[$D\(L\3:CB<%KRU_+#2*V;Q.ZL8-D,GSF!T%WTR<ACLZ`^,B9]-1$= >+MD8BPW@]CM+[%(,1<'O?*@U[1G5YRH7:#-$)9*P\IK*\MFY?I'V#IID%KY%3' >+M-FGKVO4:SL[1ZF[-L@322?"7<W'U>6$>EKGF>]-[MPW\T=M=AF_U,:P#3;6_ >+M432[^4_]-HZX^U@MI_#J`SY\Z@._`A+2TB@1"?BH'B_6*)=^Z]-:3.?:5YL= >+MGM@C5W^69E#&)05FT,5N<JGAY633_W<\SV7Y%^AB#6Y35%0DWAOP,6#?NO&H >+MBKO,F48M3%&])*`Z)4DZD1EV\)]`N-S-.M9SF:/\"";K`)W#'F7X"DZ:$V&: >+MRQW%$UB8,V#E5V?[G;%URBMI]!C2O*[_0.EV+IN][[)])=*TLCN]MN>>Z$6[ >+M<?B/NNCW3J6^<):%A<5)7XF8K(:5OP[]T`[;%7W3#FP(5U3HR!9<K'@JN#"[ >+M11I8P.!]6N!H^QE[#(XOZ[*6>U"BZ/_?FQ<_?T(CXG%=NTJI[B)MK0]0#@M( >+M"$"Z!_*7]3@37W]6U?;P.-T?SXI)2J(1$EZA<4E#_P^+<([%,?#UI&PBG7F/ >+M*/-M24''I_WGQ]M34FJJA)<7E[KLUH"Z9E19*8ZB.$SLK8H+YF\R1L:XIB8V >+M1W0-]1QAY1]C8V/I+.9C%7___K5CD^]M)F_YU^7-"@:%:,?.$+;SM]5FD89T >+M9)J[^9<6YYC'Q*:@`!T;RXH)6@Z(FG:EM<LRYH/SD(9,45Y"H'$?G=QM&*H8 >+MHO4T,\!D,!(]&I^W93*KLG)L*H<7F]NEN%ZDJN@A9[RPH*!I,*YUPP.3,/`= >+MYJK[B<#=W3TY)<5Y?T3XLO-JVLR2T[&-I^')%A*^$]V_Q-),`_.K0J8E!P)0 >+MR0/XQ%NM--;BP65$!,LF);6C"V2A]+F7)WU%0T6/4@F$U-P1V"^5X(OL*ZH< >+M`&@^09O;+2N]G:(^!2_'LGVT*.\L^X1`=7KB!.!2/1)4Y<^>$*\3S.DLI2': >+M<_W[7XB#/K;"+],^)$[4F<D4*V"?O0L@3@:-#AL=!-34U`.#@RCHBWB>@5>; >+MW6T;#I`(./L(FV;@?Z8G)KJLWI]O:(&X,QP0+_`=_PF=]]%4O]_]N7!M_I@, >+M[MJ)U521,JBLH6/\GPJ#30F9-)24DG"ZE:\6[\PM\:*-><W6N]RV)L0#=+(K >+M`9Y^Q3;X#HTKE&WJNCA"90HN08LVVOH8.YM4`]6PTCX2'V'`.WZ*C&U<4-SH >+MP)K`:<#FTG!H$I&V^E`LOBUBUIH-,X0Z2T-CZR]T2J3`JP]/@T]G'!MVI.P< >+MWO^NT>V/)-@].T"\>52+_Z:]/B33NSO0/?1MIOW]\(7^/PW!OR\/(1*UH>`\ >+MEU#V8"1HO-*"7;[:]^(?$?LDW&?*B(X+U6HT4AH7'*"3CAKH.O>=SALB4E%- >+MT5XFCOVI,IRB(1-CK6M%NUO9]S-KT=CQ(A:1&&D#_T<_T`(IB([MB4'1%E#_ >+M=0]3V-]D7Z#?Z4'.S9UQ?&P5CH@_-E<B:VUEM?U-^4?P<TAV,QP+_VJ,\2J6 >+M\,74L&YM*`#&S0EV7GZZD@POGY7J53[%)240$Y?VQ5TLELKU6G0#`P-.H^1I >+M=<;]X0/*11+T@-]"KE>WJ,"Z.B;6_X\8F(\]U^JXI>#MS1U)LN=F<[X.F/DF >+MPSTW'OKY,L7`V;V;B6+T:9RJQ;&[:<$XNG&WJ\T<WLNV$$E"_^3_H.G[E\]6 >+MJ%+F94?YU,](R)3E'Q!Q5-'Y:(M<H(D4LE"$23[%0%TOX/=HU?"3$.N)"]94 >+MLOS3K:N_RV-#[6EPOWO:-_!9,6E*Q\7(C+D<NLE+^9&7[SN]T`LB*U<UGQ\N >+MZ<IGU;DQ=17PQ-OBN#7U6[^SZZ;`]7]:@#D6>X%57#OE"R);7'B+[[8[+CVO >+MKY*5557_&73U]?7?M<N`Z\\.MZDSUH0[/,]9@_GK%W.;O@%EZLP7W*_^)12G >+MS_WA?CGL!)#,P37OW!)$F.W+P-_&GX9#W#Q4V%I!=4ZTLIL$V/[*C_E_I!#4 >+MI0Z&Z[7=TQ`JN$G#*G7^5QZ@:&,:2%\W\P;C\W#.=-?H0,&)@1$'9+EX</^@ >+MI965"QH*A@VD-5+=<:QW%;>ZQNAW]GLJLB?A%J+]+:$1%::;5E.BF"?@=KF> >+M<3)?UF@]3Z&BHI+.[\OQW^6<-<?>P1VG;#BII]?#7$+%QR];'%H%OU6_J]QK >+M-&\]-=X^P)'!Q6+VT40&*Q,I*2D15Q;(ZH1,S-5W-<W-SV=P.AK\#Q\,DUY? >+M1;ZOQ9/WSVR7G?H&"S/*SOX^?+YA+YRR.D3:^&2#^?C/7[]N!'V3?WE#Z.'( >+M)@Z<KS3ZFZCUWL_)"C"+P7/81Q[@_LBG5,A^GHU$IRV%J&JKRUZ!GY*V.,S1 >+M9+;YZ_67A`$@E)KB577G1KBXLK!"8&J+@!>`:)$CYL3)^VJA-U`;P)ZK7M63 >+M\;-E=L3<I*'W/ZOGM:MPE`.YZ7DX!/*_U<6,OVK;0\P+$&W45+*]]`"0_=]7 >+M``56NC\LT&3C9:SCPG&9,(;_C^[?JM->QVL"2,ZP06)22'E5GXJZ7#EZ[!(- >+ME[EP+Q:N"'"PT%_/@<I:3>K43%Q$]B49SV&G9?-QW(#WM"OW,!JK.R@PNO?, >+M40XO<Q,T/09^BZ,JK(A\D>Z5(<Y:TRQU'N^"X3;FC7)A6KL)XN4SK#K7\XVC >+MZ>(\[,_FV>_IP&++Z=S_KFIF9LJT.FS\]R:GXU9/<EI:H]4L"85B[D2!:`27 >+MR[Z4I/`KA;[CL@ND`#C:ET\-DM03=Z[T8IH!$?L5&6X(@?9$[0`8DK[K)+OP >+MGQ6`%2FP'3M[DHC??I7MLO?K\\2J<[IE_EQV?7V[$M1]\@]@`X$@-D6]SG08 >+MD1$LR1RB:O'OJ;IAO?VP!UE^\3-9+;T7;7!?P@__L2S'GM%?:)18;%;(JF4* >+M!S&<FT0,#+$P:!3?C0121D:F[>-Q;1)@#]>R8%!O,MC4U<7G:N'6BT*Z9\WW >+M2\\38&O5B%E02-5RZ/]<D_;_I?X)K:%[LF$)R?;%"W]H-Y]F+0/9>;+8*;JG >+MHR<V*8B:,_K8MK4X7%!Q7J"3$A-'1D>-9_*%-X%/`>:&M+4NE*N0V/G<54_F >+MI`W>AQ49V16_;1.,![7XY3N=^3"D=^7<\2N/_Z7S#+MDQ?)NIORLZ=[VZVH: >+MXG.]<#S(IO+G>&B:ASX<)B`?,BN;N;YW$?!][7@$-D'4E8GK8*S/"&)'T?_8 >+MH1HR"4F)55K7UE36UU;0WD$R&]:IDU;:"=_+2/IYE2HWBS1^8L)"$GV*^G<, >+M=;DJ+&97]0,__'&,H#\=1(=OI;8%?V]F5(91"G>;3AI57/#BZ*V5$,(^1!IK >+MDK<4E3"'HVFWVQ&QSB>W97<IS5^&"/]_*?O=2C1U?L_*_YCE[FBZK+JZNILH >+M!XR.8UB5@89F=XRV=O\U4,Y2^X^DWOE8@9DVPME2#2DW-S9P;D[E]O86B]5" >+M+C]Z$\`YG<$ZC(&/C\_TW%;O4O'[]Z/QS*<<3E-HS?^T_.:!HA9`!WI#XGSR >+M[8D1H08MITX]-0UUXD[]@:'A'2>N\LIJ(:@C#GU:RZG[R2J34*\4LE_4JJ5> >+M>8/%PIXVD\#DW%P"OZK6_[N&WQ\.6[_9?9M,-K]C9(>N&YY4.FT!D&<1J+NJ >+M+\O#;B\^A\>+#00=.JM&/=0FE$ENF#R?TPH+FKSD@33#@)5+\-I7A][_Q#Y. >+MTJJGXBH&4AZ:AL4[5E:5;APW9&KI9^.5723!]_COFD4F)-S:X:FMKMXO23/8 >+M?3G*"X3Z%]SR:VP#0^B-Z4B!6(<'\TL.&ZC8`J\OZ)%>W4*O=3M6(^D\7HFY >+M[M=4F"DA(FHG-R$?499V][#ER.BYE&.-4&S?5^O00R50J:K"F"W9,C-*00P> >+M>J!PV-IH`+;]'-FZ(O@EO"M"KG#X&;LS?TG"SY\S_S''77]NV*:(]]ASWU8\ >+M<QTVK+]\VK@2H;GQBIQ!#4.GUQQWZE.&F5Z3>DAE_+])?,`6UUFI2?-8#\G_ >+MO</'MF7TE;Y*PLZ>(IU$P>QU;:2BJDI-3T].2SN>S;^JF^NU"Q.+SSO4NA4@ >+MJZRL["OT&CP8A5E$%9GZHG/UWNEY52";)N:@PY'#.>0?NG8@<;S2'0;N?'-C >+M\9B&#<BG_,\QV533D]@F`9N)#LP"X5&2LQ)-(N!TP+-:Z]^S1AP*K:0A(R,S >+M^J7X=ZF(^UE>*PE>5['1=%B!AF9,&7UG4A)ZVXUCMD26)*?H/+]=O05F)B_P >+MDSN1+"$K:WRG/P*;PPXKB\.^L*DI.3H:_K^+8G9VU=YST+;CSUA^Q=K(J51J >+MNISKE_-L'#;$?#W/)N3+\IUIH[TGP?&@OC`X%RPWMW@29D_<978T_W\4/IV) >+MJ$6>J,\!HVG95/]8AB-LD$&=Q6/=<>E_">=KI35KS)_P.-N[<O2\'ZU;]J9' >+MN7XM5Q-WAY3W'K<!W0EDOV[G-^OV&8OLO7Z)1]G>-:^D?A/\X.O#V<E6K^#L >+M[.Q(0_2DQ=TA"=OGXU=W2\M2EM"2E4H3$VP-:!-F]J0V2Q/@OH%3%;)I(K6` >+M-5ECLIX\Y2'T7[7`,C.24M8F.P7\N?Q1V>91-Q1ERU"Q:!#E,.)Q1-4^.`:I >+M2@YL.NK*8^ZS[WK#6!`IQ+[!FZ_CL`.?.I"^LC%NWC3."<[JCW8JJ%F9N_%X >+M`6KE64XRX<;@89R%;RWOQPLCMX<1;I:@WQ+@"*=)WP;=)Z02$EJ7'I4_R?=E >+M.4E86TQ&!I;0[SI($W?\N[.4]MTB@9HE8[-:S!1)(FWZ/^E'1D7I@IW@&=TD >+M4ZO&\[,TY&+(S)$N^O\?1+TETF5V1I_=O;W)=N@/;3<//S^^@H("@3]WD]KE >+M8<@&"!V_?T]EE8X3YLOG)U4B02;9*SU8N-:+>3A<AG!DA(:"0YH]49*2]A^5 >+M9&7B6-O-D$R$<>+BZ*9P9BM0@D'"`_H.7!(2$T6DI6$J*BJ^4^/:F8GGZ0+U >+M_J'=SO^)J*<Y\_E_R=-#F#S96`4_CMTG8VMP;$WT7F/Z7PEXHYU)3+2T<-_@ >+M^0V<WT.(F(]O?8US(JAS8NOAX:%:IWDLRWKP?B)UB<VJPG))BETI%5XZ44EM >+MQ[Q[",!F.6ZEJ&CC-BZF3<:_!V%`OVQ2;Y1P#>JI588<;N96=CO[I,U\U/I' >+M:!4'322OK1Q:C_P-IEDG'IW>P,GNL]6/V9,BB<`;!A@]VFI*T%-"NUGX>.WP >+M(TT5"AJ!B6>-S$1$JN+1BHZ$E#LW+<VQJ'[(&'A7TR=LY&O\>2FT;5<MR7M6 >+M;0-M)6W=SQ.6?K9I1$WR_];M9G'AM_9NZ@(^?$Q,3;5[`_B)B8FK#7MS;_9T >+M'3Q\7@[2,OB\60P#/]QM&;PPNYYWHW0^.-E]<,?*!\X_5]34<T!RN-]DPU!U >+MX$^(Z'B8F9E1@+N[)CZ/Y])?GQ_L,6MD\E@X;L+"(!N=GI0,#%-0?:WV:T-] >+M06`(\3]G*9D)@1PRXD=D#4<]H[F2GS\G2[V=S]>;HV`EPUIXD"M;*)<O1&Y& >+MX+%9TAWT.YN6),OR!X^)R,A"XP0_TW=-Z"<74S0-1K_9]\(=1J_9!GVCP[TH >+M\.OS,&52N2G_GC`G94>O@43[+PH&[[&Q,A(!M:015(5_VQ<A[#]'NHM:_XOF >+M98'NNRG>$8,G_JKEZJR\I*1^W:OWK,*_17Y-7MP=!<M&TY!"4#6XHB&073Q- >+ML[5$3H\7'F:;D-L#OU#7&VHSM?15EXDM'$R.<N[K-\P>JW_]_$G$RIK4'X&4 >+ME)`@[#6^GB-@_OG^DDFW7&LX,S`=!-#YV.MWU7H4#>A$E=(A0_"R&8-=0Y@Y >+M\R`<OK!C"_&I$E=7OT=./>@(5;&=:RMI4UA24E>.5P\:'/E-#-Y-2E;,?W6W >+M@@>71/B1-<T^KM$3LS?,:,7E'_PZ9^+(%*@NE%0XQSU@4O58C@J4U%!"S_B> >+M"S!-=;\Z8]3_#@4*0L17C6.E"*VTO,_#GRQ/`H[AC2[^UC[:+&OJAOJ@YYMW >+MY+*8PZJKJP\,#;6LU(%!(?[W^9.!`3$:6MH,P<">+T#B^\H=_].ZJ*IJ$F2? >+M06K58,C24,F,O8J$D-\.VKX`!T/LU5+-7N1LD6[=\="0Q'<YW7CQ&>"O&K+V >+M["?*:C5:(,3Q/V*-CHZNNXS3DU%2)J6G'R,(GWK&*E*8J"N.:5O#D?M>9M'I >+M=X2>XSJ8?3Q'.7'AF5D^418Y&OX0GVT<:+OQ,J/#@!%W6#0/A/7Q<)1._-=H >+MB?1?4SA=A",&AT(B(./DQ/P^V^I(^%UNDM!_-KM]NW^)'$T$!$OFI7\$!72+ >+M!ZA(EN198(\P&H@T0,-$%7_5_HR.5L!B\Y*"H]]Z]I3L>^&#/']J.(8B\/O9 >+M>=D1E56J8+GQE-7N=EQROM6*N:(]V7G%R/&O$46L0MZ1KA'2_GBFLO+V?E[1 >+M]K<:"$M>$R4AL=#_$YON0MIXOY&NVKWI34M3%"&&_4)P,[F(27+Y%6<2PS7H >+M$*%H5(H&%$Z#V%A=N$%&JU]GRFRIG,LFCK!P5#F\$I80*+"G<9,^T;IUQ4C! >+M/-59_*D,9=F_.Z_X)0"6;,^G)&=B>:7"0VAT$NYW7L!1>9J=7>$)P7:+%=+< >+MUI;^[]\_(-@@5O;'ZX/I\4R!P":*O5SL_]CQT,3E-34/@U>(%-HL!XJLC<>P >+MVJF=,,3':ZV,@@14)@.#HYM&KQ(9'/8XVMK:?O>SDG9K+3$QN)QS98J$&(P& >+MT965\/@\R2,C4J:H53!LRKTW0Z`,77L*N0$^&(B2Y'`&7YAI7R<,N=X^&)T> >+METL<Z525B'.1!%^ZYB/YPO;!KN+:S(&!.]H&Z6]TXX+:L[][7NZ3D)@L']&* >+M]9V(MZKUQIZK')^%:@?CY(@NK/J7T&:\`DX7*CA4Z_ZO^7-3N_^;/U?P,$$) >+MTI#[O'#R_UR<,U8PO@]4?T<=P1GB=#6%BU!U]E8[;[`Q4U"NA^52883.>L8, >+M_WKLP5B6;[-C<8.UW((+'-+6CBVTH051ASY=#_;1]M+7YW#8&,W/MMM;H/G` >+MSNX8EBG^Y$.O:L$ODI7CTH@:4!Q4;S-'+],M_7-2T+$Y&@<565%1:34/FI-2 >+MLNB]LG97+N@=??5X=#-\,/D"C6":K1Q,'R=G?K/AN27OK\_OT+H&A4-60*Z9 >+M$%HA^398RVK>2<)`,50MCHM_;_0-B)Q@V7%I2\^^7,_)P<&@L'!PVG5&(-V^ >+M3R[YK8W_TP5X?/V!&Z*\O('`*9;'8G^J-A2#*^OMS7US<T-&0<;D<8X%"PLK >+M)2M+^EWZXK,-WK0=4P[[Y/`JJ;A/"%$_C0]%%5GN\%YMO:U1]#LH>N,.<?4N >+MH&9JPM#M4:SK>GIZ_D\<NMGLP*8@#[LXC1\EHCANO*ZH/K*UN=+T,2PK'\$L >+MKG?N8'5WP$LNC:K%M:T.MY._FH;^!^ZT[.O@AMX'Z#Y/E_):6E@P,#";^,T7 >+MYC/'1JIQU%FM(',(ZF767&A81M%^KA?4#<,QC3T\VU\KI*;!0:XU/6KW2,<, >+MRZ-XU'0T/60:BQZ0E:`*B]0_B9=9K`\;!3(;`1WR[R&0<^U[TNTG`K%T/BFE >+MD2H_0!#3(E7#=#)`<T#6VRX?L&5_?ZV?_2W.Y%.+KJF*(:R=IA3@B5Z5X"30 >+M_E,$;28.=OQ*P?DBKL[680;K6<N>&@#RP-5/!6W4K%VQUHM6=KXFQ\W-#:*M >+M9CMX#`WS"^:(SSJ\>6%)(^X;V:I7]H:WUH;/3Y*2D\5,3$B^._@]B&7G1BQR >+M\&*59@C&Q!8E-K#Z_X<V1[V18O&*S^>%+!-?7"\8\(6OVW*QS3E?AHJ#LYM% >+MK*<LC*I50^RS]4!TYGVAIEY2,"O]4[W.9;%53\`&2Q#_MN.P-!W0P0*-E2>+ >+M$@1XM0M:X:KE;R@US(#9CVNS<]O*<F@3AL?-K')8;7B@:=(+.VQRFHE$NO\& >+MJ`G=-K!4UU'I-L%:Y+CSF]%3???24GD+@M`<*#^D$&'>'(6E6L-I(O]%#:WR >+MT=[Q5/HBS5J#_SXK4Z/;NOM-^2N-ED++"TN`#G$.1U:IUE3;*7"CFE3VKV?7 >+MF:_QG$?HQY%TH6T\NJ!J*"^77MKS.UGTH#HI*E":G.!_=8?@N>2&/>(W1W#7 >+M"\ND5<'[TJVVC+3:RO3$5)7YRAH5+A79-JCYXO]<P`0!?K>3%`3:;4'MK7&K >+M</<S9U,(;)\/>S5N,0C#!\K0]3+E(G?_E-0O?%4-8"2C\-72\`YF.N*$7/.? >+M/.O!O!YNA@E[C^J'">XXPN+I_.IH"8'?K9$E\-//,7@4CK$K?G55YW`JQY;/ >+M<<9E=P#F]'1*T<ZY/^FOFL']TW,"^J+M^</3/3-P_LNT<<6I78_ON@\,5J<T >+MA?43S,CJ$CG/O'9(ZP<=1A5G5"3=N(Z!B+KI'*06U)Y3&&44-9^RU-&4\_>" >+M_RHN)OO>PM(*"J7EY3\-NA.I:>;@P_\;F-^XDD2I./<]EF1DQT?:B,+P>5OV >+M/-AW["JM=X3SP9JVSSTV6VACQU>"7?-=5Y5SH:*%NS"/50P,E!]/!0UI)<>W >+MYQ$F+Q@T`@\YW=;DZ_YM><;@<=\:VF\L&'4(1;@?5T\D8_3F#&>'9OXA8_NA >+MG:K=8`93)!E'04X>%AX.N>[`^?+R8N`8\YT"*!2RI;XY4:,*/6MRB1B("#NW >+MPVSPR$X'W5?.YC@%K?&_<^26&GS'^Y[@>M;T^7<[0)@O$XNTR*3B&ES\^EDX >+M)J(*;7^*+$ZY+^3QB4CI:<9V?7%6PB'.4M=#"?I_,A#$X6JCJW6HX?SXTX/3 >+MKG!EU!!P9;OT>7?)*&K1,[APU&-VL[><7>A=9O0LRGG`H>!_*<O74`C2:.5! >+MJ*H6I(2>:4/SO),S+.2ZP?JOX`NUY_^1(^=8J-T_#Y[_'1101O8DT9^?V[+X >+M_4&#&A,V?/^'(">4\<O;)R;T.QC/U<Y&:_8P^$^NU;$S$M/+7N<+@X5XC(2' >+M^X`KJ>J+*SR2NS5$).3FAI-ICQRO809M!]^[A2(7EY6!S/"JNZ9-?)]35Z\H >+M+^_;<4+&1HE'X`ZN.S2*UFDJ5(8RVSX:'_R-#_A@RH0[I<,7S!5SI?8'T?J5 >+M>FC#H_,3"'7O?%L7BWD'G:UL3KRJT"5$7=-Q1JM`6+JF@+_ZQO(BJ3!W[/;& >+M='SU$,-OSWP'..<3F($=`1Q5_>Z(_%Y51Y?]NCHFAN_(?F6SK%5B9F[N_/[L >+MW*A?M@'`1RZ&TC]:=,GQ*;.]K[(2[4?$L/P[4X+'=G1[Z_RK@I;Q%)H+=]DM >+MUR-2-_62^W/P0;O":RJ9N#/SV-HZ&+^*"@)')M;6F&%<$0UG.25Q<FMWMC_N >+ML_=QBJ^K\G3]*Z]Q.CX)#10;QHP$#.N06\DL/!Z6C(PH&`A*0A2;3X*8L%3` >+ME;:VN62SMN:KZ]NM[HMO<_9@&=BB4*-:KQ!7_E.4EB0I7TXDT?7QP[3[S,R\ >+M<3H9/'#S\S(@E^^J4?%QQ?**W6_9TW_+L_ML)E>1>P[5>#F-XPHOLJXLP_4` >+M_X&7#V;B63!K^J/7):`9GLGGJ^[]+?/T*3?@@Q2/=U.N31TDW5P;[\.$,$)P >+M;53V::/XSXN%=QXI`]BZ:5]KJ]U*(=#TS!8/SMR44`VGT4#\.!MGK)Z=0"BB >+MOX9&1B0,;F9N3H0+KZ"D1)R$0.>GV-\+.RT!)$D2-LY6J[%5Q'S/KI=LR_=\ >+M$U[LLMN$CSR)$A"T<G8NQY6&,';;)3_@ZJ9-V8BV!)1508>/&^]CM8$2B6?= >+M&G#EN9$4Y6]-C7*X?Z'',1CO7_.S6K+M1FZ_8Z;A6,Z]>KX+';VURVU[YK<= >+M)RV>G+3O?>STK.1*`HRE="P^;@A3$^Z`^WNN`>*9W^(O@Y;:A>PEEOO$X=PE >+M`,I'=I40`2O\CF*_IISQ*^5O$[FDJX,UNK[("@@"CX[OAR(W<XF<A86$)/MQ >+MG>X&W]T$JUP&2]C]_;U5F]&/=;HHAXT.\0,)>MMH'/;(WJ^/*WS08S0AG_&0 >+MK2W3$5A)J]Z:N)<<KWFN[LED6P9$D"-F%>-??2M^0V5?[F=!7W1W!'F"78;8 >+M*%LH.HB792][2*OQ>O<GIKX>*+'_;(2C[%V+R?\N3??[S=K<#7?7Q,VUR$A] >+M6;#20%@X8A\PWUMVJ]0=A6PYK,_7*=<P^)^G#DX=Z3$*?87!*PSKC5TR`G@] >+M+\U,%.*GMWSP;VFE,?T#7^]/*+O>=1V[%R\[&<R3(*\/TH:M'!Q^D8B)BT-< >+M=;?&1$;"MMC//W9[>'3Z?6ZV/*UZP^KJ%!(5IW'ZMGSN&*PE_WWL^I*0$PS# >+M=0WX+X"S6<\%G#S[*G,+%7H3969EP43T?V.Y;%,8B`@9[-QA:3URK%B?T5R1 >+M1`S9DLR-Z7`LL]FUT>/5UO!O?=[1T2F3K9X/,[-0+K]]Z!TGK-KE*HW0YO*@ >+MJ:,[8V_ZKE0D7&CPD/.MWHC+C`U3D*:L@!-I(OWBY-)'6MC&*C'['U6<GI_4 >+M3@D+*9IVW#8'.4MYAH"IE+,/%_THN'JXSJ[>,EJV8\Z6`"E75]J$I1:0)D7K >+MVEB;&4HQK(_;M-[BIJ;D:8&W:M&&@E1Z58CO5<-)@53!]`N--9^+A-I5#R]C >+M6['S0-D>Q\A2S]KDT?$SWR]RC,::P?P[X^<4N(8D$ZFL6\O19-]":&?^Q(R. >+M]#XSE4I/SS%NK5NZ$5LR;BE9/)N.&&_U\O[`*;C.VB5061^7=M4\PAYQP(/_ >+M2P6AB^[UIO4A+971$+&O+L(0U,!F&23)"8<^#9%-0HB7T&@X5I'+Y_ZGS05! >+MH0L$*E1-0-^0J6]A`AY!#?F(C6ASQTQ_T'31G)/G:JI)*]B)5P\L_\/=B]^_ >+MELD<S\W1UX<S02%Z[`"PE*CM.M+"("<NN8=CY=N)R#^G2@+TKF(D-FF.-:ZT >+M51F.9!+[@PH^F`\459(4V-@'>%S7W!D9&4VANJ-C4X7M[6%"?8JNKG`[3NG? >+M?(T"6[+W]"8-5XKR2^SZ[>.Y2P"Q77+A/`IL(A<+GJ?$].WQ`CSD#YH0M_H+ >+M*0S0F["Y_F_-7/ATZJL-\[^#M_(!G=[4.YEV"I%W\T>/:NS!-<?>G/O+[_L/ >+M#][`?[,AG5@\=>]F-C-'WS'[?JNCK_O.M.PU7L94RKWU5`T)R:;=KE3-H_(E >+MW_WO)WQ>1"=F,CA&0*,FH+:,?\PF_O-9*AU?\F_H.\&GQ\"A9Z<.@4,]]_)/ >+MU'HT)AS.&B:B_!)+'%)Q27X3H%L4G&HY)!4#0\#+WY@J*VMKXO14!:ZYL3)? >+M3Y?MJ`^\?V_8$8AX.U$?$5X7[37KU_VV,*UBSV9/B`*OVZ1CLK1>CF\<N0'[ >+MWO!.D,>4\W.TQZM[O'\]<J1%[+35P)%[#E)UNU1+Y8@%!?,*"PNI0AP<'`X7 >+M-0W-QY*IC;]S`;'15]`_#_BSAV5#RBI?*1#Z"Y#5V_+WS51`$W514TN+B2GM >+MQ^L*I;;[#B1PIX\#FZK31=+1_SBGVW`>K/G\=".C9V<5Z3N[?$Z,2A,)2OJ1 >+M3[T\J9/,VR?>41!C>HZZ$HA<B'JS7K,:3W^1+*_3;W&+O>/OY%SU2)L-JL5. >+MLFP'7@_)/MVNPB'5.VX19/:CQ.+S3-3OU?`]O_767Q0MX!\1Q!VQ+LQ=X;/@ >+M(@+0R_EP<E;<GK%LQ$\C0!>HXY8H?5MM\IC=;4I,"1P9;9C'0[L`3PJTT&9/ >+M,-XC=[Y<."TO^^/0!'QX2&MX5O7>SH%G1[Y9VI!\YDQ'4W;MYL%N@2"X]!"# >+MF=Q<*XZ%I)ON4SP7Y*I3#D-]VZQ#U3]-(RO&9]:#=)%H#+Q[-=1$TO"Y1';P >+MKEBQF_.,V&E:)5*9Q=^S`'WSA:R7/YBXSN=^GQ-N??B+@"BZI913:*+P[I(X >+M>Q7ZN(IAX(F?0^L:>*<0?IUK`OJ5<"G]J*^P>CY2S\HK3^.FCRCYDR_'7I'P >+M>7X>U',%=&$']@WW=-L3E_%Z^,'WN7-N%N0<7]F4,2J1`W*D&J3VF?B$'ZFH >+MJ+PT+5I2"A]\.O,)P\.T[#RQ@?Q]]+OP8JL[\K<OSB'1Q[9\Y>4E\BI+A^S4 >+M]D,H_;^.G3-2CK6_,/NLG)\["71;'>0S,VP]!)RV^Y#,`&\#UR4O$)X\29P\ >+M)L_-=L_#:TDS"XWN03%@/6A-6#,;M1QN//],"`4Q=O`7AI("4Q.J,GY+^^6> >+MRIEJPU-N":FMJFR,"D;O0$>7"=OF:#GR;NT>]^%DTT?H';BSL1TMZ/$&QY%? >+M(Q2/1U-I9DMC-]%O.:3&^@CU;2/78[+1H8=OJ)\_"AN?ZNQ=RF#4K-QU-I'_ >+M'4,#MI@>3^62X8=32A%!0$"\A3:[EYUQ,+24,)B0G[?NM\Z5Z)\(KT?/.!D4 >+M20-U?T@V#-!N[XI%JWL8FP[I6/!%>']4B!!!XAS@)I]Y#&!W!0#X&`9VD2EO >+MGL<\H9]AD7(Z%RDA+EW9O+K%%=?MO7ANUBA=2V<30,8I/.A^KUFFCC\0J&SI >+MKYLF]XZ.D0[)5;`+1SS`C!SA`&=FB\0A0Z>C?>K!MU_=7"(KRRH"B[K!-L#^ >+M=7I>/?[X\4.LYC/8N\?WR2$.<`6S3#Z[U%EI2+EZ"UODZ(VP[;)DRK+L!EG+ >+M![,I+-A)035UL')(9.)@;=[BRJG?I0WDSIR\#(R+Q?>AC)`[\5HQ:2P6"<[) >+M3OPW!+@6?*D3EV6SU\1K+XSXPJ1IU(ZR^I4'[:K-R!JCEEH;,]'$!<\FC:RG >+MJDA(7_CU\24A\OET_,PLM#_<S!+5"5K^P0/Z3Y#&%W'LC1Y"POS5JY+[;T\P >+MD2*^M;G@M>RL8/-A4F73;L(5?XS+S^.:`T6*GRTDM+B=SU;R>:/;2Q=T<`I' >+MMTM([55P`99H-,93G"5H]^*#?S5`,0LYPOT1#ZI]"4J$AS.MX0OMT5;>LNR' >+M#%.GPS%C70[-7_1>]XU3`8$I7X*T=(_.W+V*GZV\HQD3?"^^2VV&)+Z"-V@D >+MY!NE&@K#3\M(]6E+J%X?_B3N[EIK+?[NG5)?@IEABJ`",@5=NLJ?,8+DSE<Z >+M"7796X'(Z,R'S?9O,]^=2U#IM6[M:H/21>\Y$!40D&,><]E7]\[6`\`P4!OU >+M,!H01^>#B]91_9,'G"\]=%9*W[#).'U6?<=?:[E@!><3=8F;(G"06\)0>I,2 >+M$,3>%J1K2@_I"U9@.>8S@J-1$4D[PUMK(0181.:8KSUR&?6\?S$L$+B8_JRA >+M?@2<!I6R-K0C'#=R106"A>?D]#>J,%39K6V>/ZA8KCU:G*2#4'<>W-KEDHT% >+MUO@%ENZUY[0@'@`O4`'ZS!$$0$=W4C#`UIC/&."L$L;PPV%.ND6U]@:S2M\Z >+M3ZXKHY+^5B7'?BV-HLXR_S:0K6`N@((FJ]2@6\OH^VG,@\:`;H(!>8-@!`@# >+M06'QEA^2C\Z6(&Z7-3GPEV8Q*(OF0AATE&GR,Q#H<E>B_/O*QQ5VD/I&2C_] >+M`'+=E9$Y0I/F_BL0V1["W)U!C6`8T[.;)SL>9GE$4/L(6I0QE"A2OBI46ZJ4 >+M#]L(>YY3HN+XV:2W0JJ8BZ;W_'-'UU!&'DX8DCS$GOL%V;3=YH?!P)6[/KD3 >+M)5N$^``AH>4(V*T.M?2$@SF&4_NU3ZU<R[Y3O@`X>-VD\;T^LSS*3/TZ#:%7 >+M-Y#IL-ON&*H(NR>QU1+@'0E(*GDXPI@O!,2UZ*V=?`XY?=71+/YU;:4E2KSS >+MDK4>>'%M9C]T7Z/SWG+D#W59?OAD@1W/BD9(ZK3QDBZ6W63E)'@/@X7*`;-J >+M>A7S5K&+]98+9](W5_QXTL=DI7C.8GT^T(61:$=K8\5+")G[!U/(&TSOGL^Y >+MUII:7B[.`I'6=\H@Z;.WH\2!'N=8T9"[R$7T<\AP?59@&O`7)_RAJ=%<*V0= >+M6+I/"?"^0\8#A'4YN1XWG?#VU@$OGB`6G0M1+M]JPC.([A:R&JQAI$*'-GH& >+MH1@*^XH]_3&697F(ASII&8A]V^W^5PI7.>A\7`GQ]U2PF^JK7`#"/=*2"R.3 >+M#-;]NQ']%8`]B+DK=_?*#D0&2`XY[[=9ISGRQ<XUC<%4C19O$`<[2>.6G$"? >+M4X%AI9,T7AM4G_:P#V%TWL[=1?W4@W]LKZWW:PRB("UL4>;#3Q(R,AJ<S+C4 >+M;75825G($K1163:;5:P2IA##.GEF]-Q-DYWF+^EV-H<%$RW@4'Y'A<C?G=0< >+MYK)VI>*2U0?J(E;'$36:T]#N">NCF1IKFXYZ.A%\?Q`C\<Z?^LK7#%F+:N*5 >+MH/V+WZ5'Z9(7>1A#N1Z+38FO+GLM**"`R%&V,XORJEZD[U.SKS*8CP#T%:%Z >+MWV,!<KJ%Z>2\MMXGG\4]<C(!\W0LHAE(05/Z6?8C(`"6Z"(AO,$JQ62@OQ9_ >+MA+;O.2O\VM/H/0:VF-+AO%;H-9)&`,)"3^4/@]'2J<HCP/*9/G=G8`.U\L:2 >+M`#0\(Q_>+$'7'68F9/T3LYW)NL8VKL!O-6^_NS(F%KDJVQ*G8<@#NYL0[>-1 >+MQI@2BA=FCKRO4@E,$;01(KN(@RNH-7HJI?J0#U(+!RS;$K9HPXSI>!)T+@TV >+MZ;$(@W6BX",@5!ZT(5,8J;V!TA$T:6"IU)N+B.5GCV.1J=/"([[QZB>7T4V7 >+MFT'<"!/!MEM%XXL)I@R_`?%3#.<=3E0GJ<9:E4O''0R3E9C@5*N]KRM5C$^? >+M#D?6'6"KD@>4>L1$W]AW*(.<TUO=FPXPE=:S/'E<5?;<Q2>GZZ6/J(07L4`^ >+MGN\?OIB?$>++US0<(QP1W$6\U8G=_/-,XB;E/6EAOJKO[RW)):3+$.+/Q&1C >+MD<WJ6EHN2V4VGZ0_X//6</J-7,P+$602?G>^/-55Z6.9E"K@)T1,5A(@;T"4 >+M9<1]=J-W>]$77J:/Q(!S%B&?.?:/%_#T^J[D[O`)Y=:&T&X6=WWC+MU4OF5P >+M**XGHM:M02&*%7]&`,O(;SY%G$+($^"LU)LJRPV$=ZWJ+GM`^R?J-OHV6\9G >+M'*:'-IG<K5L"F@K$25#LE!>H%)1$@[P9NF59#L9>;GOY<?0B:`LEL/'?6@EK >+M-F"JD)Y#IKT)-KV3Y5CVUNM'>H`]""%@7O.HTJ6.K@?N!VP(0PO=)4"&+LH7 >+MZ`CNQ\=PX".#MZ'&>FRSK0SRXK-0.;.V[YNUW_7'*+$'/)IU/IVYJ=$:-CJ# >+M]Q=%'VR)LN/:XR&*>C7('&/Z.``U(CELY/<S.E-IDH=($R$-4=2#;W'9#3!9 >+MT["H^^R5YC)WBOSV"X3%RR/JP#3>X[H-?@K.''+/;*("GH6T^,H:<D,7ZYY3 >+MQ-H.8DKZ[@:F;M6X"-Y'":)5)JLU"-24R8D`KM-*26\3Y$"HK[WNU<*4!_-* >+M$C5,?O`K8';D"N!_S+MW0B:\"@?N"HH'4.CN(IP&H#EH;//Y6GD&P,D9EII% >+MCVX1C"`:2;@CQH'U*S#N\AN5,AV_EHB?HVL+*UIB@%45-DB<#/@"I=66!"#D >+MBDV&DOJ\:"SYB/%7,&#*Q7CLA7!JZ><=='D\`[)OVP'H*TH4B$UTV[Z@*IHV >+M46//GD00\9?FP3G_R/N\__`0@%F4R>\@O'R00U*]`A'"NP[XA@!?-(WA6MM\ >+MJCR3BCFWX<`[O'YGKLA'6G+VD`"#,<MR2,OZCO7&;MAS3M_N"8C@`$9:(-_X >+MKD[&[TO,&KYTH/"TF[-=1XXAT71:BI!I#GX<L09&(P[T8LP131_K=[,)RC;^ >+M\,+1LO?^.7#,>?J9,<@)!C=2X].JRM%Y]:9SAZGDSHL!#DI34KX\[EJ^Z$,^ >+MMW0$J@H&@C$R<36LLEF28S0CWR<AV1EC;<ZT`%>RSG:,4L@^W*",X',.+&>T >+M2A>6R1$HH5@8DZ;-.'+U-I#=1Z]Q]^7]FPUWPG\JD1__=V<+%/:$_5U7R!'D >+MRJ9_C<"V6(U%XJI@&=!]S'^N0Y077*")VQ):>)H%9`$Y08`16J5%S(%(NS^P >+M-FJPFMH;WK^.5X8.HQU[^5&./9/S!L%F&V1`*^N]:#2#8-K(18*."IY)E?7( >+M%"\^>#\,'/U>H0O0J9C;3_&_6"+A3SP(5H7+(V<'G`]-TS5=C"(EUGSB6'?( >+M+PK*\+QPZ,&I\%*,R=8;<I1)8$L1/Z0XVYGYO:%T(1&.;@Q)`MD'XCG9VC;! >+MY-BPFAZG;)T<DM]R*`,OL)J6Q^FV&Q;;WU&Q/,45#<"'Z*</T;TO)X42()8! >+MY*DZU#JG=S?X^40+0\^0E.E_)L0.--J$A<Q#^(X@*]+@2NAMA\L>;]]0N0CV >+MY+<^^E^=F9$KLT9BA%IW8+-9?<QHKCGPDDIC6#1FA^;AAP])O#]9$;S[X+*- >+M1]@)C'+]>I5#<&C`:]B&WMA`RR(GF`V08D$'Y$$8[X!VO7&]T`QJY#^#G>;S >+MFP_YIL+4R,!\Y%4B%"!KFH]WW^T"H.CJZ!!!TWSI8[$\K)EBGHI_VU.OI8G- >+M63L])S;UWTI4I(6I7);2[<7=>$.CEVH3/YU@6AJY@1SMGJX%[5*%,.#YTRI) >+MS/[C!;)P,Y;9S=VI4(7L0C_E6E$R$A1=%EW67FDR')68T)9G?VJ!4N3`5&MK >+MC(WW/=NF#/$YSR,+2-`?L-'6>$DA7:)+*M;8KQ$R4NT>]6D9S[B&"C.FEO\" >+M\CE"E*!=@5*H,MW'>,"7F@Q=Z?=Q]Z-<[/ZR>49G[TVZBHL%F4H;<SLU\;[$ >+M'3`XJ,N4KDVP/MD$)^*?`VS)0L@-B]>@FX]@MKZMUPW!]YUP&\)E4Q*QT<9" >+M\JN;@<6);F)!L<%*321-"WH:SV0=/"FVL\4)@A8-QF+*"PR?E<Q^T\LJ9!<= >+M>+"PX'CHB>T%"S^B5C;Q+,Z)\[D(B"A_3*T<4=:`^8P!HR7HY^UF->A<Y1@7 >+M(1<C"%=$]-OT!8#+-+AQH5^EW=`4-+_.?DV`E'8`X187$[0?(CEAFIW`;!X# >+M=5D94I]VV[VUZ>!*]LV0\JC99!F[)[(+"UYG3;R"R;6^JGC*%^>A)H]1=+\V >+M7OGSQ@X:?5>3VK]<^I1<F,N0RK$UD5UB"S99A>N5(U_Q1W;*!2E1E6">A9=G >+MXQ[+L<!>`.`>925?KQKR3$!Y1N.I-M_OUM59B"?]\@"+2::0M52F:6@`CN9% >+MK73Q=QA_&68KZ"*MC!=VN6X!EINIJ"(BM.X8:.8Q][.+$0LYFD'BD98%EQRN >+M";`Q%0Q4A2-3.(Z#3:"LVCED_2F2:\D^TS?-RN-&Y!H25!`EGA?_&AIL#I$) >+MR6O2U>HK$)C"W'2,`1*T,M=F`0/F,08>-[[P8F)=K./K@!S?)A-0BS@8G`/? >+M06"%"LDO8AL3Y7L-3L/QZ%O([0@N0Q_E"((N$)4%--+X28@UKTZY=N&8?&0' >+M<B<YF!LGD^>=U_0K;_3A*$JBLK>U&`U>)Z2)L7P?+$]R%.>F;V4T/PG$LE$@ >+M9WN=Z"'MIS"8FC:&8+.]KYX.,.+@HQ4LU6K:767:._S=F-QH1B<D0";W29E8 >+M&]]\)@0!4G^V-900Q+\9`?*9:?$M<H,63*&T7[)!"K(Y1CKXOC\8NPK!<`@0 >+M$;*>PHU4Z'?[T><T5K:.N9PJ_XYD!-X=T4L3QD(&`\F?$3D:"%FJPOS03G;. >+MUO#J9Q2ZG?$T!<F0-DC)KDD;GTLRBY/T&W=@V(&(?IO/Q9UP$]*BELX8:<;) >+M`^4-**YM\^+$Q(.J*;<<,M!J=G]N"C0K`,MNADR-BCRS+ZQ[]<B7VD^D,/9W >+MR'P_@<&)B-$!;UARJHZ-*Y#G:3Z2#;/F[MZM[SJ@S-5-S<+P;Q9SM),8M.$< >+MO<K0N:"KB,"$X,J-%[;,``[H@82^W&8;8T+ZAX,0M#`AK<7'W(+2?*Z@73<` >+MKM^ZLQ'`0X61F/`$3A2</)AJL\2GVM3/Z4T<D\X<,=_T\ZE)1[HAI7A'1\U1 >+M.4[0+4[93_]X.P3T$*1L**Z-ZT\Q8SGR.>7F06>7^$W+)`K[DF46@8S<>/V# >+ME&,5P6/7=N5!EDX0SK-F6CCIVU-11.+"<DV6QGU(SP,*&V)$9"S+"/;J3EVE >+MWND0(X4@E%;E*88X?B.LU\1+@+4B)K0#V6`^OP3T."JL9#?H`KGU$24*(Q6\ >+MS^X=]7KK%.`(!77.U..W46J>1;X.1AYQ@[TS`(!(^9\+L#!BDEPAKWX.H$": >+MW,5D(+6[?#&W8Q4Y/TVC]C:]3-9#A-.=U,"YW_>-5JI@`3EB`PNM@G>:*O2= >+M7;GH4V$^`H4=7C?Q&I4U&9.QA^^#Z7B]H\67VTD`OQT2,;Y\R&Y[)E'/VBL4 >+MOTI^JA7%N!J8:<`<,7ILDT,73)T^'/,_''?_'C^&-=AN1<@`W?1%0=RC/3IW >+M`YL*X2:]IB/8/$:&D-A@5XGX0:'FK>DH:J^M83BN)_;2!TONU2_>%GM#\I!D >+M3@C>8:?\#AW69#I(+EUJH&OW[&\TYF.K0(6G!JG?&[N`HT\&8B_#$DC^$:,9 >+M<P5(>VV\"Z(01%PN2Q:KQCPSL&48`3H7^%RD$=^:I`;M9-B01]S8X'UAGM[3 >+MBQ]8;O)0?=YT]MB3$[Z6(&>:R;>4^1HA]Y#H1WJ"U;Q/`[>_0;5I95<0%VJI >+M-&Z'$D4$P*9@?+@=F(ZU[S->"6_Q^JUEL["1*;`C.<8F"LV!BG;QZY5P0#OG >+MG[$%;KMWB)`79JA9\)`SEM882%;A5GZY>T:PC3][=Q5]#^@3+.>:'WBJ[[Z\ >+M]&L9W=\W=ZV2(T"/Q&8%3ES\0YA@HKGV5OZN;[H:S^RYN86;UV-`PY@J/&GK >+M@15#==$H<.<+D2)?TPQKXT':>WPZX]_\S=(0,I!T/S;-<).2U3+2U$D2SMKN >+M(E)WPHC72R0+68I`LH*%T+:'3V4GJ3"'^4>F@[U.%B)/@].TE"UOP;M@U#7* >+M=$SNG-[N;9@DO0Q[1X`3(6S+1$`KQZ,9,,YXX4]E'Y5['TT+@=!!'^'D&Z]! >+MY(>A[2_@5A^59#%34M8#/E%B-)/%P('!=30XDP]6/G#%RD"C.=YJ'K:=K>I: >+M&.8PAM.-3Z3?H1:VRIZM/B)@M'-,@(=^I%LZ6T$;\S0?$CJ=[OPC8>V+)#]K >+M0-+RET<.([Q/O)AO-L2[,)LM)R2_!BN0M?&9@.EE(=HJ683.(N>G\%H."#ZF >+M;^G>TQ+NMI[<SD]<O4)_&:JX,5Z$\&ICFPT$4%3!A-@3LYFRJ)8N%*H'ZICV >+MN(,Z@2A<H$O>($6^BNW,RD;;?)@P9PG4/T`T(B3WN-E[XOR>2FT:]]"193$4 >+MUT;+Q:X0\`5H*.0MQ#3"/;2M;L3WY6BW9D#<2%D553.:/YW\.:OLE&L_<$'9 >+MG\_/<MV%4'U7Z>&5FGTD@_N$.]7DY;P+X;S?\MMH1GT0XAT<2V4U*@],=`[4 >+M;_W/XY<V*&2W'EE\U>"R6U'R\,?<8Q->HT)="S,Z)#Y2\1$E\X4L123IXQ.[ >+M%"74U"NW(G;*H(;18YBYS<NCWV#H\+%(S=F@?=_SW>MUK%RCK?W:9QM'7""H >+MC9AOKF'2./&-U)G$')Q5H=?ZN$J;CBDBSI6J^&;?.)`.Y(B@X2]35FX(!X"4 >+MNM9[Z><R/@GZ,5_/B=$8^9'Y#::SQ(G$NV@"ZB>1N6MO\KP[#-:8BC&;;4<? >+M!@]6$^01"TR"F\2;5<2U6W\!^S3(U!U"S#N.,]:N$15!K:8X\<\A.^GD<$8; >+ML,@_(RQ[;+UY!T(^,].PU'=HWV']($@2HII#ZH,#)L1M5=ZD%L+%K&X$.6(I >+M7@E'D'6U1N`TE%U[CJ)S[O36^IB."Y=;"I7YN`+5O)'`2Z+I.H=$]R)Q^HN" >+M91%3Y8K8I(P;*P/\MUC&;S'PQ<A`2HQY^3#A89/#TJ$/_[VOM.\"[(9T-:`, >+MF>=6B>6$'=6EO#!OGV##E'XI&\C?$.Z0'\*B[&,7@Q5?$Y8>$(82ZYWP?.E! >+MF)`'R68_M@1)HZ,_=#=JV5]*9Z_%Y`WZ`P?[XFFT^W)Z9_W-"YA83+1YA*#S >+M:3\:\-,Y.RFA@DHVNOR$=3M4:"MK:+Q%>/>;]OHQW1?4ESY1TH4..+^@Y9(' >+MZ9(JRKTQFDEF,(QP1-8NMP^=<SR^$^8FO!P3=A.<Z@PM9L00%2Z""/'X+DF" >+M)`-J>!,31):I\<F5H3W3\=U(K<[9S]/V&OVFN)8#U7L73TZG33O`"BF+N,-P >+M/D3H.%W461BQ;:E?D3&MGX#QE$!S]K*E,QSR*8J+Y3>M"0)LP!><F0ZM//BT >+MP5TKEJM$P,!`#F6HMOCR9QN>PT`X#N%/.-9:SO8]:QA:+*R,+/]XI\[FFC(? >+MJQY\H9&?EDOO7@__%*V3Z-.AE,G$0(!7LA^FGPQ2?-6MJ!L.<+%/B4T\"::* >+M#5"`O`AR@L)NP@\19DQ\[>T;])Q':!;AWG;"PG!+%NX,:K*8\2G1X[&7OFZ6 >+M;TJ<843*.'@V8)A))N'*BIWTV3XW)^\27QOKZT`G[X*1FSU"K5%VU7#<!+7! >+M0+]E8+J*!D4$C%>R<#&$_7!;[QW"FE5,"2_:(O]AWP0;729]&5/QM^L(>YM/ >+M!)*9$\C`)G)M9V0E&D\)'],.W1P\TY19KSX,<DQ1^QT/!3#.BN6NXI]DEGY# >+MW-(/`EZS^_+5N\G/I!X'`$>@"[$SZK%/OVS\@H!SMP,VI>L6']GTF8TF4\(: >+MH-C"@;PQ"Z/Y4+Y\[QA6UV]>.%P;EC>P=7V6]8/&7[!T]]HTEB'3N^S;;K41 >+M1T&_K$$(W+[[MAEQL"2>I;ZU/`(GME,N&EPV^:J%\??&UT^W:[E_()0Z#R!L >+M[RF;$"),%3"@F!N-</'WB/ZLYNPYIO"G4:VC/".SF4GS5`KIH0B'K"EBZ8!Q >+MG7+20A@C*!(X5?VU*P59K.C!@(C`,0ITY;6X5%_KRO/V0+D"E(V.]?G8DT^U >+M"Q>RXXB[YG(:!MW=*F?@I6C-RBFLXPPS@JG&JHF%$[NF'["N2$6;*<SW$$>7 >+M1;QK.^__Y`5&,8X<UO95)+%Z<2.&$*`,"Y>S9I^D&)P=X"<VI_&>^^2GF8MG >+MJ.K@Q7O<J"?;<^(40&07W+V/?333L?^9E;)?:^&,ZJ]ER2]DH6%773HR>8L\ >+M7&?<5B5V`2%L!=OP"6T;3Q'6?8?&.GUR05)*PMCV[,/K3=L"<WVG4;S&ZXVS >+M!$+VIF$&2?3J'/(-'QU@&VGH`"E#J7FP[V'76H;S;Z.\X'5WN.(>OKR6,^`[ >+M&K?YYJT8Z[&:4IE%YP0?)CA%H<-C02M268XALV5U04NCN:)"LW_%L@FXI4!^ >+MS">5"(\#VP4@?\D,Q5Y0A7B`G22E32H$&2)6F#=&*23-T1D`,.@UX+U+@<XA >+MU<AV/VJ\+Q,W8;/%70V86Z`DS9+'8T%R>1"*"%9"8BU5#]#&ML)6$_59=Q)4 >+M,M1O-^3V/C.9%0O/&N+I79E.3;BWJ%1GY/6-(K!8D'X3X7]QT_<3:S$2`Z]D >+M27,HS/==@7_]5C7`(?_;N-73(9\M=^A"4NFNK4HXMJ$/;<S',-8!`>#PF`C> >+M?IEQ4$!I$$(DD'GX-UZ0$\J@56#<%B@["&$O"`44*-_EWWS%A*U[J8ASF:IQ >+MRY@_"_<D&-VWRF42[)HX#!Q8.=B,W30PD/JB:S83:V',1R-7EM!1[S%`5\79 >+MZJVT(QJB9K5!@E4.4REV3,E<K2_IF?P(+#(3*\R'+6V)<E)\B!,W!0.!8_B* >+MA=C]D*5;Z1D5VAX->@TB/LWTVW7RO^F8#X>L1C><#5RP=+C)?]+^\J"&@7NC >+M>A7EL"+06^X/`=S]U>"TKB`DP'UNK_J<`@4$H2B>?6]^S""/6%0!ZA"B'RU= >+M&9DFTP9M^]P,/3?=$GA=S)S%-<N*LZ-]6UA52VW0);HT5N5SZKLZM;"&V0NY >+M-6%</60A;,"TL?]X$&431!N+VF]WS0&."/A%WO^%"2,5GJFZ.[B).4>WVG=F >+MM^#K=\RYH.8:'H7^+!-6%#Y87HIJ%6DJH>J6$?C"A)%=S'0G@<0_:ZL`FS8D >+M98TN15%?AX[&XTQ/"Y(VA;S&<-*)@X]UBQ>^0@/-,!=+/(!EQB8R*R1MF>J+ >+M1"0,4-B,I<'`WU(>-)L#R?A=@U]J%M5XE@+F-*H%,48K-L75FY7V\=>)A?>E >+MTX$H1U87$916.#DLYZ\4WA7/T:RLUCW\+%C9:'*[!LXUVRP2Y9C[7HFI0LI9 >+MV7C[9Y?$[UH2#T2S#[Z2<O/C(YFB'@FA-Y<%@:`'EFTUG,Q<W4X;&=D]!2,@ >+M'0=V,OYN1!\13`[K11SPSS?-P&$EXN\Z&)4#[^04)@8+,'3!VZ&HD"#:0:C@ >+M(=J'C&LA:#H@%N5(?NQ3&$E1Y?"2^^R!]`?IR;V9:;4WV:/F^R-EP-@]@>=Y >+M>B)G.8-6QJAPYM1_@/]D-8E/MD;-<0YC&H>WMA1>U8#?I/D2M#INNV$[%FN+ >+M)S<KJR5F/8QLBJ<%I%EFI\GB+U,<*U;QQ$?MB9#J3,(_R;O>U)28S']#+\O) >+MWEF/:D,J:4/Q72^HW?$A*;S=M?<S:HJFR%$LM,<-;PG+/!8-D;H5TXG-RWN> >+M^&>;PE25_F_:Z!VBA0A-&D%1.RD<%RF<#H\9R!*PXM&CDR'W]M@[NMTCP24B >+M_.2S-SBK12FH+')\J^QU7L$_'ZD>Q*S91"@DAT).%IA;@6U[G]XM]I98.8R3 >+MQPN'WG2X4D[=FRJ58J=U34DM`]?U`Z>&`J)+,XG*'::I%8*T\6<FXLYD(9RI >+M*-PIU"V=R<)($1<,'PIH/UFL.T4/M,-_\1NN+@D0([R13=RV`:_?&![]U&(3 >+M[$QG^*R'!6]3[PF*E&V[[]/9TAE+"ORHE[.C-WP^PN]^/]BJ8/`$DV3X0](3 >+MF6C%B;I(-;N62',7R_*##YQNS%Z`3R<R/JB%1C9?+`IG147.\CLL1`T?KYN7 >+MQR!'\EK=`3V#+*A;:T^O<1[,.Q<,:3CL_GFY%W*&VB>X6O+[%!.*#7",?Y'F >+MV(VWF!+5Z5>O*'S,?<5%?<Q91:ST*2^`MG2#KON&WERE>I1-/XV\,+0?66;O >+MY_1\X?X#O=[\=[Q*`OB^28LKB/T6,0K^?P%02P,$%`````@`(G)D,07)PTJA >+M`0``;P,``!<`%0!B<F]W<V5R+V%B;W5T1&EA;&]G+F-S<U54"0`#+X"*05)Y >+MR$%5>`0`Z`-D`'V2S6[C(!2%U_53,,FFLW`3)_/3VIK%5*.1NND+5+/`<$U0 >+M,1==XR;M:-Z]@$/J5.I@V4+FGLLY'RQYBZ/_I;E!Q?X6%QU:7P[Z!6IVXSS[ >+MI'N'Y+GU3<&8XU)JJVJV=H?T5L=)4_PKBJ4P&JR_Q4-HQ%C+Q:,B'*TL=<]5 >+M:#B2N5R('6$/]6K5$NX'H-7PJ.TJN;AR5BT^-^=:`@?<U\SB<?IN7:!!JMGR >+M=QHSEZ5'5[/->AOM,9;KUFE,AEOB5M[S'I+A%'T/6NW"=BT:V;`9#<-)`04= >+M"T()GFLSY*@G+M>92?I<9S!CR/E3!3:IN@^=M*W9-M?%R=?)Y7^#O8\PV[C* >+M!S*UBVMECR\E=P%92"D@$K00%_`)J#.XK]E.2PDV_ML=8V^NOD"?C"!)H"R* >+M(8*MH)PEF`"_G3Z!U'ZXZR@#%2,-T;"$CH_>Q%'.4`!H2?;Q!L#1KM!V<Q >+MRW^SCD\S0UE!_W8?J^\G2^B>*?8XXYXO;^+_[5C;CMZC?9!&^6<'/Q9P\,0W >+MBS_SO`:ZX*;:?B#A0H#SYQ*:$IPTKU!+`P04````"``B<F0Q4+[Z<GL%``!% >+M!P``&@`5`&)R;W=S97(O5&AR;V)B97(M<VUA;&PN9VEF550)``,O@(I!4GG( >+M055X!`#H`V0`K97[3U-W&,:_Y_2T/:W%%FBU17&GY58NLH+H@*$[+5!:H%@* >+M(@X4"E2*%U)ND3`U/;0P;%"@0+<AUB$X=?-2\3H=24$8HD.=R!9D:JL;D&4N >+MH)MSQLVI+,N6U?VT[Q_P>9X\S_N^WP2Y-#)*S0(L<(\.>GM[!P<'AX>'1T=' >+M;]Z\Z70ZIZ:F[M^_/S,S\^C1HV?_>OQG<U+BT]-BQ<KX\%`1"0(`\']?%ENJ >+M49=K"K`M1>5:+%VKP1+D"B6=+LP/Q,)%HB58HGIC11X6L*%H\V9U?@"65JXI >+M*M:4`OZO"(T,F"#D.06\,`20Q.DA^2<]D5D%72R>!\A-C?F&<O@&:%_E;C>' >+M83?"YK9]>Y1*S[/O?@IZ=ZA'FS"$T#OZ>;>#DB;0\B$8#083\JJSIGO6*@_( >+M%5[V$E_IU9S#H\(`75]OYR/7U1QA0.\#(ZK'^7%1WI#]0Q]>?Q`"#T26_M9V >+MNC57J?4S6TB)?A$#TI#Z$AF:OF.J''$%5[R$9PKX2G^#&-CU'%\1/%"6&9S[ >+M!?.)2@80JS2="N&-'S!49^2]>)39[.%1S.(:A349Y";)PE,6DCFNGP6_9="O >+MV70^P-V50M(+A59T;180CL>B-0Y:UB3YMIX[S[D-(1@Y%3;"WSN4WA>!*G2+ >+M[O2#W1?-'!R/Q#ASV1,UOPB1MO?&#-P@0I_96;5\!W#%3W[)G\R>Y4L=Y*S) >+M(Y(P+N?XN0M.&B>/<C%B*[L?PU%%.DBJW2=9!4?2G9HIA64>!`I9VF7G!X^= >+MC?IL45WUZ,7B),$K\W\ND`2P\32&U`%EE5@)P&C]?J>!H?7,HX\XR1S)D5(A >+M)JS=ZV=(ST!B?`EY!R6GX8+C;,E,=`VK3QAFO#*E<)E_TC_@"0ZH3LT[0$/6 >+MZY4#47,O'%+!6')(`T7&]=C98)A<S=?[)^;XF6+8ZX<+]U.BM:_O(5#;.-?V >+M76/56M?I)/XM_7RVS$&NZT@=#&R?#.(MTC$JW52Q>++W5>)4)YM2:RI4=I!K >+M/4<:SG1UA2S&NWDRP4>[KQPCW6JYW''RG.O93)X='R^0++7::9B*#V$,G_GO >+M>_9!3+$M.Y53'<HY02(7!")H*]LL<83X">[XDM'V$(7=7LI"F:3&P>XOE^[G >+M*:J&C\:]NMV>3"LK9?MM`$AYF`7WZ$01X5+*RE1;?BK/$,;ST;\;WL6&#:9+ >+M"25^`8()7_2Q+!N>D\>"V8SHRY!C@>8(TX";B@M=MIORUP)8$<!H*''#U75Q >+M`+$$MTCYL'\%8_"DR;HR$#]HK&(3=1&!2&/S`D>92`B=H.?I\3JX1J*<+WH* >+MKM6'!V_M&K>@K^RXIW)74Q&$SV"KW;E4+:K/=0-;,`JZD*-J5-&1/4-B[`&B >+M8V?6=]]5;-+O(NP;UJPP>AVTO3.PXN-ZB$"?MO.\HK6N.Y;/\BWF0Y"^B==' >+M("`<&.-M(]1U=\MA22'SU#RLE9/KX&<H3]#WZ2K9%+BQJ9K.QO62ANIM1&0$ >+MY/G3R'*+8HD__!_NO9H#86#V-@@1FCL[`])=IZY+X(#8!,[2>-`SQ+2WL6'Q >+MD!O+QJ4<[L.!('TNEGT:='*[DP2U0?;P^&ADY=>NW?_)MS8'@UMAV%51S$!N >+M)L66LE?7=`.P1XDLJALI(-'YT(P`HPF3BKEH=8%I>DSQ]FL+FM)XVW?UCZ7J >+M'C^I])C\M,PU7SK+%[1L1+TELOY*1K8&4)\[?X-#I+I7+YZ/'X,)BW&RDU%U >+M?"P7X_+0N%L%-3]`*H[@6M!^;)U8E_!XZE*HR],V>SPC-_++:9^GL9DJ["O` >+M:$G,](_F]8GY\/2&!CHX31-@C3]O!_<,TSYR%@F:J1`NA`D'8PA!1.2"'P_T >+MD,%`64#GXH>N%?[/K^7-/P!02P,$"@``````(G)D,?/W&"2_`0``OP$``!H` >+M%0!B<F]W<V5R+U1H<F]B8F5R+7-M86QL+G!N9U54"0`#+X"*05)YR$%5>`0` >+MZ`-D`(E03D<-"AH*````#4E(1%(````0````$`@&````'_/_80````9B2T=$ >+M`/8`]@#VVZ!&R0````EP2%ES```+$P``"Q,!`)J<&`````=T24U%!]0("1`* >+M(CNJ^LP```%,241!5'C:Q9,_2\-@$,:?-Z^IX)_)+J+%I144!ZD-M)NSWT$G >+M-S^#".XB#@[N@CB[^`$2"&GI&RF2EBPM9.C0#))B7TAYS\5*U+1J.WAP<#S< >+M_3AX[A@1,<P0&F:,B8!.I[/8;K>7I@8$0?`0!,'CKP%"B$W3-"\:C<8*`'#. >+M[SGG=P`0AJ$NA-B>"(CC>$\I==+O]_,`4"Z7;RJ5RC4`^+Y_'$71DVW;QB<" >+M$;%D-IO-C:\:$3$A1-ZRK%//\Y:3.DO:J)1BFJ;15"[8MGUD65;+==VU<<VU >+M6JWH.,Y64IL;%8RQ%\ZYK^NZ'`>04MX"D`"*'W-_N<1JM5H$0(9AB+&`>KV> >+MDU)>9C*9LU*I].RZ[OI@,#C,9K-7A4+A]<=#4DJM#H?#?2+*O:]]$,?Q>:_7 >+MVTE=*\VR,`P71G6WVYUW'&<WK>^;C?_RC6]1A-VS&%[4@@````!)14Y$KD)@ >+M@E!+`P0*```````.G),Q````````````````$@`5`&)R;W=S97(O8F]O:VUA >+M<FMS+U54"0`#FQW&00EES4%5>`0`Z`-D`%!+`P04````"`!`<F0Q.39WZST" >+M```T"0``)@`5`&)R;W=S97(O8F]O:VUA<FMS+V)O;VMM87)K<TUA;F%G97(N >+M8W-S550)``-H@(I!4GG(055X!`#H`V0`G97!CILP$$#/X2NFY-!-M(0V2K,M >+MJ_:P7U#U6NW!A"E8`1O93I,TZK]W<,#)5@Z@2!$*#+R9>3;#-)5R6S&UC?9< >+M9'(/1LHR92K=&2,%G`*`DFL3:7,L,>(5RS&!G2H?PDVA9(5)'*=*[C6J6&^Y >+MB#N<CE^Z?U&+7-0B#V?/1(PJ^2=*Y2&2BJ,P"?Q&9?B&E4VPXH)JR4R1P*>G >+M^M!<JEF6<9'3A>;\;Q!,^ZO^!HLW%R*^:7NA9W+B*YX7E/9#BXOG('`/'13F >+M<1"\`4PI[**GK@-K(U*8<RD24+@Q#T2$Y:H[T-G,)K@)2PI)O?<B+[C5YU', >+MGQG7+"TQ^QH:M</PM1=OH1;_M&SQ\(Y7M52&"7.MYY<L,ZK5*Z>-#:FY)&L. >+MMH\;J+%B+-%A^XA^+?U>[,%ZL?0;8C363#$C;[BYA(?TN$PVL;\91QMKR$)= >+M-P/0._:.Y;LD/D<5%=KW<C7QE[%OUY?U]7[UM'--&^O(0ETW`]`['%F^$S7K >+MQ-1*ULWD0^VQ<A4<<O)QZ>9.D\E3_P4V5LF9Z:KWS9P+]`XE9[YU8OF>?:-0 >+ML`H]:MK`*9C073^:60Y"[A_!%%P#_?#`-J8\TCF";NYD&L+OKMK%8A&"EH_! >+M9`XEFO<:"IXA<$,C3MF'3,5IQR)]<^C>IH`)-5B7[)A0(H'/0^NQ<C/;MNE9 >+MD',+HQ=CY69=/_">A5BY*7%F>U8B0_+D6XDV,+A!UV[PVW2>^L^DT4+6;CSW >+M`^\1LG9C[<S^7\@_4$L#!!0````(`"><DS$KS$%N5!X``((>```G`!4`8G)O >+M=W-E<B]B;V]K;6%R:W,O0F]O:VUA<FMS+71O;VQB87(N<&YG550)``/)'<9! >+M4GG(055X!`#H`V0`53D%5%1!U\O"+M((2R,H(2`-$DHL"R(I)=T@W=TI)2%( >+M(R$@*+!T@]12TBD@O30BW4ONOW[?^?]S_O?.W)ESY]X[=VZ]F?.BU53DB/!I >+M\0$``)&"_"L-3%^,:?(/P!AH3M(NC.G`YDIRKP#H?V]>6U$R!H/G(J_G#@`0 >+MD/]K6(#,;&H,$M=#X8TL[A0A!/"$J'RYBA@`8"!1>`73])G?S_$->.OY`XW< >+MMG#\P;HD,C])J8@U9\')D\=%A:MV!)=RA?5%3)2N1>JL!QE1>TRI0R(>6M.G >+MJH\SQKOW65;$Z23"0)IJ:ESE@\MUH!^-`P/-P=F'>+;RD^-)/VY/`MM._.8_ >+M!;B=O!B[/`W\LGT3B(_#2'#]C:4$K&:I-I)''","1]29\GX1M(X?1ILPS]_> >+M+A[?]36'T*[Q%Y6**`5!QT#&,\%7JYF?/9J(I>3H,LJ?^T$B.^Y+T/X&6*H: >+M&AKF*BK$FYN;J6-0]*V"5`OJR&3^@S`4ZGV+,`,RC`X-M;1__?H^@H!*0T>G >+M;[4[:J[55_"P]938N>V<$@$-W0WA#0NEO@L*\EUH<(104;VKG9//X/MX\1.\ >+M*$>\[K5?4+`%`"PT.A<U-5&KK0/^[I+DL^/CDC!PZ34Z&6U>(H.AA,6XK1U\ >+MN!__K1D0,H`07R$+*4%[T8HL']&!";G8))<C)P`@4#,A.[<YJBJ(A56Q:>F+ >+MH#$Z^-")_#`8C,*NTL/=8UGJ[>WMZ>W%&K\_UY[W<I)UW9=ULO^Y,"NO*"T. >+ML*JE"4E+HQ1VNJ5ZFAS]D/EUE<?.Y&+UNSX&'#)@=8$X"V+EDN_B*']=OFU@ >+M;(P>+;ZRU-%Z.\MZ>+>NVMIQ,#9<FM&9%7PC-I0.'6CU=?_LO6HXFB.4<\/8 >+M1)(\T,^:/LPD(I(L@M3MA*<S;A[W.9D`',CB@^+>7_,P`"JI#&\ZU\$%>*KN >+MS(#<H&L.(2$A]IBHA@:OS*RL:ETN0+;K3YJZ^OH!"@H*DI:E`[I02O1F7I5S >+MT"LEM/<T5+YO)V]";5<Y#\MFEP/*IOHR8<D`^B<IU^:4T?)VNK+]A$565I:: >+MZ*GR4X+SJ+PZR++/NB,<7JK@.FMK9V>ZW8BLMO86HJ`0_//;F6_@XGFKL8AO >+MLY[X54^.H?]2<%MI;!C_QOZ.3=@\MER':A2N?^O'A\R1@J92-,:5TO[^N/8S >+M99U.C;CM_N*FN"\!C3X''H#M?=Z(<WR=?4FG#L<&VF)CHX^/4J%'?;_117W& >+M<Y-3B.1+;AQVK&=WC^K$;EE868\G=/P_L91P!GT="=8\+M?F_/9-QJ4EB\_` >+MH:>754.W>$V+2#E+./7Z^B5&:Y=I>A8H-#8EQ:+!L7SC[/B=K8.+F4`6'^U' >+M%M:?47$PL8][N%\(#J1XJ#!&!/B(XX/#AL6<[W)4A0-C</863K%5H3>&XJ2, >+M580;P+H&SZ,E;\]^`1_Q^0U!6E9Q!BW=INWE>JZ@#8WZ\N/Q4$!JJT$/>U\< >+MM\G^VM*Y@=]>WL&%]EV?IJEJ?T97J=3Z:L%ER]R;:1A5EK#CR;&@ZQK+3'!S >+M5H[_7QI15X8%I']T:>6U)WM0/!V4&NV]Z"LBQ<&'[=/>>+0P/U^EO[[SVUG4 >+M_U)[W8O3PLJ*>0BLJ!1KZVA;6%$!QA-QW!^A?[$HI>WU\B">DA#\.3S\E6&% >+MGYW=WVZQ8KB=RJ_EY:#A]!I=KC@Z$6)-"H6T'1OGHHIV!E4YL?@IB)V]?4FE >+M^Y-^$9RWL%)+*MR+#E49&6R&A+Y+W]#<X/G91$PL6<XY"./CX\LK*;T[_SO- >+MV7YWL:`:4A[:](LMSG3T[%?BYI>(]NGI:0B%1%13D/0QN1TAHV0VUK=ONNL. >+M96@W$>C4\\<*9#NR;/R??,7O]MS-KJ(AT$_!_C%A_.\&70^A$3-C&O+7TUE# >+M(=#8LA:=HPZ4.7D+_(+?=<V"1>%K00&1;**-HWV7G0+KLE77KI:H6T^$Q(N' >+MR2^(HYB39[1)SL_/'99;4[?2M$/^?B+^>_ZL/?=R;T[&U94?EY@>82&`=;0: >+MQ0A\9BS;NZL58-)47IX:%^>11%X.B%<3`>3!X3'\[WZZ_"TI,N>S"3+EH\9$ >+MAR3!I\S,P<%4SA(XG(F;NUQI.\F2YC?C`=O=B5C`15,M-T>`Q>KYL\)OWYX4 >+M69D/[_L_#W(^1_3=S-79"G9'$EG?I;>42+K@Q`Y(&43A(K8+,=[E8($FKK08 >+M"N6@=+12;7]9K[CF1-Z0$^A4%D\BK;`S_;&A0D+GM3)1=I%9RD\EKS9,-K:V >+MR!ESI;Q4\DF)\*9+\WPHYA<6;.P=U_H3_2X.[N(KV^=_'BQ!QR<G%8WNS$)D >+MS.BG%CAVL?L'!S$4S(`X3EZH%65#0\/XY&*AT?&$E'AABJ\X0QJ7WMH0Y9UU >+MX^]=676(B2B_]X$A);<^I#ILNB+@TWPJB1WQ0PK<<PT#@]+`SO"-`J7$"1E] >+M?=KN*"+0RE1G8-WP:E@E5O%<?>JC7>.#Y[D_8DWT]>>C:WL*+<1Q53OOHE,- >+MC"5Z8NT[@"[`M.6NRM)2@XZ@NZW5`KD63/G(;]X!1$1@V]H4?RNOC]A*\VI5 >+MQ"TOCU(7=[HX6!C)OW[9"H_A4NBOB?M-\)'($6#/Y#8>>'.1F)S<C?E.!,(O >+M5J_/0V*^^L#.OP(?/=IG=R(ID$M@$N-DGGT:DODY=69Q?G[R=D7FL@\[A?B/ >+M=X!LOQ;OY.3D(F:J`<LFOC%)_=RH'/)'UY).?Y9_]/5<9-K!="F3BYJ)^)?L >+M@:I>3M0MM!)A,U6S,F+0<'2Q$"RGWHJI)'?4PU0ZD@,1Z49*Q=.L9`$ZY02R >+MQU_]*+Z/B4;%2ZS;W(C&VYO8;5SI".\XHR5U81(QJ.#;TUAGPQ9O$^;-S>YC >+M=K";FWXUS;JMLS/3J%UA=77.]Y]A@$+1-5?ONFKG8**8M<VC5<J&0]272R0: >+ML+(T3@QG#ZH=[,^7B?H7B;C<O(P$\)BO[#YMQHL'Q(M.)#5<^3[B3YSW9GC; >+M8Z!8WW)%0_P/6]CN=XK2(CS*#EY:OR)^ABH1S*1I\`&5ZG0,5IWRKMQQA!67 >+MEUO.5N6G7!P>&H`"FFJ>U/CIA:,8$J*FZ@CG2X=LT5.#YZ6TOO?3"<WWF2:G >+M-T5?L$7IRX`/96^Y`2,C/&D\=]B6V-?\JW&"?PPRQA*9>08'KW_-S\#\[<G] >+M+QAZ[/AK]X<4:6DE]N;K8\<D%P;S8+TOM2W3\>&_VX%]<KM0:=G>4I^(9#O7 >+M&)US`;^-_JH-'2VMG"HF2S>F"N:/?9(=-A-,F."<=*2+?L]C<L]EJ6/<*W&Y >+M^,;1\=&89&T<'D%0=]OEXDC:2.ZJ6_/1LV458EXZ)H_Q!T?V=G89DG<.\YQ] >+MDR=:M(T5RT.#.HU5:W.6`29W]<2>['RPOT2WKNN1ZKH9"4.>'WZ;F'Q<X)Z8 >+MF.A<;O/GX.#(KZFI^;4K**"AH*1D-5NED91,?EZ4X*%G]=)E(4`?:KQ]TU8S >+M-[*1<)F<F2D=G$_*D(`K>XPREYNFJS'^<CW.G#!EQ&<_PS_HUKH>NX^T0>8E >+MQI'O9\=2<INO=D48.0^.?>[>&$@N+BEY(B24>E;W_.F;S/X*HQ9V'IZGK*R] >+MEQ*6)D#K#RBQR&[>9\^^%IIP.)HDY'O61LC:>]>:3V^7Z1YS<1"+C<AIW%Y. >+MIB[_3(BM-7^>^5GT6#.>WO9[<7&&48N7NMX5MTPD8>?F?/?%?@O[L\&"_/SH >+MS$P_`<&W)17+2HJ*;K-M/MRAZN)F`PLUFX)V=H:2?9H0B60=&B$[EA@1=K;S >+M!.@MW^GVR/K1:K>$V_C@H+//3H1EA:G2:1*K$L#/XO(0R7AQ*A$3E2`YGQ<U >+M,_7#,&"?*GI_]KA^I9<Y[6)4*>!!$%,7IJPE!7VK<WCTYO0IP>^*%SU#]HUN >+MIR,B;J;H('`:4=[!RJ69]^^O'QD9&:.XZ.3EY:74+30T)J]6HY;88Q0#`H`Q >+M2?%<.NOGBADC3UN-4R^\1))8S/CZC<2*OX;SRA`RB'^XO[M9/?;YA+/J)_%6 >+M/:5JV]!!.(LW+,Y#.?,YQ^POFE7S/ING"C%?^;R&_ZBD$CJ"U#]9AE4J;S\\ >+M;E+GVG]J\/Z`?*E+!T+BU!AY%;BYPW6U"_7QW==.XS6)E'CQ>6^/*RDYF8_F >+M(Q3<OI=[YMN&W]S\XKF0UKK++`<GY[OMT9R>WKDJ7>5V$5965E,!FH&AH<+F >+MYHBXN*F*1U.E[&9#I+F!]R_JZWD<%:B46G2T8%HT+TXV7!9O%WYQ:K<*>J[U >+M?,BQ_#M5DB],*.T4<4!MO9N8_#J)Q7&V"K8X6\!0!'^6Q'*E32Z1EGY.?2:: >+M5&CZ+S=/1W-'7E@7OO4Z8`8L,J64M[7ES,QH#PX)MBP6?P"VHV&/X@^XZF/" >+MV,!)26465M\3<W-E'?=A&AI)[!P#1145#'K$@XUZX22#U4JM?8\:"/DW"F$I >+M*2DV\3N7:FW&D(2BM_E0T]8;5#>)H.TM:MTKTY0.G/]ZWK+Q!O]\0DTMH6^D >+M6)U9K"0!I[A87KZXN#VZ=-73>*W-B/L8=J2NI;]0%W[U,?B'C]6<!B$8VZLE >+MIZQ,><]+S"H9;WKWCO^(M:XVM\%4W*O7^H,9%1V@/(>^KJ"@FVIQU_+#@G-+ >+MJAG)W8Q.).KVE->EV4Y6?!,$996XVGCH49W\/0*<%*ZC6J8I.C4N[Q\EMN'_ >+MWI&:GBY+V[Q>/_'GV):\)>LDC;LMO.(B$;)34%'!<W9%TSGV\R-CF(L\R]%U >+MMF:+P78.\BJO:4U"<?";SI+'(HI!-O];<T1O+&->?GZHA/^%>6WOQ/($3,F] >+MMA)GE@*MWI4^'H_\AOMVO*)!6R;.<.7Q^/(`+"LS4PT2@;[J6TAY\V5P<#OM >+MK9H:@L9:Q;1KHU;W:M'MY/24@X=G<DTU\;'M#&=#;]>7@.2*IA.!QK]:1`^- >+M&R!VW8]="!^]3"$7CT_$S\E59U8%*S";+&`=7Z=Y&_%O<=]SDD=1J"&+.9*% >+M.D=1G)3K\/F?%Y?O<__@1QP>^]C8V9DCV^^:EIS(R,D5E.4?\XS&#%B0D;?9 >+MWQ>$.^.0A0:$4#KR/HKM]5L,%Q&Y(?YK$4.FG</OPE'/-L?.P6-^^OWCU/0T >+M)GZK%_8=YNH2C;3F/TM.E^X_WJF5T=+2K`[P;5LU&M-ZZ_PRWEY;QI$:)TXY >+MCUJ>P+._@&Y4CTKWS\S5A-/4Q.'AN5]B+_RQ$IE6JLE;38&0+7_C=]<99'%, >+M8D3;V:M'6EJ]Y@V?/G\.#??*TR7Q/(M^B(>QIL@'HA0+1_]KM:)PKDDSX2P; >+M^]--NID\A<F?P6T)(URVU2D/+D@.2GI*_0*59M-S&2'HIU=K#^^^ML'3WQA( >+M[FX82M`GR7]X_ZP4:0/PRG^4D*R"V(:;@T4\>DGD<U")/43H7S%]S1LQP5$8 >+M;4X^M$MNM_[][>Y[T:P%N\*+2H!?2^.-N&ZL;T$540SJNMY8(MPF[5O>M=;H >+M&.?V.07_EJC(2#`QHY-4VN8[LE[,U<E5>(74J3%*Q]B7;H4A3UT<@L[RY3\J >+M(J\37P:U@C4?_D4<1C_20*P2[."(%AOOOO7O2A":Z"Q$^[SOD/!0U[E]E86V >+M66V,Q1EX,AA<$(($R&!MC>9$P!LF,*<S]/TWC!\PM]V$A?)->N>V^N5&!;PR >+MD"36!4&U;2K0/%KSF._\B*"IETR/S6J6U^PL/'<LU,SHB-SQOB"ZTOK$M4MO >+M!-&!;0U40-CF/Q-#>)E*''TD#6<&BCA<VI3Q2MY^..^5DS0//&Y[C@'5[:C< >+M,PRF[WK-/X6E]WKMW7]P!T?DN[$)_T&W;$'A*`Q*UR2@C)?AORS_&4O.4#'N >+MQD;IFHAC,(R5O.WES=HGSMFQ_^$*_3^2B?]*Q\C-%][$P"?'&)"*/+H(KB3^ >+M\?R_,]#4=A\.PSWJW=A#SUL,)R(25L;[Y;\B;(A$,%)Z8!BR4#IPW\_O_W_] >+MP]8;&DSBF/9<KT7_[T+_-O!2X)]6!-`9*C0Y#68XCFI#4I%PI=11B1)EMB62 >+M!OXZ<PI;5#5[E96;*]:.IGY,/T+3XS5'=8CN=+];SO8+I!74%-W?(K3B=)F? >+MWC'DTI3"=<9R>GBA6+>._DD.P;Z'R-5=736OXQ*3\X%0I!F/N[#$YAGN!Q#* >+MB;,5!%SJ$;0J*\^TM,:HJ#X+]G5JY*$M2\I`/Z.WR4-MX7!).SX^(T,/T"=@ >+MP!.6^_3BXHFM[>UX$OV6(\*E@7+*!F"@\E,>#2VA,0?3>#C<]]AU&%2S7N:P >+M\<>$P14X%++W*3JT"<41<@J'&&-%&B?^I$-\N.((8+*:HH###RBI$KC<<]F% >+ME+'P0RK'5?0O&Y)I;QN6+&`.WN600D,*QZ"@`]0VUFB91QK0%Q3H0\JN)+_" >+MB"@!8^<"W+FLVH&C'BRGN5*AJ,MV/1IQUA0MT'6DQ@>.?Y)Y:9OXPLX1NF9L >+MM*SSKY1=!3]A+X;.K'I7^"!?2#>DXT6GOW0.=B5M^LZY,%*VX/O>L358HD+N >+M=G:2^#5"M>XJX660U4M5@*VO'A=P[]B5"QPY0):+I3,DD(H`ZGVG%!5ABV4+ >+M6:6Q701!+"U/</B8--T*8V(S@**5"N^X7:[+:1RP53K$4YU#=BT^@^#P]G]6 >+MU)H67_&&.1T`JXTVH4,JO[.=$052>C8&51HK],@3^QH3<-Q/]3JXG##_H>?Q >+MU7IX\D4*HU:/L='QOWSYB,02=:MM)I)745I_]GC:;O.):?C<,">"L#::-Z0V >+M*0E%YZ+H]?02.Z*Y61P(L;(Z<BB^813MEN90BN=R+\TP:\3"CA-0,2V#;8%@ >+M"*>'M2C&(486B-N#R7$A1`G?F="(JZI??>VC,V"5_%0W);Z_A(LO-6A?R6Y' >+M!`&2J*,`5N:V!U*]SWWB;:$!4H9H)[0-WJ(FL@6M-YPG[JT2:2-S#U9PUTTZ >+M5)G]Z)")/=-P^)?<;(265``\YTI*48/L-W"'&)<$<#4W)PXF'!YZA_<)R185 >+M%;HW[,&`_=K[6][;7EGEMUKGZL$$HD1@JV*X7UB&V29"-N1-6C-QOPBM+L%B >+M88E940Z\V?PJB%Z4;O;!\.L;`_%[KUIVJ`.8!S*F"M*.!AY](DVV3X/#Z6Z= >+MI+WW>X'.WS$ZQ^7N3J)*D2,Y/I;/_`%%7.[U<+@(*EO0>P-;2O(%F_.%^Z3I >+M+3U5$.E])6YV1T>Z9U!R]U062@I:D"AVCJ.D-7V"\MG"QHNWH`1<+'(Y`6MD >+MXS)3<P:D'T]_Z6E#V$9'MU(\&_YE/5NZ-B0><Z$SF-WE>K;4:JBW)?Q8-:T9 >+MNS^]7O=;O\V&U0KD^(>'>A.1YGARR*.O'_RA:CB+N)"8C"(2EU)=Z0KP4R!C >+MK/FA\?M;-N,UO]/PEQ37"^N>&@^]X4P7@R2=JMCCZ#1"8>!FEPKI(5V`Y@LY >+M"9R-3X)N>'P2"`7LJVAJZ`.T-W`4B1SSEU*!/47BMYX9]W3P2:1NAS+%1ACT >+M>&=Q2QYR:6F)4*_H_$MJ87<>4U+%K.3L8473`&G@(?[Q/+T*K&@'G[:J=8Q, >+M=LE=4XM;A#JCQ$"J(;,)I^JIKJ]Z:Y`\-:A-D]T]+]F!U.2UCD.M[AIOC!K, >+M&SD1I;]2)G:MMO`&U%9,`,H!BU8J;XXA^NDF=7'C6OL[HQ`?!6[EV);=7B\2 >+M0$QYBXE7W.4?@/;)H"%HO2[?&:P7=]=5;U:0/%ZN?@1H/-/7\#"J$*R2>;<O >+MIK6N(%.1STU8_?(*J\9YJHKX8P#FMQJZH#AEQ;5*A$5M]!OI#>EG?XB"\.%4 >+MWF/GI;GGB?49+$AV=RHUT^=N4#6F[#KE5IY?JD\T5VCUK$Q8]`+8.8<D#:*W >+M'O2Q%Q\4+AEMR1I2J,#.-UO0#F+V6$55!1$".86G!7U[3.`VM83C]T>_N`/T >+MUI%7J*5;\OXA)>M2)`LUEW;^<M<8V9A.QD@9>#`IJ8FXZAN+N^"*BVC3(_;! >+M:?/QKV>:VL"BV61=`N4T%L;[@2<44PXK]%"0T(-MKLM8V!B%[.]3K#F'/&!5 >+M!I'A`]U]X2^00\:_1:1^&::B,"\-J<?[.%87?!=3^ZTN^/!30<X(:$S&/A;" >+M5P_?)!99>;K>IPHC*`58/PB*IT,^/F+L"+L,E0RL<UBT%3SU[KBA^AV+`JC$ >+M1CQ;L=*S8G/Y,="C8:KI)D""Q?J91AP[3L'SB(QOQ'2%>47`%5H)F2%3@0VU >+M]*^=6GX6"P46:/=P)UD>X,:TJ*F%]??\\K=CC18)8[=I5D,<2]1M\4#J#,,Y >+M5/2V9$T_<)WBK*340[\+O=J66[$@`)5_4(,Q=W80N$AZB:$)-BBWJQZY9!** >+M/S'WI.B7$=M9-D!=!TH*\L1_E(KH1`0]G)F.&4/2]>0Z\67-X1HZ51^]:2(K >+M>.9%:A4Y=*(L0(`U#.8!Q&D+4@&MDJ-CN]F+\0J./1-7%MF=5"[+.D\*U<81 >+M`T*G.*+;/AU53XO?7_=:I0-LP=CI<'BFM8`+1YY!#B,;3?<!$-\%$HBY=WM% >+M.(^7G4[(!@`@D,T:&=&%=2G7KZE0O-O5MCB2E;H%7W)1L2>A'8!U1^$T+/(R >+M;4F0BH*RQ2,^7OY$DE`];4ZQ4#TKP>DUG!1:ITK?&*3R`RTV.B;[;:P;6LM[ >+M`G;A07%V\_$K!((/_YBN^K>?.\E>N.C01$<097&>!";$=E@*W\?L=XC=:9-) >+M:',>Z74F(`;(\%_*(3OQBO+,CH4,MP^=UF3RG',)O6*J=H5,RR;ZWW0=!Q,& >+M+#G_U.<*`,15Z>N!4G2YRK!&8V/702N:L1&/$'4H'V$@56]O-2C#N?;8E@7? >+M3]*EH/_DC.S550!N%E:1^I85=/.Y7KDA88_>&T/\V21'<0K%)SVC<<;2,5-@ >+M`L'W;RIJ[[+WRAA$=[)Y(&<!4F3X'#=EGYN#M+?[%"[XV-2D_.:\$#3QN2XH >+M;4&*H%4Y&)*>V^JYS9!3=&\_MU0-<Z@E%-@>Y-7Y.7/0'C'G)98`>%>N[=@R >+MY6#%S,<E^2552M:0GA'P-KQ6I4%?"..#0;^THO3'X1*R%K[=(_HSQ@["=H.V >+MSVNH_UC7NS6;/.)SB:2(L6Q/8%=_93Z-&`&:3?/A/AF=5'JSI*GVC@K_V9#` >+M)3"""7Q(9^,9A*,2J3;NCOVW,!_"`VF/+^JK45$P)U+C&1(G2L%L]IAY->O6 >+MA\Z^OH:!O5[?%Z]?1<6*GT]OME.:8R@YR0>WF'2HW2G'_*M\?@T*O^/EG,MQ >+M?C=GDB]NTX3#AC8ZXZV.2I;7,9Z9595*TA>I5^9WM;):*SE4%C1''']NE=-N >+M%IQ$=_9X,*P("V%!$KXK[:31?S;;^K00`A3`=<3.-N(P?!!0.]!C&<393_K6 >+MVK+6X(WA'`@]T94>$?;]BK.XNY,<,=OSR@G[>MZAE>#,4]0'G&'96`L6?:LS >+M"@!-HU_]@/@D%X$LJN$F,\*RR+#I=RI&+T9>IP&^49+K1.=\=>%7-*G[6=QN >+MCEOR('F3W_2#?$C\?`'^7X/E.V)3G+5YV68FA@S>46YCKHI5\VH9CWQVLV%R >+MI'O%8^_XQ_X-HB0TBK`B+*L"[4R."SU'UN.Y$!>6G%9UDMB/Q.CM,`Y#]MNH >+M$(&PT.W07X3@>V`</_5S2T$Z7U'@?4$$;_2&B(04#/=2"A85>V-*V#J0Q$ZQ >+M4XV4JDU<N`T6L5LP=65Z4H-Q`3'++!<7@.PM64"1^GL.]B1E"9<"E@G2T&D% >+MH:L7FW-/(&>O&)NS'A;G!=WJ>NXV)J&@AX4^DV)26,T%##CXO<+;'GL@+3/S >+M,S64*R7!;T#@\.L#4`WWTPILLO-4SG^:.,/L,\0(7%[2ZU,>NAQAZL%"@@RL >+M*':7BW*@\,G14UY2*BBCO!"M*Y##G$;UX>!G\U]I8:*KV<+\M62.E!4'3$-B >+M!^Y?I&&\I!VYY$S@$5+/9AKI*ZN+\5%2'QHSU`2YC'U>_<Z0Y<#&9:CTR6NT >+M,.*%S#_+#(7@Q$;88T7U]@`?&XNJ%M[*$2!9UB9A:U<E0?Q_X.MJXW/"=(PW >+M$3JVH2!_"NHU>5,.M:VJ:@CUGUH\\4UKW%B',Y:'R82NLSY@:C+G\X$STJX[ >+MJ+*$6!R]:%S7YZ2>FNQ%F2R6HSB)#3GO2::E%]U'ORCN?R%,H][4+JU`]5%6 >+MG;]?F<:ALC]CSAW$<:K*&UAYPU;KW'E\4K`BW?(`HN$Z_?H10!W:KEB-92!' >+M93_7`YC>)]9+6#4I)G/"Z2DOX7#YZ<ZED!PQQG0=C^8#_OO9]/QX/2(YGC1A >+M[,XXV"M`G!%[>\ZA%4^9W'-L3MN^J.U.Z56.F$EVKQ"9"_:9SU=`.>\+`M'Q >+M-RTZBQ94'=EHS0:V6V7<^QD0=&(+.H_RLV4'E9.?_5[S_`TX_%"0ZHTSB^\J >+MOZGG&HC;(\3PZN94YB\:JPN/DSX=Q^4G`/,HR*J\JI`V??\_4$L#!!0````( >+M`")R9#'\[-^YP0```&D!```A`!4`8G)O=W-E<B]B;V]K;6%R:W,O861D0F]O >+M:VUA<FLN8W-S550)``,O@(I!4GG(055X!`#H`V0`A4_+:@,Q$+OO5TQS2B%> >+MIRWTX$+_Q;L[\0X=/[`G=-.0?T_LD$/20B\""4FCZ7>1)\R*QAC@$WJ/8<]4 >+M1+$=D-40ESNUVC9=_T>H$1H5XTX>M>8[=@#?-,ELX.4]+1\7.B.Y66[\U/U? >+M7$LF*HGMP8#R\:<N_!VMMK:WR(%1D;<.#>PSKU?CG*-'H[7C.%C6Y8N"KJ&B >+M;PV"OD_!K9[AB7R*66R0.K?=:UTJHZ,8#&0<9;U-RP;>7BO63ZYX'SYU9U!+ >+M`P04````"``B<F0QY;$!AZX```!C`0``%0`5`&)R;W=S97(O<V5A<F-H8F%R >+M+F-S<U54"0`#+X"*05)YR$%5>`0`Z`-D`)V/00Z",!!%]YRB8:6+MLK*E&-X >+M@@(#-%#:3,>`,=[=`B9(C!MWDY^?]]^(`!K+MM#("28JW,0>"6.CJ:A5[)R! >+MS9-GDHBM5J'S5F,'N#3CV9B!D_.*97[*MZAP1,Y&R)SN&3#$`G!C=0,?%,5. >+M*Z$W@7B@>__N*';#_I"6+3H+2LH"W1@`9>C,(*\+ED>N\$.3'G\+?PWR'FJ: >+MW]R)+[]<_C!9-[G&&(K&U*O+"U!+`P04````"``B<F0Q`$Y&O%@!```W`P`` >+M%``5`&)R;W=S97(O8V]N=&5N=',N<F1F550)``,O@(I!4GG(055X!`#H`V0` >+MI5)=:X,P%'WOK[A+GS6U8P^5UJ<R&.QIA;U'F]:L,7&Y<6GWZV<T50<=8RP0 >+M,'K./1]Q_;)]3-L-YTHJ]$\;4EI;IY0ZYV)W'VMSI,EJM:*+)5TN([,_1'A1 >+MEITCA7,R@^OJ!Q2ET17_-J/2GT)*U@UJV;2'S$DV:\GKNRB"9X$6F)1@2PYX >+M$@HAYT(=`9NZEH+O(;^TWP1Z0,4ABC)/]=9W_!U8KAN[(8U1:=!*_9#4:&U) >+MUCGLL%*`X:@;4_`;Z$(R1%'0)%X0H)T`#0JCTPD(GM1!FXI9H=74T99C843= >+MO?[)V50K&.Q;26M6G-B18Q:*_37D9-1`)MEP+7\+GN9&.^2&T$%_[*`_WO#9 >+M8R:YQ[Y>N4%?Q*2K&&!GF>7M73(+CH/3Y@1:R0LX84NHV)LV\!&(">A#=_77 >+M1$$X_D?E0\KQYQU7R.<YP?R&)/&#;Z3/V>YL]@502P,$%`````@`L9J3,;H* >+MS*AO&```T84``!,`%0!B<F]W<V5R+V)R;W=S97(N8W-S550)``,-&\9!4GG( >+M055X!`#H`V0`Q5UM<]NVLOX<_PI<^T/L7,NV[$2QY6FGB1,G/G7=G"0]G5Y/ >+M)T.)D,1CBN`E*;^DD_]^=@$0`$F0!"DW)S.Q)1)\]@7`[F*)A?>?D6?XC[Q^ >+M^^[BBEQ>G+V]^O26O+[\]>QG<6>#/"/_HDD:L&A,KCY<DN'></\=_#[<.]B_ >+M%!^&T`C;?5Y0,F511J,L)6Q&LD60DED04N(EE*2KR;_I-",9@QN47-$LG7HQ >+M)1]6DS"8DLM@2J.4&O20%-G&MIORYN;.*7E@*[+T'DC$,K)*J4&$WD]IG)$@ >+M0HPI6\9AX$532NZ";,%)2I0]\H?$8)/,"R+B0>OX07"L6A$O0YQ%EL7C_?V[ >+MN[N])?L:A*&WQY+Y/FAB7TK]B<VR.Q30#](L"2:KC/ID%?DT*<`!EV8#$,^+ >+MR.:K3^3BTR:9>&F0[B+:[Q>?W__ZVV?R^ZN/'U]=??Z#_'I.7EW]07Z^N'JS >+M2RB(`KCT/DYH"CI.2(!B4G^/?*+4I(=8,R982&,Z#6:@X]"+YBMO3LF<W=(D >+M"J(Y28+Y`GK+BWP2!LL@\S+0?*KY1YQ<;T8W_PK/!9$7DC/F<]D,Y8`V_4+C >+MBRC(`FC[AM[2D,4`+%5=1L$'U+@X8\OE*@JFDJ,SEL0LX5\0FWQ@B;@Q3:B' >+M&IT\<,PJ,>R;,^A@+BK9/MLAPY.3XP'\.$$@ZT-[Y%48DH]".1]I2I-;4+*4 >+MZ0S&..]'EFRG.V.\1,@_&"7O*8PU(+'@OW^*I"A[,!AW9"LOA9[_&08X?2#; >+M-S3Y:FOU(:`),KWP(N1J>RH^_!0QEN[-$MGJ#841]!G&P1)^;_OP[4LFOOVT >+M8-G2"\(<$MN_"C/H<M`?2/BPRZ6VSU6<&!.*<\L<QO#P$ALBE!R%>/G=U6_D >+M'8UH`FP6)[*:Q8<X3$/HHD1.9C`:FSN[<#77/H)<`N?0H@T++$()[5+`(19, >+MY;M%,%V0J9>*R1`G[#9(^3"10PXMEIP6W'KAX/!BF$-3;P+"!U&:4<]'-/X` >+M0T,P@=FR1RYFW/;<!>D";9@7ANR.6R#&;R3D5C)9T":+P@=$JVJRH,8B5[M\ >+M/J*%4X08MDWA.P<#JO4D+:2XP47<(/)Q1HG'$<H'T\`A8/KX-*09&H62ZK@" >+M.$L)C4-ORG6[U'85&(5^0C1LPSDU'T_H_Z^"1,_0DK!*LS[C(G,N:#XVRFR` >+M:@!P&L0!C%P^5AV4D8,I?7@1F/N(%E1C8TW.'>$CWUZ]L7E(\FQ_8^,GL,-@ >+MD,@J";<WIXN$+2EXC7G()EZXG]X$T3[X+F@6>4N:QJA"WK+&N]S0AZ4'`S'9 >+MGT-?W5`*%FD?U4KW@G0/A]3>_2KDB%L?0&H&-O0S8^'$2\A?&X0L@VBPH&B\ >+MQN1P%-^?;CP9`/X`!CKU$G2*8U`UR/\_@FTORJ#)A"6@JS$9QO<D96'@@_%. >+M*'WS:>'Y[$XU&&0L'I,#^+[_3#]TV/+07>!G"X%]J/^?`K.<,PT]F+*0)>E8 >+MXKP'*4)NN$O?RX]RZUYZ^(V7W`A&2EP5'YVP+&/+?L^&=%:F>HF<%!XUF'X" >+MH^7;QL;^,S+&?V3"V,T22!%P)QF.<G$9QU0F>E3<V,L;#H(,YE[>RU*M!\C6 >+MTKM7:CZB2]%!A,2>[\.D%EUTQ`<#H!/"F1X+8=Z`=V'SS_0^*PR)ZL/\]Q!! >+MOC4R.%Y@A#'VINAO=IM:7H.[C7[8S)(5W?P3Y"HQ;=`DSW/F@79)'S^2O0*- >+M00#.C6LIU\A(C+9\6HCOHB<^).#VP9I<+R$,^6$3'TV!EQG,8K((_-PBAMZ$ >+MAM@S;;0SU"/2AH`/[.7#.!\Q]P7M.DBQI-%JX"<LQC8T*8+B#.8H6W<)SNQD >+M$$M;,,AA4P48>V!5,XID.".MJB$0E$YOY@D#"SHNV;5)PN[`6PO#]CJG-9BQ >+M$*;$7AS--W>`NP%X"PC-:F5.!Y*WP725P@0,OE*;@,6!_0+45`*L2GC-O10, >+M*G$'^M*=:-Y5ZT#CV)^!U^:]FG)\=&*3(`PR(`%CRJ?1.@1:<:OV!8>2:5WP >+M>W'X[?)K^*F;L3D<:6-CN@CM1S+P.>#U$IQD1?M2L,!NCRC3,)0F::A]"?`, >+M"PI!?C!L-!=\:N%4#Z;<B)>O.1N0$K2P$F#'))\<?"QLU[=2XVN,P&$%2A-E >+M`&L>/]36:@__$3_QYCS<0NM`TNPAI*F\A;U;HH.M<5!R-,/8-OBRK0/^S\*T >+M`N,NMQ:MZ)`=X*#7:L',P,`!2HRG6K22PS<`+1-'S#4]<4K]S<%#6-D/>"<, >+M@B4LL,L&TPP$N7O9%[:20TB#61SEG%V.!69TSK,O$/9FVP?Q_2X?>_E/N+!3 >+M'8:6D?57&^K181%[IV1H&_SV;BOYLINOYT4P()C1+)69P8X*(;807F[AW8H% >+M7PKQ-<PA6`]DQ(,E@-;R+D98N$3$9M*!#3"45C"J,[";`9[?Q-8"A7"+L/!2 >+MOGJ@LQDFLS#%$K&[73Y*1(L`LR=\]5P)%:YS4F:\TSYZ"NZVPNUF134EHME# >+M#/X$;1MT0Y4#TC8NGA_K<8$=LA:]TCAH(BXH"NIZ.-@&@IB<<0(@"7297`E5 >+M(^I2=#4T#</]@"6XIASC.A+6LUYX6G)[POYWZBRY*!/=9#I\&6K.5F&('K[$ >+MUZY3,]2P_"A^E1WUBY>YBRKCNT#QY5W!V1[PGR],MUH"OIXNZ/2&^LHND&J3 >+M@MVHW*]PT@Y9?:1B:V",*$E@/)&1_(^?C>%$:J32(UI2X+#E%=`X8MGV-022 >+MF$E2_.Z(I9`(KIP:NH.J]94CMFS/52*7?Z_Y4Y657U4+AI;3#%8&NZW=T-2" >+M0^0"MP&UMS/@E$[<4$V5B.@19GHQ+\(#6\OZ`.=`E[S*@<4`Y&O-UA6D6NP5 >+MG\>&U<=5[-KO<45=S9F#4G22:^I(V(.:%1E!(+'8?*)U:RR\A64^A-C8P7AO >+MX7K4M'0-3DM@\A\8'^7T$$$B#P85T&OQ"T>%4Z"B::"/4H0*D.6)V`C(83C@ >+MRT,):'%V$'+<>8DOY1!2R&NNVM&$\,>.L:H24;M:;Y2`>VF($U,4=VRP5BTU >+MJXG_X&KBJ!8]P>H^+B@)+[AJ2"%S0H)IXWEA.]IEYS"*WPI,C^'!$16L3>Z$ >+MALPK#@]QR57VDY$Y#`73!017Z3F0XMH"U$-^CJF4H&;V`H*O@LAXP57@X:$R >+M&0@O`7.45.(I-Q9S/[B+>)TLO@B>3`J/YS=29V^?*[G""@MTRC#//S]4< >+M;4#KT5$"F/>4`+8,U07$T@R,?AKX5!M]V8'BGK-61LJF<<JR$PL@SCH9*0M3 >+MB]5'(R,U@06L12,JZV!3B<X#NBKE1)DQ3ESZIQ*,LUI.E#5K0.NCF!-EU`2P >+M13$0'T1901O\BG,\,%1&C5,3O)L0KEH02)KO*E(?IS]49DV`6C00T3N2>9." >+M#N#:`*ZY1T4Z-AHJ2U<$<=;#<QU)U&'U"G^T^ZW+^Z`F[H((WZ^5E2$N.^MC >+MI$PIIZME*.`XJV2D;&D37!^MC)0Q%<@6K4Q7Q?D!WYWU<*P#PI$R>!K`60'' >+M.M:SX?21_%@'>J,:H\EW;Q5$APNNLA\-E8WDM"3/&L%5>`&DF:X`]9!>8`KI >+M%28WA[@]H&@.\8JST$?*''(2TH@9$,Y2'RES6(/41^PC90XU*(J-FYH*4N,% >+M9Z%'ROIQ`H)5`\%9YI$R?7:@/B*/E-W3F,8BF3N(]D5ROKSG>87@*RSQTZ5G >+MS3&VYS[[9#H'G)R1[[2NNNNY[+3(YSKA/]0BWPVYZSI6$SHZ-*@Y$NLT&(X. >+M<U(JJ6"Q>*]\7VYHNE<;:@TU\]<2,%B@5[,'@JD>LLU9VR6;$>/YG<T=[(E: >+M"40:D2>),/G\YTZQ9^P)HR?-^QW4*\W\;2]/,I1>=!Z)Q$,'QEQ2V95QOH`/ >+M7_$=5>B686GHZHZY%]W!,FJJR[TXD^PUFCD;BI>VX;Q6OD:3DFL'MWQ-`SM= >+M,CF*IGA[U")HMQR/GJ=*Q@X$>A@&G?JJ>Q56S?XT,-,M+S1Z;IJF-D&[9HPX >+M,">A).U$HH<V=;C^W(RMRKFD!@ZZ9)F.E<M2H;$;LJORCI5Y403:LD\-#'3. >+M2YTH)WGLX"![Y*LX]HDR7GVH]!@D.HEYW#V+U=3!'?-;0^4W3AP,=N?$E_!( >+M0V6JNQ/I$^?H)=-)C5=H2H@UQ5^=4V6'RD\,APYVO$<238`?*G?1BTX?+1_J >+M=.:PQFU4TFL-+'5*O(DTL!:]3=Z.*3D!_%RYC<XT^NC33)G7I"LMR;H&ACJF >+M\88CO?IY[N!+.B?X9'BJP]7N5'JM>G2\5I<?MZ?^6KCJEA0<OE2.C'/D(G?7 >+M=*%`?ZE\63]"?73\4F>O1VZ)Q`:..J0818Y?R]TF;*?DHX`]T4N:;A3ZZ-%X >+M%_*RQG65TY)-O'1(6!X>:$]UXN!!NJ4RQ7N2`^VD.I+HH4M!K?1&Q9KD;++I >+M7=*?AX?**7'BK0ZC6V)4`!\JI]291A\EZKT6FIPM9=K`0I=DJGA/HR5M$Z]; >+MFE6^K5,.J"N)/@HTWF<I:D8"%K--Z32A-,H=$.YQ3EA8V*,D[;.Z54BR>F$P >+M!YI3&F4T*90R'/`:IP-1):"J(M36?U$3<:JQZDK/RM5R><T:%@DM@RC`<A>S >+MA[OO6_]%HNS-@]EFOJ4#EP%KXGX4(`;L-&3IFJ!G"*$A=6=&WNV`U]%$$8Q$ >+MH__D#;&[<POP54FEW+^FBNCP?DJ]9+H8Y&WR2I%#K(<I[$S&FOLX8?</8HNX >+M01!O#?BM@4]Q5Z5Y9>;=8OOB14,C;:4I972Q\7.5I*KP;YYXD],Z\:J<U/2# >+MKD2S\_E?+H\XM7)VC5?XA33S,MR+&=W"#/6EL<C5Y-.9MPH;B9J%$V*[NBVR >+MVD`RJY17>T4TW%)?!S)M;FZYE'._5)-BC#=C",FK%:V;Q5#%^BBCW$IL];5` >+M"$&+^V)[[(#_I%@V7@I9Z97*'"6K0@]#2WW7<0]N)%TO@8N&7=CZ\N7#@M$H >+MN#\'^WT1?<@E7U]4U7?>*F/\4!(*,8U1DF!>'V1@M"?,?QB/^5C#KX,I#4/^ >+MAF4;OX*]?P5/G,DG\)`,<"<[YI;NK1?P;S0JDI^S/`@P1LZ<J:W:^%D5[6BW >+M5=[9S+V3J@L=2(I&L9YI3`Z*/H[?*I41=E+P.Y8KML4`'!H_U:M!+2T7KUJ7 >+M;K$PENJSDJSU%6\-#4OU9PTM"S[>UL[LH,*+L)+,Y:"KO>"^6;K.]?3.Y?-5 >+M!FH+DTJ=7>[GZ@[_9M'M+-KDKE625?3:UA;IS8A-"=(MG.7Z&!FZD7N1U)BW >+MS=KB!/F1[.7O4-F]\4U5!A2LLZ4"H!9+3ST=-AB-VUXL3T(&88SMK?+8",MD >+MJO@OJ['ZG8?H1>LH3\+!TV"\@FOE/EH%>&9ULXYY4@JQ0I`5?*^E2+_4[#K$ >+MLX9^V%S`P)`=VM';`!S5!M%>P%Y'-61WWY\H0-W0J#==#L@A6AF(Q:3`0=+2 >+M*]66UWR,4?_/XB.:0$?>+Z*9X;>T.Q21=O[;X`8/UZ$N;)L-K_F7]+&8UOBI >+M*^^J,+4Q\,^#".EWC\0>$(N$)3A52)KV&#Y<&@60"]1D50I+_PQ`)Y/*0C&8 >+M>[!D':B[C4$3O['"FN,9FZ[`W`?S"-:[A7")ER3:SD>P5)65>J-4GE6*LEHC >+MMFY;O:3`@R7U@]52![L6I5Q/5NE#P6NM14J&[+R@DVN4Q=Z4GWUQL/<B+]^$ >+M>Q^IOYI2@@DB<K>@D>["(,UKP/E&(3#L\-!6?JY&?JVN>W57'564WD\P8[]< >+M:0"Z,/58ZA5<<.W6U/)97TA4^"D7+LOZPCIUKJVRMC<FS0ISY_9OT'/;*-Z: >+M!3A=,8.5K]'V,F^2FI=Z)E?,S)JV[ECNW2VM(@^2*N6.\O_R@#!4:CGSJ??C >+ME6_D1\KP5,,3=8;9@;E3<&Q2J5B_)R!`Y--[:,7/]+!7Z-JNEY9/3VKZ05<C >+MEWI#+;%$Q7"C+BMG;;31,\J:K63U*L>!>N5$!T6]>%#7=$%ODQ[#3*+LR^<; >+M#4N)E,-A6KS_"-]XXU.2/ZA.YW*'=CM=RVHC'"E4"[%51(8"Y(F__'EQ?D@D >+MMO7R;;L%>8HL_$@J;QM^+/+5B9]'I:,ZS;H0$LLS;5QQAQ;,:P?[VF#4+@4( >+MCC69!Q#9^](Z"U@M9MQ$B;K.?>V6'Q1+I>[/J=5.ZZ-<X/UGU2AM:S;S3Y_M >+MXU#9.G]Q/GK]]A0^O#P_/CGF;D*<P&@<TV:>FE6K+[B1+H`NFOX=<0`P$4>U >+M#1YRFV[GQ9S"#6SI3&1^L))ADRR66!J^?OV%+0)88@T:WD\XKVB_]>S\OY>) >+M#B/I$?BH+K/-3`EZ)W,=A`ES\^A1:Q\7(^7".:+FV\TG+NFYRIM.MP/ERO!- >+M*=AO1;'L-O2)3(')3?M'^8$))>\MWB3RJ@*\$Z%A-`N8]-7.O86/.B7$;84R >+MFK#[?K"X5/]B@/P=12X</$[H;<!6:55IZL[?J+A*L<:W,G57[5GJ+4I(/538 >+M7E2Q4-/$U)^^^C?JSE)X85!>H[K"0'G\$@J#0QEQ$X-<Z2RJ]K(^_D-5-538 >+M+^$Y*$77+*CM_N9@D@EKM%$;8*/J\V_YHFTHEU!B#[1XI=JZK<`@M?%7#9@X >+M)DP&`N\2[P'/F+)S>BT^_[`9L6R&,<?FGQN=!V;^K.&T!*%90$-_H_F-9N&% >+M1.F%=Q&HCE=+P'1^/AKA:U@=#IWS?P+2\##7L]!+%VI08<2M"1:<>UFB*M4' >+MBL?%M^A9G!?<2\WXJ%W%FE&[LC%8X0U/R[Y3GPCUC/P":[+\I,7I34J>@<'" >+M=5K,XE4,&L#/NV3#_*H+_/!T>\P/6%>F\AW/OFR5[O,3<.^7X99Q[&MUF5HF >+M+D[*+5]Y%![XX<PU?(`M/\?S[+E^I$[D29O+I1>!"9DN_2\1O;O*DU>8W\I; >+M;7'"]]D`3\8+@^C&;ARZUO=VWDC-%RR=EW8HQ3Z(QA<L^7K!10$V]U";X[+O >+MCSXE(D_W_=C^[$T:NRZ`63;Y+OUG*S-PY/\QMO_;R;T64HU_!77@C!"=VJ]S >+M4*6R=]I(73+QAVC6(0=M*M3XQ/_"%PS]@?GC3=#BG?=C$ZAJZI-W2W'SE'4` >+MIW`3W\35W.+LU-QK-EEMW"/"%R]UX9]&_B70LO,/-^OXAUNU_,.][V5RK;NR >+ME;@L4@)_P!*HW[(@3/?2!;O#/OM$LU6\O7.ZS@CGE55?X@3_A%(64(O*[3SP >+MY_#/,`3T;IM%;_%MP`?CVBZ!B_=!9EY['$XY5,/(0.O&VS81>T2;:RN7:^3J >+M,0K8ZGI(3HL+'HBL.31$-%-CI-"0_Q.^7\A0JA\)"B-$$0"?_=8/LI:`"2)G >+MMI9)A^=;1H\@80U%^M,<Y'`MQ!.ZGGSXO!.)1Y0/`5WEFZX:)V:K7UM51Z2% >+MP",*AU5GKK*Q^,'JB/`&Q6J7FGOH;6INU3NIN.G1_#9_O+\C1@@GH1]3X5B; >+MYJAQ7H.UEE=!`#<BCRBB*!USE%'\>;5UR`&"(XU'E!$@727$E(03J8;=^Q8? >+M!;'"C"8TFM)TG;"#SAK8_Q<$(^/S51A^XI5FZRALZ=V+0BW#(2)\BT/$Z?Y_ >+MC"W?1J&7S-?JLJ\`\R5H6F"9!,66K;7IL54A!'C'"O+RM,W6G'W@Z1LS>=./ >+M)%[6&D:"ZJ]A->@Y7VV\\OV\^:O4:NGSTQ]JS')^.U[+*GN^_R5':@S8,X8K >+M8;&6?/WP^2&FVT_5^11C>;S,TUWRM#+#5-XK;ZT__2(>PS]H^'2]")-"N%<5 >+MQ#A!@R<+*W_;2O0;QNI-?<;OCX616(=)48'4,"<$H3?YP37?9]EA.;NGCK.W >+M]]"3_`]RKM57]W3:JH3/?/_Q.F3X#N:6,?T/[]8#<QO$V1D\QT*ZYD(GY5A- >+MPGDI3)>+"/\L<R:R)?VI\?=(DU4X:?,J2`BWHEOM#"Z"<=]`?R,2R%WNN>%] >+M3\.X.IT,Q6/N#1MM/YT%X!39_6`!W]8T`0C1V-U-5/]7_(T\&GL)YC%W:P%^ >+MN\`<T?:<9O+3TQC88AE]NK-+^)^2W"4S+TSI+L&P!\$?%:S,*>@+\^JEK5:% >+M=/.6-P'/>(5_':N_GYB8SI4[.V]ZLW\N3TL$GSI8Q6G!U8*P_#?FF/@.+^GZ >+M\$$<'-M<0"Z3?K?2^K2D6`-`^@_BJCN76>U`O#FO=^4H4*&7;^C##YMSAM=_ >+MGO3:,URUXNXUT)8='VV\5V+U>F'6WNS1S(_L7AL'\M9_0Z.6K2`.(CAHU9"I >+M^_NJT@Z0ED3>1WY@8N[?'N.$W\XG1KIQ]SB'.3;D^3,6?R<=6+;!M/&U_JZ6 >+M9BKO0;+O/X$LYU]65F*:5XQ(WHOS!3^)_<(X=ZH/L`FP=TM3^Q/?W>Q:3FET >+MD^T13D]$8O\!4$L#!!0````(`")R9#%F#U]PV`$``'($```3`!4`8G)O=W-E >+M<B]B<F]W<V5R+GAM;%54"0`#+X"*05)YR$%5>`0`Z`-D`)54S7*;,!"^^RE4 >+MY2I0,SF9`6<FS]&+0%NLL?Y&$@9W_/!=0'9,4Q^BDT#Z?O;;A?I],IJ<(43E >+M;$-?RY_T_;#;U:VR4MD^$B4;VFO7"OV17]$=N2\$V]C08TJ^XGP<Q]*X/TIK >+M4;K0\ZG57RY7QV3T!C&^+9=?]_L]G^;3KYAIT$]%3G`Q(B8(O!<)3@`>M^D( >+M`4H52V?UI43X?SC;YYRS<4R!D/I'49"JJC@9E>PA1?)K?OS^(D6Q$N9@EUR3 >+M<[H5H3!@AZ(=4G*6$JFBU^+24'1=S2>/U@E,":S$R+MC<`;0^]H<WCF+)XG? >+M&L<S^4I;8LTOCS*'A;3.J$.6J+NCTC*`)<IV>I"`0JZ-$,X0KPD,&DMPG7F\ >+M\X._SAI)><KO!+/IF$1W(IT6$>&MFPIEL1TJD8VEI>J\71"4_-8PX0S2P[WB >+MA6\#^Q9O+O8Q0$*$=79._Q:XT-J-<,88D#:%`?ZYC\-0926\@.T1K0;)E!$] >+M,"U:T*P+SC/1=1`CCB/KG#'"2K;EV:Y5W>&7Q]:M=*-E0JO>,JD"\Y@(<T&A >+MK<]X<R`2Y8P()P@D73PT=#-`6[_.PTRXFJ9/'>54GR;Y*?G0;'[O=AXG_C!/ >+M]6T4Y]_)?2P/N[]02P,$"@``````&W)D,0````````````````T`%0!C;VUM >+M=6YI8V%T;W(O550)``,F@(I!"67-055X!`#H`V0`4$L#!`H``````!MR9#$` >+M```````````````4`!4`8V]M;75N:6-A=&]R+V-O;VMI92]55`D``R:`BD$) >+M9<U!57@$`.@#9`!02P,$%`````@`&W)D,8[K\<[;`@``_P,``"8`%0!C;VUM >+M=6YI8V%T;W(O8V]O:VEE+W1A<VMB87(M8V]O:VEE+F=I9E54"0`#)H"*05)Y >+MR$%5>`0`Z`-D`'/W=+.P3!1EX&'XSL`@(BI^_\FKQ\_?7+OSF)V#DX.32]O` >+MU"<X2E-'_]RU>Z<NW3IY\>;'SU\3LXJ6;]JS[>!IW\CDLO:I+=.6UO3.;I^Y >+MHJBQKVW:XDF+-J065"[:L&?UCL,KM^[?M._$YGW'+]Y\</;JG9,7;YR[>GO% >+MNLTW[C^]=O?QU3N/=$RLTLJ:'+T".V:MJ&J?F)A=/&OEUH;>Z0O7[TK++YN^ >+M9-V&O<<W[#FZ_^3%(V>OG+ER*Z.JO:Q]LK&5O;M?\/Z3%VX^>*JHIKERRZ[S >+M5\XL6SG_U:O;;H[B7JXRWFZR"3$6^=F>O5V%7S\<^_[YXO?/EWY\O?'CZ\V? >+MW^[^^O'TS^^//FYR_EY*@3XJX4':H0%:D2%ZL1%&R7&6*?'6F2F.^5D>I07^ >+M984!'YXO_?ABY<>7:SZ]VM!<G_#I]>9/K[=\?K.]LS7]R]O=_=WY7]\?FCJQ >+M[.O[P]\^GOKV\?3W3V=_?+GZX\NUGT"[OM[Z^>W>SV_W?WU_>.;4[M\_7X;Z >+M:\1'FM24A]=61,R>7KMH7NN*)3WK5DWY#732K[?OW[]_]>K5X\>/[]^_OW__ >+M_EV[=M77UQ<6%H:%A?G[^]O;VVMI:<G+R_/S\_/Q\3$P,!R_<)-A%%`/*/YD >+M861@F,"@`^*`\@0#QQT&1<Z6D$?,'0*F&5,67&X_+V>;<68"H['`I09VR2@3 >+MBX:#3-SRB3M*/GYR]9DGS52>4<'X8*+W=`NU$Q'!13XS=34\+1P.:$P\[=HN >+M8*I5L(A=4-'IDLC.B0EN?6X-'#MM5#0$%)Q9<DY8%KOP3I-F%#L2H=C$N-B] >+MCT]4:LD)%Q9EC\D1CI83#K.*LE4L:&!<>(A-(6?"CL;@UG<.K'H:'AX+'[O/ >+MT?2X;S!3^>@'!WXFEIZ&%G;/V:J3_U[I3-KYR$'72\U\Y>?C)R=?6J:8>K#H >+M*9^H=4`;2V/NKL.]]P\TLK,P6`,`4$L#!!0````(`!MR9#'(@R<VD@8``,P& >+M```E`!4`8V]M;75N:6-A=&]R+V-O;VMI92]S=&%T=7,M8V]O:VEE+F=I9E54 >+M"0`#)H"*05)YR$%5>`0`Z`-D`#63>U#35Q;'3QZ\`V)(H+9LED=X:5H>1B,8 >+MF8`1A(9LP!!+H$68U-U2BHBA6`T8[&]!,(-`4Q3*`&*P%%)0)Z*+*?((4C!5 >+MK)&RF&7`"6A95FF:@H3`;Q.U=^X]<^[GGOL]W_O'C4^(VQ69]1EL@14`/!:/ >+MG+9.1#.H46`1=BS)-*]`3FLX7([^B4%Y69:;PZ'ZL4U&G6+,)+^L]*9XBW+$ >+MBB9$][,V0T`S&4V*:VK3<[7H<V1Q08]@\;(RD;A,SN=2^0*^Y',^P8V@&M0J >+M>S6TG4S+LD$W96CL4-&VTB0E$OVT7EXK-BVH."D9^OE%<8$8J5-H?];G'F9; >+MS(OJ7K7)J!5E:Y`J.3U"A'<FX+$63B*5G<A7=#2*"SB69;WH(Z;IN69Q85%6 >+M*>9S:4B)2#VF4_5IF=%,W;1!T:6F1="1!J5EPR(^+=..J=E^""?.V[2@;&RP >+M&*ROZY!;EG7:>Q9YJXH:2!/EB;43V@PA7=FCSCV!R"IS)65RCE`D.9%!\B2I >+M^C3T**;%;%!VJ6COT1KK)*;G*L/\HJA`HIW06\PF=9]:=%@KJ6HD.!/87+ZX >+M@&\R:A:?+_)3:)I[.OVT0=:@1'5S:%$1_*,8OL'#!$`1`-H"*!503T`!MK?` >+M;BH\\+3RG#\`V#ZO<QX`#MX,^PB'Y5DPN$#1<=@D,%)<7><<"%89(`#FSQII >+M(_#[`$-\M?D1(!C(<[9>6@`U`/%-52Y`.H#M@"F-6^4#D6RC2X">P:"K@!99 >+M$WR<=PB8YL!J&56WHWU+*)%HM<D0074HF.9M?`8T;\'M.2#:/!1W`;Z4#.^_ >+MTE<`W'[=3=IRC$\M('MR;;A_$G/[-A!M7'0!0MUA_I4^T&NA;1"X-I['O)G1 >+MA@+7VNH4'CB`&7SC6MT.?4NO[_I:%P8J;0$PTG986X*_V?@S./(#N!.M[\(5 >+M\03=4:[8!P[Q5GG!.,?U[J`#VU9#^(D#G8/02P0]^*[B7[FEV8+M3S@XHA#$ >+MR8^XXA-3BMWD1S_#RXHIP_M'2!ROMFHJ74(3^<=KGL227/8&2FZ&7THXYW>@ >+M(V.4V)983@EHO5!Q>I2%H2<[3E9\]93;L*MPP?+)P]'[+3&E\XWU\D_NM29= >+M6B8)Z8'#51XL9U7]#E&\,M"I@-SRX-.AFJ`;SM23.W,'=N8];+(+6;[\?F>` >+M5^R>+ZYT[R\GKF#[TA_1XL\)@_(?"8U+8V?.!O4@3ML+'M=PL2-?I_-8`S^< >+MNU^WS]&<Z[PS3-5_\\"@$]F..-Z^]"2`(`RJ&9B87%<P\E07NE,XS)[?AAB, >+MO`M[OEG+<O+W[&,?JIG[I].[VPCLBFO9P^6AOO7N*$?24_:.@X->V_X;F_GT >+MKMVO6WMN7;/WV,:8]CF?+O2A;$X[@^F7XFHQY8[T_/-W[([1!WC'MOQOWA[> >+MULVP3@[44+UC-=]_[!US9'_6/C>!_MO&S,+"0G=*0C`&@\4US6!=CFI*,5[I >+M+(S=7\*EWYYG57P<:/#(T['<<5Z]*[\4I'XA.)^\+2`HVRV%7Y^16)<$0T"3 >+M\D8`UUL=:T]N.>3OQ(*8O02W:`/EPUO#HQ2O6Y')0]+4XKG-'DV8A"FAV6YK >+M<,D!0<BPJP"J]:T,==HX*4RVN70+F04L[_>TTI'-_OD^2!7=,C[_=XK0D07M >+M]NY!X'_T>L;Q[<-H?$>RX`/?UHOE\U&M%QF&RDY26A5]B)P97#KL%BA]@/?: >+M,C[.PD7G8IIB3^XI;<)-'N[$=#H.[&C(E-3^DB60U9W-N"CP.YAWJ231?B\Q >+M5%T]`LR784A5ZDM>G$-T(%_OL6\7J[\?=]!1>GCI7Q4/)?C(T?SFP83([):# >+ME89G!;GXBW=('I)Q%GFUEE=&B.*L!<DG*-4Y'8\W=KUUW65[S>1-(X81TWW$ >+MP+I:%G(MH#YSS\N9+W^,('T_U![2.H-<QWIPI`/^`U]?R;XZ1FN6M$7:2TMD >+M7?BI0[[#2T.;TGEAB!N/--XM#+YT(Z*CJ)<V)8A*=CUZ,.>[20'[K/`[$>^H >+M))Q^QRO)/>_X[#OD$0I.QHANJ5%,*3_0AM\U4S5AUT7AQ?6?=J5,-'A=#ML_ >+MR[TWVWQB;7WV2XK]#?-_?V]SNZ4CI27M^/5J59'Q/TTGDS)?-*UXF5-[O/ZZ >+MK9Q##2TT:ADO++^/AVY:-^EVAQ;_<3^(\^^T8G/;[,IT^:G'+V>^"BU9?=9\ >+M*GJZ_\:+C;6ED>9'?)-+*KJ^_/0<NF%>N8^B&RXSZU@L[/X_4$L#!`H````` >+M`!MR9#'C3>)M*0```"D````=`!4`8V]M;75N:6-A=&]R+V-O;6UU;FEC871O >+M<BYC<W-55`D``R:`BD%2><A!57@$`.@#9`!`:6UP;W)T('5R;"@B8VAR;VUE >+M.B\O9VQO8F%L+W-K:6XO(BD[#0H-"E!+`P04````"``;<F0Q2C=#KFP!``!= >+M`P``&0`5`&-O;6UU;FEC871O<B]C;VYT96YT<RYR9&955`D``R:`BD%2><A! >+M57@$`.@#9`"E4UUKPC`4?1?\#W?QN8TZ]F#1^B*#P9XF^!YCM)GYZ))TU?WZ >+MI4VK$1QCK!!(FW///>?<=+X\20&?S%BNU0)-TC%:YL/!<#!_6SUG?H$_5[;9 >+M+5#A7)EA7-=U6C^FVASP9#:;X?$43Z>)V>T3>U:.G!)E1V@X@/X)#+0P6K(; >+M$JF_N!"D9?+E.$!&J!4`,']($GCEU@$1`ES!P!ZYLK!E7!W`5F4I.-O!]NS/ >+MN&T`DD&2Y&UM(W_-/H!L=>46J#(JZ]IE#4MFM'8H#RI;L.!@F-65H>P.G`IB >+M+:>X"0AP:(&['K'<#@<O:J^-),ZG>B-IQ2PUO&R__R0M[M4K#-%D):%'<F`V >+M[^/]U6=$=JE&^74Z?_.>42UEI3@E3AN$KS*B+,+[/<$!%440)[<)=S!.+@58 >+M.^*8'RUQ4#.HM3F"5N(,-7<%2/*N37]Y80)ZW]Z$B[FN>?J?"=PZ#M2=MP:Z >+MN?XY3VT>P:-??O\-4$L#!`H``````!QR9#$````````````````5`!4`8V]M >+M;75N:6-A=&]R+W!R;V9I;&4O550)``,G@(I!"67-055X!`#H`V0`4$L#!!0` >+M```(`!MR9#%VLY#-C`,``#L'```@`!4`8V]M;75N:6-A=&]R+W!R;V9I;&4O >+M<')O9FEL92YC<W-55`D``R:`BD%2><A!57@$`.@#9`"E5-]OVS80?B_0_^%@ >+MOZ1!)-7;@#9V%\1UD2U8XP1)MB(8]D!19YD+Q1-(*K([['_?D9(C>UOV,@.R >+M3>J[[WY]=]DQ),<)7%&!4UC,P(L\:57AUU/X9@;*%&A\PI<NJ2+$*#T#F>3" >+M*9G0:N70,S)PO'X%Q^&!^S6")./9T@&MP*^5@Y72",(BN";_':4'3_P"88G> >+M25$CW#2Y5C(2?%82C4/X!:U39&"23N`H@$?]F]&;&6RI@4ILP9"'AL'/7B(% >+M;B36GN/G2*I:*V$D0JO\.CKM:5)XZ$DH]X*Q@M$UGU:18P\)PL/:^WJ:96W; >+MIA5]55J+E&R9+6\^9\^IW]'*MR'+0CEO5=YX+*#A(MH#-HYT'\`I"@.C^5WD >+MN+P;02BO.X$OE_<_7O]\#U_FM[?SY?T#7%_`?/D`/UTN/YT`<CI,C)O:HN-* >+MVVBN0KI8I'"'>.!T15T0KD:I5DJ"%J9L1(E0TA-:HTP9":PJU]PX80K0JE)> >+M>.Z!^V<6Z4'#K]E,&:%AP3()"5YU->)S535&2>'9O^30C.<J%W@"%C4*AT7D >+MN!)6KN';R0E,3D_?'W)?&N454W_")]14<QA15?_B=*>F:#IXC@DLR-9DXR&% >+M&[+=K;0H0@_R[2!%;F!/4&]C->!H\2;&E?#7Z0#\+P]SK2/);5?.6W1HG[@O >+MSYDM>$2B`LBZ:;P!^(@&?B`J2L[Q0X[FW/2N4I;Q60]:K&U,53L6S@<93N;< >+M<9]0DM98#N#PL#A?OSIG57#&T%A]-&(+JI"E7&K*A<[<HS+]_U0ZQ\,538RH >+MT-6"YR9:O2#_1]Q6PGFT6<D!/")R>[*@2TR52\GH;;II=,_9\CZA-BVXF53" >+M'QP>U*(H6'E3>,N(/P-H7%L*<^S@C`7HO/)8==AP2IS?:DQ4Q<*=_BT?N2>U >+M+JN>:O>K>"TE6E@N4:E6,:@77?YJJ;U2);<3OQ\9&OWV?V.H.K)#S]DQ]._! >+M\3C(H!WHZQ-:M_:5'BL6"G7N^]4\>8?5CB*GS;@2AF-A+?F@PS/H_G4FE3*[ >+MC?Y^L&+'O()JS<N/Y2ZBL\#4+^YX%\USLCSXB:>:]WR]@=(2KPL8+^)GM@?) >+MB9U6+Z*>._VNWNQ%P<0]0=B#0<:-.PRI55^%+3[VR>VKIHMJ$OF&RUT<D\$/ >+MTZ1#?;NRL`RX,I'ANP%9H)-6U7&&T5K>61'-DT5V"N.+B[?\Z<!_`5!+`P04 >+M````"``;<F0QF6!'.X(```"'````(``5`&-O;6UU;FEC871O<B]P<F]F:6QE >+M+VUI9W)A=&4N9VEF550)``,F@(I!4GG(055X!`#H`V0`<_=TL[!,%&`08%CT >+MG^$_PX?__\_,_#\S[4P:$!C/-&8``\6?+(P@6@=$@-0R,/MX[&+YU]]B*=T2 >+MU)NX?O+!;96!&GU^C:R'+,4.9VU1MY'8P7CN79J/%=?Y5NX7$FRS7Z3OT9AN >+MS[Q$8444JX^FRG'=+-E8O0DLRWI.)CHS,5@#`%!+`P04````"``<<F0Q*>V; >+M\DH```!,````*@`5`&-O;6UU;FEC871O<B]P<F]F:6QE+W!R;V9I;&5I8V]N >+M+6QA<F=E+F=I9E54"0`#)X"*05)YR$%5>`0`Z`-D`'/W=+.P3!1@$&!H8`"! >+M____*_YD815A8&30`?%!,@Q,RCW]*]DVW+KE?/&L<GZ:V+<-JH+?`V_N"+FZ >+M>%'<Z6VJ:L<_F(HR6`,`4$L#!!0````(`!QR9#$,TS?7K@```.0````G`!4` >+M8V]M;75N:6-A=&]R+W!R;V9I;&4O<')O9FEL94UA;F%G97(N8W-S550)``,G >+M@(I!4GG(055X!`#H`V0`/8W!JL(P$$7WA?Y#4`1=-%4$%^W&7YFV8Q(ZR91D >+M0M3'^_=7G^CNPCV<<PW@,2TPHLJ1]ALKLG1M6TK1GI^."#1'T\[X\)`$8VM` >+M<$9<UBD6(VJ7-`=ZZ'NFS:&OJ[K:3@Z(C0LW5C]UI51QD]A.G2_H5^#WGQ$8 >+M"!O+.;E@WM@`XVPBYS`U(Q/'3A7K!/O79]$9*YTZ'8^[KV/((AQ2,_#];?`0 >+MUVQ#>'NAG]H?4$L#!!0````(`")R9#%5B:-TI0$``%D&```,`!4`8V]N=&5N >+M=',N<F1F550)``,O@(I!4GG(055X!`#H`V0`M51-;\(@&#[7Q/]`\&Q1EQUL >+M=%Z,R;+-@\MVQXJ52($!;76_?K1B6S/G9C,//0#/Q\O[/G0TV<4,I$1I*O@8 >+M]OT>G#RT6Z/%=!;8K]T"P`*XSA=CN#%&!@AE6>9G=[Y0$>H/AT/4&Z#!H*M6 >+MZZ[><X-W7:X[L**&&R5B<L*.Q2=E#!<2EH<.D`ZTUL[\E7P`O!2)&<-$\<`1 >+M`KVE/%!"F!SJ%4A&@2):)"HD9["4KQ)M%,4,HOQBR(E73E.B0T6EL0WXT;&F >+MDM_K4&ZPHEHRO)_C_':/9R$X,1NAQG`N4L+.G+PMGLO&\`+CAR)&)\`P)%H_ >+MD;WU.'&OZJZ[@[50X.50/)A11=9B5Z?QHMKS%Z(QCNRA5"2E)/,EC_(V`S!R >+MYQ*'6XO0Q:;=_FU0E4M)A8[KV'\=7F"[$B><AM@(54RRB4C$Q-(%P?.N2X_M >+M6TJCTOUJ^E*)3).&9+N/I=3-R!O"9-FQ>O[SU??!'A"U1U&\%-?IZ][*Z=". >+M(<M![]4/Y][5UD3?S?,&RM6T;R!^S,)%::^)\C$H_Z]<I.BB[#$Z]K.K+U!+ >+M`P0*``````!\<Y4Q````````````````!P`5`&=L;V)A;"]55`D``SQYR$$* >+M9<U!57@$`.@#9`!02P,$%`````@`\&!Q,1>251HP!@``4Q<```\`%0!G;&]B >+M86PO;65N=2YC<W-55`D``U.%FT%2><A!57@$`.@#9`"U6&UOVS80_AS_BEN& >+M`4D0R4W:K:V+#@U2;,W6I$62KBN*(:"DL\V%(@62BN,5_>\[DI(M1[(3-ZD` >+MQQ9Y+\^]\IC^3@]VX'R,D"II45H#:@AVS`T,N4!@&L&4R;^86K"*-A!.T)J4 >+M%0CORT3PU/&_Y2E*@_`7:L.5A+UX#[8<[6:UL[G]`J:JA)Q-02H+)1'/E#@) >+M>)UB88%+PI$7@C.9(DRX'7N5E908/E4R5&(9T3*B+NAMZ$0T"(%9&%M;#/K] >+MR602Y^H_+@2+E1[U3]Z_[1.U8SA30SMQ!F;<6,V3TF(&I<Q0+\@BE$T",H]) >+MV#PX<R*.SC8A88:;7?AX=/[FW8=S^'AP>GIP<OX)WOT&!R>?X,^CD]>[@&0* >+MR<7K0J,A'VO'S9VEF,5PAKB@<J@"!%-@RH<\!<'DJ&0CA)&Z0BVY'#E^S4=C >+M"AB3&0B><\LL.=^T38@K@UV8WQ$3ETS`H<J\;<?!.?2>YZ7D*;.D/"5<TI)W >+M,]P%C0*9P<R).&8Z'</CO5W8>_[\65/PD>26D]S7>(5"%83`)U*'QCJ!'.=< >+MJX=^J'2AM'^)X;W28375R)SKD^D\^2AN@;^8>C?`UN&VQQ31G^=SNE4*#H1P >+M,DZ#&T_1H+ZB<%1&'5)!^*`KO66V!VX)X`^%\`8I,4GAV'^_DI6JF#)W._#V >+M>[W^#KQT#^0HRSBEF+_\MJ<'Q`EG=BK0N+KQ;OC[PULO.*+8>-=0B')7O;$G >+M?Y#'F_%*LAQ-P:@:2RVV-I=4U25.<V8LZOZ(X%PB4OS[+N,QYB964DSCZU)0 >+M%_".&;C'X^^[/]QB7JTYE6YI%V8;7WH;$:F*6%$@TZXO#.:;/U`)498P:5^0 >+MX9XN4=<1$WPD!T#)3Y#<3LZNHPG/['@`3_8Q=TNI$DH/X)A$G>,U\6_T=WH; >+M"4LO1UI1"44-`MHD9$!U*6W0[B0(Z@J1<8&)>$[%.:#6)G$&Q*]1@$:4:P-@ >+ME$<O>E^]=0G3\*L7`VUC^ZZ<J$K(7BI"X[IN4G*1&9CT%2QWQ=9'+JG/V#3> >+M=F[<2)2F-C"`Q\4U&"5X5EL2-FIW[-/V'GT>A^\E$#]?.+WN%TLMO\*7FU:7 >+MN/G/'/HR"F=2I;%RZ!LJ-^%*SNGJS?@S'+)2V`9?\'<T04<\@$2);,:R%%#O >+M#H!FP9]!J3*@'?TVV,]T&+!$8-:A\N964]?OFDV#FDI0P\6.K&!91GU]`(^J >+M:+COGT-$;M"O\G5W$L_,6*B8C2XW+%+XM&^72EL#95^F)EU@Z2R0]_)Z=\<P >+M;EAP+ZX,H5!%69A&%XGK+>\GOUT!<LPA9IXS++8)E@M8R;P82U]9CZH2\\%< >+MZ$5UOZC[BC&N95`'J^V.W4.&4AMS)V@UH_GEN961)3]6@"-.-#R-!`YO+CDJ >+MCRYGF@[DD&C[5:*YSV(SK4+!)75Q'@(QU]:0XU61I<]:$A:JMRV'I2F*&QC] >+MVE*03ULJ*D='.BC9>Q)<O!1[PSM>2]T$]ZLZ"U1AH+B)HO[\$G14K,_"6_LL >+M\,=E.M8J1SHP1T(E3/3-)9<^@_O'W@5:JTE<R)$[&5<>&TUD*SO;/8!$8S=< >+MK@^GL^O=!T<M<`THU&_F45V2X*LRP_'?OT!NZ3KTLZ-(;^E$W4S+%:VMI(O! >+MNX'"4`@VK=M4LQ.G8TPOJ4_-42[.;_XTM-."<K,F_=:\\-"\D#7S8BF.S_[G >+M??-UCJN&LU+G@]9LAT\6B_?KW:W_;LCN#.AA^L>*/`D7"$6W&&XIG9\^^FFA >+ME-=QUD-CO3/$>>UIEG%UA\+S=/="Z"6L5W7=&!ZPXKS$I5E5ZWOXG%[TQ2W) >+MO<3L[P;K;F@Z<G>-M'-"#19T[W3_(%K,NOEZ\_A\,A^62,KL&FA5$0;C<"L] >+M'VO$UV=CYJ\/`!55HJQ5>9MP?C6`ZG9R"T,M><G5_J:]*P[*F96KCM]N5_@I >+MHF'=#1_\^,@_'>:WCUY7:?Y_I&BQ>=]IKD=C@J;T-&H-$U_:%Y".J;WS+A)T >+M6?*I&WW*7$+!*;N;N1"[79K@15#L?\TN10O7A6A__;DY:#4H,+7QB`_7&`'( >+M,3F3E/EIGETD^87$2:+4)4&Z#'70C:,3AAN33"A!NGU<U')<^?GJ^Q]02P,$ >+M"@``````CVAI,0````````````````P`%0!G;&]B86PO;65N=2]55`D``ZX& >+MD4$)9<U!57@$`.@#9`!02P,$%`````@`'')D,:=LYC`\````8P```!H`%0!G >+M;&]B86PO;65N=2]M96YU+7)A9&EO+F=I9E54"0`#)X"*05)YR$%5>`0`Z`-D >+M`'/W=+.P3.1DX&38S,#P__]_!A!Y!L(@"!1_LC`R,#`SZ(`X(#,86`0*3GBN >+MYMWQR+=\7MR"VK!,5P9K`%!+`P0*```````<<F0Q9/G1'!D"```9`@``&@`5 >+M`&=L;V)A;"]M96YU+VUE;G4M<F%D:6\N<&YG550)``,G@(I!4GG(055X!`#H >+M`V0`B5!.1PT*&@H````-24A$4@````T````-"`8```!RZ^1\````!F)+1T0` >+M_P#_`/^@O:>3````"7!(67,```L3```+$P$`FIP8````!W1)344'U`@,$0<S >+MTJ@^=@```:9)1$%4>-J=DK^KVF`8A1]_H#'@(JB7PC<D0Q$W04PG(4-!YPZ* >+M='(3X?X'=RJ9G3J(_T`&P4UP$21CW26%HB+WJG&T?G%0OBXJ[=)"SWP>SLLY >+M;T1*R5VZKF>!]\`3H`%G8`=\EU(>[K[X;T!9"/&AU6I]K-?KEFF:^?U^OYM, >+M)K-^OS_3=?V;E'(.P"VI7*U6ORR72W4X'-3Y?%;7ZU5=+A=UEVW;+T#Y?EE6 >+M"/&\V6S4=KM5P^%0-1H-5:E45*/14*/1Z`$*(3I`-@:4NMWN9\NR"I[G,1@, >+M*!:+6)9%(I'`=5TRF0R%0H$P#'].I],?$>"3YWE?2Z52OMUN8YHFFJ8QG\\) >+M@@#?]ZG5:KBN2QB&;[JN/T<!S33-?#P>9[5:D<OE'L#I=.)X/+)<+@%(I5+O >+M`"T*G(,@V"6320S#(`B"![!>KTFGTQB&`4`8AF_`.0KLQN/Q#*#9;.)Y'K[O >+MLU@LB,5B""%H-IL`]'H][[8;62%$Y][0:#3Z9WN/G6S;?E%_T1\[22D?H!"B >+MXSB.*Z5\54HI*>6KXSCN+:%\]T;^Y_=^`8;T(GNU/FAN`````$E%3D2N0F"" >+M4$L#!!0````(`!QR9#$F.]]RD0```)H````C`!4`9VQO8F%L+VUE;G4O365N >+M=2UA<G)O=RUD:7-A8FQE9"YP;F=55`D``R>`BD%2><A!57@$`.@#9`#K#/!S >+MY^62XF)@8.#U]'`)`M(L0,S.P08D]5/?7`!Q2CQ]7=DO<4F(6'+M=)2/!0IQ >+M%GA$%C,P<`N!,..ENW5_0!K3'7T=&1@V]G/_260%\C4]71Q#*FXE1VQ(.%C/ >+MIG*`16D"Z\P$GAD*RF&Z!A,F3#APHN5,HH.Y``M#8J;`<K$EAV\#-3%XNOJY >+MK'-*:`(`4$L#!!0````(`!QR9#%\L"(J/````&,````@`!4`9VQO8F%L+VUE >+M;G4O;65N=2UR861I;RUH;W9E<BYG:6955`D``R>`BD%2><A!57@$`.@#9`!S >+M]W2SL$SD9.!DV,S`\/__?P80>0;"(`@4?[(P,C`P,^B`."`S&%@$"DYXKF;= >+M\<BW?)[<@MJP3%<&:P!02P,$"@``````'')D,:<UYJV%`0``A0$``"``%0!G >+M;&]B86PO;65N=2]M96YU+7)A9&EO+6AO=F5R+G!N9U54"0`#)X"*05)YR$%5 >+M>`0`Z`-D`(E03D<-"AH*````#4E(1%(````-````#0@&````<NOD?`````9B >+M2T=$`/\`_P#_H+VGDP````EP2%ES```+$P``"Q,!`)J<&`````=T24U%!]0( >+M#!$*%BP"E'P```$2241!5'C:G=*_BI-1$`7PWPTI`LDNNR+HEOL'-JRDM=7" >+M2K#=+8*UK^`+Y15\@&W2V`D24EC$8K$35S"@Y%@X'WP$L7#@<N$P9^:<F6EZ >+MD62"*4XPPA9W6+76OG=YK4>8888=UOB,![C`!!];:Q_Z'69)7B=YG&3L+Y'D >+MI@K_D91DGN1ADJ,DKY(LDBSK?[E'G`S+P\^2]1QO\!Y+/,+;)%IK[W"/Z:!, >+MK_$5UT7X@1?U9IBC(YX,:DJ;UMH.I_B"I]5EC$.<]>R-!C76XP(^57)'.,6W >+MPKO8#FH/EP4L\*Q\/L$O;`I70[D;8H7S3G,2Y>&L.BS*"QS@MK^G&_^(_I[V >+M+^(*][W*G:2#_D6T_[F]WZY4C?NM?MH(`````$E%3D2N0F""4$L#!!0````( >+M`!QR9#&G;.8P/````&,````C`!4`9VQO8F%L+VUE;G4O;65N=2UR861I;RUD >+M:7-A8FQE9"YG:6955`D``R>`BD%2><A!57@$`.@#9`!S]W2SL$SD9.!DV,S` >+M\/__?P80>0;"(`@4?[(P,C`P,^B`."`S&%@$"DYXKN;=\<BW?%[<@MJP3%<& >+M:P!02P,$"@``````'')D,:6Q,GZ1`0``D0$``",`%0!G;&]B86PO;65N=2]M >+M96YU+7)A9&EO+61I<V%B;&5D+G!N9U54"0`#)X"*05)YR$%5>`0`Z`-D`(E0 >+M3D<-"AH*````#4E(1%(````-````#0@&````<NOD?`````9B2T=$`/\`_P#_ >+MH+VGDP````EP2%ES```+$P``"Q,!`)J<&`````=T24U%!]0(#!$'*%C-]YH` >+M``$>241!5'C:G9*Q:L)@%(4_?P)J]F`HW"6#3Q!H)TL*'9S=Q`?0I6_@5#([ >+M^P8^@>`H&=LGZ.(@UFA6N690_B[YI5U4^LWG<.Z]Y]94%8?O^P'0!D*@`91` >+M#GRI:N%TWB]#+")/_7[_M=OM/D91U-KM=OEBL5A.I].E[_L?JOH)0)44=SJ= >+M]]5J98NBL&59VO/Y;$^GDW4D23(&8C=9(")OZ_7:;K=;>PT1&0&!`=J#P>#% >+M&$,8AEQC.!P^5SO3R[(L/QP.]A:JN@%Z!FA$4=3R/(];-)O-!Z!A@'*_W^?U >+M>OVFZ7@\?@.E`?+Y?+[D#B:325;U1B`B(WL'[GJ7GI(D&5\S_.E)52]&$1FE >+M:3I3U8V[5IJFLRHA=MK:?W[O!S`I%;AQ5_HH`````$E%3D2N0F""4$L#!!0` >+M```(`!QR9#'667E^C````)8````:`!4`9VQO8F%L+VUE;G4O365N=2UA<G)O >+M=RYP;F=55`D``R>`BD%2><A!57@$`.@#9`#K#/!SY^62XF)@8.#U]'`)`M(L >+M0,S.P08D]5/?7`!Q2CQ]7=DO<4F(&,K+N!;N`PIQ%GA$%C,P<`N!,..ENW5_ >+M0!K3'7T=&1@V]G/_260%\E4]71Q#*FXE)R0D_#C?P#)CP9?Z$L8="LIZN@8' >+M.G0.G&C(4^!@8,C8P\HNL"YW/U`#@Z>KG\LZIX0F`%!+`P04````"``<<F0Q >+M'>4D^(T```"7````(``5`&=L;V)A;"]M96YU+TUE;G4M87)R;W<M:&]V97(N >+M<&YG550)``,G@(I!4GG(055X!`#H`V0`ZPSP<^?EDN)B8&#@]?1P"0+2+$#, >+MSL$&)/53WUP`<4H\?5W9+W%)B%AQ<J?*J@"%.`L\(HL9&+B%0)CQTMVZ/R"- >+MZ8Z^C@P,&_NY_R2R`OEJGBZ.(16WDG_PL_!X-'"Z*'`;'90P<'1;$Y70(,@Q >+M8X(ESPNV)@:&'3'"_P3.,S0"=3!XNOJYK'-*:`(`4$L#!!0````(`!QR9#&/ >+M<>84-`$``#D!```I`!4`9VQO8F%L+VUE;G4O;65N=2UR861I;RUD:7-A8FQE >+M9"UH;W9E<BYP;F=55`D``R>`BD%2><A!57@$`.@#9`#K#/!SY^62XF)@8.#U >+M]'`)`M$@S,$&)(M>/ZD!4FQ)WNXN#/]!<,'>Y9.!(IP%'I'%#`S<PB#,R#!K >+MC@10D+W$T]>5_0H'CR"7SBL^WW-`H6.>+HXA%;?F3C+D.A0@X'+_GY<!HRCW >+M96XV1?&/3&*/3/=V*$P*XHY6%&-43'[H9G<PH>#!83'C^O3R:QT*FHQ%"LQN >+M#KQW&C;/M(V:Y]K$I-'`IM&H;<`\S8%ISIDW$N4:*F]5=55Z?S)Y1O__D>MY >+MR>]2S"47H;O7!=4.IE?L6EOM/WW;F@:;'Q=2YRNTS91MT/DQ32_MF@'/X@?9 >+M<XUD2C_(A#G?F&1V0)<A7:'T?.WF+:FO_OC[W9:/M;,LU4_B#=FW]$:05'S+ >+MW^)J_>R$LNL1]J=_`GW$X.GJY[+.*:$)`%!+`P04````"``<<F0Q.R)*-SP` >+M``!F````(P`5`&=L;V)A;"]M96YU+VUE;G4M8VAE8VLM9&ES86)L960N9VEF >+M550)``,G@(I!4GG(055X!`#H`V0`<_=TL[!,Y&3@9-C,``)[]^[]3S10_,G" >+MR,#`R*`#T@DR@X%%V."$9S;#MT?6C=/G;\],"HU*=G-EL`8`4$L#!!0````( >+M`!QR9#&OLCD.G0```*P````C`!4`9VQO8F%L+VUE;G4O;65N=2UC:&5C:RUD >+M:7-A8FQE9"YP;F=55`D``R>`BD%2><A!57@$`.@#9`#K#/!SY^62XF)@8.#U >+M]'`)`M(\(,S!!B3#2F.>`RFV)&]W%X;_(+A@[_+)0!'.`H_(8@8&;F$09F28 >+M-4<"*,A>XNGKRGZ%@T=`T2HS(_\@4,C2T\4QI.)6<DI"P@8@#DA2$-K@(/I> >+M+<A6FEOHN:GBU?]`</R(@Y+$50=AW@T=R;^!?/LD$P8&IFM<SE]W+3@$-(3! >+MT]7/99U30A,`4$L#!!0````(`!QR9#$[(DHW/````&8````:`!4`9VQO8F%L >+M+VUE;G4O;65N=2UC:&5C:RYG:6955`D``R>`BD%2><A!57@$`.@#9`!S]W2S >+ML$SD9.!DV,P``GOW[OU/-%#\R<+(P,#(H`/2"3*#@478X(1G-L.W1]:-T^=O >+MSTP*C4IV<V6P!@!02P,$%`````@`'')D,8:M]`L=`0``(`$``!H`%0!G;&]B >+M86PO;65N=2]M96YU+6-H96-K+G!N9U54"0`#)X"*05)YR$%5>`0`Z`-D`.L, >+M\'/GY9+B8F!@X/7T<`D"TCP@S,$&),-*8YX#*;8D;W<7AO\@N&#O\LE`$<X" >+MC\AB!@9N81!F9)@U1P(HR%[BZ>O*?H6#1T#!G.^0DBU0:*VGBV-(Q:W>B_9> >+MS($"QS^>/[7)_()2JEY"KF[<@6O,$KM+Q#:*;O>>G+W$0]G#3SF3:9;VD_3/ >+M3/VI!V4K#(QKGIO7QS5;G_'=LNW`[\Z:ZV$'S]M_T#FY<.Z*/UW5.V8QU(M4 >+ME'K:/&0[>^*UH,T"STF)!Z7TC^[7+:@7])A4U6ZNLYK9YK'T[H<]I>V\==U% >+M'T+[9Z@<7GI_XX&51^8GRX??%HR.>;SQQV+6V$F?3WCR'SXB[_1-QYA_3O9B >+MH,,9/%W]7-8Y)30!`%!+`P04````"``<<F0QNYF-0RT````Q````&@`5`&=L >+M;V)A;"]M96YU+VUE;G4M87)R;W<N9VEF550)``,G@(I!4GG(055X!`#H`V0` >+M<_=TL[!,9&%@9VA@`('___\K_F1A9&!@9-`!\4$R#$P<+GQBF6]6AV@P6`,` >+M4$L#!!0````(`!QR9#&XI.8--@```%T````C`!4`9VQO8F%L+VUE;G4O;65N >+M=2UA<G)O=RUD:7-A8FQE9"YG:6955`D``R>`BD%2><A!57@$`.@#9`!S]W2S >+ML$QD86!GV,P``@L6+-B[=^]_XH#B3Q9&!@8F!AV03I`9#"Q<!AV22U8(O<Y> >+MV\%@#0!02P,$%`````@`'')D,>RBRR0#`0``"`$``"D`%0!G;&]B86PO;65N >+M=2]M96YU+6-H96-K+61I<V%B;&5D+6AO=F5R+G!N9U54"0`#)X"*05)YR$%5 >+M>`0`Z`-D`.L,\'/GY9+B8F!@X/7T<`D"TCP@S,$&),-*8YX#*;8D;W<7AO\@ >+MN&#O\LE`$<X"C\AB!@9N81!F9)@U1P(HR%[BZ>O*?H6#1\!`Y<"^PDU`H:F> >+M+HXA%;=Z)Y[F/60@X#(_O-'I$NM6!16SUDJE4P^<'`.8-L@T+6[Q?V3Y-O'> >+MN35S'\E9"^E.S?+8DEBX[DO^+"//77J6=V6-;T>=C2I7GWAO:M@566N&)H8# >+M86<S#;Q_^15\+^*_FV@@O"!N<OBOCGE-##;/5R8OO?-\8[JE`<<GS?]L75Q? >+M_(T=A":)+13IO]%^].B9/-/Z3TQ]/"8!+U,+-8$.9/!T]7-9YY30!`!02P,$ >+M%`````@`'')D,3+QS3TT````.0```"``%0!G;&]B86PO;65N=2]M96YU+6-H >+M96-K+6AO=F5R+F=I9E54"0`#)X"*05)YR$%5>`0`Z`-D`'/W=+.P3.1DX&1H >+M8&#X#P:*/UD8&1@8&708@``DP\`DT-,ON>!T=8-)L%UZ<-CVA4P,U@!02P,$ >+M"@``````'')D,77C:_19`0``60$``"``%0!G;&]B86PO;65N=2]M96YU+6-H >+M96-K+6AO=F5R+G!N9U54"0`#)X"*05)YR$%5>`0`Z`-D`(E03D<-"AH*```` >+M#4E(1%(````,````#`@&````5G5<YP````9B2T=$`/\`_P#_H+VGDP````EP >+M2%ES```+$P``"Q,!`)J<&`````=T24U%!]0(#!`?`9FFG9@```#F241!5'C: >+MC9&A3D-1$$3/WCSZ!S7(_@`)C@\`C:_I?0D"'`X24(0\A\+>NP1+%0*!02+X >+M`2R.Y/4/H'<0M.0%2/M&K9B9G=TQ?6H'8T1/5!@C!3WVY&]4R\G=VU7,&.-F >+M"&$6^MC&&$\-\^](:U!/Z@;8%CI;*Z@G=8-Q(K3K[B_``,TU+BK#E!-%Y:JH >+M'*:<T(>V)$E%3<J)E!,8@ZKC=@X<+S*WP`'P1N&^N_7GZ'R3+X2N@=:P.V!/ >+MZ#7?YN=_!0M<"AT!RQ<__"VN`W=_!Z8QQJ%A^\#TM\`TUUA!3R&$69].O@#! >+MHUSV^>ROH0````!)14Y$KD)@@E!+`P04````"``<<F0QU+FJA2T```!=```` >+M(``5`&=L;V)A;"]M96YU+VUE;G4M87)R;W<M:&]V97(N9VEF550)``,G@(I! >+M4GG(055X!`#H`V0`<_=TL[!,9&%@9]C,``35_TD!BC]9&$&Z=$`$R`P&%BZ# >+M!DF5%4*OLW4[&*P!4$L#!`H``````!QR9#$````````````````,`!4`9VQO >+M8F%L+W1R964O550)``,H@(I!"67-055X!`#H`V0`4$L#!!0````(`!QR9#$W >+M7AR+J0```+4````;`!4`9VQO8F%L+W1R964O='=I<W1Y+6]P96XN<&YG550) >+M``,G@(I!4GG(055X!`#H`V0`ZPSP<^?EDN)B8&#@]?1P"0+2W"#,P08D5ZXI >+M5P-2;$G>[BX,8/#3>7<]D.(L\(@L!JH2!F%&AEES)(""["6>OJ[L5S@X1<14 >+MC+>OJ@`*.7FZ.(94W#I[SI"KP4&`Y>"[W__GW_:X^%A$^"#G=*FTA^*"+TS7 >+M!:S^W>?UE&%%B+SB@1O]JP])QGV(F?'PX^>D79)ULWGGFJIP*NP]L1=DNZ>K >+MG\LZIX0F`%!+`P04````"``<<F0QP_\"&$<```!*````'``5`&=L;V)A;"]T >+M<F5E+V-O;'5M;G!I8VME<BYG:6955`D``R>`BD%2><A!57@$`.@#9`!S]W2S >+ML$SD8^!AF,C$P,!@#,3___\'DHH_61@9&)@8=(!L!I`\`Y/TE/Z5V0__!UEL >+M]N10O;N"ZWVDS_74D"^6RMNU6!FL`5!+`P04````"``<<F0QONBV#+````"Z >+M````&P`5`&=L;V)A;"]T<F5E+W1W:7-T>2UC;'-D+G!N9U54"0`#)X"*05)Y >+MR$%5>`0`Z`-D`.L,\'/GY9+B8F!@X/7T<`D"TMP@S,$&)%>N*5<#4FQ)WNXN >+M#/]!<,'>Y9.!(IP%'I'%0%7"(,S(,&N.!%"0O<33UY7]"@>GB*C:MRDSI@.% >+MW#U='$,J;O5.L.1C,.`XS/'_?[%5R4O!\%2>;0Z!;Y-O6VV:E'8E\6'3SH3; >+M&B5<GAE6,UE:)G]H4;UZR^]_$X?ZA*H^A:\Z5;D,"M$J8KD/.>*`1C)XNOJY >+MK'-*:`(`4$L#!`H``````!QR9#&#L+I`-0,``#4#```8`!4`9VQO8F%L+W1R >+M964O<V]R="UA<V,N9VEF550)``,G@(I!4GG(055X!`#H`V0`1TE&.#EA!P`$ >+M`.<```````$!`0("`@,#`P0$!`4%!08&!@<'!P@("`D)"0H*"@L+"PP,#`T- >+M#0X.#@\/#Q`0$!$1$1(2$A,3$Q04%!45%186%A<7%Q@8&!D9&1H:&AL;&QP< >+M'!T='1X>'A\?'R`@("$A(2(B(B,C(R0D)"4E)28F)B<G)R@H*"DI*2HJ*BLK >+M*RPL+"TM+2XN+B\O+S`P,#$Q,3(R,C,S,S0T-#4U-38V-C<W-S@X.#DY.3HZ >+M.CL[.SP\/#T]/3X^/C\_/T!`0$%!04)"0D-#0T1$1$5%149&1D='1TA(2$E) >+M24I*2DM+2TQ,3$U-34Y.3D]/3U!04%%145)24E-34U145%5555965E=75UA8 >+M6%E965I:6EM;6UQ<7%U=75Y>7E]?7V!@8&%A86)B8F-C8V1D9&5E969F9F=G >+M9VAH:&EI:6IJ:FMK:VQL;&UM;6YN;F]O;W!P<'%Q<7)R<G-S<W1T='5U=79V >+M=G=W=WAX>'EY>7IZ>GM[>WQ\?'U]?7Y^?G]_?X"`@(&!@8*"@H.#@X2$A(6% >+MA8:&AH>'AXB(B(F)B8J*BHN+BXR,C(V-C8Z.CH^/CY"0D)&1D9*2DI.3DY24 >+ME)65E9:6EI>7EYB8F)F9F9J:FIN;FYR<G)V=G9Z>GI^?GZ"@H*&AH:*BHJ.C >+MHZ2DI*6EI::FIJ>GIZBHJ*FIJ:JJJJNKJZRLK*VMK:ZNKJ^OK["PL+&QL;*R >+MLK.SL[2TM+6UM;:VMK>WM[BXN+FYN;JZNKN[N[R\O+V]O;Z^OK^_O\#`P,'! >+MP<+"PL/#P\3$Q,7%Q<;&QL?'Q\C(R,G)R<K*RLO+R\S,S,W-S<[.SL_/S]#0 >+MT-'1T=+2TM/3T]34U-75U=;6UM?7U]C8V-G9V=K:VMO;V]S<W-W=W=[>WM_? >+MW^#@X.'AX>+BXN/CX^3DY.7EY>;FYN?GY^CHZ.GIZ>KJZNOKZ^SL[.WM[>[N >+M[N_O[_#P\/'Q\?+R\O/S\_3T]/7U]?;V]O?W]_CX^/GY^?KZ^OO[^_S\_/W] >+M_?[^_O___R'Y!`$*`/\`+``````'``0```@2``$('`C@'\&"_PP*3,@0X;^` >+M`#M02P,$%`````@`'')D,>'6']NL````N0```!\`%0!G;&]B86PO=')E92]T >+M=VES='DM8VQS9"UH=G(N<&YG550)``,H@(I!4GG(055X!`#H`V0`ZPSP<^?E >+MDN)B8&#@]?1P"0+2W"#,P08D5ZXI5P-2;$G>[BX,8/#3>7<]D.(L\(@L!JH2 >+M!F%&AEES)(""["6>OJ[L5S@X1<08^+?XK00*N7FZ.(94W.J=8,C'H,##U/C_ >+MOR1[;(["*8_^MFD[4F_+R)W(U>3I45+=S'IEVQ*'UN`$N<N_/NW\N:<]WO29 >+M]%?N,(M&P3P%!IVV5Q+"-KFQB2`7>+KZN:QS2F@"`%!+`P04````"``<<F0Q >+MTP2$DZ````"N````'P`5`&=L;V)A;"]T<F5E+W1W:7-T>2UO<&5N+6AV<BYP >+M;F=55`D``RB`BD%2><A!57@$`.@#9`#K#/!SY^62XF)@8.#U]'`)`M+<(,S! >+M!B17KBE7`U)L2=[N+@Q@\--Y=SV0XBSPB"P&JA(&84:&67,D@(+L)9Z^KNQ7 >+M.#A%Q/0N)SFG`86L/5T<0RING3UOR,>@P.%\T?]]_7,K2P\%(XL;G">:67XH >+M,59TI5JK72C+$#?G6&#SXD'CZM8[JW>;_'WJ*Z;E(O?=GT5P-<A:3U<_EW5. >+M"4T`4$L#!`H``````!QR9#%\%T9A,P,``#,#```8`!4`9VQO8F%L+W1R964O >+M<V]R="UD<V,N9VEF550)``,H@(I!4GG(055X!`#H`V0`1TE&.#EA!P`$`.<` >+M``````$!`0("`@,#`P0$!`4%!08&!@<'!P@("`D)"0H*"@L+"PP,#`T-#0X. >+M#@\/#Q`0$!$1$1(2$A,3$Q04%!45%186%A<7%Q@8&!D9&1H:&AL;&QP<'!T= >+M'1X>'A\?'R`@("$A(2(B(B,C(R0D)"4E)28F)B<G)R@H*"DI*2HJ*BLK*RPL >+M+"TM+2XN+B\O+S`P,#$Q,3(R,C,S,S0T-#4U-38V-C<W-S@X.#DY.3HZ.CL[ >+M.SP\/#T]/3X^/C\_/T!`0$%!04)"0D-#0T1$1$5%149&1D='1TA(2$E)24I* >+M2DM+2TQ,3$U-34Y.3D]/3U!04%%145)24E-34U145%5555965E=75UA86%E9 >+M65I:6EM;6UQ<7%U=75Y>7E]?7V!@8&%A86)B8F-C8V1D9&5E969F9F=G9VAH >+M:&EI:6IJ:FMK:VQL;&UM;6YN;F]O;W!P<'%Q<7)R<G-S<W1T='5U=79V=G=W >+M=WAX>'EY>7IZ>GM[>WQ\?'U]?7Y^?G]_?X"`@(&!@8*"@H.#@X2$A(6%A8:& >+MAH>'AXB(B(F)B8J*BHN+BXR,C(V-C8Z.CH^/CY"0D)&1D9*2DI.3DY24E)65 >+ME9:6EI>7EYB8F)F9F9J:FIN;FYR<G)V=G9Z>GI^?GZ"@H*&AH:*BHJ.CHZ2D >+MI*6EI::FIJ>GIZBHJ*FIJ:JJJJNKJZRLK*VMK:ZNKJ^OK["PL+&QL;*RLK.S >+ML[2TM+6UM;:VMK>WM[BXN+FYN;JZNKN[N[R\O+V]O;Z^OK^_O\#`P,'!P<+" >+MPL/#P\3$Q,7%Q<;&QL?'Q\C(R,G)R<K*RLO+R\S,S,W-S<[.SL_/S]#0T-'1 >+MT=+2TM/3T]34U-75U=;6UM?7U]C8V-G9V=K:VMO;V]S<W-W=W=[>WM_?W^#@ >+MX.'AX>+BXN/CX^3DY.7EY>;FYN?GY^CHZ.GIZ>KJZNOKZ^SL[.WM[>[N[N_O >+M[_#P\/'Q\?+R\O/S\_3T]/7U]?;V]O?W]_CX^/GY^?KZ^OO[^_S\_/W]_?[^ >+M_O___R'Y!`$*`/\`+``````'``0```@0`/\)!""P(("#!@\B5,@P(``[4$L# >+M!!0````(`,->9C'U):^#?@<``(<>```/`!4`9VQO8F%L+W1R964N8W-S550) >+M``.N`8U!4GG(055X!`#H`V0`O5E;;]LV%'Y.?@67/<PI+#E.EV%UT*%9@Z+9 >+MVK1HTG5%L0=:.I:Y2*1`TK&]HO]]AZ1DW6TY[::'QI3.C>=\YT)V].B0/"*W >+M<R"!X!JX5D3,B)XS168L!D(E$+68_@V!)EK@!R#7H%5`4R!O%].8!8;_%0N` >+M*R!_@%1,<#+VQV1@:(^R+T?'YV0M%B2A:\*%)@LDWB@Q$F`50*H)XVA'DL:, >+M\@#(DNFY59E)\<G'3(:8:HJT%*E37,V,B!(AH9K,M4XGH]%RN?03\0^+8^H+ >+M&8VNW[X:(;5AN!$SO30;#)G2DDT7&D*RX"'(BBRTLDR`VZ.<'%W<&!%7-T=D >+M2A530_+AZO;EF_>WY,/%NW<7U[<?R9L7Y.+Z(_G]ZOIR2`"W@G)AE4I0Z&-I >+MN)G9*80^N0&HJ)P)9X)*(6`S%I"8\FA!(R"1N`?)&8\,OV31'`-&>4ABEC!- >+M-3I?-;?@9QLV87Z#3(S3F#P7H=W;:^<<7"?)@K.`:E0>H%U<HW=#&!(),5`% >+MH1'QFLI@3AZ/AV3\Y,G/9<%7G&F&<B_A'F*1H@462"T:<P`9SD*K-?VYD*F0 >+M=N&3MT*ZMX$$:EP_71?@P[@Y_G1MW4`&SX^M3=[IR<FXH-NFX"*.C8QWSHWO >+M0(&\QW!DFWJ."6&#+N1`'4_,*T)^$T!>`@(3%<[MWV<\4^4C<H^1:G1X.'I$ >+MGIJ':`GX'@/^=/_GD"`7N='K&)1)&+M_X]`_W[\B8J%CQH%@:!*,E&^)O\EC >+M-_",TP142C$)%S(>''4DTQVL$ZHTR%&$`;H#P+"/#-#!9\H7/%[[JT6,R6]= >+M,C&/=4GVTVBRR\]H_NC1X4%")4)E0D[2%?DQ79T?'B#)P51(!/2$C/&M$C$+ >+MSY'<0SL\]\73(O4"$0NI)@A%%'AY,Z>A6%86=2:+FOW9ID)KD>S/%\.LI[8I >+M#>XB*3"+'?W$R7G!(+8[;[R\A94^MQXDAP?V-4U3H-+4T`E6!J6G8K6QI_Q- >+M(^?,R36>;J'@@L/YX9=Z_*18JEH0@SF+0PE\,K%"S"L/R6QL\PB>Y!%$*90C >+MOI#>FIXP[LW!1&1"3D]3:VV^'ON/(;$V;%$S4)@)`1:)8Z>PW8>76*!$U%O6 >+M$`MQL%!=(E^B?;&Q<:?`8"'-3DOR#A#NA5\,LD,$%N;X]R_.+G]]<N8"TO![ >+M`''<Q_&&SEJ=TC#$;N%<CX[-_VXUV7![!AM61+9;QC&OV?:];AAKX6C&P&%V >+M+U&5:-1#L)%7.,S41V7&&H[LZ(/>SK.%]7-[>,JIN,5Z(Z(#1DV9M4U4:5RZ >+M5*%6`X4"3"3;MG?OK:`MC#'ULZRL49#*E:])V&5;*$5*9@"AR9R>F'413R7# >+M3K`>6A%O>(_\VP*(+G5&MK<QKX>&)0OU?$+.3JKE*:M6KG79,H\T68)5XY1* >+M$=GI+P%LF3T\DC,X^L\;+5:I:Y`%6$[W[HZ5DKB[.6Z<L8VQM3WVXNQND#6F >+M';5]`X4JC+<@H>+F0;YZCU,TKK$SY57,=%)/F7G,0WQ&V!WM;!3,I4@`IZ,H >+M%E,:C]0=XZ.*S.K*FR[4VH_8S,Q%O2I@A?VX'0C-5B'B1<(;]4[$P_Q'RH([ >+MBRO7C)K3`9+-@6)PC"F=(P).R%KP4CA7'L5HHW%X^$"#*U]PI+PK?W@`>@LT >+MN?4K\[O_C'=)Y=U#Y[R>O"U0WF%T7TPW.NA!I<'G2/"S"#N<-@>!<9UNT^S+ >+M$_AW>#[%(QCEI4(JXD]S%F:P>'JDY0*._K*<':-C$>)\75B2H]8W#PX8B`ES >+M3D2<9*]*J)W,S<EW0K&5WT,-PI5OC<96@589&+4315>;*WUSU?T_K[1[GSP> >+M6$M=WF_B,78(LK$_RT]?#335G=TB9%R>,^MSK*M+V-II9&\N[)B@W"FW4:L^ >+M&3($9-2$6J?/2TE:.F54T+Q7E2@)Z9:QJUSTLZ0E;KUD-,M')>A5X@I%49<Z >+MLIUQ!?AVIMO2_2%EMB%["C,AH5/X=I_T;O(.=H.RRO)`GJ5VUQ#<5[#U4T5N >+MO=(T!6\R0Z'[2<BD.:X(CO4PS&[CW&>;%YM<-,0%;?MXLCF\YS64"SUHJ=_' >+MY!?2+OB365WFJZ='5&'K-HF>!6J?D<@H&!EY'DJISS_?PK@0OHEU8<6Z>MW* >+MAJ9Z2#(8N*\>"SICLL."LI@V*_02):[+ZKMPF5&6>G^.Q>S@D+_-3W^E,\[8 >+M+,U]DKG8M8;_H-PW<W\['J,75H!G:3L0[KU'9YD7Q"KT4PS6]C'840]$"ME! >+M\/^TT6@M;,1.M\/*ZK7'UWC&F]]+I[E6F7M:,"P<]C6;[S1C&_2P<F&/HIO* >+ME$?LM'Y0B20+[6V+M:[C1.SG5*KUAJNKSF[IEEWW&5TL7_H85+_KK!;?-B^9 >+M6`RN:9(UHEJ6[KJDJ[.7)_?L3F*?P)N2I48S$1O7,`U)2]2SQFQE>1(BC.^$ >+MF/([0*5#,OZI^!=?;$_KPORA_:]'BO[,.N=6)8]/JZKZ:RD2HDN!D^HT%'KZ >+M:]A<KG7E77X$RA*B?L@J+I6:7\KA/>E[?]MN5^O]2%7#6?D8\!!-YN<>U[;_ >+M`E!+`P0*```````<<F0Q````````````````#P`5`&=L;V)A;"]C;VYS;VQE >+M+U54"0`#*("*00EES4%5>`0`Z`-D`%!+`P04````"``<<F0QY[@F[RT````P >+M````)0`5`&=L;V)A;"]C;VYS;VQE+V-O;G-O;&4M97)R;W(M9&%S:"YG:695 >+M5`D``RB`BD%2><A!57@$`.@#9`!S]W2SL$QD9>!D:&!@8%@6""04?[(P,C`P >+M,N@`V0P@&08F]I[^E:>YXAD8K`%02P,$%`````@`'')D,;D%K<&6!0``6PX` >+M`!H`%0!G;&]B86PO8V]N<V]L92]C;VYS;VQE+F-S<U54"0`#*("*05)YR$%5 >+M>`0`Z`-D`*U6;6_;-A#^GE]Q<[XD020E+8:N[E(T=M+4K><4<;JB&/:!ELX6 >+M%XI423JV._2_[XZ2%;^EZXH)"!Q1Q^?NGGONR.0(COB!SN55;P#]7O=R,+R$ >+M3O^Z^Z[ZL@='\#M:)XUNP^!]'T[CT^2*?I_$)TF_^N>4C-CN-D=(C?:HO0,S >+M!I]+!V.I$(1%<-/17YAZ\(8^(`S0NU24".^G(R53Z,L4M<,5?^P*#MBV57]L >+M';Z`A9E"(1:@C8>IPQ4G.$^Q]"`U8Z2F*)44.D6829\'ES5*#)]J##/R0FH0 >+M9%TNJH@;*Q"><7+ORW:2S&:SN#!?I%(B-G:2$!-)G?70C/V,$\RD\U:.IAXS >+MF.H,[1H<1;EJ0.D)#:WS(?2&+1@))]TQHWWLW;ZY_G`+'\]O;LX'MY_@^C6< >+M#S[!N][@XAB04B%<G)<6'7%L07*:F,4P1%SUQUAC4X7@2DSEF#A60D^F8H(P >+M,?=HM=03L'*24[6$SD#)0GKAB7GW$#_C+'E;*?,U[9-:*.B:+.2V0@ZQF:T9 >+M][3TDFPO\!Z5*0FXIGH3A3<TNNB:HIAJF=81=8TMC0TOC`WOC:T^I!8%,SI: >+M!,QM9UR;+A4XI`H'W4,X??[\%\;8:1_#N5)P4_%R@P[M/?%;I],E>8<2&GO@ >+M#MN\!&\-PALDE7GX-0^_KW2=1$PR?%EO/5>>.*<$R,_B./C>W2RLS!&RN%=U >+M1)L+-F2H6@:\?#7X`%>HT5(*ZYW4M-$3UHDBCFS=3=2UK<-C6EURP"!]$A19 >+M_!L6M>0&6K^"8RSJI5DNTQQ2X2HUEM;<2Q?J5-><1T:MRS`^N#JB)!&G8D3) >+M2^T\BHS1P@;#G3@BN<;0&X?FGTF7\Q`12IE9&`$F?+!P7P>YQJ;1:L%HVTRN >+MT;@>U7%H"!XQC2/#MH[>`QAY?=SE#E=AXC&NU!E+NMK.4!GU9H`@_6:HT'-7 >+M;E`7"`@A62R52`.WQ<-@HT"I3HS&-B'2U>T6/T^E?6B1C60;9C,34@Y1X%(; >+MFV$0-028RE*2<H-6OX.,)5C#A]`T;S6N4;,KM+IWJD/J<G"QZXB"HV1O+SF" >+M,WZXIYQ1U'DT'\]^X-D#H'TP]`N%KFK"FK:WXEX,4ROIC.E63J@".C.SN-KS >+M?SPAEU=:%.A*KO/4JH/6(V?0'2X*0=UBDPD)Z@Z1AE?"M<=8NIAU'\^GBL[, >+MO;VX9B4:F3G\3>&.1'HWL8:*$Z5&&=N&B*"CUQ)5]H*^;RW>XMR_V/L:B&[S >+MLR0:K)FY>HF#;US1>N7*6%(`>?;>%&UX4LZ!OLML"QR@%%E&\F_#23D/SE;! >+M(DDOJXAAGK?AM`&\S2WBQ3`75),UN)\9[M&D+VC\FPD;A%>B*!)*3NB^X[RP >+M'GZB,Y8.&Z']>DQ-/(K.]<BQ8")9T/':IBZG,LB&L)@?0&M)VH&N:F&3KH@/ >+MSH#81/Z4DB,RPN_3*HLZ]/T3>CH=7AG3,1(Y^84<*V$G:-?CS(RGNT7SFM+$ >+M]<%+CA6#SS?9YAT;,FE74DQS:PHD,4Z4&0F5N#NIDWI;$A*,,N'R>"+'K4.> >+M5G0V1W.:FN6ZAX<@9C+S>1N>;9;H^QT&K-JC-E'EM''9T$\MY?CN\XT"_.$7 >+M)9ZU:LO6GR'`P.Y8%%(MVG3-T29TYCJVHY&9\B6$%$.S_1'TI=59R]OI$GY; >+ME/N=9Q>=R\ZCNELJ90OO>-,FW"ZVW;Z$-;LPIE?6*E8=3?0TK'OJSDA)?1?B >+MK8.L%;X99#,=N#D>&PLUS<'/9M3+;^$N3X=)S=)VBSVNCN`ZN63TN-03'H!? >+M=P9`MW:^`_^PBX_5_F\[61?3?W?R6[5_Q4G#L3=&C81=I7F?1RE-L,M[NL.Q >+MPX(&@M35V-VHU7YG2B-9[S1=_IUL;UMZQ5+0=9PF6M@K=;0<)Z=8D.$_4$L# >+M!!0````(`!QR9#%8PI2:-0```#<````F`!4`9VQO8F%L+V-O;G-O;&4O8V]N >+M<V]L92UE<G)O<BUC87)E="YG:6955`D``RB`BD%2><A!57@$`.@#9`!S]W2S >+ML$QD9^!D:&!D8%@6R,#`H/B3!<AD9-`!LAE`,@Q,?#V)G*M/\X5.,EY0I>O- >+MRF`-`%!+`P04````"``<<F0Q@XW-794$``#0"P``&``5`&=L;V)A;"]P<F]G >+M<F5S<VUE=&5R+F-S<U54"0`#*("*05-YR$%5>`0`Z`-D`*U6;4_C1A#^SJ\8 >+M13H)$+$!]:HCE.IR@4)Z44`$>D55/ZSM2;QEO>ONK@GIJ?^],VN3-P)<J_I+ >+M\'KFF9EGGIDEWH5=?N#3V7E_"(-^[VPX.H-/@\O>Y_K+%NS"+VB=-+H#PZL! >+M'$0'\3G]'D;[\:#^XX",V.XF1TB-]JB]`S,>L'8ZD0A$5P5?('IAZ\H0\( >+M0_0N%27"594HF<)`IJ@=+L7C4+#-MJWF8VOG&&:F@D+,0!L/E<.E(/B88NE! >+M:L9(35$J*72*,)4^#R$;E`CN&@R3>"$U"+(N9W7&<RL0GG%R[\M.'$^GTZ@P >+M?TFE1&3L)"8FXJ;JD1G[*1>82>>M3"J/&50Z0[L"1UDN&U!Y0D.K.X+^J`6) >+M<-+M,=J7_LW%Y>T-?.E>7W>'-W=P^1-TAW?PN3\\W0.D4@@7'TN+CCBV(+E, >+MS"(8(2['8ZRQJ5-P):9R3!PKH2>5F"!,S`-:+?4$K)SDU"VA,U"RD%YX8MXM >+M\F><)]Z6VGQ)?E(+!3V3A=J6R"$VLQ7COI9>DNTI/J`R)0$W5#]#88^Y,'JF >+M*"HMTR:EGK&EL>&%P>'*V/I#:E$PI<DL@#Z/QLWI48=#K;#=VX&#HZ,/C+'1 >+M/H*N4G!=$W.-#NT#$=S4TR-]AQX:N^UV.GP$/QN$"R29>?@A#[\?=5-$1#K\ >+ML7'M*D^D4P$49[878F^>%I9F@JSN92&1<\&&#-7H@(_/A[=PCAHME;`Z2O,Y >+M.F2A*.+(-N-$8]O:V>/3)Q(894"2(I.WP&@HU^`&-1YCT31-<YGFD`I7Z[&T >+MYD&ZT*BFZ[PT&F6&!<+M$27).!4)52^U\R@R1@L.AF<Q(<%&T!^'\9]*E_,: >+M$4J9:5@")GRP\-`DN4*GT6K&:,^I7.%Q-:N],!*\9.:!#-LZ>@]@%/7ED!M" >+MA9W'N%)GK.G:G:$RFLX`00+.4*'GN5RC+A`04K)8*I$&;HO%:J-$J4^,QC8A >+MTV5WBW]6TBYF9*W8.;.9"26'+/!)&^MI$#4$F,I2DG2#6+^!C">P.1]"T\;5 >+MN$+-IM2:X:FOJ;/AZ:9+"G;CK:UX%T[XX7PGO!X+JL%&*>W)DW_U;`$YP,C/ >+M%+IZ"!O6?KT=K((#\500"5%P^5^>4,I'+0IT);>YLFJ[]<(E=(^S0M"PV'A" >+M>KI'I.45<^LQDBYBV4>/E:)+,Y#3X6<M__J,0ZZ>?Z6"VA2J37.)PO(UNG!- >+MA#VF[X6PM+P[<%@^PG?E(Q\EQE*KZR-GE,R.GW#J+VUORG9JE+&N0S>#13P= >+MY2*CV0I&I[2&S63=)VSM-:\+.E-AF[_BF!CO3?%?/!6.UR-NSC,1Z?W$&E)X >+M;=Y9-RBD;D]EYO,.'!Q^J%GBLQPY!SI\SV=_K_'_6T'WX4F+!X?G16K,6K^' >+MIBP"=FIII+DU!9(X)LHD0L7N7NIX!6SUK9U4;A9-Y+BUPZN$;L[V(^R_@_?[ >+M[T(>T9-UF]H,6Z\*(<TK?;]6Y7ZCA&?$+-,8(LTEZ>B?CHI5]:(XH]42%@Y? >+MEW2XOZS`)HW7M?=-6M@DO[=%NU%[;[MM$-Z+22Z1?O1]HZ)_`%!+`P04```` >+M"``<<F0Q$(9MEAD$``#I"@``$``5`&=L;V)A;"]R861I;RYC<W-55`D``RB` >+MBD%3><A!57@$`.@#9`"U5MMNXS80?5Y_Q=1`@22(I7B[!1H'*6HDV&[0K!/$ >+MWFZ#H@^4-)984Z1`4K'=(O_>(2G;<FRG6[350Q"1,^?,G+G(\4D'3F!2(*1* >+M6I36@)J"+;B!*1<(3".8.OD=4PM6T07""*U)685P7R>"I\[_EJ<H#<+/J`U7 >+M$OI1'XZ<;;>YZ1Y?P%+54+(E2&6A)N,UB4/`18J5!2XICK(2G,D48<YMX2D; >+ME`@>&PR56$:VC*PK>ILZB)8A,`N%M=4@CN?S>52J/[@0+%(ZCT?WMS%9.X>Q >+MFMJY2S#CQFJ>U!8SJ&6&>@N+HFP;4'I,0G<X=A`WXRXDS'!S"I]O)A_N/DW@ >+M\_#A83B:/,+=>QB.'N&GF]'U*2"E0KBXJ#0:TE@[;^XRQ2R",>(6Y52%$$R% >+M*9_R%`23><URA%P]H99<YLY?\[R@@C&9@>`EM\R2^&8WA:A)V)7YCIRX9`*N >+M5.9S^QC$H?>RK"5/F27RE.*2EM3-\!0T"F0&,P?QD>FT@&_ZI]`_/_^N#7PC >+MN>6$>XU/*%1%$?A&VL.X:B#GN6'UH5\I72GM7R*X5SJ<IAJ9DSY9;IJ/ZA;\ >+MJZ67`8ZNCGU,/?ISOK%[C6`HA,-X"#(^H$']1.5HDKJB@?!%5_K('`_":=SI >+MQ"=PZ1[0+.,J2JF<E__\Z0!YP=@N!1HW#CX[)]<OGVX#,I#L)54A\J;_R>/C >+M_T&R$DW%:,!J+8ZZ!P9EALN2&8LZSDG\&2*5-'9-C!$WD9)B&2UJ08/M%1FX >+MIXD[_.^HPON?E$"/H'NLJI!I-]J-:<\M'1IDU!<KFT0M>DSP7`Z`>M>&FY)I >+M:J$!O*T6\*Y:N*.*91F-P0#Z=.;.^ZN[YTXG"NB")2@<H@\A@/0$3JU'<BB) >+MTC0K`<0HP3.P%!^)HXE[B^:,+,X:FOXV#:<LV@R^'QN*%\&TS`@2OJ(-0$W. >+M'->SUS%R#\U_ZEO"T$AC<[;6\]?F]K)K=8W=W^![V)/OF_CD17Z9LFZ()H5& >+MO+YF>C8N6*;F%YTW!-UFIVW'$G&0?G6]RY\6F,X<?]_GF;!TEFM%ZXCJ+!2% >+MX2M\35M"Y3[A`X#.N?'X4;/E!!=VCU2AS3PG*3JC;>H6Y*;Y]@>UOQ';3=8/ >+ME=ZT1\^JJMTB0<&5>FNKINPO[3[0L7!7+=.$2J'*+[,-_7J8O9F:$`+E4IL! >+M?'OVM;N:\\P6Y-LT>X%-A*OFWU^?]QQ%UN[<M8)O0UE?$:7=5G\GS*T[WC$^ >+M),U^Z_WB;$?QBD#KZ6X4:01[MZU7\RKH1T#/N(7=\ZTVH%\R$C=]/"C<MWG` >+M4LN?\%\,Q7H.#7T`4GMP#E?7K\[A[EDHXFXR_EN0%EJ52%^#7*B$B=C,N(P] >+M0-R"B7(^=8O_^5`H7[8C_I?8>D0=XFNM#(KT+U!+`P04````"``<<F0Q&0PW >+MEX$"``!'!```&P`5`&=L;V)A;"]C=7-T;VUI>F54;V]L8F%R+F-S<U54"0`# >+M*("*05-YR$%5>`0`Z`-D`&U346_3,!!^7G[%J;RT4Y>L0T(LE1"E%5IAZZ:V >+M,.W1L2^)F6-'MK.T0_QWSDF9.N"EJ>WOOKO[[KOD%"`"V)8(W&B/VCLP.?A2 >+M.LBE0F`6P379#^0>O*$'A!5ZQUF-<-=D2G(*OY8<M4/XCM9)HV$23V`8H(/# >+MRV`TA;UIH&)[T,9#0^"7'$2`.XZU!ZFIBJI6DFF.T$I?=@D/)#$\'"A,YAEA >+M&:%K.N7$<(0#YJ'TODZ3I&W;N#+/4BD6&ULDJ[OK).HZWIC<MZ$Y(9VW,FL\ >+M"FBT0/N*BDH\!E!O3,-@MB&&Y68`&7/2C>%^N;VZ_;:%^]EZ/5MM'^#V,\Q6 >+M#_!UN5J,`:D/HL5=;=&1O):"9>@210P;Q%<)<],7X&KD,I<<%--%PPJ$PCRA >+MU5(7%&YE4=*DF!:@9"4]\R2[^[?^.'H9[RW%2,T4S(WH^KKI=:%S535:<N8I >+M-:>JM"==!8[!HD+F4!###;.\A+>3,4PN+]\?T2ZU]))8%_B$RM24OK//?_)] >+M4NP186V<BT/PG;%]T=PB"]IF^R-(\!V!YC3?KE<8SD=P<7Y^\8IFIA2!UKT8 >+M:W1HGTC3OK@YV;D;F[%#-TK#%1PG&&;AO_VH#VZ.R7FC#O3%(%PAN8^REMWW >+M+]!I$D6MU,*TXTA0\Z:`GQ29&4ORIS"I=^",DH($LHB+!;./FY(1?$JHF@E! >+M0TSA7;V;1K^BZ(W49+"&]VH$HIQ*/VLQM)42JQ+3/Y=./F-*EK`%VCZX9@J] >+MQ[/,["@VW%2T&MWQ`_2_BF6HTEQ:Y\]X*94@X$ER"E=2]-[K`&&[JZ!.N"&C >+M4J:PHKKH-S:8+U>F!6K^A%:B5FR?THO&4,=O4$L#!!0````(`&AZ<#$I>F6R >+M?`0``.82```5`!4`9VQO8F%L+V9O<FUA='1I;F<N8W-S550)``/$8)I!4WG( >+M055X!`#H`V0`Q5C?;Z,X$'XN?\5<5B=UJX9DNVT?B/9T6E6].^GNY7;W:74/ >+M#CC!BL'(F";MJ?_[C6THV-!"HI4.)0*,YV/FFQ\>\VM.,EH6)*9027X^2Y4J >+MHL5BO]^'F7ABG)-0R.UB1Q\S4BHJ%UNBZ([2`B]52B4-61F*G#^&AXK/WJ^" >+M8'$!+"^I`B(I*>%B$02A&0@`_L4_P%K(A,HYIQL%[1'!A^(`I>`L@:^II/3N >+M2TH2L5]U990HX%@9R;:I>DOF=YS`]21';"V4$METL8S(+<O!.R)8HMA-^]>3 >+MG_$?A&MQF%NF-"U6/((KG'9MIUE%[)!YL1Z<HUOF+1OS6'`AR\@QO[ZY(W+7 >+M\M$5-)1XHB_FU/=_ZNMA<4O-Z?+:\],57Y-XMY6BRA,K$UFL>T:Y8:0W^)4> >+MT"?/R#'^,!PW0F9$*99O=32&B"4>J";/C\A>=&GF[?1:LWM,E)4!MCZLL0R? >+M/EHO[H;1?"Q-SFBJ3(.R?O+!>H$]`B8J=4KV#F?5:`(/BXWF\$#>CR9P*],U >+MU&35,',G*G^,(O@\"&S<7D!)"R*)$A)DQ2G64@Q?C.=2D3PA,FF?FS(+[?UE >+M>_E=2$9S]6F6XL63R!7ALW_`J&=M`TBI5AG5"F]HM@K.SLY>1JYL):H9@@'8 >+M!RH5B_N@>Y:HM(O9#'0@M3$J97E.9=>6\YOESU"R)_K>,RO4DR^]^R,,7%IE >+MW,';UTQTT4?L=*#KL5O7TCK%)AEJYUX.C$TPMXW6M_/$"]#1<.X0V5C6K%OV >+M9<OPNB6A?M!@=Y[UB/8L>XWJ3N69:)BLPWC,KEI7BSQDA6P"R#5BV*M+*$B2 >+MX')SJ9<>2-@#TW=`-QL:JU([>Y"`N0ZX_\V5$S)\5,\?[AJ3.5@D<$7O+N-. >+M.>1D33F<[YE*:W<9BJWDWS2I8IK`7[8[T_XH14;AVQ]&'"`L,\+YW`HZ-@TU >+M=%9AO6#6YY8[PUY8<.)STW1VNA'\B66%D%B_E4M'!+G(:3-6AX_C'#P90[\G >+MK"1K3I-/,R4KZN>(:8;`/R+X39)'VQ<9.*,N7B:TC"4K%!-85PV^BU;)TH>+ >+M4&A#*JX\TSM0$VF\L:UNTQ5WK3P"03OCUD$(4TJ04Y>8#9;*^9XZ?42$[-L> >+MLI'D^"J=;SK>^N*Z5#LZV.E=`!--1R#4\SM<:I1,Y,)LROH(&Y(Q_MA!>)GK >+MAR++$\S?`2;=W@W[OX\N?7ICHD.0)HYP'96>&UKGF?<:#K0VR007?AP,@A>< >+M/7O"+@=+VF&"'E<ZO:XUTH?FRL'#0G$G*DP<^&PR#D\':K>G`+H/P=Y.[V/M >+M2APF9JY^=[U1:-]O=S+(;D>)R.Z>XU1B<<']\Y:+->&+<L?R1<Q)6;+XLY4H >+MPT/&W[7P>L]L,8::S-%BZNV-K,R[>W.LWB3?+_R>R?`+CJQQ@XJ;_ISPGA>F >+M:>ONY&IGV*.)4^0>4P",$69E]+49)?^'TG_45XG3ODN<_(GAY$\:PX$R,51& >+M@F5:H/0AIX2**0,Q,8N**:FO+JQZ%5C6R[*_R#X'_P%02P,$%`````@`'')D >+M,1(H5,T.`@``FP,``!,`%0!G;&]B86PO97AP86YD97(N8W-S550)``,H@(I! >+M4WG(055X!`#H`V0`?5/!CMHP$+WS%5-.L**A=%6IL"?*JBKJ+B"@77%TG$GB >+MRK$M>[)`J_Y[QTE:6+7J(9'LO/?FO9G)^*8'-[`O$:0UA(8"V!RH5`%RI1&$ >+M1PAU^@TE`5G^@+!""E(XA$V=:B4C_T%)-`'A*_J@K(%),H%!Q/:[+_WA'9QM >+M#94X@[$$-8/_%(D*>)+H")1A'Y732AB)<%14-B4[E00.G89-23!6,-KQ*8\2 >+M5T`0!"61FXW'Q^,QJ>QWI;5(K"_&J\W#F-&1L+,Y'6/`3`7R*JT),ZA-AOZ% >+M%KN\!G`\8:`_WT6)Y:X/J0@JC.!IN?^T_K*'I_EV.U_M#[#^"//5`3XO5_<C >+M0(["NGAR'@/WV$>VBDDQ2V"'^*)D;EL+P:%4N9*@A2EJ42`4]AF]4::(?*^* >+MD@<F3`9:58H$<?/#WQ&2+G`<\YI)R@@-"YLUV1[;YO"YJFJCI"`N+MF7(>YN >+MAB/PJ%$$S*+$H_"RA-O)"";3Z?MKX:51I%CW'I]16\<.FD7Z1\7?"Q29EZJ- >+M]87USOKFD,#&^O96>A2Q]>GYLGP\MY;OSDT;8+`8-IY>\VMZP?VOP%SKJ+%M >+MV[C%@/Z9Q]&%6O`/T0S=^D$8SMI;WIU>PE,4L<<?:B)>AQ\]`%G[8/T,G%7\ >+M&WEXQ;-E^\+07>]GKY<$).*IA2C*F\N(R'(BR_AV!K?N!.^ZY^T;=XJD7U!+ >+M`P04````"``2;'$Q)B8/^@H%```'$```$@`5`&=L;V)A;"]T;V]L8F%R+F-S >+M<U54"0`#1)F;05-YR$%5>`0`Z`-D`.U7;4\C-Q#^#+]B&M03T&0WH:UT%\3I >+M$`A!RP$B7"E"]\&[.TE<O/;*=DC2BO_>L=>;;%[@**K4+UV$HK5GGGE]QMYX >+M=Q-VX6:(D"II45H#J@]VR`WTN4!@&L&,DC\PM6`5;2!<H#4I*Q"N1HG@J=,_ >+MYRE*@_`;:L.5A$[4@6TGVP@[C9U]F*H1Y&P*4ED8D?#,B$/`28J%!2[)C[P0 >+MG,D48<SMT)L,*!'<!0R56$:RC*0+>NL[B)H@,`M#:XMN'(_'XRA7?W(A6*3T >+M(+ZX.H])VBGT5-^.78`9-U;S9&0Q@Y',4"]@D9=U`0J/26@<]AS$6:\!"3/< >+M-.'V[.;T\LL-W!Y>7Q]>W-S!Y0D<7MS!KV<7QTU`"H5P<5)H-)1C[;2YBQ2S >+M"'J("R;[JG3!%)CR/D]!,#D8L0'"0#VBEEP.G+[F@R$5C,D,!,^Y99:2;U9# >+MB$+`KLR7I,0E$W"D,A_;YS(Y])[G(\E39LEX2GY)2]G-L`D:!3*#F8/XS'0Z >+MA!\[3>A\^/"^#GPFN>6$>XR/*%1!'OA&6F.Q:B"G.;?J73]2NE#:OT1PI72Y >+MFFID+O7)=-Y\5+=2OYCZ-,#VT8[WJ;77;G?F<B\9.!3"85R7:;Q&@_J1RA&" >+M.B)"^*(KO6UVNFX)X!>%<(K4F&1PZ'\_R6`JHL[=(:EX<S/>A0/W$&642)B. >+M4JKYP1N>32`UZ-FI0.-(XW/P^Y?S"KA%M?&IH1+ECKV1U_A7'A_))\ER-`4C >+M-HZTV&X\PZH'G.;,6-3Q@-QY0*3ZQZ[C,>(F4E),H\E(T!3PN>FZIPQ!3<*; >+M,U:M_$5!M`B^Q8H"F7:S8":^O_E4PZ"81Y0&>%<EI(86]IK5UKV=%GC0",N- >+MK^O-5(C?$3FI_YBT^R26<]D:\\P.N]`I)M7*$%WG=&&O[=8VXMUU@%))7$#; >+M2%CZ,-"*:-I*E5"Z6RK=<IFIL=M7F@A,L,4$C!(\(WYIQ./>D-4%:@YYT?"_ >+M7SD1I*PJ2C.F&W!.R6OA.;/TOJSJB;6D?,ST0^G(DE>+JHFR5N5OTQ787[9Z >+M[CQ94*TYO4'5?@K=0Y5[OGO>5M:"91D-W""R$3R=M/H")UUH_U_X_[KP-`WH >+M+I!H-:8![N9,TY\[%9/IQ.'2<#I[V&P>1Y$;$>&-6\SAXTQ^;?^L%/-I>9*1 >+M9H9I.%O,\E1CVF!!8.YP=09RINE0A++6[6@/\ZJ/ZB6`LLCU7E@*?R;O<K=& >+M?)YHWS10=7'5XS^UO]^OD<=/^M+#JLE\9ZV)MF`"K46?O)5@ZYL.+!UI,^OW >+M@6:)AXQ6I1VSPJ`N?6E\;7Y33A,]PSRO*#3/P];[MOMS*5CEW];)R<ER65>- >+MW1>"7#EHA)U@JBRA3SP%%@@8%G69W6JU5J,ZNRTU%T6IL9Q&]<H_*_9*!S_" >+M\Q7MA(J^+OTKV*^MQTM9Z]8'EYNAWW:GHL\<.`@&X!!=R'C5WS^WWQ3L#/J? >+M!KOH4^B&<B;.?`N>EJZ]P=67+,Y;O%M>V-*A5CG2E6T@5,)$;!ZXC(.!N,2* >+M!KS?V*$11[=)FGAT[:=.0UVQ/G(/9)H-_)=&IE4!?<3,F0J;ZYE_[W3<]\I! >+MPW7^`D-KLYY8V/;/<\T]A_'46,2I'54+0%MC3++J4Z0UOQL\;49E2E+!C)EM >+M_`#KEIN+PAG7]!VL-*?+^'J%5QX>&ZMC:OU)3V=XMZ1'92"JGR-K+@1KS%39 >+MJ9M8&GI_`U!+`P04````"``=<F0Q??6Q**X$``"/"P``$@`5`&=L;V)A;"]P >+M;'5G:6YS+F-S<U54"0`#*8"*05-YR$%5>`0`Z`-D`*U5VVX;-Q!]UU<,7`2P >+M76EU"0+4<E/4L1U'L"(;DM/`C]SE2&)*D1N2NKGHOW=([DHK67:#H@O8DLB9 >+M,V?.7+9Y"J?^@0_7-[T!]'N7UX/1-7SHWUW>QIL:G,(?:*S0J@N?[_O03MK- >+M&_KL)*UF/WYIDY&W>Y@B9%HY5,Z"'H.;"@MC(1&80;#S]!MF#IRF"X3/^DE( >+MR>!^GDJ105]DJ"R6L3P<18)C;WI47!Z=G,-:SV'&UJ"T@SG9;V/@*L/<@5#$ >+M899+P52&L!1NZK$\3(&2P&.!H5/'R)R10[Z.A#=6P)SWFSJ7=YO-Y7*9S"+A >+M1)M)DX1H%DF/]-@M?7Y<6&=$.G?(8:XXFATX8EDUT!16P='%"'JC(TB9%;;N >+MT;[V'C[=?7F`KQ?#X<7@X1'N/L+%X!%N>X.K.B!E0[BXR@U:DMB`\)DB3V"$ >+M6(WGL<8Z4K`Y9F),&DNF)G,V09CH!1HEU`2,F$RI6$QQD&(F'',DOMWR]SBE >+M;I4JWY&?4$S"I>8AMXHXI";?,>XIX0397N$"I<X)N)!Z'Z4L5-D:=V;"E'@* >+MG#P@W&L3^64&F9<Q70>'YQ%\02ZIJB$_.+X\@?;9V2^-3JO5*:,\<TK@0DH8 >+M1D6&:-$L2-DBD4OJZU`\;8[M2=<?`0QUBL;!+1-D#+_2YU#_'OXGS/U6>%Y( >+M1V)3$A1F70^A#P^);\D4?5=7&XB<9][00Q7U]\<W@R]P@PH-97!XA*#C&T22 >+M3J88(YK6HY,ZG982>)`^=1)9_!L6S>(>6C_">2P:HN549%/(F(UMF!N]$#;4 >+MJBBV7Q5%0X:UX2O$<NK>C*64O%#6(>,>+3AH/X(I]6D"O7&8^J6P4[\\F)1Z >+M&69?APL#BX+DCII:R;5'>Z[DCHR[K.IA$OQNV032WM;2[P!&45\.>2!4:&>/ >+M*Q2G3%UT]U"<AC)`4`]SE.C\..Y)%P0(E`SFDF5!VUE8:L&4B%*=/)JW"4RK >+M[@:_SX79CLE>LAMEN0XI!Q98]L8^#9*&`#.1"^K<T*L_($8)MM&#*5JT"G>D >+M.42MF)WX<KH>7!UZ-<%ILU9KGL)[_T`NY[1,;)+18GS_7YX:#33AC-Q:HHU3 >+M6.A&^<]=MPA`:YQ)/4FB^?_RA$12S=?P%Z&F+/MS8C3IU\BTU*8+#=JNC8\" >+M)3^G^V>'#[AR_F),6Z4+,YIGVO&-5*_.:W_7:EPL?B+Z5M"*)7A'Q@TFQ81> >+MY]_FUHGQFGR7@KMI%\Y:;^C'C!E*M"%Q3'#O*B=AF<:C`MAK8@/K*BZM#BIX >+M2:EAQ1-V8;5J2(+!S?$2(URJ?5X%H-);R*KSC_B.:<9FVH0T2\I.YUWHX*PT >+M2CR\8K,7C#9'J79.S[K0CJ<5*ALBU8R]5J^0DY5H76CEJ_#W-GX&$Q>6X"OE >+MOPI=MU__>/I*`QRF692[W0KU)J*&9I5^$R&KI>#TVC:(5Z,IXWJYM6C8G&6T >+MIKI;VM-7BO\\DT\DC/3B5/+8G,4L(NC/-'?UFN/^"X^R1`:Q*3U13A7"/:80 >+MW/DS3F7>!4BH]TL8D4&]C)LSSD/*;S<I)VZ=HU];B9V/Q\&J$+33>E/:<+19 >+M]>K=]@J5+S:OWK;C[3]02P,$%`````@`$@UK,?[-D#4'!0```1```!$`%0!G >+M;&]B86PO=&%B8F]X+F-S<U54"0`#9`F305-YR$%5>`0`Z`-D`*U76V_;-A1^ >+MCG_%F9^2P)+L)BU6&QD:)!B:+DV"V%T7#'N@I&.9BTP*)!W;#?K?=TC)MF39 >+ML=-50!")Y+E]_,[%P7$#CF$P0HBD,"B,!CD$,^(:ACQ%8`I!3\)_,3)@)&T@ >+MW*#1$<L0[B9ARB,K?\TC%!KA3U2:2P$=OP.']FRSV&D>]6`N)S!F<Q#2P(0. >+M+XU8#3B+,#/`!?DQSE+.1(0PY6;D3!9:?'@H=,C0,#K+Z'1&7T.KHG00F(&1 >+M,5DW"*;3J3^6WWB:,E^J)+BYNP[HM!7HRZ&9V@!CKHWBX<1@#!,1HZKH(B_+ >+M!R@\)J!YWK<JKOI-")GFN@5?KP8?;[\,X.OY_?WYS>`!;G^'\YL'^./JYK(% >+M2*&07IQE"C5AK*PTMY%B[$,?L6)R*',7=(81'_((4B:2"4L0$OF$2G"16'G% >+MDQ%=&!,QI'S,#3,$OJZ'X!<!VVN^)2$N6`H7,G:Q?<[!H>_Q>")XQ`P9C\@O >+M80C=&%N@,$6F,;8J/C,5C>"DTX+.^_>_EA5?"6XXZ;W$)TQE1AXX(FVPN""0 >+ME5Q9=:Y?2)5)Y3Y\N),J7XT4,@M].%^1C^XME\_F#@8XO#AR/GEOVNW.ZMQ+ >+M!L[3U.JXSV&\1XWJB:ZC".J"$L)=NE2'^JAKEP`^282/2,0D@R/W_X,H3/G$ >+MW",Z%30:P3&<V0<,"T,Y\R.Z\K/7/@T@&>B;>8K:)HR+_Z\OUU:I1W?B(*&K >+M&=NL]=WIG_*X"#X(-D:=,<K"B4H/FUNRZ1'G8Z8-JB`A=QX1Z=X#RW3TN?:E >+M2.?^;))2]CM,NO:Q[NOBU5KR[;>7XM"TBO?\/I\IHE`JHK(72F/DN`MOLAEH >+MF?*X1WL>^>%5#GB13*727:*C0KS\2&I2IRK_OK;O_1&+Y;37^%YU*&,"T[)7 >+MJ[7GQL$WCU-*S;K@=9:6698A4[9,E13T8.6TBZ(+G;+/:_%LVK-`5'8.@N.U >+M:)WFM6`OF7K,8RL6%H'N`=2>LM:SUT!\0#CN=OQ'G?XQA_>0,C+;3RAC<4R% >+MF"Z+>.END$6/B9)4?G,%W5SO)55%F=@#]=4!SDR-C%4:0N-Y"^>LRC%35%RM >+MTRX]2D1:+-485A!STU9.OLH..;:-M>LDZ$'MQNM@ODB9G\;SUW)US3"+^41; >+MYY>`;#^R@G/+F1RW53FH<.<M@6G_3NCOW?^DD:T4!RMIX@AQA6JXLJW<5?%H >+MI.08J8XGJ0Q9&NA'+@).DY\.;.6E=I<5[OJ92)I'U/J)<<:;0;X*-$Y0L8=? >+M:'*AYLR$R=/\().:VY[:!=>8^!,Z5MMZ[AERSE7SG*M=:%?DOSN6_ZVIDT74 >+MT<Z:1DVP^8^MNV5RM\E2@=J2B:<6L%5U/NEM=F2A9R'FN4LH[(9(PQ9NL+XY >+MYW)F89Q@/:.$%+B3)^VE938D*/<WG&?#FN6<GR\;SL^L[`ZYTL:CMX7-C=B[ >+MKK,`O/#];86\A7&W:$FP5L4*N/,%]Y`H?<'`]G\SHA'=SM[,&!:-:)(I?ET4 >+M4C0[,G!-M04T@KD?#0(CFIV9XNF\4,56K=?/E\I3Q<*#Y[4ZV2X5SM)HL5X[ >+M7^K<6R>1;=WC]3WM%?6IO0_K=M>F726L4@R7%<Q"08GHX#HM$JN$_B9RU="O >+MN5>&<:WZ+0V?YB73&7ZWP?"NS'X!B79-V8YDW0Y7N];>=24S2C-PL?P;U$?B >+MM:W:A%PE;(UY:^S-ZP6Y!=#X#U!+`P0*```````=<F0Q```````````````` >+M#0`5`&=L;V)A;"]A<G)O=R]55`D``RJ`BD$)9<U!57@$`.@#9`!02P,$%``` >+M``@`'7)D,3OH[)(J````+P```!X`%0!G;&]B86PO87)R;W<O87)R;W<M;&9T >+M+6AO=BYG:6955`D``RF`BD%3><A!57@$`.@#9`!S]W2SL$QD9F!E:&!D`(+_ >+M__\K_F0!,AD9=$!\D`P#$YM/P8(5;*P,U@!02P,$%`````@`'7)D,8\A8O<I >+M````+@```!X`%0!G;&]B86PO87)R;W<O87)R;W<M<FET+6AO=BYG:6955`D` >+M`RF`BD%3><A!57@$`.@#9`!S]W2SL$QD9F!E:&!D`(+___\K_F0!,AD9=$!\ >+MD`P#$ZL+T[3N<`9K`%!+`P04````"``=<F0Q16`+_C0````X````)``5`&=L >+M;V)A;"]A<G)O=R]A<G)O=RUR:70M<VAA<G`M96YD+F=I9E54"0`#*8"*05-Y >+MR$%5>`0`Z`-D`'/W=+.P3&1GX&1H8&0`@O___RO^9`$R&1ET0'R0#`,3OTO= >+M`HE=+WVZVPZ9JZ:L96"P!@!02P,$%`````@`'7)D,;]7;'@I````+@```!D` >+M%0!G;&]B86PO87)R;W<O87)R;W<M9&XN9VEF550)``,I@(I!4WG(055X!`#H >+M`V0`<_=TL[!,9&5@9FA@9`""____*_YD`3(9&71`?)`,`Q-KBZPX=S2#-0!0 >+M2P,$%`````@`'7)D,3VB(L_9````W@```"D`%0!G;&]B86PO87)R;W<O87)R >+M;W=S+61R;W!D;W=N+61I<V%B;&5D+G!N9U54"0`#*8"*05-YR$%5>`0`Z`-D >+M`.L,\'/GY9+B8F!@X/7T<`D"TGQ`+,3!!B2S8]X;`BFV)&]W%X;_(+A@[_+) >+M0!'.`H_(8@8&_@X&!H$YC/HRT^8!!=E+/'U=V:]P\/*SL+RW45P*,L#3Q3&D >+MXM;1R=Y<#08\+O%.^8__5K'O_;)CHU)K71`K<V3)J<4O51AOJ`CZIALN<S`^ >+MG;C!P?3-Q.GSTONGA+^V#9\]T2V^YNFKY0E=LY@57GZXE^I\G['4>^U#[EV^ >+MTGR6$^3G:MSZ4I91:OWFOMV\FLF[N)\\T`;Y@,'3U<]EG5-"$P!02P,$%``` >+M``@`'7)D,5XT[M8P````-0```"``%0!G;&]B86PO87)R;W<O87)R;W<M;&9T >+M+7-H87)P+F=I9E54"0`#*8"*05-YR$%5>`0`Z`-D`'/W=+.P3&1EX&1H8&0` >+M@O___RO^9`$R&1ET0'R0#`,33P\S>^=M[EB3`,,H!@9K`%!+`P04````"``= >+M<F0Q\GE>/3`````T````'P`5`&=L;V)A;"]A<G)O=R]A<G)O=RUU<"US:&%R >+M<"YG:6955`D``RF`BD%3><A!57@$`.@#9`!S]W2SL$SD9&!E:&!D`(+___\K >+M_F0!,AD9=$!\D`P#$W</\_(#77=XYN0?8F*P!@!02P,$%`````@`'7)D,3!_ >+MVT0M````+@```!T`%0!G;&]B86PO87)R;W<O87)R;W<M9&XM9&ES+F=I9E54 >+M"0`#*8"*05-YR$%5>`0`Z`-D`'/W=+.P3&1E8&9H8&2HKZ____^_XD\61@8& >+M1@8=!B``R3`PL;;(BG-',U@#`%!+`P04````"``=<F0QCR%B]RD````N```` >+M&@`5`&=L;V)A;"]A<G)O=R]A<G)O=RUR:70N9VEF550)``,I@(I!4WG(055X >+M!`#H`V0`<_=TL[!,9&9@96A@9`""____*_YD`3(9&71`?)`,`Q.K"].T[G`& >+M:P!02P,$%`````@`'7)D,0B2B%LI````+@```!D`%0!G;&]B86PO87)R;W<O >+M87)R;W<M=7`N9VEF550)``,I@(I!4WG(055X!`#H`V0`<_=TL[!,9&5@9FA@ >+M9`""____*_YD`3(9&71`?)`,`Q.K3P+[CE@&:P!02P,$%`````@`'7)D,3OH >+M[)(J````+P```!H`%0!G;&]B86PO87)R;W<O87)R;W<M;&9T+F=I9E54"0`# >+M*8"*05-YR$%5>`0`Z`-D`'/W=+.P3&1F8&5H8&0`@O___RO^9`$R&1ET0'R0 >+M#`,3FT_!@A5LK`S6`%!+`P04````"``=<F0QHL'7[RX````O````'@`5`&=L >+M;V)A;"]A<G)O=R]A<G)O=RUL9G0M9&ES+F=I9E54"0`#*8"*05-YR$%5>`0` >+MZ`-D`'/W=+.P3&1F8&5H8&2HKZ____^_XD\61@8&1@8=!B``R3`PL?D4+%C! >+MQLI@#0!02P,$%`````@`'7)D,0`)U<LM````+@```!X`%0!G;&]B86PO87)R >+M;W<O87)R;W<M<FET+61I<RYG:6955`D``RF`BD%3><A!57@$`.@#9`!S]W2S >+ML$QD9F!E:&!DJ*^O____O^)/%D8&!D8&'08@`,DP,+&Z,$WK#F>P!@!02P,$ >+M%`````@`'7)D,0B2B%LI````+@```!T`%0!G;&]B86PO87)R;W<O87)R;W<M >+M=7`M:&]V+F=I9E54"0`#*8"*05-YR$%5>`0`Z`-D`'/W=+.P3&1E8&9H8&0` >+M@O___RO^9`$R&1ET0'R0#`,3JT\"^XY8!FL`4$L#!!0````(`!UR9#&$@D4. >+M*P```#,````?`!4`9VQO8F%L+V%R<F]W+V%R<F]W+61N+7-H87)P+F=I9E54 >+M"0`#*8"*05-YR$%5>`0`Z`-D`'/W=+.P3.1D8&5H8&2``,6?+$`F(X,.B`.2 >+M86#B:JEOE.SBE<Q)$&.P!@!02P,$%`````@`'7)D,0S8;-FF````J@```!L` >+M%0!G;&]B86PO87)R;W<O87)R;W<M9&]W;BYP;F=55`D``RF`BD%3><A!57@$ >+M`.@#9`#K#/!SY^62XF)@8.#U]'`)`M*L0,S"P08DW8R_.H`XZ8Z^C@P,UVY< >+M\8\P`O(E2UPC2H+STTK*$XM2&1Q3\I-2%3QS$]-3@U(34RH+3Z;:`!79>+HX >+MAE3<2DI(2+C!<>3_Q`]9#0Q,26R9"O]X1"NXCRQB8#SRX;]]Q]D)S*(\[!\9 >+MF3C43O`<N:I@QL',(L&@6B@QZ\JRXNE`<Q@\7?U<UCDE-`$`4$L#!!0````( >+M`!UR9#&'NC]G+0```"X````=`!4`9VQO8F%L+V%R<F]W+V%R<F]W+75P+61I >+M<RYG:6955`D``RF`BD%3><A!57@$`.@#9`!S]W2SL$QD96!F:&!DJ*^O____ >+MO^)/%D8&!D8&'08@`,DP,+'Z)+#OB&6P!@!02P,$%`````@`'7)D,5U-MI3, >+M````U````"``%0!G;&]B86PO87)R;W<O87)R;W=S+61R;W!D;W=N+G!N9U54 >+M"0`#*8"*05-YR$%5>`0`Z`-D`.L,\'/GY9+B8F!@X/7T<`D"TGQ`+,3!!B2S >+M8]X;`BFV)&]W%X;_(+A@[_+)0!'.`H_(8@8&;F$09F28-4<"*,A>XNGKRGZ% >+M@U=86'2J\?VK0*%$3Q?'D(I;R2D)"1W_O[V][<0FQ"`N+LXLS#RSH=-#^M_D >+M-8++.&.-A37-%#_/]"B4VV3!K==[?U]MLLR.@*6KW,2"F-FY)&9Z\,K,L(A; >+MOBC;[9GP%V4?PUV*+JQ\9NG\"RM8&!3D5-S79:_C!%K&X.GJY[+.*:$)`%!+ >+M`P04````"``=<F0Q!I7`'S`````U````(``5`&=L;V)A;"]A<G)O=R]A<G)O >+M=RUR:70M<VAA<G`N9VEF550)``,J@(I!4WG(055X!`#H`V0`<_=TL[!,9&7@ >+M9&A@9`""____*_YD`3(9&71`?)`,`Q./BUS"\MO?DH)R5$6X&*P!4$L#!!0` >+M```(`!UR9#&_5VQX*0```"X````=`!4`9VQO8F%L+V%R<F]W+V%R<F]W+61N >+M+6AO=BYG:6955`D``RJ`BD%3><A!57@$`.@#9`!S]W2SL$QD96!F:&!D`(+_ >+M__\K_F0!,AD9=$!\D`P#$VN+K#AW-(,U`%!+`P04````"``=<F0Q.48[+S0` >+M```X````)``5`&=L;V)A;"]A<G)O=R]A<G)O=RUL9G0M<VAA<G`M96YD+F=I >+M9E54"0`#*H"*05-YR$%5>`0`Z`-D`'/W=+.P3&1GX&1H8&0`@O___RO^9`$R >+M&1ET0'R0#`,3OTM=P@KIO0LF"FYJFW=J/0.#-0!02P,$"@``````>YEE,0`` >+M``````````````T`%0!G;&]B86PO:6-O;G,O550)``/)%HQ!"F7-055X!`#H >+M`V0`4$L#!`H``````"!R9#$````````````````2`!4`9VQO8F%L+VEC;VYS >+M+VUE;G4O550)``,K@(I!"67-055X!`#H`V0`4$L#!`H``````!UR9#$&@)M; >+M[`$``.P!```:`!4`9VQO8F%L+VEC;VYS+VUE;G4O961I="YP;F=55`D``RJ` >+MBD%3><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12````$````!`(!@```!_S >+M_V$````&8DM'1`#_`/\`_Z"]IY,```&A241!5'C:C9-!:Q-1%(4_I2!VX2(0 >+M!)<ES[T;AU(4NG73_R&X$?27N-)%D50(ZB9(<1-(0DPA$A`*@80I&@UYPTP7 >+M9A*HAM?WK@N982:3:"^<Q<"<[Q[.G8&_LP/(%72'#2/.N;6RULIX/)9VNYU` >+M=C8"XCA>JTZG(\88J=5JA237,@`6BP6^[Z=4I10`C4:#7J]'$`1,)A-:K5;R >+MRD$!4(@FPGP^IUJM<G+RB>/CCYA@CU]?2MQZ]*&88#0:Y0!**7S?1T3P/(_+ >+M\P>8SS=X?!A='+X_W<X!XCC.;<Y.J53B,MS#]+=Y]O8G+U[W`>YM90TBDG:0 >+M;`;P/(_EMUU^]V[R]-V2E]4^P%W`3Q-8:YG-9KG-(D*Y7.;B]#[+'[=Y\NHK >+M1_5![@#7LS&=<PR'PU366@"^GSWD^9L)1_5!]@+YLJVU$D611%$D81A*&(8" >+MR,%^.?T2@R"09K.9/+,Q@;4VO4:]>8[6&JTUSKE"N5NK-U=*(2)4*A6TUFFY >+MB?&_@-425TW.N?6`;K>+,>:?9H#I=`HP6"UQ_XJ_<Z+=Q/@'6MAFJRXP]C,` >+M````245.1*Y"8()02P,$%`````@`'7)D,2<@@-.&`0``G@$``"0`%0!G;&]B >+M86PO:6-O;G,O;65N=2]C;V]K:64M<V5S<VEO;BYP;F=55`D``RJ`BD%3><A! >+M57@$`.@#9`#K#/!SY^62XF)@8.#U]'`)`M("(,S!!B3E/_]/!%)L2=[N+@S_ >+M07#!WN63@2*<!1Z1Q0P,W,(@S,@P:XX$4)"]Q-/7E?T*,S>;CG5D[O<"H%!/ >+MB6M$B7-^;FYJ7@F#;VI>J6YQ9E5JBD)F<GX>ERT<<'%I)&LJ&!D8&"MX)6:7 >+M)BFH9V7FYB8FJRL$EZ1FYJ46Z2AP9924%%CIZT,D]')+BS.3,Q)S<O22J[BX >+MDHM2$TN`QI9GEF0HE&2D*KA[^@;HP+24EY?KI6?F%NCE%Z6G=QUW![IKLJ>+ >+M8TC%K;T3%_(V&`BXRK>*'D@XD"30<\AM3=!9-5.?AB06GF4SA'T]N55;@J=_ >+MN??ZKUC="JNR&?</R%Y@8-_`?$U>0^D#QY<#3#D+%TY(8(I*8'UVY8R4@9+G >+MNL"B6<L;/OT*^N7H<DTP:Z=#JPO7BI32QYPQ$ZN$?;L?7-WMP_1:Y$15P:>S >+M>>\TYMS-$9B]LT:9/^7^=<Z3@BKW'K?I&0"=Q^#IZN>RSBFA"0!02P,$"@`` >+M````'7)D,43U+^0*`P``"@,``!D`%0!G;&]B86PO:6-O;G,O;65N=2]D96PN >+M<&YG550)``,J@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!`` >+M```0"`8````?\_]A````!F)+1T0`_P#_`/^@O:>3```"OTE$051XVFV33T]3 >+M61R&G]M[[^%2^L<[4*A%P7]L@!#'8&+4H<80-[I0QV22,>XT;MR8S`<88US- >+M>KX`&5=*0B8S)!HCH%$GT6`@-+%B*:U4@6E+:6^+W-O;X\96%-[-[R3G]S[) >+M>_(>A2T20IC`<<,P_AD<',0P#"S+(I_/,S<WAQ`B"KRW;3O)]Q)"'`<D(._< >+MOBD+N3>RN+XB\[DE^>+Y0_GSQ3.R?B^$.%OW*5_,0UZO=^KOL3^1$AX\?,+T >+M=)SD8H9@H)D+YX?9O;L=5?7@\7BX?.4WA!`';-M.>@!Z>GJFGD[=)Q+I9O_^ >+M7J)#)]C3V<D/IHEHTGD[G\*V'=K:3`)!'W^-_(%MVPL`&D`L%B/4VH'/WTX- >+MAQ^/'*._[S"%0I;\V@K9;`[3W(40!L5B@5ALOA%=JQ]&[HYP_>H5O"T=-&FM >+MR(!":RC"OJK-QD:)8JG(Q./'/'_QDG*YT@"H]>GW^Z*SLW&65U8)AYMQ-BV* >+MQ3P?EDN,C8TR.3E!,IEF82'-NW<ILMFUV\"$4B=U=W?*4"A$1ZB-O5U=&(:& >+M4ZVA*INL_I\GE?[`0F()55/0-954^J/R3826%H,;-ZXQ.GJ/Z=?36%8%7==8 >+M7'Q/M5I%US4&!OJH5$H4"M:V"+2WM_Y^*OH30T.G<>Q/7+IT#E^+CI0NP\,G >+M<5V'@8%^UM?7*)<WR.4*MP`\C4(H"D:SEP,'#Q'I#'-T\"1MH3#AC@B]O?V8 >+M9H!@T(=I!E#5ANTK8"M(4STT&8)#![O0A8K?[T-5511%V=;@!D!*R<S,++5: >+MC9JLM_9;22FQK`I2[@"H5EV>/?N/\?%_F9F)X;IN8\FRU@'(9)996EK%<9SM >+MCU@J55ZETYE?'SV:9%?0C^*ID$BDB<<30(UX/$$FLTHL-D^Y_"GJNFZ*G22$ >+M^$4((0$9#`:EKNL[_L*Z/@/G^",\*$@%_@````!)14Y$KD)@@E!+`P0*```` >+M```=<F0QJ!`%,0$"```!`@``&@`5`&=L;V)A;"]I8V]N<R]M96YU+W5N9&\N >+M<&YG550)``,J@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!`` >+M```0"`8````?\_]A````!&=!34$``+&/"_QA!0````9B2T=$`/\`_P#_H+VG >+MDP````EP2%ES```+AP``"X<!DT"'4P````=T24U%!](!!PH*$-E:>[4```%^ >+M241!5'C:G9-/*,-A',8_/]RL2:*$E#E(8@=7D5PH40X[($JD(:X4*:*4(K:# >+M7)2+(BU_DAR$PG"81"GY]_-WV88Q\^]UX6?-V.:IM][W\#SO\WUZOO`[!`$@ >+MY"^R_6R>_T"X[@]%T`ZT6BV`<#]>XSH=\70B@"$@W]\(POT@\W!D!,`I3^"R >+M;6*7EQCL::P&9H$.;P'IFWS.TZ6)-_>53ZNG^Q8RBB<!.HU=1:WZ%I,B(.[L >+M,L(V]2OY"]OF-7(JYSP_)@R0U)'Q8GFL";5UV"<Q0I.#.C&36$T:,`>@'QW0 >+M&<L:QI0,I"Q=']:("I\"MP>+7*P.$QVEPC20#6!(28[Y$:*45V[@)K(*@(QZ >+MIW)6]UYX=3FX/383EYP.0%)BE,\B2;FE_5C#2SQ#KJLUN+FPO?/LD!6BWS)Y >+M%4D/",N@2MAVVP4@%L=K_JRRY/4V`H0FY#&SL`O0O6(^#*K>A8`XV6C^<I8: >+M]'ZL3]>)WK:"@'?$&UI@!]CZO"OX`)MXD^)BM.8?`````$E%3D2N0F""4$L# >+M!`H``````!UR9#%.0<_PB@(``(H"```B`!4`9VQO8F%L+VEC;VYS+VUE;G4O >+M9&5L+61I<V%B;&5D+G!N9U54"0`#*H"*05-YR$%5>`0`Z`-D`(E03D<-"AH* >+M````#4E(1%(````0````$`@&````'_/_80````9B2T=$`/\`_P#_H+VGDP`` >+M``EP2%ES```+$P``"Q,!`)J<&`````=T24U%!]0+`Q4'(]?5[$@```(7241! >+M5'C:==--:%1G&(;A*W/F]WPSDTG4.LDX1C%2I0B"4"C%WTHV50S1*''AS\)$ >+M4PI*LPG9V*Y<":UN%10$72FM*XN"N'%3NRJM1E`AJ.`BX")15(Z;(XS)]%E_ >+M]_/=\+YOY/-T805F\`07,(_?$=(WK_'F$Y!I@;_!.*;QW=I5\DF2#'55?<#7 >+MI9)!;,$L^A<6;,:WJYMB-*I5D]-/S6<R'?=G7RO4.IV?GW=D^1>:6)]^4FM5 >+M'VWVFD!H]#B.E86<VSB4SWN$[Y<M<1%]C8:S6(>DM2!!OKML>&YN3GV9PR@T >+MZWY"3V^/7]%8T>LT^FI5?V"JM6"JN\M59%;6[4N29'A)S5"2)*=ZESJ`J%XW >+MC@TAN(O!A0:_8"@4W<17_:O]@'Q?TSAJE8K+V%8.[N!@-O(<6S^;7R;C%8[F >+MLO["0+'@)G96R_[$8"YG&B>CR"Q^U"9C<>PW#$>1QQB+(L\PT='A+29R.?_B >+M:!1YN8B.(C/X,H[]C!W5JG/87BCX#P/YO,<8*!0\Q(EV!J.EDC,((;B,2@BN >+M8$\(+F!_'+N!O=FLYXOH;-8,UL2Q46RJ5!Q#?['H'M:72O[&ECCV`&-M#8I% >+MUU`.P27$W=W.8G>Y[!R&4X.1*&IO\`(CQ:*+V-79Z7B+P<;48'<*C[<SZ,<[ >+M3.9R_L&F<MEUC(3@%HZD4YE*;^=_LQ^3Z:9-X'T*):U7^"D?`0U2=7=N@B'> >+M`````$E%3D2N0F""4$L#!`H``````!UR9#%['19()P(``"<"```>`!4`9VQO >+M8F%L+VEC;VYS+VUE;G4O;6%X:6UI>F4N<&YG550)``,J@(I!4WG(055X!`#H >+M`V0`B5!.1PT*&@H````-24A$4@````\````0"`8```#)5B4$````!F)+1T0` >+M_P#_`/^@O:>3````"7!(67,```L3```+$P$`FIP8````!W1)344'U`@+#P4+ >+M0_-2J0```;1)1$%4>-J=DSW+&D$41L_>6;^;+;*VZ=.);0JM`C;6KJ"-O-@' >+MJ_R`U"$V8F45_0-*6JT4`H*@C<5N924K:K%^L)O"N+C1)KDPS'#GGCO//,P` >+M!*9I!L`_#PT(KM<KN]V.>VB:AJ9I+]<`Z_6:?#Z/#G`\'MEL-I%BI13]?A_+ >+MLE!*1?*>YP'<X,?P?1]-TVBWV]BVC6$8E$HE1`1=UR,*]$>ION]S/I\Y'H^4 >+MRV644BBE<%T7PS#0=3U4$<*/]SH<#A2+Q;\%,9O-R&:SB$A8*X\G=SH=3J<3 >+M`#\GOWC[\HWZYZ\`>)['<#@,P0@\&`P8C4;AQNE\X7*Y<#Y?PERWVZ77ZSW+ >+MMBP+UW41N?7[]#''A_?OF,_G_/@.2BFJU2JU6@W'<9YE-YO-$%XNERP6"_;[ >+M/7"#*Y5*Q)^(VR)")I,!()?+10Q+I5(A^-)M$<$P#*;3*9[G(2+$8C'2Z32& >+M82`BK]T6$>+Q.,EDDFPVRW@\IM5J,9E,,$V31"*!KNL$01"JT1\EW[N*"(U& >+M@W@\3KU>C^2?7ICC.&RWV[#@/A<*!6S;#AO?P=5J=5O_^5[_%;\!<1.72M]X >+M/O4`````245.1*Y"8()02P,$"@``````'7)D,3*(M:WP`0``\`$``!D`%0!G >+M;&]B86PO:6-O;G,O;65N=2]C=70N<&YG550)``,J@(I!4WG(055X!`#H`V0` >+MB5!.1PT*&@H````-24A$4@```!`````0"`8````?\_]A````!&=!34$``+&/ >+M"_QA!0````9B2T=$`(,`I@!_$DH\0@````EP2%ES```+$0``"Q$!?V1?D0`` >+M``=T24U%!]("`0@!%2N+IY,```%M241!5'C:I9.]2\-0%,5_$;%+QS;$2@1W >+MI_8O4.?246J+B[M0_P01K`A.XB!T4$$704T[*'[A!PBBHDXM5`2?2@AUJC;: >+M)2ZI)&EB!=_R'N?<=]Z]Y]TK&;K@/ZO+"\B*:OD%!N%=GJ"DO1,@DNR4@58I >+MWP-8WM?O;LX`-*]X6PFAGA!^69B-CS]YL%NKO7%V>O"3A:RHUHMXH%RI`NQT >+M$EB:GLD3C41=68BG*J72'D#A5P%#%T5-TPB'PQ26%P&LVZL3S,8GFUM%,NG1 >+MHE>@VPL8NI!D1;4NSO<!:'XU&<U,O(JGQSZU?P!OWTA^C20K:A;(R;(<-\W& >+M<[W^/AN+]2[=WERVNVCHHJ6:M(VS@&M@Q0Y9`+8=7+9UQ]"%RP,MD8BGIG*3 >+M@T`<V+3Q8R#EX-9\2Y`5U3)TH=AG'9`<<2[.T(7D:V)^;CX2-#2!G,.#K*-. >+M;\^[.*<'KE\X/#HF/38.P,;Z*B/#0QW'^1N]-*6FJLE#O0````!)14Y$KD)@ >+M@E!+`P0*```````=<F0QT"4%VE,"``!3`@``&@`5`&=L;V)A;"]I8V]N<R]M >+M96YU+W-A=F4N<&YG550)``,J@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````- >+M24A$4@```!`````0"`8````?\_]A````!&=!34$``+&/"_QA!0````9B2T=$ >+M`/\`_P#_H+VGDP````EP2%ES```+$@``"Q(!TMU^_`````=T24U%!](!!14Q >+M'28JQ/8```'0241!5'C:G9-/:Q-!&(>?W?PQ2WJ(:>PV)$N+EXCF[+F"T*LB >+M.7@5//D1Q&_@30H>O(L'KXH@-12M$(L@+<5@H+7$)"0A2]S5W<UD=CQ$8I(F >+M.?B#.0S#\_#C95Z`;4#]YREI@/+\`4<_^LB7.QBQ*'.CC1!=U^G>O`?`C6OK >+M1`'JML?>P2%798CJU$&I&5H!&IJN$4NE^7QTS,?R+L!(X`9#`#9OW:50*+`L >+M0@A>/W^+$,$_P62JU>I"6"E%+I=##@(&0SE?,-L@#$-\W\?SO+G2I0VDE/3[ >+M_:GW8K&X6&":)JE4"@#7=0F"`-,TIP`IY6)!^<L)>3.-#`3^<#BW\EFGMUAP >+MTN[SK6GSV_V)/@-*I5"A(AK1%PN44FPD-:R-46W#,+`LBVZWRX?]?9Z\>,/M >+MK>MHF<MC9DKG^SY6)@'`G0>/N/_P,9U.AUZOAY7/4V\V^-IT64OJYP6!$,C! >+MZ',D$@G65B]2*%S!MFT`XO$XH0C0(SKQB=XZP+.G.U-P-IO%<7X1,RZ,)^\X >+M#D1CYVI'@.-/[]^5UC,9SAHM5HT1L'EIA>Q*E%JM1J52H=UNTVK8".&13AJ\ >+MVBWCM$['HM+?C3D$:DO6]Q3X/G'?_@/R;=JP6\9@I@````!)14Y$KD)@@E!+ >+M`P0*```````=<F0QF9!B9",#```C`P``'@`5`&=L;V)A;"]I8V]N<R]M96YU >+M+WIO;VU?9FET+G!N9U54"0`#*H"*05-YR$%5>`0`Z`-D`(E03D<-"AH*```` >+M#4E(1%(````0````$`@&````'_/_80````9B2T=$````````^4.[?P````EP >+M2%ES```+$P``"Q,!`)J<&`````=T24U%!]0("A,G*9RA:!P```*P241!5'C: >+ME=)=2%-A',?Q;[K<='-+TK66C#3/9KG5E1)12(%(TD425`1=]*)22=T%!=[T >+M=AN!X%UU$P@9O5!H%):QHC0+PYHS[$S=\F6-TIWELW.&3S<&2[SI=_7G@?^' >+M/P^_5?P;+U`/U`*5P`P0!/J`7E;(JJSY('!14<JW!0)^3"837J]"-#I)5]?# >+MA*:EVH'KP-Q*T$&3*5>>/7M:#@\/RF0R+J>G5:FJ(3DR\D$.#O;)NKK=,B<G >+MIWOY8BZP!6AO;3WE]/NK&!^?X.W;=P0"`9X_?TDP&.3SYQ$:&_<1B\4JQL>C >+MPT#H+Y`#U"M*>55S\PD6%Q>)Q68H*'!@L>1C-N<AA$XH-$IQ\5J.'CV$U9K? >+M!-BS@3J_OPJ/QT,JE<+MWD!+RW$,PV#GSAW4U-203NL((7"YG)26NKU+GPV` >+M"=BX:5,YFI;DR)'#6"SY_/@1)YF<QS!T%*6,MK;S)!()['8')27%SG!XS)E] >+M0=SE*D&(!7IZGM'=W8,0"QB&CF$81"(JG9U=9#(Z;K>'7[_FTD`Z&WCUY4N8 >+M=%H0B8PQ-#3$P,`@NIY&5<<(A48)A[^2F[L:3=,08B$*1+.!OGOW'OP48H%, >+M)L/HZ%=NWKS-[]\I>GO[>/'B%;HNL-FL]/</\'UJ]B,065ZD:PT-=1?.G&G! >+MX;`A1!I=-S`,';/9C,-1Q-R<QJ7+5WCSNO\6<!&8_ML#@$^J.E$6C\]N\?DJ >+MD%)BM5IQ.M=ALZWAFZIR]<HU&O=LI[)P/C`9351J&3I7:N2!@@++4T4I4YN; >+M3VI-3<>FMF[='+3;"V\`[2WU/GWV?9?L:*V5+@L/`==*B`.H!AJ`78![Z=U5 >+MDL>#CM9:.=5_5Y[;Y].+\GG"_\9MX='Y_3XC^OJ.K/:7S?\W8,W#Y2[D\=[M >+M7E'A67__#Z`C)W<ZK%[E`````$E%3D2N0F""4$L#!`H``````!UR9#'GN`@` >+M,P(``#,"```;`!4`9VQO8F%L+VEC;VYS+VUE;G4O<&%S=&4N<&YG550)``,J >+M@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!`````0"`8````? >+M\_]A````!&=!34$``+&/"_QA!0````9B2T=$`/\`_P#_H+VGDP````EP2%ES >+M```+$0``"Q$!?V1?D0````=T24U%!]("!A,N(@R.3MD```&P241!5'C:E9._ >+M2UM1%,<_+SZ1"H]`05Y,4T<A$#+D/ZBF#QTL9HBZ^`8I2.9V,@V(2S%#IFX. >+MW200$M`QBT.F0OL$"18*530:'HT$E38O/R2W@WWY45^;^(4SG'OO.7SN]YXK >+MX:SO@`MP`T\9H&5`]$8JE1*E4DG$8C'Q]]Z?\QU)@+BY/J/5^(GD&N'%3(3% >+MQ05.3\^I61:&<<C*TBNFGC_CU^TE;S<^V'4`R`!-ZY;C+_N\27PD$=\@')X! >+MX."@P*2JDLWFB*W-4[VJ/L"7`227"X#7JR]))M\3C[]C?'R,6JV!HCQA;C:$ >+M.N&F\N-A`PD0%;/(\><]`%1?D,VM).E<@2&T(@.TVVT`OGZ[`""=*R"$&%@M >+M25):[EWP3_M0?<%.GL_G,4T3C\>#IFED,ADLRR(4"A$(!+H>W+].E\"6IFE] >+M>30:=3;1;O`_`J_72[E<QC1-=%WO;V!?]_RB`AS]D\#&=B"XUY1OPI$`Z//! >+M[_?W>S`Z.C84@9,/,L!=R^H0]*I8+&(8!@"ZKG=>05$4(I%(=Y"VM]:IF"=8 >+M]3K->I.=W4_#SH'S;WQ$+/\&B@N^+AG.\3,`````245.1*Y"8()02P,$"@`` >+M````'7)D,67W@[M,`@``3`(``!H`%0!G;&]B86PO:6-O;G,O;65N=2]F;VYT >+M+G!N9U54"0`#*H"*05-YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````0 >+M````$`@&````'_/_80````9B2T=$`/\`_P#_H+VGDP```@%)1$%4>-J=4TU( >+M%&$8?MZ9<=;:S'5L%UW9T%;;9:9BB\`*"DK"*#`+H[QHTBD[UR&"AB*"H%_R >+MTB$S^CD6'BH)]A!69$$>:JB,7-M+(#M;Z"KN[OAV&&9U^MF6GN/W/M_S/L_[ >+M?A^P"*:APS1T%(-IZ+AYJ0,;U@0!`()3N'AZS\$SEY_RH:-W>/>.R*D_"3EG >+M+]Y,X',BY2X<Z]G,#J&NIH+_UMTT=+3OTD!$;@=]_2])46V!*I^W:(Q$,@UF >+M=@L,W3O2TMD>XZ8&A2UK_C?;+B??9Q#3@B`B"*:AX_5HLNMQ_,/^^P]':6S< >+MI,47K_</\];F!FY>'RK$NG:V#7-S>6BK`Y``X-S5^,"S5^/D$#RR5.CVZ4L* >+MPR,)U`8JH*CV#+9M6H7G@[T+$1+)M,-?241]ON7E!8%\WHZ3M^81KJ\^'MMY >+MA5L.W."3YY]T`;`=_)B:Q=IH#9>5"8B$_=TC;[_VMAV^->BO7G97$&UCH6`E >+MLEGKPKL)$].9+$C``(#;11^,:>C8VZHR$?'V+6$&@)A6RT3$&]?5L6GH"UOX >+M%<Y*<SD+`/!M<@H`$&T,```RLSGW&O\7)0NDTC,`@,`*+SRR"%D22Q,01)LR >+MF<I@7ZO&C^(?H?B60I0$**I>7$!1=2B52Q!M]*,^5(4'0^^[O>4R(F$_/+)T >+MHB3K__K>/P&6WKB%\K483`````!)14Y$KD)@@E!+`P0*```````=<F0Q\+O8 >+M)?T"``#]`@``(P`5`&=L;V)A;"]I8V]N<R]M96YU+W!R:6YT7W!R979I97<N >+M<&YG550)``,J@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!`` >+M```0"`8````?\_]A````!F)+1T0`_P#_`/^@O:>3````"7!(67,```L1```+ >+M$0%_9%^1````!W1)344'TPD>#@XVO@\3X0```HI)1$%4>-J5D]]+DV$4QS_/ >+MNYE.+YJY"%%'5&O3,%JAHTLQ`XO^@")$\=Y;Z2KS.O%";X:ZP(N&E(303:1" >+MLT@%'70147C1<HDRW&)[MWSWON_I8D[M!U$'OIRK\SG/<\[WP&$$`?E%0?XQ >+M@H!,38U(//Y"7K]^)B,C]Z6M[9(,#P_+'\"WRX7:?EZ?G'Q(5U<G7N]%3-/" >+MYSO-K5O76%V-(2*DTVE$A%0J!?"X#'`"N%Q57+UZA?KZ%I:7GZ/K>7*Y/'5U >+M)YB?7V)[>YMD,HEA&+C=[I^>[BPEA:[G223>D\OET?62"H4"FJ:AE,+K]0*0 >+MR61^`C@`3-,<:FUMQN&P][OK9+,ZFYM;>#PG[0\?/BFGTTDRF<3C\3`V-@;P >+MX.@,+D]//V5M[1W9;*GXRY>OC(Y.4%%1HP6#04*A$*%0Z.^;N'FS4ZJK75)= >+M[9*.C@X9'!P4I93X?#Z)1J,2C48E'H\+('V]/;=+GS]<X_K\RY>D,VG.GCW' >+M[NXN`'-S<XR/C^/W^^GO[R>1^(S/=YZ!@0'Z>GONE+M++!:38K$H(B*&81SD >+M8K$HX7!8E%+2WMXND4A$%A<7Y%%D0@!Q[`.&PN$PEF6QL[--)!(A$`BPL;&! >+M:9HT-372V-C`[.PLGSY^I+7U`K7NX\26WG``N-'=32&?`Q'\@0![W_>HJCR& >+M99K8MDU+2S,U-35\3B38VMJBMM;-S,R3L@^@JK*2Y955EEXMD,WJH,"R+)12 >+MV):%9=MHFD;]*0^V;9/-YHX:"4S+Y,R9TS0TW,78,[`1;,M&`:9M81A%*IP. >+M'`X'2FEE2Q\"5I;?DDJE<+E<H*!0*)2F*^S?C^+;MPPB@FF:Y/.%WZ_Q?W6] >+MZ]J]'VZ*665,J<G>`````$E%3D2N0F""4$L#!`H``````!UR9#&63H:Q[P(` >+M`.\"```=`!4`9VQO8F%L+VEC;VYS+VUE;G4O<V%V95]A<RYP;F=55`D``RJ` >+MBD%3><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12````$````!`(!@```!_S >+M_V$````$9T%-00``L8\+_&$%````!F)+1T0`_P#_`/^@O:>3````"7!(67,` >+M``L2```+$@'2W7[\````!W1)344'T@$%%389;@:6*````FQ)1$%4>-J=DT]( >+MDW$8QS_O]CIG+BGGYIP*%KDY):*+(3')BQ[[<PN"Z%S08?TY%5&GH.'!#`DC >+M@@XV2,R&$%%&=,@E)IHP<?YM.=L,'>]T>_?N?==A,F>C#CWP._S@>3[/YWMX >+M`+J`['^^"P*03:;2?/L11WW92UF)2&%IFL9QSVV>/W(PZD_Q9&2%@;?C5-OK >+MZ&BQ(0*$-Y)\')^F6=7(QL*0S>:&LUE.>A^3B;E1`J6\,T:!%0(3$ZP,#@'D >+M``DY`T##F?,XG<[\9E$4D1?;4`)&KOLV>#HXA=_O9W)=8'YN#@`=?]3L["S! >+M8!!1%$D%3[`]4\6EOE4>/ANGN[L;M]N-FI9)9]1=@\)R.!SH]7JVIUK9&B_E >+MLF^!@=<S^'P^7"Y7OB^[$[/((!@,`K`<:N?:<)R!X1D\'@^UM;7,S\_GXPF" >+M4&Q@M5HQF\V<[K#@.O<``*_72V=G)S:;#8?#@:(HZ'2[>_<`1B<7`'@U&N/J >+MC5NT'#U&8U,SZRE87XJA:1KA7YM[C/<`%J-Q[O0/L1X)4UEM)Y*$R-=<I(RJ >+M`@*B7O=W`,"1`T;:ZAL!J*BHP&ZW(TD2G\?&Z'GQAK.G6A&J#N?[]^!D6>90 >+MS7Y,)A,7;][GRMT>$HD$\7B<^KHZPI%5@I$$UG)=,4!6%-2T#(#1:,1J/HC3 >+MV<3F9BZSP6!`4V1T>AV&`F\=0']?+QDYA:9I&`P&;#8;DK1%25DI`*JJ(DD2 >+MB"5%VGI`_/)IM-UFL?`]\I.J?0*JJM)@,5%C$@F%0@0"`:+1*&NK&RA*DLKR >+M,D;>?T!:6\J#[NV<YS00^L?Y+@'+!?^NWWZK$O?;]ODE`````$E%3D2N0F"" >+M4$L#!`H``````!UR9#$74F5>NP$``+L!```B`!4`9VQO8F%L+VEC;VYS+VUE >+M;G4O8W5T+61I<V%B;&5D+G!N9U54"0`#*H"*05-YR$%5>`0`Z`-D`(E03D<- >+M"AH*````#4E(1%(````0````$`@&````'_/_80````9B2T=$`/\`_P#_H+VG >+MDP````EP2%ES```+$P``"Q,!`)J<&`````=T24U%!]0+`Q4')J>_&,<```%( >+M241!5'C:G=.]3AM!%`7@;S#8BQ<DH"!4011)!T52Y`E20D=!P3.@U/L,J?(4 >+M='D'&B1$@Q0I0C1(%!11BL0&BUVS%(QAO!B4<)NK>^;GWG/F#,@S7IV;(&K_ >+M@;?*ZK[H#\`F?N`@Q?.,LE)AH:R<IOA46F"CV_4+18KW!XJE!5?88`R?.&;6 >+M'#?6;R;2:'#:Z<S8P\IH<\SMN5G?L,W+&JP-;UUU.SZ40X<X0+4X[].?OF/< >+M,*Y!:'`==>S,SOAZ7;I<FG?]^Z]]7""D$SS1X!G.RR'X*8D7?1#S.H[Q!6?X >+M&,*SS1Z*=[%C$0]OQ>7/^![Q&NOI)=,)EU.LM@+#^M%Y\5F/0G!8U^;0ZP\> >+MM4LG*/),EMHVB='[9R.3/=$@;LI;P=LX;AI%Q/.FF:92&Z,WK.WBI''!><1[ >+M>#]F_XFJHMW^MR]]!R;M>MS0VD.0`````$E%3D2N0F""4$L#!`H``````!UR >+M9#'-P4R&\`,``/`#```;`!4`9VQO8F%L+VEC;VYS+VUE;G4O;VLM,C(N<&YG >+M550)``,J@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!8````6 >+M"`8```#$M&P[````!F)+1T0```````#Y0[M_````"7!(67,```L3```+$P$` >+MFIP8````!W1)344'U`@*$CDRPT?T&````WU)1$%4>-JUE4UHG$48QW_SOOO5 >+M[2;I)FU2$ZUM4U%B41.-%BM%+%4I4BN5@A2TN5A%!1$\]*"-%Q&QZ$7PI`?! >+MFV@5\5!K45NHP2PA:;MI0VJS:7:SV=UWO]^/?7=G//1=V(BDB>(#PQQFGA_S >+MS/SG_\#_%&(M>S5-DYV=732D0BJ%E!(`!=AFE;I;>Q;X";!]:P'[?3XRF24N >+M+KH8)9/I1)I&S:*MO8V/C[],[-R9;J`=J*T)[-1J3"9=QJ;B))>*_/C;.$8B >+MSKX]C^!4*P#K@0`@M%4`]P)=@`Z@ZP(=@<^GHR&1=I&@)M%UO7FU`N!6X/W` >+M9\``$+J9()"`$#JN8]'NEVSK[208T)<EK@0^<.C%5T]N[.[9X9UX/8"F:Z`D >+MA5R*0CK!]MXH/1L[<6QG5>`#SQ\Y^L'(:V_?$]UT&T`$"&B:1C%OD$DGF1X_ >+M#\4;##XPA%&R,0K%98!_>KS]!P\?^?#PT3?N%L$(^5P6X"W@)2DEA_8-LY3- >+M<\>6+1P[]@K;!N[C_(48MF6N"-[[U#//?3KR^O&MRA^F9E4Y\<GG]$77#79$ >+M0H"BX380`B*1,'JH@S^F$TS&9ZA4K#F@!,B_@W?MVKWGJS??_:B[8#60EHU2 >+MT+'I=BI"8#J@6OZ35A;D_UQ@;&J6^60&I60",``7D#Y`]-Z[>VAPZ*&S)T9' >+M0[,+65RWAE(2@894"B$$JO6/"D&Q9#)S?9[<?)SJPL6\:Y=_!Y*``R@?T.GD >+MYKX;?OIDZ,O3$ZA&`Y1<682:0#H692-+8N:23,Y>GD35)X!L$]P4](#P!;_I >+M?_3@7=W].Q%HJ&5PL<Q5A!`HNTPU=874E?'44C+Q!7`*N`84@'I3U65D(V;E >+MTT/AR(:>2-=F_($@0BF4K".41*`02J$A<:ME2LFKI.)C^>SBC>^!'X#K'M1M >+M=3<!K`,>"T<WOW_GX!,/]O3?CVM72$S^2LVL(K2;Q2DE<<P2KE4VJKG4*>!K >+MX"J0!JI`HU45"K"!<V9^\9WYB;.C0HB'-_1M)W-M"KMLG`9RS20ODL#/7OD9 >+MP&Q=;Y6;]."_5(S4Z%SLS'O!<&38%PQ!F6^!&%!NZM2;3:#HS?5;N9D&A($G >+MHWT[8CY_4`$C0#_0YJTU1[#I>JN-)OQQX!+P`M#G52A:[?'?M";A6>5.K]1% >+M(-]R%?^IYPFO(P2`FC?4:L!_`3TV>T)`FY.?`````$E%3D2N0F""4$L#!!0` >+M```(`!UR9#%6B!P]GP```*T````<`!4`9VQO8F%L+VEC;VYS+VUE;G4O<F5M >+M;W9E+G!N9U54"0`#*H"*05-YR$%5>`0`Z`-D`.L,\'/GY9+B8F!@X/7T<`D" >+MT@(@S,$&).4__T\$4FQ)WNXN#/]!<,'>Y9.!(DF>+HXA%;>2$R180QB7\?#P >+M_#]Y`$3Q](#8U]]9'E?0.^*^I?>Y?FS*"5^.M`0@2$D$$@+BCY)O5+P0NLBV >+MI_(CR[DTD-B-';\Y#I\.7W^2CUG<Z/"!5).?/&(,#-PK=5AFOEN?#+2-P=/5 >+MSV6=4T(3`%!+`P0*```````=<F0Q.%RIG>H!``#J`0``&@`5`&=L;V)A;"]I >+M8V]N<R]M96YU+W=A:70N<&YG550)``,J@(I!4WG(055X!`#H`V0`B5!.1PT* >+M&@H````-24A$4@```!`````0"`8````?\_]A````!F)+1T0`_P#_`/^@O:>3 >+M```!GTE$051XVJ63SVL341#'/V]W(ZQMU>804#!I+^I&8PH]J5`/*N*I"M46 >+M^Q](\=:+=Z^ETOX!_0MR\=](J"#4BX<@A8!BVVW6;-[KOAT/3<*F/RT./!AF >+MYCO,F^]\X3]-97Q12N&Z+DJIH2(1P5H[\+,X+UOX^=,[1O/7*4Q6B'ZWT'$; >+MT]G'=",2HRG>FZ'Z9.'4::3_?-\7I91D8X`XCM/WSVPR4:_76T`%J-R8O/.H >+M//WX^8O%]V_\D3$Y:P<`LMML<+4XA3W01*UOM/8T'6UI_HQY.S>+T?$0QCG2 >+MH#P^,4WXXPM*.=A4\!RX?,EA\?4KC([+_\),`(CIA**C'=EM-OK_#BY*<19\ >+M(0L.Z9:G-C&RO%J[YH]<.74"YP3P5F^YZ_O;7P'4TL>-N5X\.*_!%J!$9"5- >+M[6V`#R]+.\#F\FKM02]_/HU^_B:B7'YM?\>FAXD#:[EU_^%)F"$MB.=YQRXP >+M>Z%'ESJLA;4E"J6[C!6*=*,]3"=$1R$F;M/]$U(,9J@^F^\+ZK@:`7*YW"#@ >+MNBYIFB(B)$F2!0YP?P&_]KT@M#^M6@````!)14Y$KD)@@E!+`P0*```````= >+M<F0QCMZ>A9`"``"0`@``)``5`&=L;V)A;"]I8V]N<R]M96YU+W-E87)C:%]R >+M97!L86-E+G!N9U54"0`#*H"*05-YR$%5>`0`Z`-D`(E03D<-"AH*````#4E( >+M1%(````0````$`@&````'_/_80````1G04U!``"QCPO\804````&8DM'1`#_ >+M`/\`_Z"]IY,````)<$A9<P``"Q(```L2`=+=?OP````'=$E-10?2`046!!-A >+MY94>```"#4E$051XVHV3OVM3413'/Y0.;F_1A$BHFQ#L5JL(M<3!#$5T"((( >+MQ4$746B';EE#0OX!>>X57K:8DL5%2I(EA1:$A#>(1A[IRP]]Z:.TL;SW[G$H >+M>20VA1[XPCUP[^=[SSGWPGFD`;F"GG!)B%)JIH(@D':[+;N[NV-(^E*`Z[HS >+M5:U6Q?,\,0SCPDWF_B?INHZF:6B:AJ[K`/3[?3*9#)5*A60R";`S$Z#K.I9E >+M<7)R@FF:6):%KNLL+R^C:1J.\YM6JW5Y#P`Y/CX6I92,1B-I-!H"R'`X%,=Q >+MQ'$<J=5JDTU]>:$$UW7Q/(^CHR/Z_?XY700`W_=965EA^\-M7J\M`'P*`2+" >+MYN8F^7R>O;T]]O?W*9?+9+-9`)121"(1_,%#TK<6\*]I9U,EC+6^OAZN<[F< >+M#`8#Z7:[`LC9SP<RJCR6]Z_NCO>DYH&M25(BD:#;[8:Y[_O$8C'^FO<Y;5[G >+M[<<?&#M-@.?`ERGW?#XO!P<'TNOUI-?KB6W;`LCIMWOR9WM57CR],]G`FU-C >+M-`R#5"I%-!HE"()0`+^^K[)5=C'*338V-F:/,0@"L6U;;-N6P\-#Z70Z`LBS >+M1S="UT*A(,5B<9P#S,U/443"D2FE`/C\=4`VFV5I:8G%Q45,TYQ\A"H$U.MU >+M/,\+84$04"J5&`Z'Q.-Q`$S3I-/I`#0!-6G^[HK?>:PWXX/_`*!I=H2_DL$5 >+M`````$E%3D2N0F""4$L#!`H``````!UR9#$+22;Z7`(``%P"```<`!4`9VQO >+M8F%L+VEC;VYS+VUE;G4O:6UP;W)T+G!N9U54"0`#*H"*05-YR$%5>`0`Z`-D >+M`(E03D<-"AH*````#4E(1%(````0````$`@&````'_/_80````9B2T=$`/\` >+M_P#_H+VGDP```A%)1$%4>-J-DU](4V$8QG_G[*Q)LM!85-!@],\NO.ZF+O(B >+MJ.TF@KPKB7419)*0-T8T""%02O`FBF#I=70UF1`5L4TPPPR<[4_NR)S&.$P] >+M[NAV]N=T85MM*NZ%[^K]GO=[WN=['M@N)V#4'2<-EA,PEE()8R[\U0C/3QEC >+M8V\:'B(`AK:YQLM7@YC-)LIE`TN3A?!<C)'AM[MA7,!XS8"T$L/K'44RES&9 >+M)'2]P"&KE5P^C\5R@'Q>Q^$XR?JJRJV;W14<`!*`M?D$I7*.^'R25&H%4138 >+M4#5$4=Q^18!2V:!8*'+EZD5^S$:-Y>6T"QB7`&9F)BD52WSZ.,GT]!1*9H&\ >+MGF4KM[Z#OZX7F/T>X>X=CP\0I,HBL9B,VWT;);/`FIK:4S0YD6(ULT;-"I%H >+MG%#P&\,O1EA)AVL`R>1O8M%%^GH'ZV<]!"018%%>I/=!#UE-V4'[FJN["O8\ >+MZ?^_-02<EP".'CM,9^<-Y.34KK1'O:_1M"RJJO)\:``MN\%CSS.J&B1^+:'K >+M.22AE;0B5X&7.]P`1"(_412%2#3.N;:SV&RME2L!X:_;?'N)UG/_'NWM;4Q, >+M?"`0"-'5U<69TP[\?G_YW7N?*.SC5`/@47]?J?E@D\EVY#AVNYU0\`M/!P;_ >+M_<)^5F]M:2G)LBRHZZMB,/#9T#:W*KWKC82MFM".2Q?R=8D])=!X&77,`/@# >+MJ:_H/-,>$KX`````245.1*Y"8()02P,$%`````@`'7)D,??L<<-;`0``70$` >+M`!D`%0!G;&]B86PO:6-O;G,O;65N=2]N97<N<&YG550)``,J@(I!4WG(055X >+M!`#H`V0`ZPSP<^?EDN)B8&#@]?1P"0+2`B#,P08DY3__3P12+.F.OHX,#!O[ >+MN?\DL@+Y;$G>[BX,_T%PP=[EDX$BG`4>D<4,#-Q"(,QXZ6[='Z`@>XFGKRO[ >+M)49641VE?(76ZT"A6YXNCB$5M[8&&W*U&`C,8:F.3WXJONXS]_6[QVM:6I7$ >+M[!YL$77)Z6/>R',RKM"EJ'"QV78#@3+CS9NEF6J4F1W$"YP53D@<=LKV/6P0 >+M$!H:IL+-I7/ZT*)UV4%>@?.>6ZL?$CRP:]V:O8LT+FS3?59YS*)/XW318Z\Y >+M+(**GD)'"GN^_VY=][KNE37[L1D+!!B^U/:;^)KG/8DK.CGMP?6_-4^$+":] >+M5](X$+LAW?QY_PYIQ^S:5X\N-$Z9]/;,TPCVA>$[]C`K'DE\_E]W8Z:4QE*_ >+M]'G+.!GF_:OH[[Y_\U%>IWQL/ZL+S^LZ)J`O&3Q=_5S6.24T`0!02P,$"@`` >+M````'7)D,>==W@)H`@``:`(``"8`%0!G;&]B86PO:6-O;G,O;65N=2]P<FEN >+M=%]P<F]P97)T:65S+G!N9U54"0`#*H"*05-YR$%5>`0`Z`-D`(E03D<-"AH* >+M````#4E(1%(````0````$`@&````'_/_80````9B2T=$`/\`_P#_H+VGDP`` >+M``EP2%ES```+$0``"Q$!?V1?D0````=T24U%!],)'@X3-=AJ+D<```'U241! >+M5'C:C9-!:QI1%(6_>6,ANG+,TDVQ6%SH8KIQE4W;]#]82DC^@%!H%_T+Q6HI >+MA2S:QN#&[-V:0)G5;"R(RZX$5P[,A-AH9W1N%_%-HVU*#UQX[W'/?><=S@.P >+M`5F7AM[;_`=$1#2AILF^[\NM0=M5NVN`;`_8AN=Y&VI3>N'[_H:LT6@$0*O5 >+M8F=G!]N^>4TVF]WH2P&/#,,8B`A!$"3DO;T]^OT^E4H%`*440-*CH8!OZR%D >+ML]F$W&PV&0Z'**6^-QH-7-?%==T_##2VO"`(`BS+8CJ=_M7Q(`@H%HL)-[7= >+MH-^NT>OUR&0RW/@,I5()@*/#@UK[M-/5"FQ@<%O!\?&QOBE!.IWF[*Q+L?B0 >+M>KW.T>'!<TT6$1'?]\5Q''$<1P!Q75>B*)(HBB0,0UDL%C*;7<G%Q;FT3SX) >+M(*G;-P.4RV4`',>A6JTR'H]9+.:D3)-88I91R(_9%;NY'/E\_K<'EF5MR-6Y >+MB,*?B`BK>(7$,8:A&`P&[.[FF$PFFR:>?/F,\_6<=J>;G+U^]9)XM6(5QRBE >+M4,KD\9/])(Q)D``*A?OD\R]H=[I8EL6[QEL>%`HLXQ5A&'$O96*:)H:A\#QO >+M(P?R\<-[/,\CG4Z#`?/Y?!T._3D-+B\#1(3E<LGU]9SV:2=1:O_CY]U9S_:? >+MOOD%':(I3/;YVT<`````245.1*Y"8()02P,$%`````@`'7)D,0]^-MM2`0`` >+M50$``!H`%0!G;&]B86PO:6-O;G,O;65N=2]C;W!Y+G!N9U54"0`#*H"*05-Y >+MR$%5>`0`Z`-D`.L,\'/GY9+B8F!@X/7T<`D"T@(@S,$&).4__T\$4BSICKZ. >+M#`P;^[G_)+("^6Q)WNXN#/]!<,'>Y9.!(IP%'I'%#`S<0B#,>.ENW1^@('N) >+MIZ\K^R4F1FX-R13;4R`K+GFZ.(94W-HZR;:KQ4&@=7^<^?<DMB:WKH4=:=4M >+MG3U?.>(.'-B]A?W"D>`]GM<2)=[.FY\J+R)2\G'5K]5,.QBJA,1M+IGX%IV, >+MVCU[SBF&24^R&PS3UMN^J/8_M2GEMEF30H*,^ZQEBCS.M[9]G?V_E*F.5^3X >+MQD4:NYZ^;[!MJ!9?,RTU<%JJUR27V.LOSWQ9TSFYT9#-,V[#]YB4M;8[]ELQ >+MKO.N8;'F:7ZU:]_&G?^;LHWUUWX[';IAG7;EO,G+-&OO,P>(L(:&RO*]K%>; >+M\7RF_[T]"?*/V!]P9?W5?U6WI]\2Z#L&3U<_EW5."4T`4$L#!`H``````!UR >+M9#%PU7@)#P,```\#```C`!4`9VQO8F%L+VEC;VYS+VUE;G4O961I=%]B;V]K >+M;6%R:RYP;F=55`D``RJ`BD%3><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12 >+M````$````!`(!@```!_S_V$````&8DM'1````````/E#NW\````)<$A9<P`` >+M"Q(```L2`=+=?OP````'=$E-10?4"P,6(!''@;'T````'71%6'1#;VUM96YT >+M`$-R96%T960@=VET:"!4:&4@1TE-4.]D)6X```)S241!5'C:E9-+2%51%(:_ >+M\[C7Y[WY2*5($\O>!IE1BCUH0&E6@R@:*`Z##)I$:#6(2,G"05@F!8(3 >+M'1HA:0X2H_*9F/E(NL]SSSUGG[,;J+>2R/I@33;[_];:"S;\3E+1SOW-@%RO >+M4GQ95P!562.H]OO][8T/7]`W]`$C:A"*A#'-&%*"IBIHJD:Z%J>K[0Z`IJX1 >+MM+=V]C(P,DDH'"48CA`,18A$8T2-&.&(09(.@:59"50`[J^"T\7%Q03"!M&8 >+MB6W;V$+@.`X`B@*:KN&1<3)2O0"O`58%&M#9T-C"P/`XIAG'LBPLR\)UG94K >+M"CD9Z7Q?G'5M(RAKZ^J?_RJX4%E9R?SW&*&(D>@N;#LQGJHJI'A4@HLS^-+2 >+MN'NGZ2S@714TUS<T,?%E<3F\4DZB.VS>N(&Q]V\I/U2J=CQK5X%C@*4"IZJJ >+MJA@>GR-JQ!!"((3`$0(I94(@[2BZ&V=T?,)=.>I;?AC(1T]>RJF%@")L@67; >+M6)9%(!1!NLL"X3A\FQDC.TWCZ9,V/$G)U^RX>0-`!^CI[5$FQT>9GI[&-&-X >+MO4D</7Z"I84Y%`5T7:>PH`!'V``CJ^&$("4UE;R\7&H]7]GD.@Q%!,D5!ZFN >+MJ<%Q7:8F)WG5/TC=E8LHJGI=NN[/Y>87;KOU^'[3NT^?Y[!3?&3NV,M;WQ;* >+MCI1CF'$\NDX@&&;P3?_R+ERWDS^0#81N[\J0W65Y\G!A@3QR\HPLVE=FG3M_ >+M271T]=B`3/5G7>4OW+Q<D.8\V..7I3[-!4*^S)S6U<^3F[^]EW786I+NF;^W >+M.U.VE&1+X"/_B>K3U=X#?J]5YO=:0/>_A'X`CA$QNKKIL-<`````245.1*Y" >+M8()02P,$"@``````(')D,7/K?`7<`@``W`(``!L`%0!G;&]B86PO:6-O;G,O >+M;65N=2]T:&5M92YP;F=55`D``RN`BD%3><A!57@$`.@#9`")4$Y'#0H:"@`` >+M``U)2$12````$````!`(!@```!_S_V$````&8DM'1`#_`/\`_Z"]IY,````) >+M<$A9<P``"Q(```L2`=+=?OP````'=$E-10?4"P,6&"7QJOFZ```":4E$051X >+MVGV3RTM4<13'/_?>\<[<QISQ.3I6F&$[B9!`%`U:E+1P$8328Q%$2XF(J(@0 >+M@HB""/H3VM;*:&%$CY455!*FHN;D,.HX.@]G[MRYSU\;DXMH9W<XY_LY#_A* >+M[!W7@$%?G@1N`(:_2=I%J`"1>P^?;FS84>KJZ@G5UG.@(<R5@>-O@,M`UM^\ >+M'4VQEI$'CYZ,#0P,C';U]$LOQG^P]/DE&[K)X)E^4-2.4R?[1O+Y@K.>6?L& >+M.'Z]>NO.74,((29G$F)I+2_>S^7%\W>+XM67A'@V/B^NWW\LEM?RXOSP)0OH >+M!`CX`89A2B47PC4US,_/D4VG\.8FF<B6"?5?I>?84:*-$;*YG`P<`G[Y`8HD >+M201D4%65]&J:>.MA]'P&K3Y(G;Q*:UL'I@6NZVT/E_TW",_#=L"V';I[^Y&$ >+MPY'V=BKZ)MTGNFB.QY%ED'RO]V^`9;ODBA:KV2)RH(K42II8M4PFLTHBO8EM >+M53"E$!7+V1U@V`Y+Z0*)5`ZEJHI2R2"JRAB&SI^5'$@N6CB"ZWF[`QS'HVS: >+MZ(:%[`KRA0+F>IKB9H%RQ4;&I5PQ$>QQ@N-ZZ(9-43=1'`F]6"#Q^R>V)<CK >+M!@J"LFECV7MLH`144!2"X3!!56,ZN4!F.44DVD13?2W[M2"ML48"JKHKP/WT >+M=BPS/3,;+^LE'-?C=&^G7"SJQ%I"C(Y<%%HH)+3P/A:FONN`M1-@I9*)H50R >+MT0=H0#!RMOMV0T,C(2W$XM37#\#$EG`-F`7<G492@6H@`L3:V@Y^O#!T3C3' >+M&LO`32"V5=/^^4CZCYT5H!T8WK+P:V!NY]2_IKL1,E5>RU``````245.1*Y" >+M8()02P,$"@``````(')D,<U]/GU5`0``50$``!D`%0!G;&]B86PO:6-O;G,O >+M;65N=2]A9&0N<&YG550)``,K@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````- >+M24A$4@```!`````0"`8````?\_]A````!F)+1T0`_P#_`/^@O:>3```!"DE$ >+M051XVLV2O4H#012%OPT!BT`$%5($&U.DM<D;K$_@"_@"EKZ"72`OD,9:"[N$ >+M3"DB%I)"BP27!-=`9G7-)INLBL&Q\(>=91*(/^"!T\R=^>[,F0MFE0`5<XD% >+MI9HM5]5/KU2E>O@),2H]JR#]$>*\A70[<SNE^*%^!9`,3'OO=/KRE8LI6`M0 >+M1^*"8/RHD:/HB1MO2#:SQ$9^C=7E#*_JG>U<M]G=V0:PT@"YE2QGEUWC%4>3 >+M9YKMGK9VW[_5?^&X<8+T[K1-N?4"`&$8$@7>S`PLP`8:R<)^M<8@C)"NPT%Y >+MSW1V"Q`I0'R`XF:SF#<UBUO\GSDP:O#@(UV'P)??`MN)H;'Y*[T!&^5CU^%" >+M<@\`````245.1*Y"8()02P,$"@``````(')D,5)PJP9.`P``3@,``!@`%0!G >+M;&]B86PO:6-O;G,O;65N=2]O:RYP;F=55`D``RN`BD%3><A!57@$`.@#9`") >+M4$Y'#0H:"@````U)2$12````&````!<(!@```!$ACRT````&8DM'1``````` >+M`/E#NW\````)<$A9<P``"Q,```L3`0":G!@````'=$E-10?4"`H2.#%#593C >+M```"VTE$051XVIV52T]3013'?YU>6D!00(DQBB8:-R0LC2OC@\2%;(C&Q(!; >+MOX`+'Y^`N-3OP,K'"MT8Q"`08C`^RN,6A-+V-FTI+7W2YYWKPGO)I932,LG) >+MG7MFYO^?,V?F?Z"YY@",!JP;<`,.Y1@$1!-9O%J"4D7'&]RF7"H`(/4*3Q_= >+M!N@#-*!\+(*58(+-:`HI)1_GELDEPJ2B?D;N#UGSNH"M9B)P5'WWM4)FAVP\ >+M8G<)JZ,T""Z!3D`'<`H'%5TBI40X%8J[:7HZW/2>=!U8+!H$!S@+G*@U*1GV >+M<6W@*MVG.ILB<`#RPXS7^C\-N`!T::`X!9M>#_&`2CX59^CN+7YYU(8)'("< >+M60Q2*%4L7YMUI)IO#>_B3P(;JZS/?V+DX3`Y1P?^@'8`2*D'[HND,`S#\G^U >+M.H^'!P%PM7?R:FR,ZW?N,37[G9`6/))@#SRPE<;=XL0P#-Y.JUPYUT6KRXD0 >+MXG]RA<"M")+9/.J&1C!>8'E%!9@%*E;NE%K@:C!!JTNA6-8Q#`-=5OBQ%CDT >+M6>J2EY7-",7=#,`JD#=)#"L'C@L#-^3LDL9::`?%*2B5*Y0K.KHT]I):R];] >+M&K'M;0K:'])17\@\RAQ0`@PK`OGD^1COOJD((9IZVJFM",52"<_\%XK9Y&<@ >+M`&2`LOUE=@"9_L%1>B\/-`S>(B`=]2-301:F)D+`,^"WJ4-90+>V6P;ZEB?' >+MB6UX&B9(1OSDM_ZR,#4!\`98!Q)`P4JR76-:@5[`;X\DEPB3VXD=`-]-Q=!+ >+M133/-,!+8,[<>=1,LJP6KYHDN428A?>OZP7R`I@'0J:"YBS-JKZFAAE:#+BT >+M/#GN[V>4]JXSUO@#^^VH6K-MKML'7DLJJDGL8SD@:-YSU32O>>[A6N!'J6@; >+M<-%6!F\"YTW!<]I,'%8GZHG=ODA,G_4Z]2J3MB,[M%+5&V\%>LQO'$C;:D3# >+MI?"H.2Z@Q4QPN=Z.J]L_4.1@O-1.'#T`````245.1*Y"8()02P,$"@`````` >+M(')D,7]T6R&&`0``A@$``",`%0!G;&]B86PO:6-O;G,O;65N=2]U;F1O+61I >+M<V%B;&5D+G!N9U54"0`#*X"*05-YR$%5>`0`Z`-D`(E03D<-"AH*````#4E( >+M1%(````0````$`@&````'_/_80````9B2T=$`/\`_P#_H+VGDP````EP2%ES >+M```+$P``"Q,!`)J<&`````=T24U%!]0+`Q4')$FQ>>L```$3241!5'C:I9,[ >+M:P)!%(4_T@AI;'P1D`V(!IN)+["($%`$'VD6\D`[B;!_(3"Q"L1_D)]@P,XJ >+MA86%K:5M()`F8/Z#*7(W;,SNQM73'`;FGGONG#O@#<T>T,!ZFXL';L4G!F_` >+M_4Z=$U$N@;`XL)VT@.9_#OJI)*\?*Z:6R1`(54[Y!$)&C!Y0`!X\.Q\?<0,< >+M6B9/0'B3^VU>Q-$?$1V/T/$KMKE;9>:5CF[D&0%J<,V["R=%)"%O4JPH%Y%Z >+MCK&/2%9$<GX1ZYKB&5`;*=1L)^8Y(T!;ID^4[1(3QZQ%$2G?7;%P1!QH$VT1 >+M)6/HB[/MUOG7V?J.,@\\!MW0M#B(.#@0UH!1R##?]9?&@25P*S'^X`N+?U(- >+M*#6T"`````!)14Y$KD)@@E!+`P0*```````@<F0QNS\;R!\"```?`@``'P`5 >+M`&=L;V)A;"]I8V]N<R]M96YU+VQI9VAT8G5L8BYP;F=55`D``RN`BD%3><A! >+M57@$`.@#9`")4$Y'#0H:"@````U)2$12````$````!`(!@```!_S_V$````& >+M8DM'1`#_`/\`_Z"]IY,````)<$A9<P``"Q(```L2`=+=?OP````'=$E-10?4 >+M"`H4'PS%=18E```!K$E$051XVK63/4@;81S&?W=)FAB;1F)!/<%)BH-912HJ >+MB(,?8$$<A=+!S5B$2A=Q<&L7*2UTJ(,@HH1`H2B*4,$O"$4QD@Q91"U8B29I >+M*FI,[BYOET;2,P<ZY(%W>O^_AX?_!Y1`;8`/$(;G^_?WGZ0B\/KTK)_JFAH: >+MO5X2?]*$0GN<GIPP/CH$T`YLY`&+P6!T>M;?W-/=A:(HJ)K.=49#*G,CRCP\ >+M=KF)[&Y?`"MY0#88O&[OZ$229<JM.3Y-O<=FE;'),FZ7D\Z>%P`#A8#1`$W/ >+MD<ZH?/S\A:;GK83W]UGZ.H_BL5.O/`6H+:RW&@U^)2YYXK33.S"(GA,$%N:H >+MK'!1Z7*0EJ0['3<F&`D&@_R,)3@]3_'[XI+>OGX<#CO9C,K*ZC+`AT+`V$3' >+MVE+@557=,R2KC6PV2S0<0E-UPI$($V/#`&^!8[,QWHYRT?^.BD=''!PGL#@; >+M&!R:-*LO*G&3W!6ZKHKKV'<1W7B37Z8[LI@8)./QLVX/6VQM;Q)8/6=G+SH" >+M_+AW@JO4H=!NXN+L<%E\FWEIFL!,OI9F;[%;>/!1Y>$V2J6_@J2>P55G=Y@` >+M````245.1*Y"8()02P,$"@``````(')D,1B`L*88`P``&`,``!P`%0!G;&]B >+M86PO:6-O;G,O;65N=2]Z;V]M7S$N<&YG550)``,K@(I!4WG(055X!`#H`V0` >+MB5!.1PT*&@H````-24A$4@```!`````0"`8````?\_]A````!F)+1T0````` >+M``#Y0[M_````"7!(67,```L3```+$P$`FIP8````!W1)344'U`@*$R<UB*`T >+M4P```J5)1$%4>-J5TEM(DW$8Q_&O;]L\X6SAUAQB;K:#;=I5X(T)14A14!1U >+M,82B9D@GZ**+KKKI<!?5TK#;@B"CS*2"B(YVA%#+*&DZMXR*Y6'O]NX]Y+^+ >+M-%9XTP\>>/C#_W/Q/$\!?\<'M`#-0`#X"CP!'@+W62`%>?UVX*C7ZUE97Q_" >+M9#+A\WE))A-T=_>D9#D3!4X#TPM!VR6I0+2W1\2K5T]%*O59)!(?Q<C(H!@8 >+M>":>/[\GUJY=+21)NOWOQT7`"B#:WM[F.'AP'QY/+;.S`E55,0P#7=<!\/N] >+M3$Q,+(_'DV^!]_.`!+1XO9Y@)+(;L[F0`P<.,S8VSLA(#(`'#QYS[-@I*BJ6 >+MT-JZ@]+2X@A@S0?6A4)!W.YE]/;V8;&8*2PLI*OK(J.C<?K[7V`RF1!"X'0Z >+MJ*IR^>:&_0>HJ:WU(,LR.W>&R>5R9+,9.CK.TM`0)!S>@1`_T30=J[4<N[W" >+M`3CR@>].IYU,)H,LRZAJ#D7)$(U>8&AH&$7)H>L&AJ'A<E4S-36M`FH^\&AX >+M^`.*DF5Z>I)L5F%R\@?9K/RG?@]4(,LRN9R2!)+Y6U@4BXUN"H>W%>NZ@<UF >+M8^E2!Z%0`(O%C&%HV&SEU-34,#3TCNYK/7=TW;@$_)P'8JJJE2<2R2:_WX?= >+M;D/35-+I-.GT#&:S&9\O0%;1.!<]3^Q3_`W0#\CS`,#@V%C"G4JE5@2#=4B2 >+MA-5JI;+2Q>+%%<3'QSEQ_"1;UC02*)NI3R13`=G@RD(7N;6DI.BNU^L>;6O; >+M(T<BN[XT--0]L5K+S@#1O2U^[=OK;M&YOUDXB^@!G`LAY<`J8`/0!+CFWIUV >+M"S<Z]S>++R^OBD,;_9JMF#[^-ZXB;A[9[->33R^+52'WS'\#I1:<KC)NK6_T >+MY9975U[_!545(4%DLZDM`````$E%3D2N0F""4$L#!`H``````"!R9#'P'?2R >+MN0$``+D!```D`!4`9VQO8F%L+VEC;VYS+VUE;G4O<&%S=&4M9&ES86)L960N >+M<&YG550)``,K@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!`` >+M```0"`8````?\_]A````!F)+1T0`_P#_`/^@O:>3````"7!(67,```L3```+ >+M$P$`FIP8````!W1)344'U`L#%0<BH-+<W@```49)1$%4>-J]T;U+6V$4!^`G >+MB0E2A0R66-.KT204B78HXM#1P8Q2NCAT,JB%XBS([=*AD_X!KHX."B(N;A5< >+M'+IU:[%0[*#@X"Q<E_>6^`$72^E9?KQ?AX?S\G#]P`HN950!\WB#(UR'G$4_ >+MMD*SZZ[S*KZE#?)H#@TZ17%TV!F62R6KN"H4?,)*_Q/3>%6MF$+SKB)!\?6D >+M373*?3:0KSSU#HU2CP-\:$;V,1/NWZJX'NF@]J)F%YW>H@LLA5P<&G",ER// >+M?$'\D*`G"&JMNC6\#?MQ1K8@'HLL=0EJ2)(D^85V1B9W9Y`*8K0183UD.PQP >+M'>6PCB%NC%C^'X+WZ3IM\D<P%@23#=M_*RAE",:Q%AY]OC>#^K"%?R8(F0K* >+M78+N7ZC?$CROV,/L:-57S#U&D,?WLW,G./SYVP[V\#&7RT68SLB)&P-PT1#8 >+M".UM`````$E%3D2N0F""4$L#!`H``````"!R9#&3+119]P$``/<!```:`!4` >+M9VQO8F%L+VEC;VYS+VUE;G4O<')E9BYP;F=55`D``RN`BD%3><A!57@$`.@# >+M9`")4$Y'#0H:"@````U)2$12````$````!`(!@```!_S_V$````&8DM'1`#_ >+M`/\`_Z"]IY,```&L241!5'C:K9%/2--Q&,8_1C0(`Z%IEX:74'9I&\%HARX= >+MDH)01K<.'B4HL+QX4`(1A'`'#Q:"!(*R0Q$,/5D7#Y6*-)WMUTJG^`><3CH% >+M<QD^77[OD+D61N_Q_7[>YWW>[P/_N:X``JY582(N$ZGTJ/G9&54!(H`2B<2N >+MRU0LY?,Y$SE7_I;)9$XLN`S(X_&4H.+!@4%-U@R%0@-N[X0[I187#NVQ4"AH >+M;<4Q\([+/`84#`8'*UFN!;2<2AYN;6YH?6WU:.7;EZ/QL5$!\OE\<;_?+U?D >+MCW7>W;AN3E)+BVIK:RV)_$ND^\"[VRVW[)P+P)F_#1FL<#@L0+,?/^CA@P[K >+M7ZPZW-DWK*235<]07(`:FP,`<M)I/1OH-Y&&2D[4.SBJI)-5=VQ<3T<FU=@< >+MT/&8]_-[>M+YR$2\-G@64&QD@ILWKC,Q]9XZ[R7F9J;9^+IDS#90XZUO4/KS >+M,L6?OQA^_B+OGO,=0$DGJ]ZAN/I?3NMN>Y=MJ2USZ;%THM&H@!YS\/K-V_E[ >+MN[D<.Y\6F!R+X=[YHTR@"-1<#03MM-(_W`=>'4N@Z319_P8S%,P%(:'#UP`` >+M``!)14Y$KD)@@E!+`P0*```````@<F0Q..,X0T$"``!!`@``'``5`&=L;V)A >+M;"]I8V]N<R]M96YU+V-O;&]R<RYP;F=55`D``RN`BD%3><A!57@$`.@#9`") >+M4$Y'#0H:"@````U)2$12````$````!`(!@```!_S_V$````&8DM'1`#_`/\` >+M_Z"]IY,````)<$A9<P``"Q(```L2`=+=?OP````'=$E-10?4"`H4)#8_RR"O >+M```!SDE$051XVK63RVL3412'OWNI3@A)JO1A3-(FK2LI4FP76D1$P8W2QTJZ >+M]F\0=V;AMKAVX3\@7:5=FFXDN%)$-SY2T3Q*.S.T!#)).Y.8'!>3UM!.72C^ >+MX'+@W//@GN]<^$^:`7)`LW=R/=\)J5.2"W)_+DP\`:X+I4^H-S_V@9O`^_[@ >+M@8`"69F_$6;R,H0BX#9`*\0["*MW9A98Z@_6`07N<N&BGQQ/^]8(07S,OSLF >+M'3B!=MOO;)9]Z[F@?P:&#AQ[>Q8PV/H&W8[?V7.A68/-38#\GZ;>G"ZD9&1] >+M1#`0F1L76;@FLG!59"HF@``'IQ')31=2DJPG)2$)&7T]*L8=0SB#`)+)3,GU >+MA\_D]J.7LKS\1'IH9_HQ-I/?DV&9$-*D*5-&516ZHMF^M<.#E0UBT0AUIX%I >+MV0Q^?DMN?64-6/H]1!>4H_QD1X'KNT4I8M$(XV,I8M$(9XT07\YECH@<%L@/ >+ME[I@@JHJ,$'O:H9J'N<S5Z@[#2K5+>I.@Y;GTNZT3F!\^O'>SOYPL8NN:+2M >+M&=KS^#!O=V8G9S$MFU)U&].RV=NM,6$5CXBH`(R'RY('5H$7BXN/PU\'T[0[ >+M+2Y915YM/`]<ZW_^6'^E7^34M\VX[B_U`````$E%3D2N0F""4$L#!`H````` >+M`"!R9#%*&WN*0`$``$`!```;`!4`9VQO8F%L+VEC;VYS+VUE;G4O86)O=70N >+M<&YG550)``,K@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!`` >+M```0"`8````?\_]A````!F)+1T0`_P#_`/^@O:>3````]4E$051XVMV3O4X" >+M012%O]VX,%N8#$%90M2)DO`&EOY4%H;P%"1;Z`/X>@O$QL[6BD!E82!!,I/5 >+MO3:K[`:,AI+3W9OSG3NY-P.[K],SM3W<[=7O`3EL5-K;\"$@;\M+`>0WDU\L >+M=&VOVH];#SFP?)U?X/L>3\_G+N_);;=^EWOIQRV\8L#1<97IQ,G,7FV<YFQ& >+MI(?`BBN]8#IQ&*,Z6B5K\/OBDT@/"0+O9ZO&J'(`P'AL7P"LS4K]Q]$\!4A3 >+M<07O>L"WE/+Y2`6M$D2@W0F#/Y=8U&@P6QSL#V@V*]>U,$$RR?Y]OQ.CX@VG >+MDT84W.S@7_D"5WY*+%4V<Y$`````245.1*Y"8()02P,$"@``````(')D,4T< >+MEZC``0``P`$``!H`%0!G;&]B86PO:6-O;G,O;65N=2]O<&5N+G!N9U54"0`# >+M*X"*05-YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````0````$`@&```` >+M'_/_80````9B2T=$`/\`_P#_H+VGDP```75)1$%4>-K-DTLO`U$8AI].IRJ1 >+M2MBPL!"_PP^@78M8D`C"0H2-A$1B;R.Q$8G$Y3>P9(7$)2[1$69H18=H1E6U >+M.G/:SEC0<:MBYTN^G).3O,]Y\[WGP'^J(.!\ZN"?Q#$]XH25'4<YV7:6E^=_ >+M!?&\KD[F*<GLW!0^GQ?;=O!7^E'"*C/3BZ5T(6#U`R!NJ"PL+"'[;+Q>&2%R >+M5`<"F):%WU^!90D:&YMXN$_1U3GH:N4B,E#50,$VT4ZNT/4;),G#8RJ#)$DO >+M5CU0L!WRN3PMK<T<'9XYU]?QD`O8W]^BD"^POK;%[NXV1N("2Z3)F@]?_`N1 >+MX_#@E('>R17Y_314-4I/3S=&XH)D2O]V<-&(SGTB"8!4/#P]T]C<V*._OP]+ >+MI,M&ELV:C(U.`X1<P&7TDI'A(=(9HZ3M]Z7';HO;51=05U]+>T<;\3NUK#A\ >+MK#$Q/E.,\BV%R'D,(4QD3PUQ(UI2?*Y=H2B:>_M/S[A<!__/#WP&TINTG]V[ >+M18L`````245.1*Y"8()02P,$"@``````(')D,>S*C%,5`P``%0,``!X`%0!G >+M;&]B86PO:6-O;G,O;65N=2]Z;V]M7V]U="YP;F=55`D``RN`BD%3><A!57@$ >+M`.@#9`")4$Y'#0H:"@````U)2$12````$````!`(!@```!_S_V$````&8DM' >+M1````````/E#NW\````)<$A9<P``"Q,```L3`0":G!@````'=$E-10?4"`H3 >+M)QC-?V@F```"HDE$051XVI72STL4<1C'\??,KC:ZSFQ":^L:DKJ[NK;6J2@B >+MA42DZ%`$=0HJ6G]`T:U#?T!UBV"I0Y<N09#1#XH((BBR0H,HHMBBTF9+*S1W >+M=G9V9G:F;X<,MO#BY_3PA>=U^#Q?B7^3!`:!/J`+^`8\!AX"#U@B4M6\#SB9 >+M2+1OZ.E)$PP&2283Y/,Z8V,WYTRSE`7.`H6EH'VR+(G1T8R8G!P7<W-?A*Z_ >+M$^_?OQ(O7SX5SY[=%_W]O4*6Y;O_+P:`;B`[,I)I&AD9HK6U%=>MX#@.KNMB >+M665\WR>9C#,[.QN?GLZ_!M[^!61@,)%H7W?X\$%:6EI0E#I454-1ZJBIJ240 >+M".#[@I4KPQPXL)]0J"X#:-7`0#J]CGB\'5F6"85"-#1H:)J*JJJH:@.*L@(A >+M?A&--K%F32RY6#8`06!M1T<[EF5Q\>(E<KEWR+*,YWGXOD^EXF+;98X=&T;3 >+MPD0BJYIRN0]-U<"/:#22LFV;WMZM;-FR"5F6<5T7S_O30;%HX'DNL5B*A86" >+M`SC5P*,W;W*]`P,&FA8B&*Q!DB1\O[)88@E5K<>V;4S3Q+;+>2!?W<'#:]=N >+M_'2<,HY3QC`*%`H+&(9!L6A0+)J42D54M8&)B4F^SGQ_`4Q5G_&CX[AA7<]O >+M2Z4ZD21!N6Q1*EE8E@5(1"*KL1V/;/8\'S],OP">`.9?`.#5U)3>-C\_WYU. >+MIP@$`FA:F.;F&(V-J_BLZYP^=88]VS?3I1H]>GZNR_2XLM2/W%M?K]Q+)-H^ >+M#0T=,3.90S/KUZ<>:YIZ#L@.#W:ZWY^/B0M'^T14X28070H)`QN!G<`V(+;X >+M'HW4<N/"T3XQ,W%5'-_5Z3;6<8?E)J9PZ\3NSDI^_++8F&XSE@V$:HG&5&[O >+MV)RTXZW-UW\#7O44.C:OPX0`````245.1*Y"8()02P,$%`````@`(')D,6G% >+MJ3<$`P``"`,``!P`%0!G;&]B86PO:6-O;G,O;65N=2]S8W)I<'0N<&YG550) >+M``,K@(I!4WG(055X!`#H`V0`ZPSP<^?EDN)B8&#@]?1P"0+2`B#,P08DY3__ >+M3P12;$G>[BX,8/#3>7<]D.(L\(@L9F#@%@9A1H99<R2`@NPEGKZN[)>Y!/F$ >+M%#;G3\P&"O64N$:4..?GYJ;FE3#XIN:5ZA9G5J6F*&0FY^=QV<(!%Y=&LJ:" >+MD8&!L8)78G9IDH)Z5F9N;F*RND)P26IF7FJ1C@)71DE)@96^/D1"+[>T.#,Y >+M(S$G1R^YBHLKN2@UL01H;'EF289"24:J@KNG;X`.3$MY>;E>>F9N@5Y^47IZ >+MUW%W!@;&OYXNCB$5M]9.]LV6"I1HG6_]ZL?%I%\3]78)O%ZVUN"%&;?Y6R-5 >+M@5_BC^PWS-["<?1*D,8/9JY(CXNMLX,\-N<L\>7:E1&>="DM0<3<4%A(_:)0 >+MZI[8+;<,S12[Y2P*=G[?]_SIG-]Q/[HM':PLGEL4%S*V;/YP^_JK#ST7*F.D >+M1-4;SO>V*5Z_?H_S]*8/%7=*_/L\[>M=S6:KSO1A>O#Y9X:)%/M4KZ=I"P,6 >+MQ.BIN]^MW#9GTK+,KKGO=]_97S[]YLW7>RIF,CMX<3KLOJLV_?1$#Y4.%Z6, >+M66U,"][_DVA[W]):6>"Q=Y]SP3.VAP4MQ[L_,[S8U;?N]9NW;P5YV"(C(APN >+M;^'\;Q-;9[2GZNCZ,_=V^6J(/#I]33ULTWI&`QYFAM.;.HXF,7@FB![@/</\ >+M^GI:6EM;HD;8\PEKSQK=O>?/8+=F[<//58P6@J<T?H0^UV:9\]*N9L(,C]LF >+MOI4)LS;MW:^__?7MQ7\-119\/WY*Z<#Q7E^&KJ-*<_W8KSX^^#:P<'?,#>?J >+M++8[?5^K&PXF''CY\N6.7@G?2=ZN'(4+#TBL>N7H9;A28>']]_^+N:8'K;PB >+M'1HJJLC2M6B!QN,-$X(FG4S9D#L[:JV;C5SYJ7_[DF]_VWGF^6>CN7[>FDO7 >+MA*T.5MS5\#?#Y)>&`$=!28F)Z_[[_JNO+KJ9(_>]*C9_94@4H]FYJ),QGYCW >+M/JU_+,[]E96QNTEO,BA!>[KZN:QS2F@"`%!+`P0*```````@<F0Q[M=DWP<" >+M```'`@``&0`5`&=L;V)A;"]I8V]N<R]M96YU+W5R;"YP;F=55`D``RN`BD%3 >+M><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12````$````!`(!@```!_S_V$` >+M```&8DM'1`#_`/\`_Z"]IY,```&\241!5'C:C9/-:Q-1%,5_I@5+(02K7507 >+M;@HB%A?B8"%=UD7%75!:2I'Z@8OB0MQH_0O$VEV1+E3H*HC@2@4-F.DT2BI4 >+M09(L1#,UQ@@I0V,*IL[,NRYD0LR;8"Z<U;OGW',N]\'?2@#2!<[2H40I%0K? >+M]\6V;3%-,Q!)=!2HU6JAL"Q+7->59#*I.=G3(D"]7@^UETJER&:S5"H52J42 >+MZ72ZR8WPGQ(1#,,@%HOA.%OD\_E_WC4'2JF.0@"%0H%X/-[D]K8V!>3L^P_< >+M>_281L-C=[?!PJUKC!P91BG5%-(&^+XOCN/(ZMMU.3U]14K.3WGY;E-N+#Z7 >+M$Q.S\O3%*ZE6JV)95K!(M!V("+<7ECB?F*2VTR`:[>'`/L70P2'NW'^(B&@1 >+MM0B>YS$P<(CBMRWJOWY3+%<8'-S+C^]>:(3>=@>1G@BOU]_@;+OLC_9C?[8Y >+M,W:4W,<\(J()1-H=W+QZ@37S&5^_Y-C9WF1TY#!+#U:8FSG7G8.3QX\Q?VF& >+M^;O+%#]MT-?7S_6+4XR/C88ZT`1$A/@I`_.)T6QN)79<8B:3P75=[7#:)Y;+ >+M98!<^QW,=?F=`UP.B'\`HN%.%`M:]60`````245.1*Y"8()02P,$"@`````` >+M(')D,1]5<(<.`@``#@(``!P`%0!G;&]B86PO:6-O;G,O;65N=2]S96%R8V@N >+M<&YG550)``,K@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!`` >+M```0"`8````?\_]A````!&=!34$``+&/"_QA!0````9B2T=$`/\`_P#_H+VG >+MDP````EP2%ES```+$@``"Q(!TMU^_`````=T24U%!](!!18%*U#\',$```&+ >+M241!5'C:C9.QBNI`%(;_7&]CXSR+A6]AMV7:V\@6/H2^@^F7*VHCI+:(J(5" >+M%(2;6DAA,I%H&+`),_\MEH3-)L(.'&88SO_QGS-G@,_U!H`_B#Y>+!IC&D-K >+MS<OEPO5Z74#>7@*R+&N,S6;#/,\YF\UJ3JPO`"BE&NVM5BOL]WM<KU>$80C/ >+M\TKMKR:!XS@00D`(`<=QT.OU((1`FMX0!$$EMP:83"8(PQ!!$$`IA3`,,9U. >+M,1@,\/'Q%\OE\G43[_<[`?!P./#Y?-(80Z44`?!\/O-VNW&[W19]``#\+@DD >+MR,][*26R+$.KU<+C\4!33@U0)(Q&([BN"Y+H=#I8+!88#H?06H,DC#'-)6BM >+MF20)HRCB>#PNA\>V[?+L^SX]SZN44`%(*2FE9!S'C..84131]_W*-,[G\PK` >+M^@)`DB2-%H_'(_K]VA37YX`D+,O"][MNMPO7=1MKKSB(X[C2Y>)<[*?3"4HI >+MV+9=:LM7V.UVR//\I1@`VNTVTC0%@'_?G;S_\#L7\:<0_@=?4%M6IMUIH@`` >+M``!)14Y$KD)@@E!+`P0*```````@<F0Q^->NL8@"``"(`@``'0`5`&=L;V)A >+M;"]I8V]N<R]M96YU+VYE=U]T86(N<&YG550)``,K@(I!4WG(055X!`#H`V0` >+MB5!.1PT*&@H````-24A$4@```!`````0"`8````?\_]A````!F)+1T0`_P#_ >+M`/^@O:>3````"7!(67,```L2```+$@'2W7[\````!W1)344'TPD(%302PJ1M >+MFP```#YT15AT0V]M;65N=`!#<F5A=&5D('=I=&@@5&AE($=)35`*"BAC*2`R >+M,#`S($IA:W5B("=J:6UM86,G(%-T96EN97(G,^]8```!RTE$051XVH62O6X3 >+M011&SQU/=IW8<0*6<9"P!,XJ2/P8>@J$4O`$Z:#A+:@L-WF*%3Q`'@#10$-H >+M0?P4!($(*2)BS!)LG-W->(8",,ZR3KYFFCMGSGPSPC%IMU%KE]=T]^>>`JB5 >+MSMB-MQNFT\'^G9%IF]W3F_IC\5IUUBLWE'8+`-;(_D$ZV&G&IWIRJV.F`IQK >+MJR^OTYK8P@VMB[=3JY<!/&4^&!,_=FJT6;_J=44Z5H=A>+]<+J\/!H,QX.$# >+M1V4VX7P]H=$X1Z5Z$1&,&6Q=L3^V!)?LO'_T[3N0:-_WUUNM%D$03"@8#H>? >+M,?MO4*5EO/D5`&VM.UV(=YLV/E@H+FH%H),D(0@"HB@Z`G!I'STR^!-7L];- >+M[$5J]=WVTFJO[Q.&(3J_0D&4AT-CXVU,0>&PV/@3\Y4JK>M-#(N(TE,`HG!J >+M'JO/DJ:[#(<O44HQ&FD.51TK)40*`*CI!D7<S!+67T'F+O'\140B%QBI&@Y_ >+M_(`:Z$V^X#]"P8F:$Z>*X"Q1WY,GSUXY9W\;_ID5#7P]<O0D2!2"`H$[=^_E >+MNN892&8%((HBR<R,`=WCOO1)R1J<%,GV-0G(ZF>+_;^CG!+)Z8,<Z#B_`,-A >+MM#IX^HW\`````$E%3D2N0F""4$L#!!0````(`"!R9#$A-WD,<0$``'(!```C >+M`!4`9VQO8F%L+VEC;VYS+VUE;G4O8V]P>2UD:7-A8FQE9"YP;F=55`D``RN` >+MBD%3><A!57@$`.@#9`#K#/!SY^62XF)@8.#U]'`)`M("(,S!!B3E/_]/!%)L >+M2=[N+@S_07#!WN63@2*<!1Z1Q0P,W,(@S,@P:XX$4)"]Q-/7E?T*-[,HNZK= >+M-L]:H-!_3Q?'D(I;>R_9>C4'"K0^3$^ZX'1%+Y2+^Z#HC56M2S8+%+(^TIKD >+M=D+J34PK]X?E&SR3$Q='='A.]7,4%#SVS$WE"3?+E<Q[S\Z=L4Q_)V/VL<,_ >+M)K2`75PMA'=ZA*N^,;NPQ9%VS:MNVL:_@V>$GBTM,2X6$-P>T==1ES;/[0CO >+M/>5'`M+URQ@VV>PZQAAU0]_WK::-7.0+%Y?U)^KT<J8E7._>>T^B/:-&^X#- >+MN8WMDR-SKEX\6):VSO5(=MH[-Y?B:0G"WO;F9U8E<.NK=J?-M+'*E==.?1P< >+M6/!]]?*UX3PODA25Y#9("*:K-E=?^?>\N)?=^MCB32YKDPYHW.@-W)"<\X!W >+M'P,7U[<]!?N/=@.#@L'3U<]EG5-"$P!02P,$%`````@`(')D,9!O4V0I`0`` >+M1@$``!L`%0!G;&]B86PO:6-O;G,O;65N=2]C;&]S92YP;F=55`D``RN`BD%3 >+M><A!57@$`.@#9`#K#/!SY^62XF)@8.#U]'`)`M("(,S!!B3E/_]/!%)L2=[N >+M+@S_07#!WN63@2*<!1Z1Q0P,W,(@S,@P:XX$4)"]Q-/7E?T*,Q>O$GM,AMY? >+MH%!/B6M$B7-^;FYJ7@F#;VI>J6YQ9E5JBD)F<GX>ERT<<'%I)&LJ&!D8&"MX >+M)6:7)BFH9V7FYB8FJRL$EZ1FYJ46Z2AP9924%%CIZT,D]')+BS.3,Q)S<O22 >+MJ[BXDHM2$TN`QI9GEF0HE&2D*KA[^@;HP+24EY?KI6?F%NCE%Z6G=QUW![K+ >+MVM/%,:3B5G*"!.N-`_4::EYS.AL<;]S0:)C(<;;BJK'02Z8Y63,U>`UF53RT >+M%_OY?\<7`\&75L<N7NF59F!0NL7-/M$R,Q1H#(.GJY_+.J>$)@!02P,$"@`` >+M````(')D,7W:.6-T`P``=`,``!L`%0!G;&]B86PO:6-O;G,O;65N=2]G;&]B >+M92YP;F=55`D``RN`BD%3><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12```` >+M$````!`(!@```!_S_V$````&8DM'1`#_`/\`_Z"]IY,````)<$A9<P``"Q(` >+M``L2`=+=?OP````'=$E-10?4"`H4%`E6ZSMA```#`4E$051XVEV32VLD912& >+MG^JJOB;='>TD3A)M.K'CF(QQ7`T."")B`BJ(FP$9=VX$000'QJVXU#\@7O`' >+MR"#J<D`2T"28X(PF3$R<7+J32<?N='7=OZKZJLJ%/=!Z5N?`>5[>Q?LJ_&\J >+MD[7<A:DG9H<*N6K@VIJBIF-+A';OO+/1:>XY0#SXKPT>8S,+H_7IZJ?5J?%7 >+M?,<>MTPE)?R04K$8!)Y[MS0Q_9EY>G`+2!XRRL-EX>I+B\6L^OGE9R[5%E]_ >+M@_F%RZB:AFYYR"!`/VORT8<?Q,T'K2]<3]STC;8!H/;Y\O1T[8?%I:7:.^^^ >+MIU0N3-(3$8;C$R<1E6*>1T;'>7GI-65G=Z]^M+N5B62X#"0JD)Z[\N(GDX^- >+MO?K^C9N*'<3T'$&42B,CD%(2AI(@E&2R.1ZOS^765GYZSM0[WP,=-5^J5"_. >+M7?KXVO7KHX52A?LM`XE*E(`C`K*:0D9-T3HW.-<-,OD"0B;:[VLK`+>U8JDT >+M;9MZM:$GG&S^2;%<)BM"5%4#$F8N3B%\G^'A`I;C<&[8U)Y^5@7E!4B&-,\3 >+MA;/6W^G22)D8L%V7KNFB:1KY;)I`1CA^B.UX>'Z(8[O<O=<$&`'R6N"+H&=: >+MT?+Z5OK-Q><9*1>Y=_"`^\>M?P'3@%@R/ULC\"4]T^*H<0PD,:!IH7#:F:&R >+M$<D@)V6$E"%/5<>)9,C&]CZ;6UULRZ5>G2"(8O:/3C@[:49`&Y"I6`8'PNK^ >+M_,?Z<K1^9QO;]1%!R.[N/H:N8UL6AFG0Z1GX4G)XV$BZ>ZLZ\`M@IP`[=,UO >+MVCMKP>KJ)G$"G;;.SMX^CFUC6Q:^Y]+1;73#86/E=ACH)QYP"Q!J/Y:-*'`K >+MYMEA?6)V/KV^L:V>G+:1OD"X#L(5-!J'\?*/W_KZ7VL=X"O@.\!3!B(]`=S( >+M%H;?SHP^F>3'9A[5"B4M#OU8F!W;:OSF1?:Y!+X&O@2.@5@9Z)("%(`KP%O` >+M5:#<=W@*W.G;_A4P@>@_91H0R0!%H-(75``!=/N@-]C&?P#?FYUVEU<W0@`` >+M``!)14Y$KD)@@E!+`P0*```````@<F0Q1#Y_/AX#```>`P``'0`5`&=L;V)A >+M;"]I8V]N<R]M96YU+WIO;VU?:6XN<&YG550)``,K@(I!4WG(055X!`#H`V0` >+MB5!.1PT*&@H````-24A$4@```!`````0"`8````?\_]A````!F)+1T0````` >+M``#Y0[M_````"7!(67,```L3```+$P$`FIP8````!W1)344'U`@*$R<ADGK@ >+M+@```JM)1$%4>-J5TM]+4W$8Q_'W.:W:V7%G6[CM>!1)VZ:K61`D5J20A!1= >+M%(%=!17-#)3NNN@/J.XB&`:%X$T09/2#(H((B@K1()`P)N2/-IH5K?TX<SMN >+M[MM-P0IO_%P]?.%YP?,\7XE_$P+Z@!Z@'?@&O`%>`2]9(U)-W0]<#@9;=W5T >+M1+#9;(1"09+)!./CCWZ:9B$&7`>R:T']LBR)"Q>B8FKJK<ADED0J-2?FYV?$ >+M]/2$F)AX(7I[NX4LR\_^;]P`;`=B@X-1W^#@`,W-S8#$R,@M7"X7-ML&RN4* >+MH5"`I:6EP.)B\B/PZ2\@`WW!8.N.LV=/T]C8B-VNX/%L(1Z?I5PN8[-M9'55 >+MX':[.'7J)*JJ1`&M%C@4B>P@$&A%EF54504VXG`H*(I"79V*W;X9(:KHNH^F >+M)B/T9]D`V("MV[:ULKR\S.W;8\3CLS@<"M6J8'1TC'P^3Z%@,CQ\'DUSX?76 >+M^^+QS[Y:X(>N>\.E4HGN[OWLW=N)HBB,CHZQ;U\7;K=&-INA4EG!,,)D,ED+ >+ML&I'>#TS$\<T<VB:BM_OQ3#\Y/-YW&Z-A@8OAJ%3J50Q39-2J9@$DK7`J_OW >+M'_ZRK"*65227RY).IRD43#*97^1R>0J%/$YG'9.34WQ-??\`+-2><<ZR5ER) >+M1/)`.-R&)`F*Q64Z.W>C*'965ZO4U_LH615BL1'F/B]^`-X!YE\`8'IA(=&2 >+M3J>W1R)A)$E"5>OP^_UX//5\222X>N4:QP]VT>[,=222/]O-"G?7^I$G'`[[ >+M\V"P97Y@X)P9C9Y)[=P9?J-ISAM`['Q?V\KW]^/BYE"/T.T\`O2U$!>P!S@" >+M'`",/^^Z=Q,/;P[UB-3D/7'Q:-N*1^$IZXUAY_&E8VWEY-L[8D^D);=N0-V$ >+M;CAY<K@K5`HT-SSX#6K;`MK,R2%0`````$E%3D2N0F""4$L#!`H``````"!R >+M9#$0\7GT(`(``"`"```B`!4`9VQO8F%L+VEC;VYS+VUE;G4O861D7V)O;VMM >+M87)K+G!N9U54"0`#*X"*05-YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(` >+M```0````$`@&````'_/_80````9B2T=$`/\`_P#_H+VGDP````EP2%ES```+ >+M$@``"Q(!TMU^_`````=T24U%!],)%A(?(;Z-Q\T````==$58=$-O;6UE;G0` >+M0W)E871E9"!W:71H(%1H92!'24U0[V0E;@```81)1$%4>-J-D[&*(D$0AC_' >+MYB8T]4Q-?`$Y$)PQ,;OL[@$NN.Q2DWN"37R(!1$,SB=8L$T,!DQ/8^G1,3@< >+MA8%%I*<O4$='V]TM*.ANJO[Z_ZIJN-@WP`"F",8!\^ETO_&O5SD4KLXF35,< >+MQV']^T?V6'YZ1FN-4HK%8H'O^P#?@2&`PP-[#4:\!B,`DB1!*46CT6`P&`#\ >+M.3/),>`-&PZ'!$%`%$4HI1B/QP"%.P;[_?[.`>KU.J52B<WF'[/9+(NW2@C# >+M$-=UB>.8)$D`F$ZGU&HU>KT^_7X_BQ4V@&JU>FQ@N<QNMP.@U6H!D*9I+M;* >+M8+5:`;#=;A'B6$-*B9028_*MLC(00A#',4*(#*#9;!X[_1Z`Z[K6*4@I`<Y[ >+M8)>@M0;(%NGER^?C?;W&]WT\S_N8A/+3,]UNEW:GDZL.X'D>#U=9:TVQ6"2* >+MHJQ2I5)AN5SF],_G<]KM-D!!V"9P/:HP##'&W%&W2IA,)AP.APNE4])M\HG1 >+MWUNP7]B_[R/_"?`?/,K'="1CES``````245.1*Y"8()02P,$"@``````(')D >+M,?J$A58F`@``)@(``!H`%0!G;&]B86PO:6-O;G,O;65N=2]I;F9O+G!N9U54 >+M"0`#*X"*05-YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````0````$`@& >+M````'_/_80````9B2T=$`/\`_P#_H+VGDP````EP2%ES```+$@``"Q(!TMU^ >+M_`````=T24U%!]0("A0?(AFC&^H```&S241!5'C:M9,]2%M1&(:?&"]4:^M@ >+M)S5#B9"ANHB38X<.I>BHB#JI@Z%._@UV$W_64E/;='!0$`=10C9%:1<G$>(B >+M<HO!QB7^8Y)YSFP[>>[DWMYOT@\/YX;SO]W[G>P_\A_`!<T`,T(P1,\Y\ >+MY9<]9?L!(#0Q$U)>-P7P5'C1I4XZ>\VOGSMLK7X1P##PPP1X[>!&_YOPXG+$ >+M>RLJ.4EF2*9R)%)9,C?W5+^L(]#VUIM.J!T/=[DS8-^NP`>H&]O[RL'Q&5>Y >+M6Z24?)WJ!Z!W,H24$BDEA?P#T>^?!.`'3BL,@N#@^+P#+*2TI)E@(00E/+2^ >+MZU6`H%U!;'%MN_E0O;#`LFP((:RU5BRPNS)W"+14&@2!%]55#O#2])"EH#,X >+M[R#32X\8`+,$]#^Z(W/WZ&=7"?8$9I@$1YJFN62[WL"<BP6`(SM!-/[[F-J: >+M9XZ:[01V=;G+.$#4U<;9\+IRDKCB/)UE<V'"X;#VKC$C>YZ#Z#>KC78G#KQJ >+M\(<_](U0PL-Y*NO*K!7SJ'L1[C/)0=.-_[3R^YZ/RO.Z>BXR-U;;KB_CJ'L1 >+MEY6?_)F>''\!=.$Z4R1N6P``````245.1*Y"8()02P,$"@``````(')D,0LN >+MB4CU`0``]0$``!H`%0!G;&]B86PO:6-O;G,O;65N=2]E>&5C+G!N9U54"0`# >+M*X"*05-YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````0````$`@&```` >+M'_/_80````9B2T=$`.H`Z`#C!=56VP```:I)1$%4>-K-D[%+(T$4QG_F"J_( >+M"D:M5)3S#S`BBJ#-GA"3QDJXNT8.M!`$+11[*Z_50@0-RF$34!("BN0X90M! >+M3R*GI6C41&.RT?7<K&YBB&N3B&=64MCX8&#>?/-FYGW?-_#&*"F"9Y_-/YAM >+ML+S(&P`U-YJ!S-'A@07(Y/(\UO#:C:JB*!F_WV<`JM,A&O/N:</I$`U`_3$Q >+M;@";N4-,6U#=<S."IJF4"=:GQ9N;?Y26?B0>B[*U'60ML)$$RLQ:$/OZ!Y+Y >+MXL"O=21)(GV?)1Z+<J?K^6+1C(,L\,?I$`4`29*0Y01;VT&6EY:IJ_^$KJ?( >+MX3X@4?`"1;FR#`T/`9"^SQ(*'1,.GQ$^B]+EZJ;"5DYM;37?>[_4F*I@LU6D >+MIR:G`+#;&ZFJM&$5K(R.C)!.I3B/QHA$SEGXZ9&!!S,2FX$-G]<C_-W=H;6M >+M'7M3"]?*%>N_`^SO[S'K7LQS$#15877%*]QJ&IJ6Y/0D!,"=K@-P$9-)R)?_ >+MJ5#@`V#SV]<>`[AU.D1C;'3PR0<N5V>!#RCBQ,AGL<,`(J\YL=A?B#\CNHIW >+M&8^=0[@3M3A_V0````!)14Y$KD)@@E!+`P0*```````@<F0Q=IK:*I`!``"0 >+M`0``(P`5`&=L;V)A;"]I8V]N<R]M96YU+W)E9&\M9&ES86)L960N<&YG550) >+M``,K@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!`````0"`8` >+M```?\_]A````!F)+1T0`_P#_`/^@O:>3````"7!(67,```L3```+$P$`FIP8 >+M````!W1)344'U`L#%0<D2;%YZP```1U)1$%4>-JETLTK1%$8Q_$/(<R,F.XT >+M>=UXE[<TAI2PD[)0%NS\!8KMM9&-_\%>L?(7L+1B845)-I2R\!^,S573[=[Q >+M]FR>TW/.[_N<\YP?/XN*?T;X7T@%(TF0^A1!$!W^ZGS0WF4>TW%($J"$6PPU >+M93VB(1-X^GAUWC-C`^.UGE.*-G.9#MO(%4?M(=\WZQC%*$\E0?)1L;>ES18R >+MG2/V$<3$7WDU#CG$9F/.#IJ'%UV@/+[B.B&O)=T@S`8.T32VY+*&>#UM!A6T >+M]B\X1;EOPGW5+X3?B2$L#-I%>6#.322NAJ]]9Z8*.J).(8Y^Z\0P6W"5XKA4 >+M<5W5>@P;W9."ESOO>,397SR_7!QV$IM!:L2MG,'5VX-G%'X"^`0BQ4S#@6// >+MK`````!)14Y$KD)@@E!+`P04````"``@<F0QXIST=$\!``!L`0``(P`5`&=L >+M;V)A;"]I8V]N<R]M96YU+V-O;VMI92UA8V-E<'0N<&YG550)``,K@(I!4WG( >+M055X!`#H`V0`ZPSP<^?EDN)B8&#@]?1P"0+2`B#,P08DY3__3P12;$G>[BX, >+M_T%PP=[EDX$BG`4>D<4,#-S"(,S(,&N.!%"0O<33UY7]"C,7KX+HW.>VYD"A >+MGA+7B!+G_-S<U+P2!M_4O%+=XLRJU!2%S.3\/"Y;..#BTDC65#`R,#!6\$K, >+M+DU24,_*S,U-3%97""Y)S<Q++=)1X,HH*2FPTM>'2.CEEA9G)F<DYN3H)5=Q >+M<247I2:6`(TMSRS)4"C)2%5P]_0-T(%I*2\OUTO/S"W0RR]*3^\Z[@YT5Z*G >+MBV-(Q:WD!(F)#EU"9T5Y>'AVG[AZA^]JCM>Z9_^!O'5'LEXD)R2<:-GT=<&L >+MVYU78YBO?IC?V*C(\NH-.U!:;(E%I1$S\V%IE>:R":_2.5>\-7#^=)+WI\\* >+M\262;HQ^#`Q3MH@(S?#-N@.TC,'3U<]EG5-"$P!02P,$"@``````(')D,>!` >+MRF_[`0``^P$``!H`%0!G;&]B86PO:6-O;G,O;65N=2]E>&ET+G!N9U54"0`# >+M*X"*05-YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````0````$`@&```` >+M'_/_80````9B2T=$`/\`_P#_H+VGDP```;!)1$%4>-JEDT]+&T$8QG^9V<SN >+M)AIJQ9YZ"O90$!JP+8I0"2*40D\%S\4/8(_%4_'F)Q"\Y:!(01"Q8J$8C.#- >+M2VO$2P]A8Z0UCF83%$N2C8<E-FL,"!EX+^_,\SSSO'^@RQ/JD&\\%&]TNG&< >+M'*Y;0FN-UN<4"B?,S'QJ>V<\1#D2B6!9YKU"XF[B>'H2@%JMYO\Q%$((@1`2 >+M`&4I3-L,$#1:`MG_A(T/;XC'!ZG7ZVV*EJVP;!6TT%0%J.M3ABYRK+]_32(Q >+MS/;V#XK%XG^"J(64`O>\$JS!_K>]8'G#919'GS,Q,<GL[&<<)P^`:9M(*=IK >+M\/?T*A!'A1)]RO==J51()I-^07ML(KWV'0N_3[`>11&&I'!6!B`^/L14)DLF >+MD^;Z^A_Y_+$/4!*EPD&"D=W#V\1\"SB;_8G6.MAGKX'12O!Q[NVMC=27[UX3 >+M[#@YRF47@&JUBNN6`)!AB3*-CH/$5"8+@.=Y7%Y>\>O@@/1.FK75=5XF7Q#K >+MCV&VM#&P"X:2ZNFS@6KN\(^WM;7)\M<EEE(KC+U[1>QQ+\I2&(8D)`2K"QO^ >+MG'6[3-UN,S?Y.)9KC8--=`````!)14Y$KD)@@E!+`P0*```````@<F0Q_-=E >+MA_$!``#Q`0``&@`5`&=L;V)A;"]I8V]N<R]M96YU+W)E9&\N<&YG550)``,K >+M@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!`````0"`8````? >+M\_]A````!&=!34$``+&/"_QA!0````9B2T=$`/\`_P#_H+VGDP````EP2%ES >+M```+AP``"X<!DT"'4P````=T24U%!](!!PH**89?\[T```%N241!5'C:I5+! >+M2@)1%#WC2(O6VB:#"BJU%@5M`[_`;0M_((AH&85!4,L@"2/,4`@L7(C11J)P >+MTZ(@L4!&DS`)*6QJ1G.R:0A\+6J&<<9JK`-O\=Z]Y]YSWSV`,9#O`B88!_E7 >+M@7!DZT<E6CB_DI53>KPBZX%5HBW22L&TP^%@(M$06+Z,,E<$6RVA)G(8G>A! >+M8&>M20FE)0/P7^33Z.ZRXHZ_!DU3$,0*ZE)%2<J=/6%V:@X`*%I%'@20.#B* >+MPCG@!%LK`FB`?RGC[5UHZF*U=<),=^#R/+MD5KU[W&XW1NQCJ+X^()D*@^5O >+M6GY0@>&PMY$!`$H]`DDD8[`/#V'W<!ZB)+0DY](L8IM997RU`O3V]>,X%8(H >+M"9]=?!DEY@VZ=&3=%AJF.F[OTWCF))E,R<D%AM.1=4X[S>\3;]`E[WI9X\+? >+MG1@*1&"SC,O714TN9<A]\1._W&T2?P"96?"0[?@*:<?W:EA4\_J,$#X`;"&7 >+M^]>B6'@`````245.1*Y"8()02P,$"@``````(')D,1E6VOK@`0``X`$``!X` >+M%0!G;&]B86PO:6-O;G,O;65N=2]D;W=N;&]A9"YP;F=55`D``RN`BD%3><A! >+M57@$`.@#9`")4$Y'#0H:"@````U)2$12````$````!`(!@```!_S_V$````& >+M8DM'1`#_`/\`_Z"]IY,````)<$A9<P``"Q(```L2`=+=?OP````'=$E-10?4 >+M"`H4+#+P?VZ^```!;4E$051XVJU2,4O#0!A]T4(;$(J%#AU2U)04(L28P4W_ >+M0%U<,G04='!RD`[Z#]S$Q=&YBX-&A$X%75PD'0P(M;:E)%G$%J21R)U#RT': >+M7"8_^);OWGOWOG<G(+YHS$R(`Z8X`CA].D9GV,;0&^%^O\F#\07\;Q</O5O\ >+MOB.Q%G@'(0TGOC/)`BG>WH20I%R$V!5.FD<`@,RBB+>OUZD2L'6I`@#$T1*: >+M9\_<9"5-TWH;YS+N/F[FK*Z/-O%8>P&`(H!^7`;]5JM5M&MM[*[L1<AK'16? >+MUS]S9%Y)JJK2@T:5+E^!;E\85)9E"D!*(NG3D%AGLUEZV*C2V?FT=V8SH$$0 >+MH-OM,D7;MF&:)BS+0JE48O/Q>`Q=UQF7";BNBWJ]#D510`C!8#!`&(81FX5" >+M`>ET&I5*A7$CSZ@H"LKE,AS'@2B*,`QC8E.8W)//Y^$X3OQ'"H(`A!`&R.5R >+M\'T_`O8\CQOB*B<L7NOXK_H#P2*,Y,^*.PT`````245.1*Y"8()02P,$"@`` >+M````(')D,</_:YXT`P``-`,``!P`%0!G;&]B86PO:6-O;G,O;65N=2]C86YC >+M96PN<&YG550)``,K@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@`` >+M`!`````0"`8````?\_]A````!F)+1T0`_P#_`/^@O:>3```"Z4E$051XVIV3 >+M2VA<=12'O_N_]T[FSIT[&),TL4P@9BITH3$6"U:;IA:2*,$&(JV(6MT(043( >+M3A>BB,924G!3$#>*N+3BI@@B@A@#(;$UC:EVQO'11F<RDWDXF?M^N9"1*G:A >+MO]4YG//]..?`D?E3NA#BF!!"C^-XF_^J=#H]?VSHMOA0MM\S#&/A9GV:IIT0 >+M0N155?U>5=61OPH'!GJN%\^^''_S],/Q\<'>V#",5_X)Z[H^>5=_;_3%"Z?B >+M\Y,'8DU5?@$0`.F$BG5E'==V>'$TQW@F\:IA&,]UX&0R>?R.C';AP\>G)&EC >+ME>UR!8W(`9`!&D'XV*-]>M:KE`ALB_'A+&W'F_[1BZNI5.IRM\RW'S\Q+5]; >+M6V&S;O+I=HOUMC<!E`7`_6-'/GI^)1_+W;W$@%??X61/@KMU]9QIFC^?/S4C >+M7;NTQDIUEW=^JG"A9DW$<7P)0.J,F4JE7KI=4Q;>/K0?K[%#"(01A,/[V6LW >+M62U>Y\VK)7\KX+X@""YV.+D3^+Z_9`FEN%EKS4[EL@2VA9"@6Y&H;E<XG2]3 >+ML,,S81A^<.-QY1L3W_<O;UEN5ZG1''ODR&'<G0J.:2(+&._+L&Z'8Z:D;/B^ >+M_]V_&BB*,C>@2*??G9^C\?4R+A)Q%"%+H$IP^)8D%UONK"G)*[[O%_]F((28 >+M/[BG>_']N2>5QM)G;#9MGMTH%0I6T/-0;I#(L>@2$D=[='FYZ<XT'&\3R,L` >+MDB0MG!P:>/V-$]-*_:O/*9@NBX6*%2220R4W*.6KC>F)?8-$MD67!*.]F:Y/ >+MRJW1((K.R0"Y5.*]MYZ:S?R^ND31\CG[0S7X+6!?N]UN>)ZW6A.JN55O33XX >+M/$AL6_A!P%K;%S7'.R,#1(KR3*Y5Z:]Y(:]=+5,)I0<<Q[G26<_SO.42RIY? >+MFZV#1X>SE'8MOJS;NS7'701`5=61.S/:3E93ZYJFS=SLF0S#6+AW;Y]_3_^M >+M<3J=GN?_2);E$2'$%*`#_`%C/4<^P\J]=P````!)14Y$KD)@@E!+`P0*```` >+M```@<F0Q1(DJ<ZD#``"I`P``&@`5`&=L;V)A;"]I8V]N<R]M96YU+VAE;'`N >+M<&YG550)``,K@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!`` >+M```0"`8````?\_]A````!&=!34$``+&/"_QA!0````9B2T=$````````^4.[ >+M?P````EO1D9S`````0``````$79E:P````EP2%ES```+A@``"X8!00=EMP`` >+M``=T24U%!](!"`<G!RH8)Y@```,1241!5'C:59-=:%MU&,9_Y_2D^3I=QVA@ >+MJZ4D+=6)3AGMI+4#$538IJ&E-V.MZ*9C%RL,<<R;@1=Z-V^JH$X1<7Y4V9=5 >+MBY#1*KC0SJ[0+4M7W9+T-"=IEC1I>GK:9/GP[X4Y4!]X+]Z/Y[EX7AZ`%P$! >+M")_7^S)PP>JWEJJJ[V]K:#BP96:C!@$,/M;1]BX@SKS]EE@(WQ+&6E88:QFQ >+MK$=%X-=Q\>8;1X7;Y=*V;V\\"0S7>/\)[&Y]Y#0@4A=&1/[VE$@E-*''8R*5 >+MT,1*9EEDTTD1_^"T^+YKEP"$TUY_QA*HV]/<%)C7'_R0&OL6AU0A^5N`M*N1 >+MJ*YC&'G<JAM)CR%&/V:7708ARL&,Z0,&@:B2KW,<Z^_SXRRNDPR,,3E[B[F% >+M%-=NS*(M+='?Y^>YU1A']G>A)!=Y5;;;-I[8U_%G5'_M]IWP[P!?)Y<T$?UJ >+M1`1>>%ST]G0+X"+P#.!3%.5Y0%P_=DAD1\X*[>?OQ/&C0Y:1VV1@2&U4,9YZ >+MEI6#0Y8OYX"_@'BE4OG#[S_4_L[=+/;#)Y">W(>OS6?=.10`25119`6WMYW@ >+MU#1`!M@`*@#A4#@>B2TBG&XV<WE6\VN6@"(#F(:)T^6DN:65WIYNE+HZKW4Q >+M-G9%]K:UO]+;TTVU7,7(&VR%#'P3"M^EP>UF9S[%ZVU-5*K52;__0&N[SVO[ >+M_+,O!B8F)BY_>N0@#VX&65E),W5C=K;&KRANETO[Y/QY/MR[D_KU'`/[.]G3 >+M[*'[W)<1@$ALD?F/WJ-Z+\3Z^"@13T?!66_O5%7UDFF:1=ENMU^]^N-/!'\9 >+M9S-RGW)XAD<[NS!R&3:,'&8\0FEA#NE>B&`BRS]ST\YKDY.8IODW\%#)K:[> >+M]'B:!@[/)"Z?RA7*@XK-MJ.I!2F7H5!XB&F:)!H\Z'H6@%.A]'5@&3@)G)5J >+M_QQVU-MV%TOEX?X^/YU[GZ94+H(D4]PL$5_2&+UX90.8!Z9K;[X#-&X-E`#< >+MDB3U`#-`$D@#<>`2T`)X`0T(`R\!2/P?4BVFCEHIEMM`L;8O`"6+\"\ZY6+J >+MC)UB#0````!)14Y$KD)@@E!+`P0*```````@<F0QE/&J#'T=``!]'0``'0`5 >+M`&=L;V)A;"]I8V]N<R]A;&5R="UE>&-L86TN<&YG550)``,L@(I!4WG(055X >+M!`#H`V0`B5!.1PT*&@H````-24A$4@```$````!`"`8```"J:7'>````!'-" >+M250("`@(?`ADB`````EP2%ES```+$@``"Q(!TMU^_````"5T15AT4V]F='=A >+M<F4`36%C<F]M961I82!&:7)E=V]R:W,@35@@,C`P-(=VK,\````5=$58=$-R >+M96%T:6]N(%1I;64`,CDO,2\P-`8><<H``!S-241!5'C:Y9MYE&5%G><_$7&7 >+MM[]<*K.R*K,V"HJBJ()J0%`H"Q`'4$$:6YUNW,:AE5;[J,ST')T9=<;N@V.? >+M::5=&U2.BMH]-K8@(^JHHX"`0"&R"=2^5V969N7VUKM$Q/P1]V6^+`K%]?0Y >+M\\Z)$_=EOG??_7U_W]\:$<):R__/+^\/\2-"7%<$E@,G`:L`"^2!!$B!%C`. >+M;`=&K;TY^4,!('X?#!#BNC[@3&"+Z"U=+G+^LJ":R_LC2R2A5]8Y/R_"`&*- >+M26(*UJ2RUDJBL;FD.=N:,;'>92;G[@.^#SQJ[<VM?_4`"'&=#[R(?/"Z7%_^ >+M,C%4&D[[2Q6QK!]OL`]5S"/#`!4&R,!#^#["6DR2@!!8:]&IQC3;)`<GT*/' >+M$-M'I^(CLW,VT;?3BF^V]N;M_^H`$.*Z`/@W84_X+E$T6Z.5_44Q-(CJKR+] >+M`!GZR-!'!0%>7Q55+N*5"LB<C_`4Z<0,-DDQ<8J.8W2<8)(TFQ/T;`V]_1#V >+MX7UMJ\6/:<7_T]J;?_P'`4`((>PO^8`0UVV0.?4%U9.<G0SW!PPO0P0^,O"1 >+M0>#F,$`&`2H(R)^W`17X**604B(`W6B33LZ0-MOH.$$G,29**:N$J;D('278 >+M.,:TVYCQ*?P=XT>3T<9/:-9N@*\^`1C[6VCQ.0`((00@.V\SAV4!V_DA(:[+ >+M$_HW>,7TC>D2-<#0,@A\R`1?!$(8H`(?&8;XR_H)3UF!UP%!28PQZ#BAO?L( >+M::.%B6.6%Q+>L"G!Z(@SED7X>IR>P]_#CD7\=,]2[OQYD0<>#P^D,ZU;:3WS >+M*7AP!M"_"1B+`,B$]P#UC2OR:TY:5;KEK,],7))Y:FVM-4)<MT&6@D^J_GA+ >+M4BZ&Y//@^Q`&X/N(CN:/9T#H_E:\</.\\%(Z`)+)6>+1273+:=PDB3.!.,9$ >+M$:;5Y'5#/^2_7W8_Z\ZK8&8$[!4\^$C!WGU/9?\3>PY?]?7'G]X+Q-FSOF`@ >+MC@=``2&0?^*=_3L*.:]Z\L?'AX`V$,';+U45^QE=3591*(,?@.]EV@\@\!&! >+MA_`#I*^0?@9$+D`&(2H,*%YR#E)*I)*(S/FE<TWB78><"43Q`@!)1OU6$].L >+M8<=W\(F1[_.NZRK(4P5$!F8\YIX0]N$'Y.V7?O[1ZX!F)[R^$!#D";1?^,R5 >+MU:N75OV^<BC45U[;^U=`$:ZY6I;J_ZB#N55('[0&G;HYU9"FD"00)Q"UL%&+ >+M_[3A*%]]98-;7MZD(A.L$AACW-#&>7UM(!]`(<0F*59K;*JS^QO0%HP%HR'7 >+MS_^=/0U]/^@[P#8#&*Y1/LV(2R[E-7L_N/GIM[UX8&668_A"")G)]8(2(0GX >+M0/'T)>K#G3^>M=Q_]\J>K7-']-P'4N7E\2KNX:0$D0TI'.968TW,EZ^P7'/% >+M>E0NSX'['N"B?YA@9N4EA*>LQ6B#M19K+`BP]0A"#RL$)DDQ28I-4VRBL6G* >+M1C7&JWJ?YD\V'6#CN@9B(,9L;V./YM%W:KRK+D:>TXM1#[,R:0R\SPX_\/)U >+ME6O^[:V['\R8JX40NMN'G=`$A!`^4`&&QO_ST%/='WKHD&]?_2^G"H(R>'[7 >+M\)P)^#XHP>D#,?=_Y#2JP\.0).S_P3VL_7P+-7(&WO!RPJUG(ST/J13"@IFI >+MHX_.(I>42<:G,',-1_DD1?17T+4F>N(8-HHP[09G<)`;KZAST:6]R&4*_<@/ >+ML?=:Y,M[D"_Z((P]@+GK3L8/Z_9[OKG_)6>O+*W_XTV]R]9_Y/'/9DY2'P^" >+ML-9VZ!\"_>_?6GK+]1>4;NA\(&D9XJ;AH;$BU_[T=*[<7.3B=8KSUA7(*</1 >+MM,C/#H,_M9\_?\U&?-_'3$^13HSSIEOV<$?U,KQ33\$_]634\D&DYT.]C3E6 >+M@[;+>$5?B73/(4R28)6$_BJL&$1KC9F<03^[#SL^#LT&-&=9:8]RX\OV<?7U >+M&Q'%%'WGP\ASIA`G_35,@;WC?_'LKO&#&S[ZQ)\<^NH9]W[Q'Z?7?_`[!X]F >+MOF$1"-T`%(&!&U]9_=2?GIY[5=QT@B=-0YHH^D[?2.^F#<A<+HN.0&9>-HTQ >+MSSZ!9R1F9@H;Q^S:.\669>\A6K4>V;,$5:BX$*D49M\$0DDP!MM.D"N78(UQ >+M(Q\N]A-:8PZ,PB-/0]2&=@/:-6C/L5)-<<_[1EG]Q^NQS^Q'C.R`_G?#1"_V >+MNW?Q[8?V?6?UR],+18U'-OWYSJNSFB.VUIKC?8`$%.![;;UV=C0AR0#(>8KA >+ME7UX\0SZJ9]C<CE$F(-<'A'F$+D\T?;'"&8;I-9@K;/Q;8<:U$_N02'!"K!@ >+MM4%8$"OZP8(9G8;>(L936*&PUF*TQAJ[`((QCBE&.V>(`A&"+'"@;5CS7Q2W >+M_^))KGI;'CN[$>']`U3?BCC[/*[4Z2OOW+7]J5>^;G#KFU\TL/S6;1.'.OG" >+M\SE!SV_J8&XT(6UK!OL4U3X/VYPE;<\!`J,CK$F1RL=*@?`\T"EI6(9Y``RW >+M'?2P"(R0CBG68HU!.,8AA("A*@#&&JRQ\\[1V`4&H`VL&'*A]B?;P`@0'H0% >+M%WVDYNK;-_"^L4D^^MX]<*P?"M^`95MAU2F<*:=/\48\<>6YY??>NFWB`T`L >+MA)@/D=T9GP1DOJT+T53$4%]*(0]I%)%$#5IQC58Z2YPT2>,6<;M&VJZ3-N>P >+M)D6G;70:S8^734QSSJ,_PJ0))M7H5*/3%*VU&^GBN4/WSO6\\*EQ4:>G`N=N >+MAMZJ"XU;ML#)ZV#MJ;#I+/YV[%R^=G,?-&*HM:#Y#"P]S*JAD5#/:4[=$%Z= >+MF;G?'?Z]+@`$("?:J(M.M\B<C[$IPJ2@/`@#K+4(DX`5B(YF`:,3+!:!G&>` >+MY\&UC]Y&?Q[^STO?`M8B_1`A)2CIOH]PE2#6F8AUU,?:+`<X#H1J!<[:"(?& >+M()>#4]8YOU"?@]3PKITOX8+_?0^K+V]`M`\"`R)`-3PVG53M!PJ9LV]EIO`< >+M$U`7_E&A7_1ZD*2.8EJZ4B!-$:E&I-H)?EQZ88W&DCT\EE))4BP*KMOU3<YK >+M/,V^GA4\55E)4_H<7G<A];X1D%X&P'RUD24]QHU%`&0@"`G+ET)BW'=0H`+P >+M\LR*"O_MH3)?6JL1JV8@F(%<&^J#4(2_?L6*JS[TW8-?`E3'#!8YP3NN6?/9 >+M@:%(VE1#%&,`,]2'B!/4^#12ZWFM/^=E+=9F``A!;Z\D"*!0$%RJ=U!L[^39 >+M2<-UVU+6#GZ9QZZ_'?P\*+50<QF;:3\#H=9R-4:<-8@Z3.C,G2P128\R$`AN >+M/7H:7SKZ)`PV(&Y`:F&J!5&>Y57_?."?,L5'`%XG!?[&FY:^XHP5O-BF"GEL >+M%C'7(#UU%5CPCDXCD]2%KFYM=<*@,8NS*^4Q.)BBM:50$-F0O'3=<AY]YRNX >+M:V>=][3:8*2K)Y#N?O,,R`!X_!EWPSB!H0%8.N"$[V9$XE+FF<EQOGG:_?S[ >+MN=.Y>V^3BY<584T3CDIHM8$\P]5@/1!D`$A`>UGX"S:-%&ZT4N`='$>T8VPA >+MA\F'^'N/(*($FPN<P-H@C`%$)O]QY;0?((*`%2L,DY,)Q:)@R8674+G\M>0W >+M;N1[-WV1]SRU%$Z+0/A@LW1Z>@[:$53*$'@.A$H9QB8<&`>.N.#5V[O`@D[- >+M$"?0FF/?_OW<_;(84_>PLQ*Q)(*#PC$EU:SL#9=G/J#C"+4$O,^_8?ALY:N* >+MO^<PHAV[*JVWC'=L%E5O8?.A&[ZS6:1<8,-"-84(0F08(H.0<+"7ZN8S&7G/ >+MQRA?<1W-1L+55_Q'7G'O`"P[U5%36Z?!1,.S>V'7?MCV!!R9@)EZ5F,D$,?0 >+M;L.^@UGAU1G&%6%I`N5A[MY=XXS-ALW+`H@]:"D8]J"MH)VP82B?`W*?>,WJ >+MM1WV>T!P[J!\O[_W,&8N0N4D(I_#Y',$AR>PGL)4BBY^MYL(8Y">6BR[5*[' >+M%P2.`7Y`P0\(90L:4SSSX^U<];7M'%Y^(11Z0?I@55:Y&Q#&N8$H=N^?V>6$ >+M-QKB-'.(VOF+5"]VC*F&)(8CD\RV-`P`<\`Q`:D'PP*>%.[SP+NW#KUXH.1= >+M`+P=2"7@ZZ,SYN@C+1HS`GK*&-]#S=8Q[0A=+6'#P#$C29\KO/(00>BRPB"< >+M'S(("?)Y:H]\DW.^,L[AI>=`O@?",LB\LSR=:3#64"HZ*L>IFYMM:$:.`4GB >+MM-QJP[9'((H6S&"R!@_N@*,S$)3<0YV</5R/#T,*(@6Q8VRL[>DO.Z7Z*B`' >+M>!(('O]%8^0[#=\6UI8Q@<OPY-2LZ]GUE,!89*WY7.$]'Q&&;@2NZ=$9#HB` >+MGOY>+ETAG>!A&;RB"W\F\^I)UDN0R@F>Q`M"+QHI-.HPM,REUATS*.>AMP3E >+M//MJ$B(02SJQ3;K[#F0@&'C]996+EY;]0I83^!)0;WULQ1U;^@7TE[">0L[4 >+MD$IA"CEL&#@PL@[.O/!!@`C#$PB]>,@PY+TKQUS^3I!I7CH?T+'_6$-/%7I[ >+MND`X$1`:#AYP.4!B%ASA2#\L*;&Z1[FF6"5[R-ASHP.`A(WGYU=G_\WCW"T2 >+MEMGA]7/"^AYJ[!A2NK!D"CE$*T(VVX@PF$=5>%GSTS]^^%D[+.CR!SZ;EQLX >+MY`HB$@M*LSB3<ID@JU:Z/L/,#-1J$+7`FL7)T6P$^_;`LA5P<*_S%5$#@NS^ >+M.:"6W;8L(<J27,]%JX'5!0_7[0AQW0SDEH'9S=ZR(L0IHA4YCV\!)5&3T_.) >+MCHL<PA4L4<S<5,3X%#3:+LXK3Y'D)#^:48RG(5M'%"]:7<4O%-W#Q\9EH.:X >+MGG-W;C$PX'S#Z.B"\-8L`&`,'-@-^W8ZX77"JU_D<^?A`5;U*!?AZQG9K'+I >+M3J]UA`<8@9E62B<4>H!<8Z9.IEJE>>]^JE7APIVQ$"?(V09D[2JT=F8@)<_L >+MM8Q-NK17"L&,A&+)XYJ)4YGK6P]>R$U[<_#$*"OT$5B?>6*19MG;"1C0`6'G >+M#N?TYH7OS#I+EHQ[GV@P"6\9/LB=^WMYR3H?$H&M`]6L1]R=Z`\`$_#T6*O= >+M>0`/4%N7UH9D/6!N5T3/.=(]1R%$'9OM\G@+E_M'+9.SX/L"JRU26KS08VF_ >+M9"[=Z)Q=4``OA.(0!X/SG39T%O*.MX!N!EB@W5H0VMKG,L$:L-H!HB2KBQ&K >+MU2@7G1$Z[5N@3SCM=Z<KI[GIX$P<93T!ZP'*H)68F"-JN.I,Q`FF7'"5F]&+ >+MGE-K.'(,`M]E@E9+I!+XH:2G(ME8:_.4'`*_!%[.Q6[I90`(]^#"/M<$YEE@ >+MH=+C//CXJ'O.>3"ZKS,`EJZE+@[P]R_9R[K!`%L'$8/8D#5JO6RE`&`ML!MF >+M6NGA3H]0`FJF)=+&+I=YV<#'9OFU*>6?4_,T(T'@2X)`NCDG"7.*P!=X'GQR >+M^!ZJI&#\S!`#L+[+^SMAK^/5XQCBR,7U*'N?I+!FO0MU.G$A4I]@5)?`X$K( >+M%?`*EBLOL5`3S@&V,Q]/)N:TLWTJS@3NVU/;WEGLD8"0UNKZF*:XW,.&/EB+ >+MF*YA^BK/`2`U@L`7V5J((,@I@E#@^Z[+LZD2<\?P/[/23F8QGBP7[Q(^BJ'5 >+M@F:#E>DH9]A]T*X[ZD=M!\3S"6Y2I_GI,2@/09S0GK2(=9GSJP,]`F(!238: >+MP.9,``?`@YF'T!Y@CS3%U&R=OI[3%";P4<8@HA@QVT#WEO%FZ@LF8`1!()`B >+M,P%/(:5CFLGHO+'<Y,>%6WGSH:NXO[W6U>M2.>H;0U4U>4?O0[Q]Y!`#U3+" >+M#Q']2_E%J\#KOKN4_7%OUFKW%D*A/<XG:`-QRSE++.(4@?V>LQ@Q)!W].WXF >+ME]$_@L<>;]I]4]&CG0ZQ!Y@#.?58?)23\22MFJ#4:1<=FR59/N`*D^Q5REEJ >+MD4!(!P*>0"B)9S7&+GBVJF_XUDG?XNL3J[F_?1('TBHK@QI;BOOYLV5CV*`7 >+MX>==*:U3Y-PL&T]>S3,?&."]'_XVG]OM.0DZW1*3A8D."*4^YU.2A#,'<9I> >+M#J(NLB(J:]I$P)F99G;#]J/MCI'$N&H!_2\'&G=>Z_-:G0A2+8F;@K#HON./ >+M'\,4\Z@L<N0"2QBZY$(*@5!@0D60VJS>L(O"QI\.[N?/Y`'G7(7`"!]K%3(^ >+MBDBSEIB0Z)IPBTW%E_*A=Y[+YQYX$(1:'!X['2=KP<M#&K,J7Z<G)[`U$!6@ >+M*)UH/@Z@'N,VYV0`W+M[]F<9`/,,2(%#M@=:DRFE#1XZ87[7AM"&>.TP^:=V >+M+VBW8&@E?K8Z)K"!P%,2">S:%U$I2Y8.RA,O1@J-P"`R@$QJF=XW!ZGFISL? >+M9^==C[#MB`5SZ@*8'198XWH'GJ*G4F4FBKEP>,S%_!K8G$`D`I:O@.E#KM,Q >+M8MQRJ0;VP%U/SWR_BP'&RRZB0[Z*1X[&`;YB=@SR`VJ^+Y=[(BM/.V80:(3T >+MT,ALHX.!O(>G-7U]'C^XN\[@@,?:50&]O1X]/8OW8D4M3=30U(_%M*<B9@H! >+M?_&$8D>M`*(`(G!AKCM'Z``P>`:K^N#5P\_PJ:?6\.;3CB+*$AH@\LI1_Y05 >+M\(/#L-YF8@*[X,ZG9M+]4]%S&)``[6^U<H^]H]TXMST:,3<*2\]V*\!"QXLS >+M(6NQ%@I^3$(.YM=(+5(*<H'/RF&?`T=2IJ=:!`H"!;Z"0`D"N7"="P5WZI`; >+MGE[AEKKQ7(=HODNJ73ATJRI0'H&)1_G"E2E_\T"1"P=&N7"5<"%/*X@%XMQ3 >+M0:^#RH,0Z85<X&EX]%#K("XFM#/F6YDQH/6=Z<;'O3(T][>(&I8HEF@_]QP* >+MF\YB*A"*F,`S!($@5*`J.?Q`\I+S2O16W1:83@.Y,Q"0J_KL*_J\X6`_-XQO >+M!5MRN8+U7;5HZ4I]4[")FTLK^<NM);:N2'E\O,C?77C`V;H"ZL*%O_XK87JG >+M*[CJV6Z!73!S+.66!T?_*0,@ZNP?F&<`,+ZCH*+U8U&H2C"Y,V'9^7G:DQZY >+MG%[4_)POBX5%Z`0E+"H70!R[CIFON/R2"C?=W2!)M+.>4+*]KGAZ-N#G>_J@ >+MN@;\7N?=VVVWVH-P*S\.ZHP)QHWR2;QZ>`\?N^@HCX_%?/#\*<X<DHAB5OWU >+M@MA\`;`"#GX1F@8\X;2_&SY[W['ZH9GX[@R2N'M=(,D6"FJ?G"G<]DE3>Z/? >+M!\W9B/JX(14E_'06+WC^309&:TR[C?)\I.^Y%19/\1<7E_BO]Y>YZ<G^S"W[ >+MV4_ZH):`4=">RK3>,3&SL"UI_EISYD#,YR[9[5K@.8]WGQN!$MC4N0QQSB#P >+M<C"[L#O&$17A?FX69F92/OV3J:^Z=_,`F$Z-I#,&U'='M:\=[A,ZF06O!.,/ >+M3^,O+7!@N[^@F.=[63!IBFY'Z"1Q*T%*\I$M=>Z\Z@@KRRIKPA2!$M25F_-K >+MH?<<Z/DC**QQMFXSZJ.!E#>=F?#0&W?3DW,/L:KC5'6V3GIQ",'E8.O8/3]R >+MF#6SK'`</OV38ZW1N=EO9=W"9O?VF0X`<68;,Q^=+MV&AF0*<BL,A^X8I[BI >+MESV/=I5PRCZWFENT2F3028I)G>F\="3EL3=MY[.7[&%E17>*4$B%Z^R0!U&" >+MM`5>V35-T:RJIGS]]3&?N^K$(57T@7R%#Z7+LGIC#'O/8T[$ADM['SO8X(/? >+M&;\QJPAJF?UKCEL3](`RL!18_>D!>>>J">-5-CNB-/=)*J>'I.,MUIZED*%$ >+M!EG($5FK3(J%55^YL'8HA,L:F?^?Y+M[*]RU9SE/U/IY<J8W6QCIV+WARI,F >+MN'+-;MZX*9F_KTT-*('R/1`2M58@7UR!WO,003_(/';/?=CO'4!(@5#.GUQV >+MT^'#WW_VX%N!`\#1C!?S#.ALD)!9QMP'#$/^BF^76A^P=>@]']J'75+FE:$: >+M2'I'!,&@AXPD5F<`=`O[*P`X_F\'ZCX':P%;5D3NX>?O)S'&DC;="K,,/,*^ >+M'-XY(6K](!1.`K\`7AZ1SF"^\A"D"XKX^WLG[/6W[WFS"X*,`C-`U+U!0G:E >+M&DG'#*!U[\TRW`TP_4"V5>:8:^A.SQB2MN7(DPF3QQ)TNE#;'[]$]D)?*RN: >+M+2/M1>N,.C;4QNK,'I@EJD48;9'+!.K"$+EF""NJD#;=2*8Q]SP"\8)E/G:X >+MR?6WU[\([,_HWP"2;N&/WR0ELT9A%5@&K/X?2^0_;YPT'H`,0(;0^V*8VP9K >+M+Y",CANL%92%3]]*G[#D-"L\M<"`+HUVH!;9RI*0`B$E5@B$M:211D>:YE1" >+MTC9X.8D7*H+EBMPFA3\2((LE9*&"+%01?@&\`+OW`/:GK7EFS;0-Y]YX^-E= >+MDV/O[:)^+0/`_K*-DE[FJC-3""_X6G_\MY5C"Y_Q>Z'G/)B^&Y:>*6CG+=9` >+M>Z=@U9DYRH.*-(*X)<CW^?@YV06`R(J:$X32U#(W&E&?3/!S"K^DR(U(<J<K >+M_#Z%RBMDSD/E/$2AA"KV('(%[,0T]B?)(G,[^^,':C\_7'L;-'<`8UGXBZRU >+M^H5LE?5=?&(`&%D;!F_Z1!"_Q=:Z"IH`PF70V@^Y`<B?`L$`S/X,[+1@Z8:` >+MWA6*VKAA[)F8YI1A^1D%\CV*H"CQ0C&/1VLV)6EH&E,)89\D7*K(#4G"Y0JO >+MH/"*$E7(`,A[R)R'#!6R4$#4%?9G%J$7V';MUP^G7]HV>DVF^=&,_JT3;9%[ >+MOLW2,NME5;*H,+PF\-_QJ3!]M:T]_\[3<!#*FYQ04_>"B:'0*RGT2;Q`,#>N >+M:4X9MZ]2@<J[BM;+0[!$$/9(@HHBJ$J\DL0O*;Q2!D!>92!X&0@*)CSDS@#A >+M>_,,N_:VP\F7MS7?#W,/`T>`J<SVGW?;[`FWRV=[AG.9/Q@$1E8'X;O^KAQ? >+M'A[[Y=MO90!^G\LC3'RB7W0`2,\E6WX!_+(@Z)%NE!T07DDZ`$H2K\.`@H?T >+M%>SUL),*+_3Q"B%""*Z][4CRY4?J[X?ZSS+ACV4A+_FE6_Z?!X!.;A`"/9DY >+M+`=ORRV#YOV#1W\S;[^PH)JQP'<@>$4<`ZK9*"N\2L:"8@<$#SNGL$<4TGJH >+M0.$%'G7I<>DMH_7'CAR['MB9V?QDIOGX>*__@@],=(&0R\QA`!@"=>:[EH@/ >+MOW)6AR;YS<XIB"X6R-`!$%3$`@@5A5^1^&5G!D)+[#$/&2F\4*%"!\"CDPFO >+M_\;<TQ.-Q@V0',P.7DUU:5[_UB=&NIA0R:+#(+!T)`C_ZL.]Z5F#X_HW`F$> >+M`)7Y@A*$O9*P*O&KF>VC$$V%-!(OYZ%R#H!826YZLJEO>"#^&M1N[])Z=[Q_ >+M00_V*\\,92!TSA$4,Y-8DC%B_3G%\-W_H9@N+Q_]]8#H.,-Y$(H0E"5^7N+Y >+M$HG$RRO\4.'E)5[HX>44]TUK/K0MWKEC<NYC69)S-+/W[D+G!3_,"SHTU76, >+MQL^6'"H9$/W9./F<8NXO_UTY7792S0C=>`$^HF,&72`H7^`7'`A^7N'GW!R% >+MBGMJV"_L2`\^.=F\&<RSF<:/95JO=[H\O\KF?^-38QD(W291R`JH:@9&#\CE >+M$%YV696++B[HPCIM1&Y&HV/[2YUA-PA^7N+U^D1YCY]'V.].R=H/CR3W0OQ] >+M,$>R?'XJ2V[F?MT3(K_UL;GCV)#+&%',P*AD250)_!XHG@=L7A::D8O+:8\% >+MM25,92<M%L)UE>L"^WBDC!"8KQSQQT$<@G@'1/=#.IO9]5R6SM98:'9%O^X9 >+MH=_9N<$NW]!A1`>,?,:.SG4N2ZQ"]UD5NJ7C()>M=2601)"T,DW&F6!1EL&U >+M,F$[U^TNP;7]+0\^_@X.3LX#H;KZ7N'"RBC!<?TP.;_38J$2-1V!LCGN`J,# >+M2-)I9?\N!/\]')V=]Q&R"Q#ON%EU?6;1SH"%[N<\"-US9X^_M;_CP\[B]W5\ >+M_CA`3G2]J!CLFFW7_#L7^/C7_P-T-G<.]]QF/`````!)14Y$KD)@@E!+`P04 >+M````"``@<F0Q"!>@CQ4!```W`0``'0`5`&=L;V)A;"]I8V]N<R]P9RUL86YD >+M<V-A<&4N9VEF550)``,L@(I!4WG(055X!`#H`V0`<_=TL[!,5&!08#CRG^'_ >+M___OW[^_?__^^?/G=^_>O6K5JEFS9G5U=965E:6EI86&AKJZNAH:&BHJ*@H* >+M"C(P,!PX<("!%*#XDX61@4&`00?$`=GIP+I%0:4O)7/>,^8U.:^WO6IV>K5; >+MZ*26C5_"^DV!;]VWL*:?4,G\86TBQWXCV4O7,)+QF#;C7]FI#S985.H>.I'& >+MD/10JJ[5U?F+IT;=::MCB?4/-NWUUF?CXV'598KAYV;6+P_IGS!Q4G#RU&G3 >+M9WA,GAV:D=F;'Y;)5&K@H%&AR\C'S[1,9^%*G6Y^WK1R5RX[=GY+EQWVG&PL >+M1_S9]C>:<2S57KVVH4"_6I_5QJ[WY/SM-V^=F'G_P4-U109K`%!+`P04```` >+M"``@<F0Q[L;/_#D````]````&``5`&=L;V)A;"]I8V]N<R]297-T;W)E+F=I >+M9E54"0`#+("*05-YR$%5>`0`Z`-D`'/W=+.P3.1BX&1H8`"!____*_YD861@ >+M8&30`?%!,@Q,(CX-G&5=>VYDYNW:KG2D2.IO[M1`!@9K`%!+`P04````"``@ >+M<F0Q^V&O=)0```"7````(P`5`&=L;V)A;"]I8V]N<R]P9RUL86YD<V-A<&4M >+M<VUA;&PN9VEF550)``,L@(I!4WG(055X!`#H`V0`<_=TL[!,%&`08-C\G^'_ >+M___OW[^_?__^^?/G]^S9LWKUZN[N[O+R\O3T=#<W-V5E908&A@,'#C#`@.)/ >+M%D8&!AX&'1`'9(8#B\N$DYZK8Q38F8-.W"QJ5-G0<67ENC5/PR0T-)HE_0P/ >+MI')V[CN@T+-UTQ,CZS/]A28<`LN4A%,T!/AVWPXIOZ#")S^Y0*:'@<$:`%!+ >+M`P04````"``@<F0Q*C,3-!T!```^`0``'``5`&=L;V)A;"]I8V]N<R]P9RUP >+M;W)T<F%I="YG:6955`D``RR`BD%3><A!57@$`.@#9`!S]W2SL$Q48%!@./*? >+MX?___^_?O[]___[Y\^=W[]Z]:M6J6;-F=75UE965I:6EA8:&NKJZ&AH:*BHJ >+M"@H*,C`P'#AP@($4H/B3A9&!08!!!\0!V>G`NEM!I2\E<]Z*'PPYKYFR?R]) >+M?2/%?L'F"/=EK6D'#VKL8.D\GFR8<+;!;/YGSC6>C!U'I\[JXI)H_Z"XLK0P >+M\.+J]S5!N^Z_TXIZ6W+*/7/7FEGL,F66V37Z+)PZ3/Q\C/HY:F:,/':>C64! >+M54&]Y;-FS\FMFCFM1'M!\:+J\MJT@B45X4RV,YKM&/GXF38NU/?AY]UA4LG5 >+MS<[?UK-)EY.-Y;0UV[&=$1MTMFQ+.YYHQ]K9/77_]*8+]^T#5C]=/?>%@"*# >+M-0!02P,$"@``````(')D,?DX%/3U#@``]0X``!D`%0!G;&]B86PO:6-O;G,O >+M475E<W1I;VXN<&YG550)``,L@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````- >+M24A$4@```#`````P"`8```!7`OF'````!F)+1T0```````#Y0[M_````"7!( >+M67,```L2```+$@'2W7[\````!W1)344'U`@)%0TZ84PVM@``#H))1$%4>-KM >+MFFN,7.5YQW_G-K>=G=F=O=K>RZR-L;'#Q?9B"4@-!K5R2)I^H$5\`(34IFJK >+MJ@)556DKBE!0^P$)(2JU:JM*Q"E-(4$U$"@A<6HP$(P!&WQ?[WUW9G9W[C-G >+MSIES[X<],\R:O1@2^J4YTJOWS,Q[SO[_S_U]WH5?7[^^?JE+^#(/_?DMN[]9 >+MT(W=EN/>9KGN9A!P!6$[@A"7)!D$`5&6$001UW407`<<!\MU<3SAC.(YANVZ >+MHNMYKT4#2OW[GTX\"ZA?&8%';[O^=\JN\,?ENG&=K"A#B=X^XFU11,\A*@F$ >+M`P$D46!3K(V@+.,Y#HY9Q](U7,L"P/,\ZI;-8K4&MHWM.F0U@YQND-?JB()8 >+M=CUO"GCME;&YOP.T7XK`X[??=$VZJOU9W>.AKN[>]LYPD,&!+?3$8X1<&Z-< >+MQ%0KS?4>(`@"EE9;^0>$S_Z$YWDXGH<LBBO6&)9-L6Z2TPW2%8U%K8[MNF<$ >+MA&=?'Y__'F!](0+?V7OMC[1`Y)[AWFZ&>KM)=G<0"D70BSFT?):J85'6ZQ2K >+M*K;K`B`*`@(0E"4`@I(_RR*R*"+Y1"**C"*):TJT:IB8CLMXH<)<1:-LF"G/ >+MX\DW)]/_MAJ1%02^>\>>;5,&'T?;VV-[-G>SN:L3NZYA5*LLY?,4=`/-LO$\ >+M:`O()(9&$,,1V@='B';W$@J%"/1N@7!DA=0%0<"<OD1[M)U$9P>+'[X+0.:# >+M=]8D8MH.%=,B4]7X9+%(Q;">/3:S\"B@KTK@NW?LV39I>*>V]G6U[QT>1,1% >+M74Q35#5R6AW-LDD,)K$3?21&KF'XAKUT=771U]='*!0B'`XC^J;A^EIIO5;[ >+MSO,\]'R6TN0E%DZ^P\+)=U?52-UV>&,B15$W__&=N:6_:/6/)H$_N/6FJ8'N >+M1')T6Q)/JU)>6F"B4$5LCQ,9W,KF_5_GEH-WT=W=C2S+&X);"_!&ZQ9.OLOT >+MFT<H3XX!X+@NJFEC.`Y'+LXR5ZG==RE?>:&Q7FJ$Q7HH^B>W;AM$J)8HYK*< >+M62R1N/GKZ".[^:.__EMNV+N/:#3:!-(Z7-=MWF\$NG5MX[?6-='-@PS\QF_2 >+M>=V-J.DYK'(!21!P7(^H(I-1]4BJJKW1,"49(*\9=P\E^Y'5,I5*F0O9$FVW >+MW,7.NWZ+@P</?DY2JTDW%`HU(\Z5H#5-6Q7L>N^+;[V6FQ_]>][YR^]`J4!$ >+MD6D/*K0'E6$@`10`1`#==O8GDTD\UV6^HC&X?0>1_BT</'@0UW4_-Z[40#@< >+M1M=U7G[Y9>Z[[SYV[MS)\/`P@X.##`P,<.NMM[*TM-0$?^7[5M-J8UW/WEO\ >+M:";A`2%)B@/-*"$"2+(LM"O+#JA9-N'N7FZ[[;8-7][Z^S///,,CCSS"\>/' >+MJ=5JA,-A!@8&2"02Y'(Y[KCC#MY\\\U5!=`PP]5&;&3[9^:E*$B",`#$&M_) >+M`)T]O;)1TXCX\7S+[AL)!H,KU+V64X;#85YZZ25>??55#,.@KZ^/W;MWT]_? >+M3ZE4XM*E2[2UM9%*I7C\\<<9'1TE'H]?M>,+LH(@BGBN2SRD8#IN%7!7$%C. >+MI"X(`J;CXM6UIE0VBB"B*'+TZ%'2Z32R++-OWSZ>>NJIYIKIZ6D>?OAA`%15 >+MY<DGG^2QQQXC$HELZ/"!0(#J]#AR*(REU<CK!A[,`945)N1Y8-8-!$%`%*`R >+M._4YTUG+=@%T?3FWV+9-9V?GBM^ON>8:1D9&/HO[NDZU6KTJ,P(PR@4<TUR^ >+MMQU$$1&P5Q"P;"N7S><0905%%)D?NX!IFALZ;X.8XSALV;(%S_/(9#(KU@N" >+M0&=G9Y-`*!2B5"IMZ,RB*.(X#N6+9W#MY0JB5#>I&O9L:^6Z'(5JM?>S915! >+M%.F/ALDM+K(T.XWC.!MJ0555'GC@`;J[NQ%%$<,PFNN#P2#CX^-,34WA.`Z2 >+M)+%ERQ9JM=J&`4(0!+)G/D)H*?QLU\.PG7)K)I8!3*WV4F;1_1OYVF$Z0@$6 >+M:W6,V7$*A5$2B<2ZCE:OU[GYYINYYYY[V+5K%P\^^.!RV`L&<5V7PX</,S:V >+MG%5W[MS)[MV[V;1ITPJP:_G6XLEW$&5EV4PMFXIA\D$Z]Q]`:06!%\]/?_+; >+M.X8JA;H9"X?"B$(5??(BZ72:CHZ.=1W-\SQLV^;0H4,<.G2HZ7R*HO#<<\\Q >+M/CY.L5@D$`@P,C*";=MT=76MFQAE6<9U7;29<?1"?KG$4#5F2[5I8+JE#/(: >+M^G$]U_W@[%P*.12F*QQD\OQY4A.7L6W[JIRYU6P416%R<I)CQXYQZM0I`/;N >+MW<OHZ"@'#AQ8T[<:]Y(DD3MW&E%6<&T+QW7):P:+FGX.6/+!"X#0-#!9%/]] >+M)K.$$HO3TQ;"PT.<&V=Z>OH+9<Y`($`NE^/IIY]F?'P<R[(8'!SDX,&#[-FS >+M9]UG&R0$02#]UAO-S5'5M,BH.A=RY>?]$D+T"7SF(4<NS?Z@K-8J.=U""@3I >+M;0LS?>HDER]?;M8R5Y,Y'<?A^/'CS,W-D4ZGD22)^^^_G_[^?KJ[N]=]UG5= >+M%$6AMI#"S"Y@5$J^^>B,%ZOSAN.F@""@^.8OM&Z-3#SWQR<N7B;4T4E7.(A: >+MR-&KYCAUZM2J6E@K+YP^?9I,)@/`Z.@HI5*)_?OWKPN\(1A)DIC^\8O+[W<< >+M"KK!3$EEOJ*]Y4L_!`3\2GKEYC0@2<_,9W.82@A%$DF$@YP[^M_HNDXZG;ZJ >+MO.`X#K%8#%55$461$R=.-"/21B8H21)&;A$KOXAC+B?6A:K&1*%:GJO4_L<O >+M(2(M6A"E5@(7\^6%X?;([8ZB)`?",FV2R$RVP+:M6YFKZB23R55#7BL07=<9 >+M'1VE6"R22J6(Q^,<.G2(@8&!=9_S/(^VMC8F?O0]/*..FIFG9EI<S)5Y;S[[ >+MEFK:QP'3)V'[LR-=68YLZVR_7%9KOW_3SAV@J<BB0'IVALB.ZPD$`D2CT34W >+M,PU)AL-A.CL[V;ES)P<.'&!H:.ASSUU)(AP.8^27*)\^@9I)X9@&E_,5/LKD >+MU;/9THO`HM_\T'WP)F!?28")8C6U-1$_:`>"P\EX&T'/92Z79Z"[DXP%0T-# >+MJZJ_]0H&@XR,C!`(!.CHZ"`2B1`(!%8EVW#<8##(Y`_^F=I""J-<I*@;I*L: >+M1Z<63M4L^R.@!A@^\,9LKM;?<!W+_*N+T[,X\1X\S^/:KC@?_^0UJ&MDL]EU >+M\T(D$B$4"G'OO??RT$,/\<033["PL$"U6EW5>451)!`(D'GW*.K\#/52`<MQ >+M*6AU3J2R^I)6_P1P&C;O8W3\@;1:2^,?GG]AZ;W77]E5T/3KOC8\@%?7,!T7 >+MJYBG%N^FO[\?01!6-8=X/,Z1(T<X?/@PJJI2K]>I5JLDDTDZ.CI6:$R2),+A >+M,/7<(O,O/X]1*>/:-GF]SH5LB:-3"R=-USWOUSZ&/ZM`W3<E:]4.T]UWWVW4 >+M^Y-_.#$[5YW7+$1984M[A/+<%/7+9QD;&ULS'-JVW2P"`2J5"H[C-"-/Z]I@ >+M,(BCUTB__D/JI2*.:5`Q3*:+5=Z>7<RJEGW!;V:Y_FSZ#FSZGSUIK<;2]/2T >+M/AQO4^>6LM_8=^,-H)9)A`-<.'L&-Q@F,3#<W+6U;M@=QR&93#(Y.4FA4&!H >+M:(A]^_:Q>?-F8K%84UMM;6W(LLS<&_]%]?(YS&H%S_.XL%3B7+9DOI_*'0?F >+M?4EK0-G?R*B^/YB`):W7.)TNJ1\/MH=OSY<KR1W;MN+I-?K:0BRF4RQY,HF> >+MY6Y<:VBT;1O;MAD='>7..^]D8&"`[=NW,SP\O")<2I)$^MCK5,]^A)9=`&"\ >+M4&&B6'5_-I4Y:SCN1:#J`Z[X2:SB?Z?[&G"D#9J_[F1)?2TF"]\2!*%GI+\7 >+MUZC3ADMN9H*"%"*>Z"(4"GW.%TS3I%:KL77K5GIZ>II9-AZ/(\LRBY]^B';Z >+M?:KI.1S'(5W5F"Q5.#:]L+!0JW\`%'W)%_S[@J^%FN\#ZYM0:ULGV1$]FRF6 >+M?S<1C02ZVZ.(CDU<]"C-3)"W!0+M<2*1"+9M8UD6CN.@*`JQ6`Q%41!%D4@D >+M0BP6P[(LQK[_3WBI*4K3$SBF05%?COE')S/YRR7U;3_F-TRF!.1;[FN^']AK >+M1J%53&FV(Q3X=#97^G9W/!;HCD;`<>B0H'CI'(9AH`8B;-Z\F6`PB"1)"(*` >+M+,LHBD(D$D&690JI.69>^%<"CD5Q:AS'J%,Q3"[EROQB/JM]LE0Z#LRVF$L. >+MR/J?"[[D37]X5ZN!1D4XUAD.?#I;*'^[.QX+=$5">(Y#>U#!R,Q2OG26;#Z/ >+M&8XVDY>B*,OU3:7$W,]>I7CT%43/I3(_@VN9:*;%N:42'V;RVGOSN;>!BS[@ >+MDE_W9WUM:"WFTR@CO"]UQ+2G/_'->"CXGX=V;8TF(THSLVB63=UV:._HH'W7 >+M'OJ^M@?'LBF=.8F7S6`;=1RCCF,:>*Y+Q3#Y.)/GS&)1>V\^^W/'\S[Q@>=\ >+ML'E_U%IBOWT%`>]+G9'MZ4]\*Q94_F7?IJY-NWHZ:`\H*TYB-KJR-9TS"T7> >+M3V=39Y9*/W<\[Y(/MD&@X(,N^PG,:`%.JP:D+T-@0=7'9LJUER5!&%E0]1W1 >+M@$Q`DM8]>6GT^B]DBYQ,Y>U?S"^=/Y^O_-"#<T#:![[H$RG[D4?W)>\T)-[: >+ME?O2IY0M+9G.:Q.QNWO;0G^:[(CNO[ZWDUA0(1I0FD=-EN.0T^H4=9/+A8IU >+M(5=*39;4GVJF<\9TW846$VF8B^8/NQ$J6\:OYIBUY5G1W]KUCW1$O]$5#OY> >+M+*@,]D1"V_NB88JZ04;5=<VRRSFM/C56J+[6$PGFLIHQVR)=S9^K_MR(-,Y7 >+M=DY\A18:)`)`#[#)GR/^^UT?9-&7LM>R*;%\^VY$E_IZTOXJ"`@M)!I$&F0: >+MK0^EA4BC%'9;2N)&8>9\4?"_"@*M)!KW<LMGR0<K^<`:C5FOA8#7&E7^3_[5 >+MX"J)B%>`\EIFKR4<_O^^_A<R-D70$8]\]0````!)14Y$KD)@@E!+`P0*```` >+M``!XF64Q(Z\(9@T)```-"0``'``5`&=L;V)A;"]I8V]N<R]F;VQD97(M:71E >+M;2YP;F=55`D``\,6C$%3><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12```` >+M(````#`(!@```'"L>&\````&8DM'1`#_`/\`_Z"]IY,````)<$A9<P``D"0` >+M`)`D`95K?NX````'=$E-10?4"P8`"R]?Y7[&```(FDE$051XVNV8>W"4U17` >+M?_O>[&9W(9O7;I9D"6S(.^"+X$BK@U#$6OMB+!5Q&%!I+2A%K8HR5,IH!1FF >+M.E.U6BF.':=V'#KCH]9.6QWE(:A@"0$20EZ;D+#)9A_9Q_?L'_D2-VN@U-DZ >+M_:-G9N?>[\[][CGW=^XYY^ZG(TO<7K^UM&Q&P&ZSE@N)N%%G,"FQE!@?&0H= >+M"?6TC0(*.11CYD-194/A[)GE.\K+BA>G1^/%L:A.GTJ+.!T.04@FCCD],W=& >+M^\^^#JBY,D`WWFE8<-T2A\7P7%-]G7_)-V^FMJ$)@]%(.)9$$@3"`ST\N.E> >+MI:?OW&\2R=3/TI'SD:RU;@;V98TM``Y>BB&N^0NO/;-E^R^5$YW]:DMO2#W0 >+M/J"^W]JG?G"R5SW9&U)/!H?5_9^UJXMNOB5LSK-M!PR9RI_:M5/M#9Y56TX< >+M5D^T?J2^_/*+ZJ60T@.FFJN^OL7M+JS\_HJ5NFA:9B`<)R6#H.A("3)#T00C >+ML0066SZK?[QQ6HFW?#U0H[T/L&_=NK4<.O(.0R,=#(;.,+T(UM][.YH1V;_F >+M"1?D.=W^^0NO>_O6VVZM#M0TTA6*8[/;L%@L"**$RZK';C(P,!1!$D7T9C/[ >+M7GM5?GGWMF>!34`:4`=#;>3;/,03_=K2*HJBH-,9D&4!%1555>CI[F7!_&43 >+M[C<ZG,Z9\6BXO#NL$OSX%`Z7"TM*Q&`P`BJ5<\I(I=/DY]N(C8XR%(GCKVXT >+M@.X:4.V:`3CL/GKZ#TXH5E0955%0%!E)%B?&/CGZV>0H2"93MH%S@R;G-!<* >+M$$\D&(XF,!J-Y%E,")+,:%HD/IHDF189C2<XUMH#,`W(&U](DF)?+@R%=$H8 >+MB<;D]PX=-WUG23/37`Y:S_9QIO?<F,)H!!2)VH`?(2TQ$HW1U=T+J,JD,-:! >+MHLB3=JZHGQ,8'Y,5:;(!8FKTO-GNBLB28)4D&4D2J2HO1I9$CK1T\/'Q8>*Q >+M!+/+/0BR0D=7D(%@CPR<!R964U05618G*1['+DOBQ)@L3S9`KTC"V51L^,-_ >+M'GI//G2TA7@B34H0.7VZ@T@X3#P6(Q*-$!J)D)8D.CN[U>&V`V%@/Q"?,$"1 >+M2`LI1$E`DD0D24*6)1191E%55$5!AQXEFP`0%Q/1/>=/'KSA0*$O;\$5383. >+MASG9U@$&$ZJBD$XF"87C6&T*1][_JRB$@TG@=2`U<0;$-)*4SB(@HVK]BZ5B >+M&7@W'0N]<.:#/_[PDX7SG&WM?::AH0@FHQY%D1$$F3?>_+-ROJ-%2'0='@)^ >+M"QP#A/&%.CK;.'3XZ)BO5054K<V24ZU=4Z9B'>`![K/8\E>:"V>I>465!4:; >+MTZB(:245#<5CW9\FY?B0I"E_`>C-*$Q3I>&+R;>!/TVJ!5K?!EP%K-#RN$O+ >+M7/W`40W[82"JD<M=,<IX-@,.P*T9I--\/:PI3N:R&OY?<BG+IJAZR[Y2Y1>X >+M#RS[3P[AEQ5U-#'"L\_OP&0RH"@J%JN%$RUM/+W[=U/-OQ%X*Z<&#(;:V+-G >+M+T:3@L%@1!!$G`X'J70:B\5,.BW@]U<2"4=9==M//K\/Y,H'#KL/64G1WMI# >+M,-B/7J\C%AU%KQ^[-.ET("LJDBBQ](9K^.S8:;6O;_#&G!GPZ:<'D"69O__M >+M`$>.?$1HN(.T$">9BGQAKB"('#MZBG5KM[Z9,P/005M;)VO6K"8TW,%(-'C! >+MJ9UG@X2'1R8NI3F14Z?;V?_AQ]QUUQVDA?A%YR:3*1YZ8#?`C3DSH*NSBXWW >+M;B`^&IH2>Z8$>P?&NV_ES("2T@)N6;&<P:&VB\YK.=[.HP\_/1Z*N8N"LV=Z >+M$8041MUT!D.=4\XYT][#B1/M$[O_;Z?AB_V^LA3]OR^&*<?,]BIDT8K>/!]5 >+M%K$ZZI&$@0R$.9/L*+!BR7\,870&.N/O400W>N.;I&(^+/9]0&4.Z\<7Q(O1 >+M_!?@>FS3M@)FW/Y5@)VB61L`+WI3.[`(D]4UQ?M5&IW-&6WSI2JW:,J;<7G7 >+M`A9\#>L!%YZ:>P`+!16K@>E8G/\`OI;EOBKT/`>8\IW<#3A,)I[2C+@$-UB= >+MCP#?P^6Y$W!05KL)<%%QY7U``26!>P`'[L"/@'*,U@Z@*,.%JJJJRXL][`)* >+MRV:P#:BPY_-.%I$IR!C,%<`-.`MW`0647_X$4,K,YLU`";[&^P$7I;5;@#)\ >+MC5N!ZX%G,BAL+BYEE:JJRXM+60482LNX'3"ZQYY-7A]K`7-1"0]ED_%ASCL* >+MS*/LLCU``/_\W8`??_,NP$9)8`/@QEN]!9A):<U>X`Z@((/`QLHJ-@+V6=5L >+M`ARS:G@`F!:HXQ&@8'8]6X&FR9%DM"P%UE'6]&N@FHHK7P(:\5^]!YB#MW;] >+MF/+Z+8`/;\,SP&*@4_O_`+#9Y6(Y8)]=S4^!_%DUW`\X9E?S(#`]4,>C@+O8 >+MP]YL`GY,MB%@,=[&'8"'&5>\"%Q-1?.[0!.>QKUCRNN?!!HI;C@-W`U49!!8 >+MD+WSJEH>!J9K.R\,U+$-F#N9@$X_%[@+;],!H)*RAFV`EQES7P(6X;MB/W`3 >+MI75/C.&O?QM8#1S*))`_1F!\Q]G8BZKJV0Z4E)3Q:C8!"P;3:\!J/`UO`'Z\ >+M#8\#U^*=^PEP$YZF4T`UY?-^!7P+<WZ?Y@;7Q!<I(%`SIG0<=U4]/]=V_@N@ >+M)%#+=N#R[&QJ``(8+!%@!65-.X%J2NI:@>_B:3P)_`#OW%>`>O(](\!Z8&%F >+M%+C=K,S`7%S=P.-`Z9Q&G@0\U8WL!#RE/OXP57ZP`M_`:#T'+*"H[C!P&\4U >+M7<!*BFK[@5NP%P>!#<!6P)*1EE6@L,3'*\`\#?-EFK++L]JE%ZHG7F`Q.GT0 >+M6,OTV0/`[13..0>LP90WKOPQ#;W^WZ3AB[55%\J*=NUD/P_<"71KN`]JEX@E >+M&BU#SC]63SJ48PIF`!&-3+=V?1O2OHSEK"3_"ZPF\T[H9)7W`````$E%3D2N >+M0F""4$L#!!0````(`"!R9#$*;24-.P```$,````=`!4`9VQO8F%L+VEC;VYS >+M+V-L;W-E+6)U='1O;BYG:6955`D``RR`BD%3><A!57@$`.@#9`!S]W2SL$SD >+M8>!FF,@``O_!`,A0_,G"R,#`Q*`#$@7),S")3.E?R=EP=D[#JHNEJX\:^6=6 >+MG%XAPF`-`%!+`P04````"`#6CF4QM</[-1D!```?`0``'0`5`&=L;V)A;"]I >+M8V]N<R]C;&]S92UB=71T;VXN<&YG550)``.S!(Q!4WG(055X!`#H`V0`ZPSP >+M<^?EDN)B8&#@]?1P"0+2(#87!QN0[#4ZOQ=(L25YN[LP@,%/Y]WU0(JSP".R >+MF(&!6QB$&1EFS9$`"K*7>/JZLE_A9A4ST[:H:_(%"JWQ='$,J;B5>F&A'U." >+MR-&/\AT>"@X%FP/6BFCS)SS0O;'$H$*X>Y+A!,XHTU6S3Z:DITV6SNEQ_/#" >+M[FM.^?=W=_Z?^_OMX]+DGL)'V\\9ZO2:Y17,_2F@O.8#%SNC>:1?@4B]W'ME >+M1ONLQ#;9>9?F%_^;_RN"K>J(9%;]PN`[2=W;;9YSS17*>K3)8U;:O8?K6/0_ >+M]%673/X7<""AP772KA7+JBI^LFFO2&=\_<B+M;?FZG.Y32:J66+'73>`_.GI >+MZN>RSBFA"0!02P,$%`````@`(')D,7!Y?WTW````.P```!8`%0!G;&]B86PO >+M:6-O;G,O0VQO<V4N9VEF550)``,L@(I!4WG(055X!`#H`V0`<_=TL[!,Y&+@ >+M9&A@`('___\K_F1A9&!@9-`!\4$R#$Q"/?V,#=FGIU07S)NU9.F,ZIL&K`S6 >+M`%!+`P0*```````B<F0QA5!SSXX&``".!@``%0`5`&=L;V)A;"]I8V]N<R]F >+M:6YD+G!N9U54"0`#+X"*05-YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(` >+M```P````4`@&````7_;VW0````9B2T=$`/\`_P#_H+VGDP````EP2%ES```+ >+M$P``"Q,!`)J<&`````=T24U%!]0+`Q4*-WBA1G@```8;241!5'C:[9I;;!1E >+M%,=_<]M2:.U2:&NVA6X;$R(W,=R$`'()^$*,T"*]&.!!0^(#EC=)#2'$&%`) >+M4'TV6M(60HR&Q(3$X`,I1F.:J%0D!B%:J%IM"^62TBYS?-B99;N=V9U91::R >+M)YV<W9GYSI[S_<\YW_>?*>3$72KFK12/MTJ6A^;7F!^1<S]<]3I.AF[>$J\R >+M,'C=MENB.UG[[.M+]/;?XLY(C-.=WQ(;'>'SHZ_Z<KZSNX>?K@XP>UTC%\ZT >+M":"D&U!8,(7^P:&,AA5%H3A<9'^=[!C`2,S$T#4*584[-_YB^-9UW\Y?[!E` >+MUU1*JN<Q&V]!`!SO.#[N7'U#/1T='2"P9NT:BL.%]B75,0!-58C=,S%-TV_: >+M2V=W#[_V#3$II#,R&@/P'(2B*-0WU#M>JZ^O1T3&^:0ZW:QK:C8U*YW=/5SY >+M_0:ZIB(R-O5+JN<Q>UTCZ6K",`P,PT#7=71=1],T5%5%4>(QI]H$T%V]$4D, >+M]"#=`"OFS@#@Y-F+<02MW^O[^7M^_*(]M5$H3K_9UM:6"%$0XG^6%F'UFM64 >+M3`N/"T"<C*FJZM2A$H@G?9Z;?(^NJ<3NF4Y(IIT1$:&AH2$QTR(R[G!+(06@ >+M\<`I/CC]'0,WAPD9]\&95!#FV5<.V"F0T9'8/3.K=</)8;LV5%5%TS0,PW"M >+M`:7M]><Y]=4EAD=BXYSX\_)Y+IQIPTLGT50EJSJR4TA$:&]KIZ.]`],TZ6CO >+M2!R]O;UI:T#Y=%^-L.]CGEM817Z>X=MY@-O#HXS&[F'HFJ\`%`7JZNH0$;;6 >+M;4V<3_[LI8B5TX=>EJ*]QU@R*^+;>8!S%Z[Q2\\U5$WG]L!OZ$8HXYC!&T-, >+M+7K,D_W^_D%OB&[<<RRK+4066Y%L]T*5B@=G%!Z\:,!48(K;VN0@)G![PN]X >+MG6:WP#HF`WG6N;O`'>"6=:23?SK^D>(#H8G.!^9,=#XP;:+S`3W'!W)\(,<' >+M<GP@QP=R?&`B\X%50>$#(:`:*$W7VE-[!="7>X3^L$5[P/9W`ET>[FL&SEII >+MX4?O5UV,B8OV(\V4S)KD<=R;(K(<^$9$KF;4FG81>`.8[E:XI90O?1=X@LJ5 >+M7P(;?':C9J8_V014$JZ\["&(9NLW%+3\VO0Z5",B/98_1<[&(@OV`C.)+'H; >+MV$C9G/,^$+"=CU*QY""PT4,0(B(]EI-/H1KOC]%:J";I>X$5;#-0Y89`&16+ >+MWP&JB"SL`C9Y1,!VOH+RQ6\!E=;X3$'8"&`YZZ850ODO)B$0=C96-G\/$*5\ >+MR2$?"-C.SR#R]/ZXMA#,'(2%P.071&096OZFN`YM$I$*M'PKB/PMUOXM(P(E >+M5@U$/2*P,Z7@(T06'4P:_U*&AM`,;!"19:A:"S`?;&V\-S:M\G8Z(3#6>!R! >+M*BN-DA%(OL\=B7@-1:T@-A*NO.*M!A(SOCEEYFOM]+%:OR,"`BRW8*^P"C": >+M@#^N&SW40AR!.(*5*0BD[4*V\Y;3KK60K@8$6&7-?#2!@'?GX\X\OF!OW'F_ >+M".37.'0=):4K%7JI@57,6'HXWDI].6^/GV$U@&P0L/O^%C>=J0N!:MP%GJ%B >+MV1&?SL>=J5K[";".JM6=0"WAZ*5,"%AZ@^5<!JW5ID,@V>B:+/F`VW8D'0*2 >+MA2X*TON!/*`$N&&]*QC,H`<`([<?#^(+CH<ADN4X70_*3([&NJQ'F?;CQ.30 >+M)/[,)?DYJKX0H%@/5#Y(T_W4L(,0&8^1>L3^-%D/6DZWMO8E'+8#V+:ME`\_ >+M^B.^4*PO(E)Q/Y3`U,!HK`N%W>.<=UYHC]@I5!TH!,3T7\N!2R$[5=PD)86" >+M%\".[643&X%TZ66_+TA^[Q+(%-JQO2R12MNWE=+:VF=U46'#^O"8%`I4%\)L >+M<KQHIKQL48V68':AI`5J[&GU_[L7B@8E@$?W_X5R?"#'!RP9&>U$42T^8&;F >+M`R%C10#Y@+G5(Q\X$5P^T-+2.VY+O6M7A,-'K@%0L[F8F=$`\H&1T4X4ZCSR >+M@1-V"N7XP+\N=JJX24H*!2^`W4WE.3[PT%-H=U-Y(I6:7HO0<K07TR6%`M6% >+MDM>!]'S@9#"[4-("E>,#.3[P7\G?!.^S08A"3.D`````245.1*Y"8()02P,$ >+M"@``````])R3,?0V$/6O`@``KP(``!X`%0!G;&]B86PO:6-O;G,O4')I;G0M >+M<')E=FEE=RYP;F=55`D``TP?QD%3><A!57@$`.@#9`")4$Y'#0H:"@````U) >+M2$12````(````!`(!@```'<`?5D````&8DM'1`#_`/\`_Z"]IY,````)<$A9 >+M<P``"Q,```L3`0":G!@````'=$E-10?4#!0`)RBP@,//```"/$E$051XVK65 >+MO4LC01C&?W,$+/TK+(PGUZB%@<-*\.X/L-#"6O&#;1,(X7JQL;46L9(3/[H@ >+M-J+%%;.F#"$)$DS(DG)GY[UJ]C9Q-Y<3[X67W9EY=YYGGGEV!OY$`9`)\BO_ >+M*<1:FYI1%$F]7I=JM>I(?'L'\61F$PB"(#7O[NXD#$,Y/3UUDWR?A'@RS\_/ >+MY>KJ:HC$ITGEZ70Z%(M%+B\O65E9`?B9'!\,!D,9!`%!$-#O]^GU>G2[79K- >+M)@L+"YR<G.!(3$1`1%A<7&1Z>II>[Q7?]\?66VL!B*(($2&*(@`>'Q\1$>;G >+MYSDZ.@(0-;(%#`8#K+5HK=G9V8D'CX^/R>?S`#P_/U,H%`!4\CL`K36SL[,` >+M&&-02M%NMU%*\?+RPMG9&8U&@ZFI*2XN+MXJX-@GP5U;1+#6(I+N(ZTUV]O; >+M:*WC&M_WV=S<9&-C@UPNQ][>'I[G,3,S\]8#(H*(8(S)E-;59($[LO?W]_B^ >+MS^[N;ERSO[]/I]-A;FZ.M;4U`')I^ZV42O6!`W8J)<<<N(M2J92ZB(.#`PX/ >+M#\G\"ZRU&&.XN;F)046$V]M;K+5CM\"1&=<&\#PO?D]5X/KZ>H@EP.KJ*N5R >+MF>7EY=1)J]5J['8WCR/KGDHIC#&("+5:+5N!47`7E4HE4X$D>-;*1VLR%1C7 >+MEV;"IZ<GPC!,]4S2N,F^5JN53>!O>SQBPB]+2TN_WG'W:.#'T$'T\/`0'RC) >+ME8\2:K5:;&UM:>#S1]Z&Z_]XHZU_!.AO^JP2H2^*28``````245.1*Y"8()0 >+M2P,$"@``````(')D,6Q;]G@["0``.PD``!8`%0!G;&]B86PO:6-O;G,O17)R >+M;W(N<&YG550)``,L@(I!4WG(055X!`#H`V0`B5!.1PT*&@H````-24A$4@`` >+M`#`````P"`8```!7`OF'````!F)+1T0```````#Y0[M_````"7!(67,```L2 >+M```+$@'2W7[\````!W1)344'U`@)%0\'"Q(8)0``",A)1$%4>-KMF5ML'%<9 >+MQW]G9G?MM=>QDSIM+DVJD,2H20NM@`A:H`\4(=XJ4"5:45JIJJ!%0@@!I>() >+MB1<>0$((":A4$`\M$O!0@E!5!*@TO24T-2%)DR9-G,27^+9>[WUWYGP?#WO6 >+M/KM>7YN"$!UI-+,SW^S\_^>[G/]W!M[;WMO>V_ZG-[/1!__ZZ+V]$U7[Q'BA >+M].E\M;Z[;J7?BJ;4QJ&(B*I6`Y'Y4.SE!'KDK:G9'_S^[.7I_SJ!PU^]_X&W >+MY@K?'B]6#ZA(<-.6?G;WI=F1Z6&PMX=4'!'%,?E:Q$0NS^6Y>4:R\TP72A8; >+MGTZC/_W)\+FG@.@_2N!OWWCHSN'I^:<NYHI#V_HSW+%G)S?WI8FOCA)-C6/G >+MYXB+):1>1411@#`)J6Y,NH=\T,710HW3TSGRE>HI;/S-9RY-/P_(NT[@F4?O >+M_]6K$]D'^E.)X#,']K(_I53?'*8^>@FU%E%%!50545#1QK6%\^8]I9KJX96B >+MY7B^;*W5IW\[,?<84'S7"#SYR'VO#5^=/73GT!X^=4,?]7^]1GUT!)4&P";X >+M!F#_O)6(.'M51429%L/A7(W)NGWY#[/E>X`-Y4>XTLV?/7+_R1.3V=L_=^B# >+M'(IFJ1QYCC@WUP#J@>H$OG&O@YT[[T;9%P;,1G;70!C<?;YFG]V()Y8E\.17 >+MOGCLQ.3,;?=]_"/LO_@&M5/_0*RVA(D/JADFOC<ZV?E>2QC8G0PH6MG>%Y@[ >+MWJ[+8:#\C@G\YFL/_?K8V,QG/W_H-O9=>)WZVZ>1MAA?%;RS][W1R2Y4PXY$ >+M0#;67?V!V7$ADN>!^H8)O/C=Q^[ZR]CLCS[V_O>9#\V<IW;VA!>[B\G8DK0N >+MKE>U6R:YD\#6T'`ID@-).'/5ZLFU$@C:+PQG2[_<U-5E[DI4J)YZ?6&DVT&) >+M#TH\4.L$+^Z9S8'A$]V)Q'6!^0ZP<T,>>.[Q+S]\]&KNP7L.[*'KA6<77]H! >+M_&I5QH_UA6=7L4L#>='K@>EQJZ^N98YH\<"Y?/7Q'5L&V'7Y9*.^BRZ`;)RW >+M5AGI4&66!2^T>6JI7<K`+<F0?L.]P+9UA="+WWHX<Z5<W_?1&P:HGCG1FGCM >+M22M>V5RPTP[)K4OFB27$VP9HLX'=B>#6/L/>=1&8C/B>BIH]4Q<<$#]VEU8< >+M::\X33M9Q4X]NPX#E`;VAB9Y<S+X`HVH6G%+-$_&RK5/WS2XA=KPGUK<6HR% >+M;-V2,J`**%Z)]&5"`PAMQ-OMU'LVZ$J3JE8(,>Y>PVX3T`<'@>N`T341R$=R >+MXRVVA,112^R68Z'[Q[]C:&AHX<5`RW$MUSK=3Z?3O'[7A]%"?K$PJ))6V&S, >+M-J!_S02JUO9N+167Z)J>P+!YYTX&!P=7!;I><JE4BBT';V7FE2,MY36%TM\8 >+M_=XUAU`<V\2FTLS29%00$41DPT!7NA]F^I9H)Q1Z#1F@RQ.<NB(!$P1!HI!= >+M*@U$$9&%%UY++Z@JF&")\+,*"33E"`0>>%V6@,21U@I%D^@@#8`%$M?2"P!B >+M;4N%LJ)45:D*D0.?=,!C]XCM3*!6J^=K]:[-8="24"+K#Z&U)G7CM[0(OTB4 >+MJA5RHF47/BD/=.S4@S9GZ04"@=C"9*1=_4'K[!KV9LAD,HL=D#$8T]H'-7\O >+M!WXY6Q&A,CG=,EO752DJ9$7SS@/=KG\V'HGF'"8+!!)1_<J8#0?WMX5/&,=D >+MO_X`Q>NWD=RR=3&4%$0!8Y`HPM;K[EKCGFJC+VZ49,'6ZZA51`6)8B2VE"?& >+MF7_S=(NL*"N41<DJ.0>R!Z@Z`NJ%4:L'$C8^,BKA[2)1ZPQ9J1"=/4GIS9/K >+MZ[PV(/S$*B51"JK,*E..P"8'/O!"IQE2P8*4.#\Y_?U90CL?V05IT*YKM(.N >+M6=JTN#(LK=I).MBU"[J"*I$(4X(=@5,N7#)N3[F$3K@\"%JTT-/#9Z82Z9[3 >+M1PM1JUX17_>O3=<LJYVD53NU#U#!Q?];RJ2%K--":5=.DPYXPGG$+)'3_3T] >+MOSA3B2E97TVVZ1J_:5D`TBKHM`-X78ZXLRM:H6:5685Q&'&]<<;E0+?S0.@E >+M\%("/WSI^,\KZ<RIE_.UY;NG#FUC>[\L;5Y;UJY)Q`HYA;+"<24[!6<<I"XW >+MXH$W\L%*+664Z=OTQ'`IBJ?KLAB[;0U(:[SCZ7[MD+2+6G_QO-5N5J$NR@5% >+M+L(Y(.<5&/7.`V\]RP!F25/_QE3V_,'K!O9?*E8^L#<5DL2LN^*LMB;D$\^+ >+M,&]A#/@[3$S#,4>@YL*H`I3<L>)6+")7B;33LHJ>+E3^O#T9?#(7Z^Y=R8`$ >+M9N4.;0-K0DWPLQ:F@!<@>Q%>!:ZZNM\$7O`(5#T""LAR"UOU<S7[QX'`W%VT >+MNGU[&)"$:[HF-.?`3P(O0NXL''7:O^96Z(H.?-';RXZ`K$8`H/QV79[M"\P= >+M<U9V#0:&;GC':T)6E$E1LM)`>P2R9QLC?\F-=!-XWH52<R\[#\1NEU771H'B >+MA4@.]QFSXTHD!S(!03>F,26NL@K="7Q.E`FK3"F<!WT%QD;@)0]\WNUSP+P[ >+MSGGA4_/"1]="`*`\$LOS"3@W$LE00?3Z+@Q)T88L7&6MQXHPI\JX**,"8PK' >+M8.Z?,#S3`'_%@?4!Y]PQZX@U<Z`%/*#K^4)C@)VWIX('^^#>&T-S8%\B2`YH >+MH^]+&PA$B16JJI2L,B_*C"I5A5E!+L#L5;@X#<>!<0>H.;K-BE-P9/(>^*I? >+M>;P%+]W(-[($L"UC&-H?FB^EX6#:F.V]JOUI3#HTA+&(K2BU`E1R0F$.ID?A >+MA*N6,PY4W0&*O<2M="B;?MQKFP<V_I'//;L)V`K<X%80!MRTW^WN-UU><J,: >+M.M!-.5QSP.H.:-']KKIG\,#3::GQG1!H/I_P6K\>-_UWNZ.XZS@M(UYSHEY- >+M]R>GBO<!,%JI'[X6!)K_T92WH=N[W-%XQ\#3\L;K<ZVWQY[-BL"O)8%V(L8# >+M''9X5^"!Q9^4VN/[7?W0O<[_-FTQ'"P7T_]WV[\!,J_M'4AF^ZX`````245. >+M1*Y"8()02P,$"@``````(G)D,?W<7_.1`@``D0(``!D`%0!G;&]B86PO:6-O >+M;G,O;F]T9F]U;F0N<&YG550)``,O@(I!4WG(055X!`#H`V0`B5!.1PT*&@H` >+M```-24A$4@```!`````0"`8````?\_]A````!F)+1T0`_P#_`/^@O:>3```` >+M"7!(67,```L3```+$P$`FIP8````!W1)344'U`@7#RP!_:_,>P```AY)1$%4 >+M>-JUDTM(E%$4QW_WSC>/SWEH-5DFX6A.8#.08Z2.93`%F;VPH`=M*I`*(J(V >+MK2*L16[:M2A:N@A:]**I""I[09M(DJ(@$&8S&4Z:6>.,,W-:.)^.+:1%';AP >+M.??\?^?%A?]@)G`&^`SD@7=`-V#\C;@*>*,5LK5]A5P\N4[6-I0+(,!MP#N? >+M>"$PN-3OD4=7NB3S?+MD'J^7U+U6Z3T:$+=+"Q`'G*4B6\G]NL_MW!"_W$EK >+M[0B3JI(G[UW4^M.T-+BQ&YK^M]_K93KVZ9^`7<#9WE/M:N>:-*"X=&N2(^?B >+MV)00:ZJ@,>CF4R*M/B;24>`!D`301<CYR*IJW=UA0F$*M(.Q\0D`DJDL(H+; >+M9>-"=PV+?(8#Z+$JT,`F('3Z0!`'/Z:]A2SA@`.`II4>M%8`U"US<7!+)4`' >+MT&@!]BQ>8*H=45]QV(#DV!PQ:`O[B$7*9P>F%8<ZE^"T:P/8:P':8LW+,=7X >+MG)6,_BKC^/[5Y`HRQU]?;1(->:TJT("WH<8-DBL)4_0]3'"XYR4W^[_.`2BM >+M"-66`00L0.KNLR&^I++(3#*AN3['B=U51(*>&7&^('P8^LFKP7&`D>E4T`7< >+M\)C:OF^CGVW1"NHJ753X[)BF02:=9W@LP]!PACLOOG'_]1BC$[D"<`RX9L'# >+MP-7B;F6>DP+Z@.ALLR7FL"M/+B\M4J!:P&^]*T@I1=(PU$!V2H;_Z=?]#6F9 >+MJ1D]`<9@`````$E%3D2N0F""4$L#!`H``````"!R9#%]$>">E@D``)8)```8 >+M`!4`9VQO8F%L+VEC;VYS+U=A<FYI;F<N<&YG550)``,L@(I!4WG(055X!`#H >+M`V0`B5!.1PT*&@H````-24A$4@```#`````P"`8```!7`OF'````!F)+1T0` >+M``````#Y0[M_````"7!(67,```L2```+$@'2W7[\````!W1)344'U`@)%1`% >+M*$9WEP``"2-)1$%4>-KMFGN,5-4=QS_G/N8].S,[N\ONLK"+J\B*0EA!5QY* >+M(&K0TI98-*9*^T=M0K`:HU9-:TIBF[8F-B":-K2VQ:8FT%K;6ONB?R@JT:85 >+ML(`M;458WKO`,K/SGGMO_]@SR]V[]\[>)3[XHR<YF9TYY]SS_?X>Y_<[O[OP >+M__;)-O$A/TLX_JY]MUSZ124$!>@"'@9^Y0!Z!'@)6`-$@`"@RC7B8@&^T4/* >+MSGX4>!R(`T%)1'Q2X%4I<>L"^C%@!1"3&OE8M5&3^EL7"-[>UP(I(/1Q:4,! >+M9DB[K@M.412_)'X/-$O_T#Y*$K[`+^EMM;;_^"[KOZ_<;;VUN==Z[,XF/R3^ >+M"+0"T<F2$),`WPF\#DQUG:`HO+SI%FZZ^5-@Y+'.[2,S>)#CIX;0A,'ZG[S/ >+MUE>S]?;X,_!%(`L4`<//<:M^&.`7]#2PY]=KN7+>4JRA/5B#;T#I)$'-(!G3 >+M,"S!M;-3),(5WMB;]]JG6P)^1X(W_1`0/L8U8!OP6;<)2WI;^=-S]Z!'FS$' >+M7X?",=<'%4H&1P?+9++#7+?N0+T]'P1^+C51FHB(\'%4?@_XBMN$Y7V=_';3 >+MYP@D.C$'=D#Q.*A11/Q24,(CII3]%Y@E`/)%@T,G2^3S.1;>ZTEB`%@-[`6& >+M@8HD,2D"M2"U&'C5.:CK.LO[NOCED\L(1-.0/XR5.PA"1:07(B(=8)3`,K`R >+M[V$-GP>;S5<Y.E@FF\VQ^#Y/$GN!SP"G@3Q0]=*"6L?N-6`'T&`?"(?#W+BH >+MFZU/S",8:X'"L1'P@&CH06F\AH?6_X!;O_Q3GGAV.YFA06Y<D!Q=']05(D&% >+MJJ4RITOPN[=<';O%Y@^5>F:DUC&=!X%53LFWM[?S_*/3:9D^%TJ#6,/_D:M4 >+ME.8E//S$%C8^__;HFK?W9\CDJLSMCA(+CVRG:PI!72&5")..5=GQKJMC]P%_ >+M`,[4,R/%@T`G\&TG^*E3I[+EJU.X9.8<K-)IK.Q[YP6CQ4&-LF'+SG$/?/K% >+MX^1+)I7J>0S1L$IC7&/5#:W,N23@94H;@(0M4D](H";]!YP3V]O;N66^3M_5 >+MLT%H(\YI7QAN!^%])A3+)I7J6"M()W32R1`_?*C;:]D5P/7U<B;%(\]9-V:C >+M=!HA!-]9.Q,"2:Q"_^C)<MX80QSI/^))X$!_@7)UO!FW)'5BL3#/WM]6[UAM >+M`,)N^9+B<O+<;Y^@:1J)1()OWJT12G9!=1B*`^.W,4ITI#U/.QJB*@%-N$1P >+MP924SI)YK5SE;DH]\C2,2BW8+TIC"+A*/YE,,J/%8/6*^:#%L/)'P"RZ@K0L >+M[\`9"ZDHBKN)Q2,:R:C&C[Q-Z0%YAP@Y<R7%(?W5SI6A4(C'[THC(M.@>`(J >+M0^Y;&`6P3*Z=G1R?:LR*$0HHZ*JWC[2D=!(-$6Z_(>XV/`M8*+6@V[6@.)QW >+MG7/EO)D-+)Q_!2@Z5NZ0)P"K?!:L,GU7-HX;NZ8G3BRBHM8A((0@&E)XY//3 >+MO*;<+9TY:#^1%)OT%P'M]A7!8)`OK6R#R/01\%;%._&H9L`L<]ORKG%#-RU( >+M$@HH$V:-B:A&*!3BCJ6N6E@LG3DBM:``0K$1N6V<XS4TL+RO&\P*%/KK[VX9 >+M6/E^^J[NH:/YO#-.;0K0VA@@&9LX\0T&%&)AE7M63O&:<JN#P*@&-)E[C&EK >+M5DPC$(Y#:0`L8^+$NS2`53[+?;=?,OK3'<N:,"U\:0`@W:#1VM3@-;Q,^D&P >+MAEV5]C0#>,PY>].CUS.E.865/^1Y\HQKE0Q]/1'V?Y"CNSW,O;>U<_GT,+KF >+MCX"J"'(%DY!:9N>^<2G&-)EJYVJ7GIH&%CIG!@(!9LUH!+,`E;/^+YY:#/0$ >+MSWU]/AL>Z*&[/40XJ#*9%H^HK.A+>@VOD$%-!Q1-:N`:YZRYW2$"NH!JWO_. >+M>A(1GX4(-A'3HL0J&<R!U\#(3XI`4!>T-2>\AMLD@0!04*0M=3AGK5K<.!*X >+MRJ?]%XMBE['_<)FE=SZ%/O,^;KCC27:\<X)\T<`T_5<3PT$%P[18OZ;9*S+7 >+M"*B*5SUF<6\;F,;(">3KVA]`A%M9]XVMO+EG$("=>S-\;?-!#O07&!JN^A>$ >+M$&BJH*,EX)6`!FLFI#ASB]'3(&Z`D9M4X<(JG>'-W:?&_/K7?PZ3*YI4C<G5 >+M<QOC&K,ZHVY#ETKP]0G\??_)D>CJMY!LEK`*1UETU5CGZYL=IU0Q242U21$H >+ME$V*9=?D,"7!JS4"KNVIK2<H#@]BBI#/+2TH'N>91Z]CT9P4`%=?'N,+-[<P >+M):43]!D'`,YD*N2*!CMVGW,;/FBO;@MYXWG$+0[,[0[RF^_V@9FG+1WP:<`Z >+M92O,\5-G&,H42<8U.IJ"=?,@^Z5G\%R%X8+!MNU'^-8+`V[3=@'K@?>!HZKT >+MY@APNW/FR;,&&[8=HJO%(AI2412%4$!!B'I@3%1*)*.*3"$TSS0:P#`L2A63 >+MTYDJI\Y6Z#]QCHV_Z.?[+WO&GIV2Q!D@*V1H;@)>`6;7D]"J13$^O3A%3V>, >+M::UQ4C$-516C]P`O8J9I4:Y:5*HFQ;(UYMYP>JC(KG]GV'4@R],OG?&CXT>` >+MW=*43@IY24@"O<#S0-JOK:[LBS&S(TCOS"B*JJ!K@K9TA$)%$-!&RB=#N2JE >+MLL6Q@2RJ`KHF>&U7!D6!S:^<99+M9[*&^@'0#PP*Z=$Q68OI!9X!&KGXV@NR >+M3G4,.`P<!\[9@YB0"=)?I$EU7R3`^V4"]S=@$#@E/[-`61WC?><K8'OE@H+, >+M/4*?`/!]P(O2-P])T"<E@2&)S1".4F)('JLIZ0LI>0N:#2R0:??TCPAP1DK[ >+M7>FD10DR"YR3==+3$GRN5JT3CAQ#E7E&5`*O];C\+2Q)7B8)=LD#0,A</>%3 >+MLC+R\0_YN5L6<"M`60+/2_`U`AE9K2[:ZZ7"HS*G22)A&2-BDD!$_A:4\2,@ >+MY];2<M66'`KW<(WAZ!4)OBS!%27XO)1T3A(JRCF&[=64ZR;"1D2U`0U)X/:N >+M.TAHU'^);=J`5QW@2[+7B-2^5V1W?6LST0N.6L5"L8&K`=5=@/O1@"E!VXG8 >+MR=B[85N#6V;I)U<6+H2$S6<4!U$QP7,MVXGGUB?U?Q47\D[620B73Q^IZ[A/ >+MRTO*]=K_`!P2,Z9B##/>`````$E%3D2N0F""4$L#!`H``````")R9#&KMS'2 >+M9@$``&8!```6`!4`9VQO8F%L+VEC;VYS+V-L;W-E+G!N9U54"0`#+X"*05-Y >+MR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````P````$`@&````4*[\L0`` >+M``9B2T=$`/\`_P#_H+VGDP````EP2%ES```+$P``"Q,!`)J<&`````=T24U% >+M!]0+`Q48!E&+-I$```#S241!5'C:[=8]2D-!%(;A)_Z$"!:F$&QL;=/8V@8L >+MK-V`H(VX!S=@H]9F!2FTU3(*5C;:B[@"(8)H;$YQ277UW%Q2W`^&&0;>.8>7 >+M81B:-*DTZSC!QM3^+HYJX-/I8H"+6"_C&&,\U<"G)2QB'^\X11\_F."Y1/$L >+M7XF$-5Q%T?N8'\)`'7P5$NSA-:`1MK'TAZN8Y5,2MG"-;[S@"^?8+%D\RZ<D >+MK.*L`%W&>H*;$D6S?%K"(=YPBUX<=%=H8M9\2L(!A@'UL!!C!X\E&LCR:0EM >+M=&(4T\)*F)DE_R\)K3G[";2C8?B<ZK,33^Q'\V&:I_P"/N)P)20;!<L````` >+M245.1*Y"8()02P,$"@``````(G)D,4V+B512`@``4@(``!4`%0!G;&]B86PO >+M:6-O;G,O=W)A<"YP;F=55`D``R^`BD%3><A!57@$`.@#9`")4$Y'#0H:"@`` >+M``U)2$12````$````!`(!@```!_S_V$````$9T%-00``K\@W!8KI````&71% >+M6'13;V9T=V%R90!!9&]B92!);6%G95)E861Y<<EE/````>1)1$%4>-IB_/__ >+M/P,AP,C(*`54]PR;'$``,8`,@!KR'\9&QD!0#9(#XE8@UD*7!P@@)@(VUP*I >+M/T"%C$#Z$Q#[H:L!"""\+@""QT`L!66+@_CH:@`"B+%[_3VP;&F@$@.0C6+X >+MZ;VK&53U;1@$1"09?GS[S%`;K8^BIB1`D1$@@!BZEE_[__<OV`HPC0O_@:KY >+M]0?"[UIV#<07`0@@EE_?OC/\^`$Q\?=_D#\8&/Z!I/Y!@PY(_P12?Z&VOOS" >+MP"#$RL#PZ\MG$%<0((!8_O_^Q?`7*OOC-RC$(`;\!6K\"Z5_`>5__X,:\(V! >+M@9<;J.;7;Q"7!2"`6/[]^,GPYP]$\LLOB*8_0,7__D$T@PS\#:5A:GX#7?#O >+M.\39``'$\A?H?I@+/@'=^@OD9*AFF"M^([G@S7>@/`O0P)_?P7R``&+Y]^L7 >+M/`QX?Z(G!"A&2BWF/-!P@GB!`2"`6/[]_LTP;?IJ,&?BI"4,K*SL#%^_?F2X >+M?>LT@X&A"T:Z@:F%`8``8@0G!D9&?B#[`Q#;`_%S(!8#XB-`K(:F_Q::V!^` >+M`$).=>5`;`%E^P!Q'I0M`(U0+C1:`"0/$$#(!L@"<2U4,@W$1Y)3AXK#L#I, >+M#B"`T-,^%S3-LV+)%W)`O`=$(XL#!!@`AUMG8F+Z&P4`````245.1*Y"8()0 >+M2P,$%`````@`(')D,6<0=QAS````>@```"``%0!G;&]B86PO:6-O;G,O=&%B >+M<W1R:7`M8F]T=&]M+G!N9U54"0`#+("*05-YR$%5>`0`Z`-D`.L,\'/GY9+B >+M8F!@X/7T<`D"THP@S,$$)">4!]\#4BSICKZ.#`S7;ESQCS`"\B5+7"-*@O/3 >+M2LH3BU(9'%/RDU(5/',3TU.#4A-3*@M/IMH`%?%XNCB&2%Q.CMB8Q,K`_(7Q >+M)]_77=^!X@R>KGXNZYP2F@!02P,$%`````@`(')D,=3=OG8Q````-0```!D` >+M%0!G;&]B86PO:6-O;G,O36EN:6UI>F4N9VEF550)``,L@(I!4WG(055X!`#H >+M`V0`<_=TL[!,Y&+@9&A@`('___\K_F1A9&!@9-`!\4$R#$P\/?TK3[^=WS`G >+M(RB8@<$:`%!+`P0*```````@<F0Q````````````````#0`5`&=L;V)A;"]R >+M861I;R]55`D``RR`BD$*9<U!57@$`.@#9`!02P,$%`````@`(')D,;%.^@$J >+M````+@```!P`%0!G;&]B86PO<F%D:6\O<F%D:6\M8VAE8VLN9VEF550)``,L >+M@(I!4WG(055X!`#H`V0`<_=TL[!,9&%@86A@`('___\K_F1A9&!@9-`!\4$R >+M#$RL/`G+IP<R6`,`4$L#!!0````(`"!R9#&H2NR-+0```"X````@`!4`9VQO >+M8F%L+W)A9&EO+W)A9&EO+6-H96-K+61I<RYG:6955`D``RR`BD%3><A!57@$ >+M`.@#9`!S]W2SL$QD86!A:&!@:&AH^/__O^)/%D8&!D8&'08@`,DP,+'R)"R? >+M'LA@#0!02P,$%`````@`[6IQ,>V#94N'!0``4Q@``!4`%0!G;&]B86PO<V-R >+M;VQL8F%R<RYC<W-55`D``QZ7FT%3><A!57@$`.@#9`"U5EMOVS84?O>O./!> >+MDB*6ZA886A4I&B0;DBTW).FZHM@#+1U;7"A1(ZG8;I?_OD-)L61%MB+;TX,- >+M4>?ZG0L_]U4/7L%=B.#+V&!L-,@QF)!K&'.!P!2"3D=_HV_`2/J`<(E&^RQ! >+MN$Y'@OM6_YS[&&N$/U!I+F,8.D/8L[+]XDM__P/,90H1FT,L#:0DO'!B+>#, >+MQ\0`CRF.*!&<Q3["E)LP<UE8<>!K84..#"-91M()O8VMB8H@,`.A,8GGNM/I >+MU(GD=RX$<Z2:N)?7YRY)6X5;.393FV#`M5%\E!H,((T#5$NV*,JJ`*7'8N@? >+MW5H39[=]&#'-]0%\.;L[O?I\!U^.;FZ.+N^^PM6O<'3Y%7X_NSPY`*14R"[. >+M$H6:,%96F]M,,7#@%G')Y5CF(>@$?3[F/@@63U(V09C(!U0QCR=67_%)2`5C >+M<0""1]PP0^#KYRDX1<*VS%>DQ&,FX%@&66X7.3CT'D5IS'UFR+E/<<6&T`WP >+M`!0*9!H#:^*"*3^$M\,#&+Y__ZYJ^"SFAI/=$WQ`(1.*(&ND!H]/#60U2Z]9 >+MZ,=2)5)E+PY<2Y6?^@J9A7XT+YN/ZI;K)_,,!M@[WL]B&KQY_7I8RJUS<"2$ >+MM7&3PWB#&M4#E:-(ZI@&(BNZ5'MZW[-'`+])A%.DQB2'8?;_*2Y<.=2Y^R3E >+M]GKN*SBT#VA?22%&3&G'I[(?=GUZ0#IP:^8"M1V:#(,_/Y^7A@=4G0P<*E)D >+MY]?)=';R9+E\BEF$.F$TCZD2>_T5<W6/\XAI@\J=4#CWB-0!KNUY=+AV9"SF >+MSBP5M`>J!D,3B6=6IV\S@U3+]^[,2MCE08B6:G8\3N\NSA<Y/X'NV:?$IGBW >+M'\NS'X3/@"(?L"1!INRBJ:@8Q?S[02@5_T[E9^+#D_2(QP&-G9>'ZX=*1D@! >+M3X0<,>$6R],MI+2[,.C,(O'3XLWF#^"G2DOE08!CE@ICCT;D=J(DC>X*#_J> >+MQZ555PM.0^Y,^+B_7T;_H?=82?4;94%!'?9I91B:`-'_"WHV_=;\GQ0R>PM< >+M1U*13UULIS0:99N'!L38R2JQSKX=E''D$AGPN0D/WB0ST))R*/'-O@R,3`:^ >+M%%)IC[:*0CPYM]-Y&[)`3HN34SH1]K2NG"V"FOH)4_=+VOE+774D*<9H,UV! >+MX[K7EJ#+:N=Z7F[O"W6/-5\%/0=ZK^S(_3K2;1UM92H5!8AX/`C1QN+!NV26 >+M^<ND%@U3>J.6>8GYY8&Q#J8\,&'-/GR$B>*)O1O6&RVDEOMP38A=[5;#?6S< >+M'$7/-BR0:C=7AK920&(XM)7)O8'7U.=#"\$2*,.?RZ.G0N1GC\\<>:&]\3WF >+M&_Z`97HKQZ5HNJ5^:I^2JM8)W>)R\J(!:5=KF(UFI<I()%)S>T%[%CJ[*FI% >+M^B>UI(W0-1EM57'!-::R<M\^*UTA^`-6S]]3-+DWQS[$2(E]V$LF>V]JA6]F >+MGN!A?R'8.C*Y6EZ'6NH\(I*W[@9@2LEI_DL&3'X!M&[]CW7GF\9,A8NW"3F( >+MRX@7$`?X0H@7@B\-UW:?#7?C>,5X6X@[QYPF6T6<)DL(>QL^M@JKU.'BEY.S >+M([B^.;N\6^%@G?H+O7^*,.`,$L6I,2QR:_D=9%SRWX`_P#+5ZTKV_@>ZUTCX >+M=D?Y`!Z;\V_D?U"@TH$#%@XZ\\!*3`4E;(JR<I^NX(=;,L2M..)V+'%;GMAZ >+M4]5+LY8MUNO1/A_/J&,#>:RW7PN3[,HEG[/)1H<U"MB-7'9(H;N;Y726R[6& >+M;[:/2IU\YCW13#X;Z6<3`5VY3%:QT2Y\M.S:31GIQIQT0U;:QDO+@JYDBZO! >+M7$'"NE#'79#'3O?'2YED!RZY`S99+T,#HVPM0YVH=:&7NR"8.RG#!DD4?',' >+MC#/+X+'W'U!+`P04````"`"C>G`QDF\30]4"``"X!0``$P`5`&=L;V)A;"]G >+M<F]U<&)O>"YC<W-55`D``S)AFD%3><A!57@$`.@#9`"M4UUOVC`4?5Y^Q15/ >+MM(*DM-JT@BH-@::AM;0"NJZ/3GP)7AT[LIU"-O6_[]JA#=4^I$GS0Z38YYYS >+MS_U(CB,XAM4&(=/*H7(6]!K<1EA8"XG`#(*MTF^8.7":'A#FZ&S&2H2;*I4B >+M\_&7(D-E$;Z@L4(K&,0#Z'IL9__2.1I!K2LH6`U*.Z@(_"+B&7"78>E`*,JC >+M**5@*D/8"K<)DGN6&.[W'#IUC+",T"7]K3W%`1"8@XUSY3!)MMMM7.CO0DH6 >+M:Y,G\YO+A-`^8*G7;NL-<F&=$6GED$.E.)I77)3E(8#L,06=\=)3S)8=2)D5 >+MM@=WL]6GZ]L5W(T7B_%\=0_7'V$\OX?/L_FT!TA6B!=WI4%+-38^6GBGR&-8 >+M(KZ27.LF!5MB)M8B`\E47K$<(=>/:)10N8\W(M]0PYCB($4A''-4?/NKA7AO >+MV+?YFH*$8A(FF@=O5TUQZ+\H*B4RYD@\H[R4H^IR[(%!B<PB]Q17S&0;.!OT >+M8'!^_OZ0>*:$$\0[Q4>4NJ0,PB#]1O%Y@'QDJQI2GVA3:A-^8KC1IKG-##)? >+M^K1NAX_ZUL27=2@#="='(:<^?<Y;W-\$QE)ZCD53Q@5:-(_4CKVI"2U$:+HV >+M77LT;&Z3*$J.X<(?R(VNRE3OXHPZ>O'/)P(*@J6K)5J_$,&?+]C7V\L7[M!< >+M:D#P3WTH_(K&(?2_G.#H@V(%VI+1RE5&=CM_6)T'K`MF'9HDIW0>$*G)B1]K >+MC(6-M9)UO*LDK7JHT="?UD?SZ]5>KGY$;Q*J*2VTH0$9PMMR-XK>$*2]>E?N >+MX&2TQZ7:T&`/84"75DO!:>X,XG2Y85QO1X3H4[K]!M8WC(O*OF(M&>>T.@WM >+MX-0_/+7IT+CXL?!IK:GU_2WZN1B2K.0>&,7/4)+@->$.&(6B.@@7<"U1:^2$ >+M%+WJJ3?DA0]B_=M9R+*QR;('KZ1X/]-2D^%@:TK+I?/&RE/T$U!+`P04```` >+M"`!O=F4Q9J]OL@<$``#L"```$``5`&=L;V)A;"]P;W!U<"YC<W-55`D``\+9 >+MBT%3><A!57@$`.@#9`"M56UOXS8,_AS_"BZ?VB!VDG;#W;GH<%F+0W-KTZ+) >+MK2N&?9!M.M$J2X8D-\F*^^]'R4[B=NVP83.0%\GDPX?D(VK0"Z`'\R5"JJ1% >+M:0VH'.R2&\BY0&`:P53)'YA:L(I>($S1FI25"#=5(GCJ_"]YBM(@_(+:<"5A >+M%(W@P-EVFS?=PQ/8J`H*M@&I+%1DO`OB$'"=8FF!2^)1E((SF2*LN%WZD`U* >+M!/<-ADHL(UM&UB6M<@?1,@1F86EM&0\&J]4J*M2?7`@6*;T83&\N!V3M'&8J >+MMRN78,:-U3RI+&90R0SU,RQBV3:@])B$[GCF(":S+B3,<-.'N\G\XOK+'.[& >+MM[?CZ?P>KC_!>'H//T^FYWU`2H5P<5UJ-%1C[;RYRQ2S"&:(ST+FJJ9@2DQY >+MSE,03"XJMD!8J$?4DLN%\]=\L:2&,9F!X`6WS%+QS5]3B)J$79NOR8E+)N!, >+M93ZWJ[HXM"Z*2O*460J>$B]IJ;H9]D&C0&8P<Q!73*=+.![U8?3AP_LV\$1R >+MRPGW'!]1J)(8>"&]$G$K(.>YC^JIGRE=*NT7$=PH7>^F&IDK?;+9BX_Z5ON7 >+M&U\&.#@[])S"H^%PM+?[NP!C(1S&;5W&6S2H'ZD=35)G="!\TY4^,(>QVP+X >+MK!`ND(1)`9?^]Z-L0D6DW$.R&@3!H`>G[H%2E549I=3QTW__!$!>,+,;@<:= >+M&%\`5]%?OUS6R$"=*:A1D3?]7Q[/_Z-D!9J2T1FLM#CHOG&6'G!3,&-1#Q;4 >+MGP=$ZOK`Z1PC;B(EQ29:5X+.OJ]([!X@NE7-O5Z[<+N]?I/64]!)E"85QW!< >+MKL$HP;.3H!-2\+!^$5I5AJD22IN8Y*<1SR]=&V=+EJE5LW-!.\*+XXHB^*\7 >+M*%XZ+W#.F7YX!M,LWL)(E+6J^(\@`O.7//YI/H->#X+.'9=D:$`B9@:.J&HE >+MRS(:%'T@"=,DD-4:,D5*HOD;!YT.S;'&I^]%51,!8ZL\!Y;0G*'Y*P3D[*$> >+M3@U>[>KQ:D>?!BM+9+J9VN3EQI3F&;:@@TZ/FDUT@TX#%3N>E`%MPTN8ME*^ >+MHT%)LX!)>T*&!9?ABF=V&</(NR<L?5AH16.OKF#<5.9K2W96*6%Y6W3;G:?7 >+M8C<O?3BF:7PYO1%='Q"@S=\IM+9;;VE]/\3";35L)C)7<UQ[\CD-%9>:,33- >+MJ?FO\W<>/^UV?2910RD4+$'A6=?,8A@2B7:)ONZ2^\UR*Y#^G':MKK#[N_.C >+MFKC[)JD6<'PT^N&=NW'=$('1T7M"[>UP0Y?=L/F$39J^5ZU<I9*X+;6NW*1R >+MEY?O&]U,QJB4^]GM[W+74D%WJ=D=>[>"'_>][@?1=CO<"^"I7?-A4^^]#(9O >+MR,"W]1-'49?P&U!+`P04````"``@<F0Q57,Z>OP$``#2#P``$@`5`&=L;V)A >+M;"]L:7-T8F]X+F-S<U54"0`#+("*05-YR$%5>`0`Z`-D`+57_T_;1A3_G;_B >+M+=,DJ(A-Z)#6(*8RH@XV"@CHN@KMA[/]$M\X^ZR[,TE6]7_?>V<[<1*W!=99 >+M@G+OWM?/^W8-7VS!"[A-$6*=.\R=!3TÐ+8ZD0A$&P9?0WQ@Z<I@N$"W0V >+M%@7"51DI&;/\N8PQMPA_H+%2YS`(!K#-O+WZIK=S"'-=0B;FD&L')3$OC+`& >+MG,58.)`Y^9$52HH\1IA*EWJ3M98`/M0Z=.0$\0KB+N@T9A4M1A`.4N>*81A. >+MI],@T_](I42@S22\N#H/B9L%;O3833G`1%IG9%0Z3*#,$S0KNLC+-@.%)W+H >+M'=^PBK.;'D3"2KL+[\]N3R_?W<+[X^OKXXO;#W#Y!HXO/L#O9Q>C74`*A?3B >+MK#!H"6/#TI(CQ22`&\05DV-=N6`+C.58QJ!$/BG%!&&B']#D,I^PO)&3E!(F >+M\@24S*03CL"WFR$$=<"<YDL2DKE0<*(3']O;"APZ9UF9RU@X,AZ37[DC=!/< >+M!8,*A<6$5;P5)D[AY6`7!J]>_=16?)9+)TGO"!]0Z8(\\(748;$I()9<6O6N >+MGVA3:.,/`5QI4U%C@X*AC^;+XJ.\5?+%W,,`VR<[WJ?^_M[>8,GW)0/'2K&. >+MZPK&:[1H'B@==5`GU!`^Z=ILVYTADP!^TPBG2(5)!E/_[^N\-A50Y>X05[BU >+M%;Z`(_XH+=9%>A;$E/.CYWU;0))PX^8*+?>-A^'/=^>-[CZEQZ-#6<JX@0,O >+M\4T^'\SK7&1H"T$-61JUW?M,8]WC/!/6H0DGY,X](I5`R$6/@;2!SM4\F)6* >+M!H&'9\A?$T)]8F,-Y2,%06Q]LM`718'"\$182!PR,VQ>.YRYL425'-)M)@P5 >+MWA#VBQG\6,R8%&E#O5&1K%;2\WDMU4W?Z:(?:Z6-'5)5&\3132H2/:T/(V'N >+M*\*ZH"_"-=%3HBE?G-7YG/_N%H^T<SI[OKS"\;KU+S@>B?A^8C0-BDIF6.EZ >+MTR"W0;PE7`^W/JVE3CK,UG+G21];2`\:I,%1CJB,#-6H5U6G<CC6<6GAYX7& >+M.TN5'%-%'_6<*;'WUUU<&I9JSAOZ$P*/&N#[-P>C7UX=+)1W*JN$N^,?T?S2 >+MDW4`*NH"@4>[_1E+BZ2V["QHW3BG*'BBKR)=$S]"9Q]0SBN&&)5J%<NL+\@0 >+M-04M!NK59_;$$PJSJR^6Q;A2JH_JB4?*=O3#5YQ^=DT`%")):"4/8:^:,Y_: >+M&;JSM,9$I+"IBV'*.WPH8B<?L%7+C/-:%MH8MEJI=55AU'W'&#QGU*W%_;5L >+M/B%Y3YU=:YXL<!Y4$YWP/JCQ#I:`]R4]93VNU0)HX-OO8%4B0M7BI122VN_H >+M8<9)RQ>]&/`'G$EZ"QIJ<W[E>CO5#3=E6R]S+AE9/U_V+6_QOLSH)3>D=W". >+M&PZM"/K2&36GHYZPU+6,0#U<-G7Z!1VG1F=(*WJB="14:.]E'O)$"%E?G[0$ >+M$SGF3?P4XPE^$^O)BO65,<>CJC7D@H;VB"RU>Y#K@GX&RZT_36E`]_T3AF&? >+M&E$L8_<6'E,R2U?NZ/\#W-&KH[Z>#[\:,>\>XSZ^.,7X?O7-L]3N+[VRC8G> >+MR'UYEK?QV5]]\BP7<<<$RRCFJ4Q<2GPO*SDFI5A/GIJVG)'MQP%!2H]0<M7! >+MP=X/_+,&FO?]SO_^_'K\:@TU"(0QA^Y/ZW7<LM:9HGK@;&3JOSA"AI[@QO^! >+MPJH+_P)02P,$%`````@`(')D,6ZNWS>``0``5`0``!D`%0!G;&]B86PO9VQO >+M8F%L0FEN9&EN9W,N>&UL550)``,L@(I!4WG(055X!`#H`V0`E9+!<H,@$(;O >+M>0J&7A-I>G2,F>F;(&Z4R0H.T,;TZ;L:-59-TWH1EOW__18V.385LD]P7EMS >+MX/OHE1_3S2;)M,FU*3S3^8$7:#.)[WV(;QACI#+^P,L0ZEB(R^425?9+(\K( >+MND(T&=ZSXN8#'V:>X5I)'\")0@8X`]2T#"4XB+2/K,%K1/*I6?;8K"U+\(P- >+M^!V]D[FVG</P01/`Y(2O2F<K(*=;AT)90R=!#-V+3AM1Y9>;2]K9)'U>VILF >+MA!B7F6V80NE]7W*G2E#G'87WG!%:K`WUI0.=>T!0`?)MET+_7'N9(>0\'3F? >+MF;YQ=D)HZ,TFHEZF*UG`BN[O'&("(@:2L=]E9!T690;8PLX+M^3S7E>@-5WT >+M@MFI'W2MM*NS4GJN;7>!7O_0G6Y;BJU4"KRG.=PJ9^N[];S)1$Q>/1E&9#EN >+MP5K,I*LE0@B@`U0[7TL%CO]C[GJ3;O*6AK^-X:W6<!>WW0[A%":=J5)C[L"( >+MYTJGBW*4/KR"<>U32OL&4$L#!!0````(`"!R9#'(UUR[7P```*4````9`!4` >+M9VQO8F%L+W!R:6YT4&%G95-E='5P+F-S<U54"0`#+("*05-YR$%5>`0`Z`-D >+M`-,KR"\J*4K,+-$M2$Q/5:CF4E#(R2PNT2TNJ<Q)U<W,!0I:*906Y6@H)6<4 >+MY>>F6NGKI^?D)R7FZ!=G9^;I!T!UZQ7DI2MI6G/5<G'IY23FI10G)Q:DDF>D >+M#TP[PDP`4$L#!`H``````"%R9#$````````````````0`!4`9VQO8F%L+V-H >+M96-K8F]X+U54"0`#+8"*00IES4%5>`0`Z`-D`%!+`P04````"``A<F0Q<9>@ >+M'CD````\````(@`5`&=L;V)A;"]C:&5C:V)O>"]C8F]X+6-H96-K+61I<RYG >+M:6955`D``RV`BD%3><A!57@$`.@#9`!S]W2SL$QD9V!G:/C/<.#`@8:&!L6? >+M+(P,0*`#(D`R#DP\+?(KQ6;4*$5SAP0P,%A[&44OUV:P!@!02P,$%`````@` >+M(7)D,4\&+MHS````-@```!X`%0!G;&]B86PO8VAE8VMB;W@O8V)O>"UC:&5C >+M:RYG:6955`D``RV`BD%3><A!57@$`.@#9`!S]W2SL$QD9V!G:/C/<.#``08& >+M!L6?+(Q`BD$'1(!D')AX6N17BLVH48KF#@E@8+"V!@!02P,$%`````@`B!)K >+M,?IM%)6=!0``!A$``!<`%0!G;&]B86PO875T;V-O;7!L971E+F-S<U54"0`# >+MKQ*305-YR$%5>`0`Z`-D`*U7;7/;-@S^W/P*S%^6Y"(Y27>W5EUZS9+KFJU- >+M>TFZ7J^W#Y0$6UPH4B.IV%[7_SZ`DF,Y?HE]FW.)(PH`@0</`+*_OP/[<%,@ >+M9$9[U-Z!&8`OI(.!5`C"(K@Z_1,S#][0"X1+]"X3%<*'.E4R8_VW,D/M$'Y' >+MZZ31<!0?P2[+]MHWO;T7,#$UE&("VGBH2?A^$[:`XPPK#U*3'V6EI-`9PDCZ >+M(FS96HGA<VO#I%Z0K"#IBIX&;*(C",)#X7V5]/NCT2@NS=]2*1$;.^Q??GC; >+M)VE6N#8#/^(`<^F\E6GM,8=:YVCG;)&770$*3VCHG5ZSB8OK'J3"27<`GRYN >+MWKS_>`.?3J^N3B]O/L/[UW!Z^1E^N[@\/P"D4,@NCBN+CC"VK"TY4LQCN$:< >+MVW)@&A=<A9D<R`R4T,-:#!&&Y@ZMEGK(^E8."TJ8T#DH64HO/('O%D.(VX`Y >+MS>])26JAX,SD(;9W#3CT7):UEIGPM'E&?FE/Z.9X`!85"H<YFW@G;%;`TZ,# >+M.'K^_%G7\(667I+=<[Q#92KR(!!IR8Y3`K'F;-?@^IFQE;'A(88/QC:KF47! >+MT*>3&?DH;XU^-0DPP.[97O`I.CX\/)K)K=O@5"FV<=7`>(4.[1VEHPWJC`HB >+M)-W87;>7\!+`KP;A#1(Q:<,B?+_2[58Q,7>OD?K9$H'A:J()A9]2R]^O4EX+ >+M_[+@2Q+L[^ST]^&$/R!HF\!\]&2(&'*R[6<'2`>N_42AX_H*<#'^7=-44OD0 >+M?1R$_Y=/"..5%B6Z2E#-UE;M]E;4WBU.2N$\VOZ0\GF+2"SI<UU@+%ULM)K$ >+MXUI1K^@:+'RI%JR.G@:#E._G_3%+L!*CF?!G/N1FB=WT./:I&<-7"C^KK3,V >+M@1P'HE;^!2U5(L^ILA(XA.^H-(E]0H<7$041B:I"8;DO)=3"-/*+U%@JM>9Y >+M3N?;SD[<=2*:;;WJ5<0-F)H:4>;KLCU+U+6B/A3D!Q)5?N\::PLEASH!JG?" >+MM^O;434&9Y3LBO.;R)N*]E3&NH0*V"*>7Q<B-Z.'<J&\-I),C?>FW$A4X6"5 >+MS2=SFXM<UBY$$5"E%']LN;V$UXX(3ZT_-_I[&@#B#KE5RXQK_1=KG(LARD<% >+M<Z$%/>:<D[FOW?0S8H?TR]_'[;[Q-$M25[6/IBPJA:7>QHQYRH*K\_&MPTZ: >+M>]13)D"MQ=,TF?%SGA>M6)1;4]$^MX\2H[''7I121X2(+RB8']<[UGE#Y7:[ >+MC$''FS/H+7.E262[\H96%*]N0JMS"G-.>PN>;:B[A'B/.)T2+$-K:*HV>DEC >+M[YR&G1F^>$`<?@[)<-R((UG2T$Z:]I45UI1(#6RH3"I4W]U*W1?6FE'S-\IU >+M/)0#[F0+/6*1"TG!)X%$9%[>X<&CXE]H(NN3GK<U]OZ8\>B15M`^O*8^O'E7 >+M6*.TID<5K9*Q[HW.>!"7M(/\>SIK%D+E2FJBO7*;^P\,5/*CSI=25[?ZS" >+M-V@$-%M7IT4W5W,K()X1=KO2V+(:-D!S7G@V!M>P_S4/H/4C;Q&D4HRC`CDX >+M@NC9X</L>/)E93<,+Y?VOX7ANV8N_Y=XV`-2V=B)V6S8V+D5)Y"EKJ0FGR1) >+M<(0?HPR5"F>#[C`+V4[@60MU"*&0*K>H'[=(/6G7T=D_H[/W'EM=Q*[3*+<V >+M?^_P_";PT/0-Q_0`CCY?]\(])Y4VIX%/9][9O1)!XVC9^0`F].L,C%B"QC[? >+M'VL2F%Y5#''`-2=H6_-?OHA)OX*.R_#B8=STY":8QR#;!J:N[6V00KH?A@!G >+M@%G\JY:6$>B"U,3<WDO:FFR./;0LM9-T?_/&J%382I"&IULMEMT6NO@67DY5 >+MID_M2?@E%/-?=(K_9W_^G!6BO)-.IE))/^&C$QW7=(.<0[Z+DN'Y$]*3^R+Z >+M@<9`%XTGB\D@"-C8OU!+`P04````"``A<F0Q%5.0?*@``````0``$0`5`&=L >+M;V)A;"]C;VYF:6<N8W-S550)``,M@(I!4WG(055X!`#H`V0`C<RQCL,@$(3A >+MGJ=`J9("Z$F35R%XSB`O8"UKV4YT[QY;::Z\;C3Z]:E'+G-CT0O3]1(3MP+O >+MW$CM&<CU*5=WN=W5HX:"/H>(;YA$YB-;U]66]LI$P38>W82]A"Y@-P;!!,S' >+ME`2&S=VV2KO=%CI!I82!F#(-C.J].1AS7B:"R`@VN2X=?%-OI?5/JV)6Y#&) >+MU\]&PUW]_D>@%B<,?XPN.\'K+(%R/)$/4$L#!!0````(`"%R9#&LJA/C(P(` >+M`(0$```6`!4`9VQO8F%L+W-P:6YB=71T;VYS+F-S<U54"0`#+8"*05-YR$%5 >+M>`0`Z`-D`*V2P6[:0!"&[WZ*D4\0!5NYTDL14174!!#0(HYK>VQ/6>]:NVL< >+MM^KC]CTZ:TADFO;2]N"#M?]\\_\S$]\$<`.[$B'5RJ%R%G0.KB0+.4D$81!L >+MDWS!U('3_(#PI+^2E`+632(I]>6/E**R")_16-(*[J([&'EI>'D)Q^^@TPU4 >+MH@.E'30L?NWA"?B<8NV`%-NH:DE"I0@MN;+O>*%$<+@P=.($:P6K:_[+/6(@ >+M!.&@=*Z>QG';ME%U-AQI4\1/Z\?8J_VWU;EK?<",K#.4-`XS:%2&Y@K&-H<" >+MSB<4A+.M1RRV(23"DKV%_6+WL/JT@_ULLYDM=P=8?8#9\@`?%\O[6T#.PEQ\ >+MK@U:GK'QU>2C8A;!%O&J9:[/%FR-*>64@A2J:$2!4.@3&D6J\/6&BI(7)E0& >+MDBIRPO'T[=L(T4MBO^<55Y$2$N8ZZ\,-QL/SS*[5"T6.6'R/)Y2Z9FY_'K_! >+M//PX\ESV0ACAB]?:G-VD!H6?6](-)?UAS7E[?088S<=]RX$B`IA)"9MSQ@U: >+M-">>U8NY.9]KOQ)M1G8\O6*/7LW-&E=JT[/C('BO1(6V%GQ;C9&C\`\W<L2N >+M$M:AB0MV?D3DV+%?'T9D(ZUD%STWDF\Z"**FAF\!\/BMFUC729Q0Q7N:GAND >+MI=$5<HM"ZD3(V!Y)Q;8FE3@U:>JHH#P<!]][SK3TJYV*U-$)_P$Z8<(`G.E6 >+M_34M4[^0_H_)3%V9_`E02P,$%`````@`PYEE,3*W:7[L`@``I0H``!(`%0!G >+M;&]B86PO9FEN9$)A<BYC<W-55`D``TT7C$%3><A!57@$`.@#9`"UEDUOHS`0 >+MAL_E5WC32UN5D'ZHJHBZVL.JVOOV5O7@P`2L&!O9IDFVRG]??X`A!-HH4I$@ >+M8'O>F7D\,/G%<`&RQ`F@2M"+2:Y4&4?1>KV>%OP?H11/N<BB%6P++!6(*,,* >+M5@"EOE4Y")@2.>6,;J>;BDXNYT%POB0L#1/*)2PJI3A#'\%9=!4@M.`B!1&C >+MFW*#)*<D14I@IIT+8&JN%Y0X30G+8G2G5]SJ\[[^_4&*D@N%W;)01Q;BL@2L >+MS1.($>,,_`0I<`:A@(QP%B,!B;J8E9MK=//07O6`#O7L*M)&E$@52K6EX$QC >+M!R+)!2]`H\@H7V`:R15A$4DXDY'-+73)34N6F;3/?.RS>;`;HO`3317G=(&% >+M&PB-F&=38)$1%@J2Y2HV\?5RKN6;!8=0F@44E@/S)M6AJ.*<OX/P47P*\.YV >+M'^/E5[(Q3A1YA^/4[Q];=>.IH_ZLU5\<.JTULO\]'*[60L5+!\/6FZ^1=C9, >+M..5"QN@E%P"__^8XY>OZX8]F30WO8>T%UZD6G7+NR[L%WD.WV!$RF457R))C >+ML%&H+A.=<\W3CGZ<5*'&OJG,3[E;X.[BWHE=U[NOCG&-UMYLVI#(:THD7E!( >+MGR9*5#!Y^U3/JE@]4Q!6;X]^AUHIX)WP2AZ2\S/?3:^-MGXA=OT0CD5HE;S< >+MD-()'.W%<K2B`R!S7^)=B.WH=P/TP37O_*[K_EAX5L5GW%<Y`9P5]*H'X#H1 >+MND_<->JX2W)(5D=Z:QT]W(^%W],[`HK5LJJ/LWU56U%2855)VW^"X0UN&JKK >+M2NX+.JO/&_U@YM8D57EL-\\\YN`ZDWON^;)N&K%91^S.&?OF>3M@;`-]=?=/ >+M$\;5DE<LG;R-Q/Y5<38"38%Z;TL"-`U&&TS[Y3_D,]L+VPJ-!;S`R2H39L`U >+MAAB=/S\_Z,/HM2/FF/>[W^N28IG[PM)_*3H.M1Q3F#!=&WOC(UZW0"E??P%[ >+M+0R%TUD;^V'.;;3#Q)7N'':A,?P/4$L#!`H``````"%R9#$````````````` >+M```.`!4`9VQO8F%L+V%L97)T<R]55`D``RV`BD$*9<U!57@$`.@#9`!02P,$ >+M%`````@`(7)D,7_0^H=S!```6@H``!<`%0!G;&]B86PO86QE<G1S+V%L97)T >+M+F-S<U54"0`#+8"*05-YR$%5>`0`Z`-D`*U535,C-Q"]\RNZO!>@\`P0(,&$ >+MU()AB6L=0V$V6U0J!XVF;2MHI%E)@^VD\M_3K1D;FX_=5"IS`4M/K_L]=;?2 >+M;=CF#\XOKWH#Z/>ZEX/A)9SWK[L?ZYT-V(9?T7EE30<&-WW82_;2*_J[G^RF >+M_?J?/0(Q[FZ"(*T):(('.X(P41Y&2B,(A^"K[`^4`8*E#80!!B]%B7!395I) >+MZ"N)QN-*/`X%FXQM-9NMK1.8VPH*,0=C`U0>5X+@3&(90!GFD+8HM1)&(DQ5 >+MF,20#4L"]PV'S8)0!@2ARWF=\1(%(C#/)(2RDZ;3Z30I[)]*:Y%8-T[)B;11 >+M/;2C,&6!N?+!J:P*F$-E<G1K=)3E*H#D"0.MLR'TABW(A%=^A]D^]^Y^OOYT >+M!Y_/;F_/!G?W</T!S@;W\+$WN-@!)"G$B[/2H2>/'2B6B7D"0\35>,PULG4* >+MOD2I1N2Q%F9<B3'"V#ZB,\J,P:GQA&Y+F!RT*E00@9SW3_DSS\*WE6N^IG/* >+M"`U=FT=M*^:0F_D:N&=44(2]P$?4MB3BQNH7+'QB61A=6Q254;))J6M=:5W\ >+MP>1P8UV](1T*MC2;1]*7T?ARNG3#42ML=K=@[_CX!^9X%9_`F=9P6QMSBQ[= >+M(QG<Z.E2?<<[M&[3;W5X"8;2A@"_"'GE<$R>_UAX7GEO&B4)%>-/S?DS'<AY >+M4D'!YCLQ@==;ANLS0R[QU6JBPP4#F:HI!EZ^&GR"*S3H2,=Z/RV;:9^K19-1 >+MKNDIZMW6U@ZO+IQ@EC[5%4&^14:=^8RN7_,Q%[74=*+D!*3P=5&6SCXJ'V^K >+MN7J>'$UYQBG"=R1*JF4I,E*OC`\H<F:+!RPW9$95FT!O%&?`5/D)SQ*AM9W& >+M26#CAH/')LDU.ZW1<V9[:>6:C^M9[<2^X$FS#&09Z^EW)*.H;X=\)50<?,RK >+M3,Z%71]GJIQ:-%)0%>>H,7!S/K,N&A!3<EAJ(:.WQ=-\HT3IGIB-,3'3U>,. >+MOU3*/37*,[%+9W,;)<<L<%$;S],@:XA0JE)1Z<9B_1=F+,B6?@A#8]?@FC6O >+MI=8T3_U670XN7GNI8#O=V$BWX90_NBUT(9$T)$__R[<!=`Z&8:[1/\W/YNF* >+MW#S.A;;C)$+_ER\J>$\3G28;5$YOMN3$V0+I_1EKFPF=^@=E4GH%"69$@;[D >+M(HC(-]ZI!YP7@EK)I6.JM@=$FF\I%P8FRB?<%,FLTI$QB;+.[0S^(DF9=71A >+M[3@R.[!?SL!;K7)X]_WY\=%Q]^0)DM&HL\77,<&67P=H'+T91LB'L;-40&UI >+MM74=:)/"]D5TGP&%,NT)UHD>[I:SDXV_%VIZ!;UV"TF%</3:-*$.&+=<:V0> >+M-8LKA`=':X1W*E`Q,]N(IG9[VJ`RJ_-5%,[":LA5^C70;Y(&W@-/O--6<!6V >+M?H_'9.4\"RVMHJ?!<4Z-]'=[!X>'%T>\$NA\F\9&\R9VZA;3RN`W@W0F_/YW >+MA.1GJ([8T!_L'WPX^NX9`1FXP:!2Y#F-I86<O=W:KL5RO.3#1N,_4$L#!!0` >+M```(`"%R9#&9J%,O6@0``.P*```2`!4`9VQO8F%L+V-O;G-O;&4N8W-S550) >+M``,M@(I!4WG(055X!`#H`V0`K5;;;N,V$'WW5TR=ER2(I+A!L8V"%+63733M >+M;A+$;A=!T0>:&DML*%(@*5]VL?_>(27?UP&ZK8#$$#5SSLR9BY2<=N`41@4" >+MU\JA<A;T!%PA+$R$1&`&P=;COY$[<)H>(-RCLYQ5"(_U6`KN_=\+CLHB_('& >+M"JV@%_?@V-MVVR?=DRM8Z!I*M@"E'=1DO"+Q"#CG6#D0BN(H*RF8X@@SX8I` >+MV:+$\-QBZ+%C9,O(NJ*[B8?8,`3FH'"N2I-D-IO%I?XDI&2Q-GER__@^(6OO >+M,-03-_,)9L(Z(\:UPPQJE:'9PJ(H-PTH/::@VQ]ZB+MA%\;,"GL&'^]&OSS\ >+M/H*/_:>G_OWH&1[>0?_^&7Z[N[\]`Z14"!?GE4%+&AOO+7RFF,4P1-RBG.@F >+M!%LA%Q/!03*5URQ'R/44C1(J]_Y&Y`45C*D,I"B%8X[$M_LIQ&W"OLP/Y"04 >+MDW"CLY#;AT8<NB_+6@G.')%SBDLY4C?#,S`HD5G,/,0'9G@!%[TSZ%U>_K@) >+M?*>$$X1[BU.4NJ((0B-]A7'90-YSS1I"O]&FTB;<Q/"H37/*#3(O_7BQ;CZJ >+M6^-?+8(,<'QS$F**Z-_EVNXU@KZ4'N.ID?$)+9HIE:--ZH8&(A1=FV-[DC:G >+M2:>3G,*UO_S$6"TQYE30ZV^X.D!N,'0+B=9/1$C0*_8KF[(A-X(&XJ;AH%%0 >+MF9[%P>5_N4(J/RM6HJT8S5IMY''WP,R\X*)DUJ%)<JK#"R)5-_']C+&PL59R >+M$<]K23/>Z<2M*-%8S^$SA3MF_"4WFGHRXEIJDT)$T-$[@3*[HN=[AR.<NZO. >+MEPYXH5-_+84&HV>V/?+1K[CHO.'2ACJ?J)W390K?5W.@YR+;0P>H6);1%*5P >+M7LT]VQ98).AF$S%T6`J]%>"H,(BWPX)14;;@?O!P![.^I0'1N3<(MZ11Q*3( >+M50K6,>/@.]H(U/1,N>V85O%(6D21]1T3B9+V04H;D^H@&GL2+/87H#$TQ$&N >+MYF!7KLA/=D!<17Y!R9$8X?>BR:(-_>B<KL'`GTQH)B(K/A&Q9"9'LQUGIAUM >+MPO4]IREU@:;`1L++7;F]RTZCI$TS\L+H$JD=<ZG'3";V1:BD=5O^1B'3*&.V >+MB',QZ9[0LJIH641S>EM5VTSK8&8B<T4*;W9K]>^)`V;+K'34D*^H5_6@(;-^ >+M>[]2D3_=HL+K;FO9_2L$&N2>L%+(10JE5CK,*F'#!KBE]<S]>J0><G@(?FEU >+MW76F7N+OM^G1X,WMX.W@8"<N>V</[VS7)GQ-[-/^!%MVX2-CXZR1U>K:\'#N >+M:%XC*=1+B+<-LNWYS2`!6L&;]>`'YM"J:)4.3+MQ+Y^%KQ%Z1[0Z[8_=X48) >+MU`F3:%R33=,>>S*V5/0!XE_G_Y5HSB4K7V?:;JUO96I1-JA6HCNMY9B93=V/ >+M_+Z=^,7[=DI?`)ZXI+TA5+.==[KL:%#3YE9?-5W^G>^[+7FQ8B9\O01?H:+E >+MTNEAZ0W_`5!+`P0*```````A<F0Q24YFM-,"``#3`@``$P`5`&=L;V)A;"]U >+M<FQS:&EN92YP;F=55`D``RV`BD%3><A!57@$`.@#9`")4$Y'#0H:"@````U) >+M2$12````8P```!0(!@```)D<@^P````)<$A9<P``$3D``!$Y`1O9DT8````' >+M=$E-10?4"0\'&A)6TQNH```"<DE$051XVJ592Y;#,`A#N?^=-8M)W_-X,)+< >+M;)HZC3\@A*`@655`_5ZH*KZ?G[%:[M?GU?R&5?74WPN'[\XXC#7=^WV>$G.Z >+M8S?KM??/XHAJ7E['U\]UG-N[+'U!?*_#GCKG3W,CV,,^IL[A/(=8^P_HGRK2 >+M7(0#<F'.`6,^#O/Q`(R38SJP=/MW`.'>L]D3#(!^*(5L#,;&D-T"//RVA%$G >+MU-!$,82!NGDG8U*L4P-S0(Q!.?1U!F"&,077<T!RYZ350`@CDP/"3^""01T3 >+M*-5Y3@"D0W5OSF`43MLB-"+BA`P.3BEAG`EI#KC8G,,Y/X+\P@$\,F<D7*\0 >+MI&C/3:IU0+:3,TJ@&@;=G40#S7&'AEN:@LFA-^A)%4\G$2<'P%A'"008^0A" >+MZ<$`2'MFD.,AX$@R85Q'CROIQT$%)>OBXOFD]AS[<'`4MCJ##(V*0'*Z=$3Q >+M#`;M*:%P4XLD2@T'9H%YSE;:=J&;*`0W^:NB[AOCJ'S"(-?`5(05TN:_L5=- >+M02F5R7@W2JR^<*:J.6"(!A5=,&HB&I$+40)T=8:L)Z;B!0$%N4D>AG,ABC>W >+MODA:&1!5MQH?;?OFC&/>2%HC723!2)X,[]UHX:'RAJ/YPRAP<HC<M]MAY>#E >+M,OG2Y?BDT'*J<;?QR%"\)%4WG+/O=8;3GZ$P-BZ0#I/+G::F`Q`&X%!TF%;= >+MQ_6?IB^5<"M$,RXMS+XI#)6$=01#HK+<&DFISS%G<,KXE?TYE#H@I2X5*;QT >+M+DV9K#JST?J[M$U003/))7F"@<-X\5Y'(8E0H.A5<6B_N#GCBB9@<J(JCASI >+MF/2CW&A*WTVCF)7]^UD_ID8UB`SXL`0`````245.1*Y"8()02P,$%`````@` >+MA7IP,5L#8D5[!0``E@X``!$`%0!G;&]B86PO9&EA;&]G+F-S<U54"0`#^6": >+M05-YR$%5>`0`Z`-D`*U7;5,;-Q#^''[%UOD"#+XK9-)ICDDGQ!"@\9@,)DTS >+MG7Z0[]:V:IUTE62,P_2_=U<Z[+.QDS3-S3!PTNK99Y]]T9'NPSX_\/KL_+(' >+MW<O.6:]_!J^[5YVW<6<']N$WM$X:G4'O71<.D\/TG'X?)3^FW?C'(1FQW<T8 >+M(3?:H_8.S!#\6#H82H4@+(*;#O["W(,WM('00^]R42&\FPZ4S*$K<]0.&_[8 >+M%>RR;:O>;.T=P]Q,H11ST,;#U&'#"=[E6'F0FC%R4U9*"ITCS*0?!Y<U2@(? >+M:PPS\$)J$&1=S2/CA14(SSAC[ZLL36>S65*:3U(ID1@[2DF)M(ZZ;X9^Q@$6 >+MTGDK!U./!4QU@78%CE@V#2@\H:%UTH?+?@L&PDEWP&@?+F\NKM[?P(>3Z^N3 >+MWLU'N'H#)[V/\/:R=WH`2*$0+MY5%AUI;$%RF%@DT$=L^F.LH8D47(6Y')+& >+M2NC15(P01N86K99Z!%:.QI0MH0M0LI1>>%+>+?DSSH-NC31?T3FIA8*.*4)L >+M#7%(S6+%^%)++\GV%&]1F8J`:ZD?H?")16%T3%E.M<QK2AUC*V/#"X/#.V/C >+M1FY1L*2#>0!][(V3TZ$,AUAAM[,'AR]>O&",C?8)G"@%UU&8:W1H;TG@.IX% >+MY9.I'QN;P:\&X0*IQ@AY''Z_TG4$"17A'A_J4%.$Q!N[Z_:R",4;)\I3'B@F >+M<CT_"'0V-Q!7ZP"YX)NU18=+-F2HNC1X^;SW'LY1HR6:J]VU:*TCKAU%LMFZ >+MPZB36WL'M/H@"X-TJ<C(XDM8U*9K:-T(QUC47[.QS,>0"Q<KM++F5KJ0NKH. >+M>(S4M1I&"B=,5%38N1A0\%([CZ)@M'#`<'<.J(03N!R&@3"3;LR#12AE9F$L >+MF+!AX;8FN:*FT6K.:(^57)%QE=5!:!(>.PM'AFT=O0<P\KK=Y09780HRKM0% >+M5WD\SE`%]6N`H)(N4*'G3EV3+@@0*%FLE,B#MN5RV!%1RA.CL4U@VCQN\>^I >+MM,NN60MVH6QA0LB!!3[4QCH-DH8`<UE)JMQ0JU\AQ@/80@^A:09K7)%F$[6Z >+M=^+%==8[W71MP7ZZLY/NPTM^:/`*949)3B/SY;<\.T#GH._G"EWLP5JUW]]W >+M:W`@@4J*/@FVW^4),;S2HD17<7ZG5NVVMMQ'$YR7@KK$IB,JI`DBS;&4<XZ) >+M=`G7>W(W571_!E4R?AZ(QQ?V52_<TQB&2A0%55T&AT?5W?'./X_/T3CS7`'+ >+M\TG<:<<=N">8(4VS#$B8Z3&]E<+2\&Q[4V7PTQ;8,74ZE>HZJWKY?H&2P8_5 >+M'3Q?_K"#@;%DE0%Q!F>4+'BQ34*UXPZ[;N=&&>LRNIHLXFE_+`IJY?AR*NPD >+M+JP?#'?'VM$+6E/A3OG2Z8$A1<IO/JYPN.[[,[07J6-A?JZ%$?ED9`TU7L3) >+M8.&=M]?7;O#.A^PD3?7;7GKJWO4<_$#?('07"QV@..-M)S]A1C>"':%=+,Z0 >+MH3-*DBI64Q\,MQ9`4GN/5O=+;>[:QO+$R7C*T+03ZKA);5D00<",!IG&QJ*- >+M=-960W$^K/WG'&[(`C=02$7XX^CYMH0$7V\DJJ*1D>7B,B4K<OP"VU(46T]J >+M&@+2;T_"Y^$*=+F5%7]H-?)>ZQD":F8_YO0T`#BXH!`=9S#.@S\*-?+S"E^V >+M1,X?ZJT_"?&)HF_BMN/)VI8E?9IF8<SE8VM*I#DW4F8@5.HF4J>2/HU<RK,D >+M-9/VT5%2Z1$-M">UTC6I,%<6:W6.X^(C\LQXG5S._S.H_T,N(D1V\/7T/D,E >+MB3MM3S7`O%8AGVV"?!8AG]+J:V,F%/KDM#FWOV<VR$>="RJ`IZ.RS=\>0TGE >+M0_^F#.D.HC#<`?`.$9"Z$<+&(OH74$L#!!0````(`"%R9#%5$+N4%@0``&L+ >+M```3`!4`9VQO8F%L+W!R:6YT:6YG+F-S<U54"0`#+8"*05-YR$%5>`0`Z`-D >+M`*U675/K1@Q]YU=H\@0,L8%'>J?3$"C-W-S`$&[O\+BV%7O;]:Z[NX[)[?2_ >+M5UH[Q/E@VD[CAQ#6TI%T=*1-?`[G_,#M_<-D!M/)^'XVOX?;Z>/X<_OF!,[A >+M5[1.>#7YZF<!5=Q0_T]SJZC*?MERLR8KN7`B$UVJ/V#LP"?"$=+*1"$!;! >+MU<EOF'KPAEX@?#'?I5("GNI$R12F,D7M<!V+X2@2G++IH'LY./L!5J:&4JQ` >+M&P\UV6]BX%N*E0>I*8>R4E+H%*&1OF`LANE0(GCM,$SB!9D+<JA6;<+O5B`\ >+M^Q7>5S=QW#1-5+8)1\;F,1$1=T7/S<(W7%\FG;<RJ3UF4.L,[18<9=DW,!16 >+MPV`TA\E\`(EPTETPVK?)RR^/7U_@V^CY>31[>87'GV$T>X7/D]G=!2!50[CX >+M5EET1+$%R95B%L$<L1^/L1:F3<%5F,H%<:R$SFN1(^1FB59+G8.5>4'-$CH# >+M)4OIA2?RW29_QEGSUNOR(_E)+12,319JV^JHE=K3)RXE-O!BC$J$[7M/M/22 >+MG.]PB<I4%*GC?A>6'6;H72HJI+.RK+5,NQ3'QE8,"D_&MB>I1<'<)JL`MA^% >+MNS2F5H>BX71\!M>7E]=K>>S91S!2"IY;AI[1H5T2TUT=8])Y:*:QI^[LAH\` >+MYJ*4%AZP$%H"?')Y^/:3[DJ(2)@_MI:WQ!1,10/A^:1$LV?%AB/EJ5%4,:6T >+MN@AI'AXPEG."/!%]\9%SR88,U6F'CQ]F7RE)C9:J/3Q^<,WB4D2G[4:0)GUP >+M=D&G:[H89$HJ1/N/6#3'.VC3%HZQ:`";0J8%I,*U$JZL64H76MKI@M=,)^:P >+M<KB1HB+EIR*AXJ5V'D7&:,'!\/@FI/$()HNP,1KI"EX\0BG3A+UAP@L+RR[) >+M+3:-5BM&VV=RB\;MK"["%/%>>@]DV):&PP0PBOIQR`.APDPQKM09R[YU9ZB, >+M!CI`D-0S5.AYE'>H"P2$E"Q62J2!VS(LQ&!*B5*?&(UM0J9]=XM_U-)NIFFG >+MV'=F,Q-*#EG@6AN[:1`U!)C*2I)R@U;_!1EKL'<^A*8EK7&+FD.I=;/37FSW >+ML[M#UQJ<QR<G\3G<\$/Y\L:JNHWEVXW5O>L,(WZ@XNVIQ5+F80MUIVP2%:;$ >+MH;"6VO[G"=`V=7[H_$KA4);D=0.U5:>#M+!D1S=*KDPB5.Q^ESH.7NWG4"W( >+MK1"V&J+.HEPNZ-([^8OPZ=\CP%OY`;P2!'C$]/O8&M^.@?V>>P][W9D(:'>& >+M51#3<%@L66B][M35$1(@D+W:,M/H(T!G^L/22-L\-GN"ZV0ZK.C^LX*X">+\ >+MKTE(ND]<7.4;&%?2\NJ7N`Y$/Q^R<$/]ST@;G-U0FX'D``Y]7=&O)J%,WAO& >+MZ,@%;T_!D4O<@/\-4$L#!!0````(`$!R9#'BMDS-#`$``.4#```7`!4`9VQO >+M8F%L+W!R:6YT4')E=FEE=RYC<W-55`D``VB`BD%3><A!57@$`.@#9`"]4LUJ >+MPS`,O@?R#J*GKN!X/[!#]A)[!3=1'3''-K+;[(>]^[0T7=>1'09A/@@L_/U) >+MUANH/@]$8Q&\.9`UF8*?NAM=%F51=:%'99C#`&]E`>`H997RBT-%O0!KV+-; >+MKYJ.Y6&MM75A:YQ.3^3U"#M6Y78"ZPQ'A;ZM+.U65P]E\3YJ2&<)":;?)1R* >+M_I(Q?O`SV6X1@:\0EP)Z6E8%J3$.05`M-HP]^GRYL'U<PH:PS,5LP^"7H&_] >+M'/TY)@0F23;S'W,(;FM8Q<"9C0QK_+U_-D--\$D_,GEA8#P0#E7T=O0"H/KP >+M>N10C%8\U,#8Y/5U?(:;^U.1VWDR)U_.^%96%/'?C=W=?G<W.?L`4$L#!!0` >+M```(`"%R9#'O-AFB?@$``"L#```3`!4`9VQO8F%L+VQI;FM4<F5E+F-S<U54 >+M"0`#+8"*05-YR$%5>`0`Z`-D`+6208O;,!"%[_X5T_30-A![C\5+E^VE]`?L >+MK?2@2"^VB*PQHW&\;NE_[W@;0DDH]+*##+9X^M[3C!^S&U!&YT&3I/>;7G5L >+MFV:>YWK@'S$E5[-TS1'+X(I"FLXICL!HK]I#4,=2<TY+_3RES8?[JFJV6ZIH >+M2Y]3(E/0*&QBC2@4L^W$0C(ED!-0'$86=5E)F=R)8Z#>G6+NUF\O,*\7EJ,R >+MPD=GQ&4$\8%4@)J>5EK1):'T@))WF?:@Q"X@F-U*I<!^&F`><]3^3#,+B[!" >+M+)%3,HRC%//Q#/[J)*2%D-"MZ?:32?1=(1P.T4>#U09JB*I5'A7#MV):KPB? >+M-BH3-M_IX04E/%=$/^TAVCM_[(2G'.BO:DWGLHU`UHQO+BVY_W.&)4#HJEK* >+MG'$C]ISX1FOBG8UR]R4BA2<\7WO\JL[7\$BI[?D$N216D^\"/(O3R/D"M"M` >+MK%W_'^'MG=7'NUO]).7V0$LCV_0@_PC8.J_QA%?(*?;?7/6'5G];OP%02P,$ >+M%`````@`<&)F,<M$@G9E!0``8A0``!$`%0!G;&]B86PO8G5T=&]N+F-S<U54 >+M"0`#I`>-05-YR$%5>`0`Z`-D`-58;5/;1A#^'/^*K3]!!DDXM)EBADXH3`HM >+M(0R0IIE,/YREM77U2:>Y.V'<C/][]W22+<DO$,.7:L;8NMU[]NW9TXK@=0=> >+MPUV,$,K48&HTR"&8F&L8<H'`%(+.!_]@:,!($B!<H=$ARQ"N\X'@H=U_R4-, >+M-<*?J#27*?3\'NQ8W6XIZ>X>P53FD+`II-)`3LIS(Q8!'T+,#/"4_$@RP5D: >+M(DRXB0N3)8H/7TH,.3",=!EI9W0WM!`U16`&8F.R?A!,)A,_D?]R(9@OU2BX >+MNKX,2-MNN)5#,[$!1EP;Q0>YP0CR-$+5P"(OZPH4'DNA>W)K(2YNNS!@FNL] >+M^'QQ=_[QTQU\/KFY.;FZ^P(?W\/)U1?XX^+J;`^00B%<?,@4:LJQLKNYC10C >+M'VX1&R:'TKF@,PSYD(<@6#K*V0AA).]1I3P=V?V*CV(J&$LC$#SAAAE*OEX. >+MP2\#MF7^2)MXR@2<RJB([8-+#MTG29[RD!DR'I)?J:'L1K@'"@4RC9&%^,!4 >+M&,-!;P]ZAX<_UX$O4FXXX9[A/0J9D0<%D598K`AD=RZL%JZ?2I5)5=SX<"V5 >+M6PT5,IOZP71!/JJ;VY]-BS3`SNENX9-'?PX7>IL,G`AA,6Y<&F]0H[JG<I1! >+MG5)#%$67:D?O]NT2P.\2X1R)F&0P+K[?I:4IGYB[2UI!IQ.\AF-[`>TV9"FD >+MDA]O<W6`]L&MF0K4MFF*'-BD_O7IL@0'JDY"Q?(+W1>YBAC>I2Q!G3'JPUR) >+MG>Z:?AKC-&':H`I&5*,Q(E4^L%Q'GVM?IF+J/^2"^K_(2G]^5=[75JS5<O4; >+M!>.1&8]E&3)E3X-JQQ&)""EABEC5AU[V`#_1YXW[/K(HKRKA`2W2QVVA99YZ >+M$QZ9N`]O_0-,CCJO2!M@(!5UC%/74O#HJ#+O))Z1F1=*(97N@R%O*"W*]L== >+MK!#/SHD_HN"@N[^TOV]C%LE)&ZB@Z@:H,Z;&;F>YL!IF("D3R?-Q!`XW>?-( >+M8`,6CD=*TG'C,/JEVGOBC)67B[\69;O#!U,S_^`Q0J82T0%%Y&E(B'/CA6#6 >+MZ?BN\E:XB1G>4(:Y/JH5M%<5M!Y<2:",11&=HT[IQY)!!Q6#+%T:&F\MC5XY >+MT9Q\;]J$VV_X:RCFPN&Y&'Z@,Y^.->;<L`KM1,R*1O'G%Q114>=K.M^Q+FCT >+MRZSZW2_T:<7&L)[&:WBR*'DK8^M9O`9I.RH_#ZS!Y^^+T):VG<-?H,D\E]$Z >+MN2+RGDK3-C6':U8RPB'+A=E4R:^ESG'7J!R[?R_XODT-O_,\^M]6<D6<2\EG >+MH>'W&-!DD@9AC.%X<TOU8SMI]=VNO:HZ=G=5FOEBB?:<DI4WS^VYQV&>5J3' >+M<9Y2GU4HLY7Y;7;:RFRO46GGOMVRS:.^/.*K(W_%4;_O'@3K&IAK-A";B?.U >+M4GH2'[[KH=MZ>KS`8+$!<=L98P/D]N-&"[2<+'Y3;.KFBMGZ[*]D1.OA7GO\ >+M-RS5>-%FA1M9:?#.`_O'*Q_$[DM#>Z+]:J89'G=KJDUB/'T>JDT3]5$GE2DV >+MAH_"5*1D1NIC5'L-0?ES(6Z,*3TW,M?F.Y[0RV??O0B$L9()TJO`2,@!$X$> >+M\S1@2LF)^^M%J3_B0SOR$^1\Y.Z5J'8E1EO:<FE&B^N\7BKG(V&L;K[M`_$( >+MKPJFE=MEVXWCJIY/2ZW]\O/&A;R@4";L?S+6\<9WXF^U2N^W2%HCQ)*D<:[5 >+M1;,6,2G.4$B=JWG.7M+:BI'=\15`<&T\;5]P'Z^-H5,A,!/:,?5"H2,_2T=M >+MFJVPO?R>TGHDK<V$>T@5^7B.GUY\KRI?-R5^F4';6K5`I478%&##X@M$:^%J >+MT5K;_P%02P,$"@``````(7)D,0````````````````\`%0!G;&]B86PO=&]O >+M;&)A<B]55`D``RV`BD$*9<U!57@$`.@#9`!02P,$%`````@`(7)D,4;V--6Q >+M````O````!H`%0!G;&]B86PO=&]O;&)A<B],:6=H=&5N+G!N9U54"0`#+8"* >+M05-YR$%5>`0`Z`-D`.L,\'/GY9+B8F!@X/7T<`D"T@(@S,$")+?^,G\%I+1* >+M7"-*G(M2$TLR\_,40C)S4QERGRI8*J2D)BL8&1@8*1B:61D96!F;*F@;&!H8 >+M[*L(<P7J8B_Q]'5EO\3#R2_*(&XLH@84XBSPB"QF8.`6`F'&2W?K_@`%6=(= >+M?1T9&#;V<_])9`7R13U='$,J;B7_N7^@01QH7H^6A"47@[D>XWS3VK.W@0H8 >+M/%W]7-8Y)30!`%!+`P04````"``A<F0Q-LL$%8T```"A````&0`5`&=L;V)A >+M;"]T;V]L8F%R+T1A<FME;BYP;F=55`D``RV`BD%3><A!57@$`.@#9`#K#/!S >+MY^62XF)@8.#U]'`)`M)&0"S"P08DSY_*FP6DV)*\W5T8_H/@@KW+)P-%.`L\ >+M(HL9&`0M09A1^N9D-Z`@>XFGKRO[%6YF40VC]95?K@.%]#Q='$,J;KT];RC( >+MH,##L)%=\:O^9$;QO4<<_4QU"Z*=7)#!DVJ%B0QN=OT';8$Z&3Q=_5S6.24T >+M`0!02P,$%`````@`(7)D,?`_?.DU````.````!H`%0!G;&]B86PO=&]O;&)A >+M<B]C:&5V<F]N+F=I9E54"0`#+8"*05-YR$%5>`0`Z`-D`'/W=+.P3.1DX&1H >+M8&0`@O___RO^9&'D8F!DT`'Q03(,3/P]B3,;JMXP-6==*B\\<UJ4P1H`4$L# >+M!!0````(`"%R9#',*A^-F0,``+@*```6`!4`9VQO8F%L+V-O;&]R<&EC:V5R >+M+F-S<U54"0`#+8"*05-YR$%5>`0`Z`-D`-562V\;-Q`^5[]B(%]LP]JUFAYB >+M!08JR#!BU)$-RTEJ&#UPN2,M*RY)D%Q+2N'_GB%W';TL-2EZ:"G``#GSS>.; >+MQSH];L$QW!<(7"N/RCO08_"%<#`6$H%9!%=E?R+WX#4)$(;H'6<&X;;*I.`! >+M?RTX*H?P":T36D$WZ<)AT&TWDO;1.UCH"DJV`*4]5*3\S4FP@'..QH-0%$=I >+MI&"*(\R$+Z++QDH"#XT-G7E&NHRT#=W&P<2*(C`/A?>FEZ:SV2PI]1<A)4NT >+MG:3#V^N4M`-@I,=^%A+,A?-69)7''"J5HUVS15&N*E!Z3$&[/PHFKD9MR)@3 >+M[@0^7]V_O_EX#Y_[=W?]X?T#W%Q"?_@`OUT-+TX`*16RBW-CT1''-J!%R!3S >+M!$:(:R['N@[!&>1B+#A(IB85FR!,]!-:)=0DX*V8%%0PIG*0HA2>>2+?;:>0 >+M-`F',M\02"@F8:#SF-N'FARZEV6E!&>>G'.*2WEB-\<3L"B1.<R#B0_,\@+> >+M=$^@>W;V=M7PE1)>D-T+?$*I#440&^D5CR\-%)!+KS'T@;9&VWA)X%;;^I5; >+M9('Z;+%L/JI;C3>+2`,<#HYB3!WZ<[;4V^>@+V6P<5?3>(<.[1.5HTEJ0`,1 >+MBZ[MH3OJU:]IJY4>PWDXQ(XD:X)/T2:<BGK^@Z<%!(&17TAT82)B@H&QWS]> >+MKQH'XK^D<B01\*^<F,BOBI7H#*-)JZP\;.^8F"DN2N8\VG1"59@B4FW3T,V8 >+M")=H)1?)O)(TX9&:7CAKT1.#GH:F%I!?"&JO*(205IX?_<+@>;L6MO^`OUH_ >+M=2BL#C,&F0W[H=<@WQ$O,Y'[H@=OWIIYN!88:MJ#GW^I[YFV-!-T-W-P6HH\ >+M/$9SM:3CM>E$YZY'W6P1+ZZ#A5'!<CUK7M[3BPROF^#8@!OP"V:G:^CZL@G- >+M-&50_C.LQ/&FU[\).F-\.K&:%D2->X%=4@\$N6%Y3KN%>`RT/;=:R4I!.C7; >+M-3+3<ZK(DMCN"[%P<!I/A.\N9V^L>>6BB?UEV.+B?U"%?3'O9>61]J8Z;WM; >+M8>SX'R;G]1#_P\R\()]W+`\OPG+\MCO6&C+((DEQ^&'ST+2?KFZ#W?*26?I" >+M;<N[J\LCIK,I;GI^DX5EP;8,[D?8]4"W$>OCO%JC[P,];U/XZ.C[PNG[NM9X >+MM6VH5Z:NO$,/!X/3\*-%_YJ9(OQKLMM&3E'2)^[@,IXF$M.)<7TO]NPT_`+V >+M*U!+`P04````"``A<F0Q]SM8?^<#```3"@``$P`5`&=L;V)A;"]C:&5C:V)O >+M>"YC<W-55`D``RV`BD%3><A!57@$`.@#9`"M5FU/&T<0_AS_BJFE2H#P79RT >+M4C&B*@*E02&`L-,TJOIA;V]\M_7>[FEW#]NM^.^=V3N_0`Q*45<">6=GGGE[ >+M9NSTH`<',"D1I#4!3?!@IQ!*Y6&J-()P"+[)_D(9(%AZ0+C"X*6H$6Z:3"O) >+M]I=*HO$(OZ'SRAH8)D/88]U^]]+?/X:E;:`22S`V0$/*:R>,@`N)=0!E*(ZJ >+MUDH8B3!7H8PN.Y0$OG08-@N"=`5IUW2;,L26(H@`90CU*$WG\WE2V;^5UB*Q >+MKDBO;BY3TF:#L9V&.2>8*Q^<RIJ`.30F1_<`BZ+<5J#TA('^Z9@A+L9]R(17 >+M_A`^7TS>7W^:P.?3V]O3J\D7N'X'IU=?X,/%U?DA(*5"N+BH'7JJL6-KQ9EB >+MGL`8\8'+J6U#\#5*-542M#!%(PJ$PMZA,\H4;.]445+#A,E!JTH%$:CX_NL4 >+MDBYA;O,U&2DC-)S9/.;VL2T.W:NJ,4J*0,XEQ64"53?'0W"H47C,&>*C<+*$ >+MM\-#&!X=_;0-?&%44(1[CG>H;4T11"+M\+@B$%MNO,;0SZRKK8N7!&ZL:Z72 >+MH>#29\L-^:AOK7V]C&6`O;/]&-.`_AUM])YS<*HU8]RV9;Q%C^Z.VM$E=48# >+M$9MNW9[?'[72M-=+#^"$#\@2Y2RSBT121T_^^^D!6<$X+#5ZGHB8(%?L]T^7 >+M:W"@XE?4BR1J_R\G9O&+$17Z6M"8-4[O]9\8EQDN*^$#NK2@%LP0J;$I4QD3 >+MY1-K]#)9-)K&.]9EQ&<3>GME;VO1/Y3&@!P,1%VC<#SF&X,![R"::W3'*S66 >+M"JT*0UI4A?:E$HX8-8(W]0)^J!<LJD6>TU2,8$@RE@]7;_>]7K)VH$6&>K`* >+MI,49:)R&",9`F74T/2V.MUKE$"A**I0C]P\\O6Z]//*@*(=M\$C.#OWK4+8T >+M"1"^HXU`I!?LZ3Y6-.%#^T!&?G@:<>QDVV4=107X&79G^BH]>)19;@,/U*1T >+MB.?GPLW&I<CM_+CWBF"W/=/F$YE^QO4?*XV3?G`-]O]\$$7\$)/,A)P5SM)N >+MHBYK2W'$_I[3RK!%S/9I1+;OC'YU8CG!1=A1JBWR445GM%UY86XXN"NJ)ZGX >+M/`%7I7RS(LF6.K\,@JW;-/VH*W);X!T5?V@8Z?+(]#W)=-QQ[?V2/^\VSZBO >+MMGJY/8_"MP=>$;_G*@\ED>IM.SXL*K'E_$JV:7W7]'<*=4Z_`P:.U@E]5?_X >+M^GO^XT8";$A=\G?=2,B@[O#%K%HS.1H]1^1.X=MY'`DV:M>G+)VMD!9HH6TF >+M=.IGRJ0K\U2N,9)"37E;WC_M^`43]9)(!N2FC69KECBN?P%02P,$%`````@` >+MV@N(,>7#(>/U"```\QL``!$`%0!G;&]B86PO9VQO8F%L+F-S<U54"0`#G)^V >+M05-YR$%5>`0`Z`-D`+U96W,3.19^MG^%)GD8+FX["</4X!34AH0IJ(7`$F:! >+MHGB0NV5;8W6K5Y)CFZG,;]_OJ-47NQWG4EOK!\<MG9N^<U5G\*C+'K%/4\%B >+MG3F1.<OTF+FIM&PLE6#<"&;GHS]%[)C3V!#L7#@;\URP#_.1DC'QOY6QR*Q@ >+M_Q;&2IVQP_XA>T"T>V%G[^$Q6^DY2_F*9=JQ.8@K)21!+&.1.R8SV)'F2O(L >+M%FPAW=2K#%+Z[&N0H4>.@Y:#.L?3F$0T"!EW;.I</AP,%HM%/]4_I%*\K\UD >+M</[A[0#4Q'"AQVY!!TRD=4:.YDXD;)XEPJS)@I5-`AR/9VSOY()$O+G88R-N >+MI>VQSV\^O7[_QR?V^>3CQY/S3U_9^]_9R?E7]L\WYV<])G`4R!7+W`@+C`UQ >+M2SJI2/KL0H@UE6-=F&!S$<NQC)GBV63.)X)-]*4PF<PFQ&_D9`J'\2QA2J;2 >+M<0?P;?L(_7!@<O-[,,F,*W:J$W^V=P4X>$[3>29C[J`\AEV9`[J)Z#$CE.!6 >+M)"3B'3?QE#TY[+'#9\]^:PI^DTDG(?=,7`JE<UC@`VF+QC*`B+/6ZDT_U2;7 >+MQC_TV0=MBM78"$[0CU9U\,%O!7^^\C"P!Z</O4T1OI[5=+L4G"A%,CX6,'X4 >+M5IA+N",<ZA0)X9VNS0/[<%BL#KK=P2/VG#YLHO2(JWX,?SZ_SZ?+P,<NW$H) >+M"Z00LSS/U8H!0+-:(%S(<?<3W?Z4IG.EF-(Q5_(''R'![0QY9(5SB"G+[-3O >+MRTO!2#\Q_0-1"D>PN5$/]N*IT:E`6A5G'WA)8B`SYW%`FG=W,Y"Z`<([Y5YC >+MS93Q5-B<(^L]WS79.Q.KE%LGS&""B)@)@3@;.`^5M'V=J55_.5=>(LXZI`_[ >+M\O(M&\DL\0<LE@@+PQ.IV5]`.(*&*%`,=YA=_'X91/67J=KW0DC=5;>;BFRN >+M4"C8"T8_<YW/\UZW7RY'U>)ME8:*/"B-'WANK]?_BFQLM%(C;FPPH59&592C >+M9M]752G(:]N4&K15"!N-DHXBD?K^44.\@#2]Z'5S5*Y>-T%UT),>5G]PD]26 >+M(>@%-U3PAZS@.,;6B,>SB=&H9="JM!D6Q&=>"!&T5S^)I:.=,0XSA`^LA=YH >+MI)>EM8E`]8U]*8%YA:Y^898W)^=)@=%O^9(='I1?>/(2OBVX!`9S8[7Y[AF* >+MWS`;&^RG(NYYYM;108(@&V1,Y<>O$#3]TCQ:1Y1XHO)!&*--^?"?N;!4KORS >+MU[J0B9L.V2_>+H9$I?I5/E]MR/8<WGF6"DTD4^SLBG)OZ.!=(:*?9Y,RMFH3 >+M[RGS,_>=JRFS/ND]9;XB`4V);;CN+O1?049#;N5-.3:H5(T@#PND::0-.N\0 >+M$TXFCFM''1X<K'NJ6DAE%E5$]5)-ER_7M5OT^+E%QC<,J-?(AL&C;J>55A7) >+M<;<#EBV)5U'D/!/JN#I,Y'0.0Y`%5BN9H-,;(<[>DGT74U[F:D&JQ-BU:5MD >+M)AQN@^XUEA5M-4A'VCF=WD1[4Z5H0GIT%"!=/S"@ZP"Y6P#3P`^5)4(?G61# >+MAC$+3>FXN8-".:LW"ND[@=H&P%;TMQ%>`VH+_.L0+0F+XU6%D,K?KP5B&X`] >+MWD"FUT5OQARQ9<-IK9S,6SN-G+DA=BBQ*]X($[3\(1HR-KTALF2+*YJK30\W >+MQ1UO'/ZXE=5KIG@>7VDPH__5X@5M$/XMD>;Y7@&^=]7>]^T-,-`?-YJ+%>'$ >+M92GX\N7+2\5G@JT$G_8PLU'[10F*(IJW<7U(=/:S8R.,X=G$SW%]QM[\C,$N >+MQ>V!:%)<*!"6?5\_]JU,!.$*J#"[A*>IX'3JL334]Z=2)56.5+GTM`"H=0AR >+MN&^[%$V=.C_7,G-'%?;\W`S.N)F)9A5>LPVV*CX*(0!8`O8AE'Z!;72\9O5, >+MI8T%1LE,Z'ES3ND'A=%8QW,XUTQ$8W+"737LH/I/,HVQN-7JN[@F.&K7\53$ >+M,YP=OZ@6Y3*>P?MNE0NXW]/L?>]5HV*OF$()'8R*#B'?ZXZ,7D!CKRL2B:M' >+MKVXPG98Y94@6;J3;BSE%DWZUS*41WF'-D88HMU"]8)?D^9HX(/B4(%QWGX.# >+M,:0;NAN2^V[90Q\B(G)&4F$Q@AF1XJXQ9AI,J7(7B2-B$D2Y`6(K=G$6$$,` >+M2&)LG@G'I;)K2!R6+6!7X!,'S9'1(@3[2*N$N.#K?=2D3&F>O.,9YHFB[U[3 >+MA7Z7HN!K,3TB%65MH<*7H#K@'#A+Z=(!W:QQ8;YX_?Z/MV=(:'H_4LRK=''J >+MT7']%1L+U0[D"$OY+S.D/N922-K'X)[J+"2>PYQ<P'RUL1.&89P@@XL#+M/B >+MS^6M68CRVUB)Y?-#JG*=E"_+*>?)4]2>C>R!/#V3XB2F-T!!ZF5#]>,J*%)D >+MID0@'"$RV8%W)/ZLB]LFS=\KO4L3:7/%5W7F;"/?U[-3*F3JI8\FZ]\/%-QU >+M+#IU-_87=6PVY2AGK@6A8/B6J$E1/V!\K+2=&Q&Z1QD]U*6;*&#D"4BU=]9: >+M>W,KH%M-$D<MUE:=+^?<NTS85.0&;@&.510KFY35?6T8;IO=3J]&+;K.$SL! >+M+#8C2H9V[?MUPX"[RQ].Z4W=G2\@F_!$T\OF]>:N5GSS'?+OYWNO4=Q"U-S7 >+M')U7O9C=`Y`-4_X'^)!!#7S8;H"0EN3G[<IV-#+JU0,$AV]DNR-AO\CXH_OK >+M*41'%K?OLG?>H#+VI>;^&HV@H;#2%*:/\`8A#"[HWCYVZA[ZI+P7=$(V[A\< >+M'*P-"V6:[H_'H^.RT=UX_;C"+(9GT"6K4/2W7F@I:\=%:^WX(8]>,94-HVGH >+M43'#W%;[VDCPF%6/Z!H2W=G4/?N&&TOG=O>R3J/H/0L3V@B^1BV>V>A2BL6M >+M-5YU.S0P4';YF0!SHJ)_-5B!(NE?ZF-$H(W<2(QOU2O?,#4`Q;Z?0VGH(O@; >+MC-L:)^EZM70BL_Z]NIWG_J4OB7%\M(SP%5'NPY=5WPMN7+\G<!,(UIK1G8.Y >+MJ2M$<Z'/LV/HG/A^R^=.%V&VS<BJ*/T?])/Z<.VHK[;DXMYUFSZ6FKMTM57T >+M?["M5\G"4VW/_1=02P,$"@``````\%UF,=,NVAU]"0``?0D``!4`%0!G;&]B >+M86PO1FEL97!I8VME<BYP;F=55`D``R,`C4%3><A!57@$`.@#9`")4$Y'#0H: >+M"@````U)2$12````2````!@(!@```%ECN[`````&8DM'1`#_`/\`_Z"]IY,` >+M```)<$A9<P``"Q,```L3`0":G!@````'=$E-10?4"P80+Q^4\@R\```)"DE$ >+M051XVNV9;6Q3UQF`GW-MQW$,29V0AH1`0L@HL'GEHU`DM%+$JDK35+'NSX8J >+ME59JIPE1H;92IY:UZH2F:IW6;LN/:5LG5+'2C4[=1Y%H(56_6)654A"0H!#2 >+M0`+YPOEP[,3VO><]^W&O'2>$X+!NZH\=Z<CV\3E'[_N<]^N>"_]OLS;U)9+% >+M_+=D,I6HB5O!5P4F@O)78$D%/BH(6O,I)DB`-(8DMEQEP@R3,3&T-8+QWR14 >+M\P6`F++?TJ5+"8?#G#ESQGS1D,9\4!0!*0.K`D451=129BVV:E3%O`I"X0`V >+M:3V2CG,Q$5.7,D,HQI7&\<\1C``A0`/.S8)Z_]'MG+I\@<<.M0"85:M6$0J% >+M4$K1V-A(1T?'G""5EI9^/QZ/OW8]H2-]?.<N\;_USE+'J'*"U%)IW58<575K >+M5E-Z1P/^FG(D;OM2/?U4G#^C@^TG5&;H<SU!O%!`:O'M=\ON9W_&$]_=,`$L >+M`,8`^V8@G>[MHC0T#X"%"Q>R>/%B2DM+V;AQ(P</'B293-+;VULPI'@\_MHO >+M?K5GQO_.M9[G=[_YTYL?QIQO2X@C*D(I#64K?,OOW4S9M]816+]"^2IO,9(0 >+MBD_'+/^QY89(B'A+T@P/I:Q"+:?EW7\PD;:)WKL#X"I0"@1NQAU\EL6.-YII >+M:&B@NKJ:[=NW4UY>3EU='7OW[F7SYLTL6+"`N<"O*+^%\>08XXDXR;%1$O%1 >+MXO$1ZNH6\^@/MJ,U;Y6]0GKU+U7OLP=O/?QV2\V3L<2:+?ANJT8M""E??9BB >+M>Y;TCZ^^YV*R:IM4+:RCQ)KG+P1.8B)-\V<7*0L'J5YYIVL%;^\;!"J!^%PM >+MZ8=_^XC:VEH:&QNIKZ^GNKJ:JJHJEB]?SL#```<.'&#;MFVTM;71WMY>D"7% >+MAD88&8F[0AB#,6#$(#+"O)(@CS_Y$'Z$FOEQUJRO87'C:B+EC5B6+V^78B*W >+MWDG;9X?NJ@N'?Z^+_"7^0N"\\VD7?I^%I2R4Y:-J^3I$A+-'7KTI2,N6+2,: >+MC?+PPP_3V=G)PH4+J:VM)1J-TMS<#,"N7;OX^../:6IJHK^_OR!(B;%Q-PL8 >+M5XSAX3@'7S_L*J,@Z(-HO0_1Z_"%:JA9D@%_R;04(JX6HC3&"OAO!.?=DY=R >+M@Y8"R[(0I:CZRAHPPMFC^^<"R=37UW/???>Q?OUZZNOKZ>OK(QJ-,C`P<,WD >+M/7OVT-G9R=&C1^GN[KXAI.3XQ!1`?W[],*^^^ELV;%B#:`=MI_"G>YE?W$ZX >+MLASD$B(E*!7PUJ71Z38N?WX)%L6&?*G,C&E>`1(?GX2CE"N73%.]LB'*5[_Y >+M0*&03%U='?OW[P>@J*B(:#1*1T>'N[?(E,]LV[U[-XL6+6+?OGWT]/1<%]+C >+MC^V]9NS`@7W<<<?7Z>N[B(@@=@K+29`D0\0^AZ/3E)1>(1!<`@CV^"D&+K;P >+MP?OG^-[=$[TZ):-J)CAGN@:YV#^*4@I'3PK</3C&W]\[CI-)$>_ORIT4P/$W >+M7F(62&;9LF6\^.*+1"*16=UDRY8MUXR]_/++='1T</CPX2S0Z7*;DZ<^(A0J >+M`6,0-P!A,(S%AYB82&*,('8&Y:3QZQ'"@2O,B]C,NZ640,#"V`G&AH>Y<#[# >+M$S]ZC9/;3:7I8WRZ!0G`U^HK<P,?G.[FZNAXGHMJ,$)RJ)_6YC].UV40J,@K >+M`7*9Z,*%"]Q___T,#0W=$%)34Q/KUJVCL;&1RLI*8K$834U-TXO-*9""P6)& >+M1OLPQJ"U1L0@(ABMT8X#1M#:H$2A=1!M5Y!*#3-R=0PL(9,Q3$Q$N#1HTWW5 >+MP"A)$T?\TZPG!)0!\X$@<"9<'.#JJ.O78@0CVH4TV38":0](VDO]OKQ",E\1 >+MT]/30R02R;GM%*T]BURQ8@4;-V[,C8^.CA;T:*2U]@")*V\6E#&3P`Q@`F1D >+M/DD=1*5L'-$XVB*M(9X9)N6`'4-4#/S33L4!$D#*4Y)DRIX40,P4M_):VJN+ >+MQO,J[.M6V6UM;42C40#Z__`2B4N=O'NZE4?^TIR;4UY>/C4[)1(%E0^V8R,B >+M+B!Q`>4LRA&,=A#1B*,]@`H1/^*`UH:,-J1M&PRH02Q[!&NZBSF>D@JPLJ?J >+M6L]U`3D>G+CGHF:V3)8-R@`^OX^QTY^2FO;$LW;MVBF_P^%P88`RDX!<EQ(D >+M"TAKC.VX_SLV(@8C#D8$L1T<;YVV'7Q`L`]?L/U:0$Q7,`O'T8*C71>;EFF, >+M!R;;9VN_?N:99W8]_?33N:5&6>P_<0Z`8\>.T=341$M+"P`K5ZXD'H_SP@LO >+M`#Q_HQN)3";C9JMLUX*8K-P&L6V,H]%:@_$L26N,8[MP1$/&QB\0:\>JH("' >+MU;2M2=NN2:8RSO3X,]<VY!9PP^XO?X!,\7P>6+N"ENX!-FW:Q*9-F]BY<V=N >+MP9$C1[*`/I]A/RL;"MP8Y.0L:!*4:T%&#%K$=3$1T(+8@M(.8@MB'+1C,%K0 >+MP"M@GH+,#0&]?[J;UJX!4!;#E\\S/C*`,09?('@S@`X!SQT_?MPM[%I/DBJ) >+M8.)NC,E6T?GMQ(D3V:^M,^P7`$JNL2#M@?$@N3%)O-_9+*=1N$%;%(BQ$$M( >+M6#Z2P%/NWF,W!/33AS;/]7YGMO8)P)4K5_A&>3$C9T]!Y3)"@2(`MF[=>LV" >+MLV?/3ED[@P7E`#F.XV8K+WOI?'<30;2;R=QL;'",06/0V=H)E9]=@S`UB\VD >+M^'ROKBG)!NT9YB2]0#W;/L\#SV4'=NS8`<#M;[8`+9/!1*E"#F('L`_8`)SU >+MK"@'R(A;[TB>Q>0#,\:UL&PYD+,P##[+PDR>=Z`00"D@!HS.,L_QYLDL070] >+M<*BVMO9?.W_\"+9M4QP,H<6A=_`*PZ-##`_&&!M.,CHTQLD/6_E)TQZT+5SN >+M[Z&KLXNE2QHXW]'.>W_]9Q;.)T"Q5V;PP8?-),<3;JSQ7$S$<ZV<RVG7I<0% >+M9,2K[=PK`)12]/4-YNM5\$VB-4LOY#XHFQD?S/L^6Y]M7G[S`V'@YP7N6VC? >+MZ]UW_4\N[1^\3I!=!:S+9C8O2[7>*'[-<'@^H"CO4^7U_'FJ@)<7V4(W^V20 >+M^3*]U?@BWLZH_W"]F5X+_AL0:7W!.6H_/P````!)14Y$KD)@@E!+`P04```` >+M"``A<F0Q+!(-P00!``#4!```$``5`&=L;V)A;"]A<G)O=RYC<W-55`D``RZ` >+MBD%3><A!57@$`.@#9`"MD$U/Q"`00._]%:0G/10\=V/B_S`>V&4*I,-'@,I6 >+MXW\7NHEV>U3F0"8<WLN\[L5R`]'S"Y`EX$.O4O(C8SEG:MR'1N34!<EF6`V/ >+M"0*3/,$,X,N:%`2@.E)G<:77!?O'4]?1Q9//CA"C[9"U2&HD3_YZ*C^H8QIB >+M6A$&;;B$\::\J.`,%*E$=^;(XJPMXR&X?'N'Q5.IIPK_(O=39:-R[Q`VY=\% >+M0X'\2"KU5>C(SPCBN4]A@?[MOX+"^Q5T5+AL&V<2=G=!Y3<H(^RA3.6V;5,4 >+MAS8(4VK<!J>T.Z(*&L0IT$.="FY;ISH.>8*6JG6?H/=]-D.#0(5Z"+21VQ:J >+MDKM"WU!+`P04````"``A<F0Q2HR32#4!``"D`@``$0`5`&=L;V)A;"]W:7IA >+M<F0N8W-S550)``,N@(I!4WG(055X!`#H`V0`A5'+3L,P$+SG*TQ.(.&$EIY2 >+M(7%`?$$E#JB'3;Q-K#A>:^.0M(A_QR%4:IL*#I;V,3L[LWZVT&#KH$#1L;F- >+M*^]=EJ9]WR<-';0QD!"7:8W[!EJ/G);@L49T(?05,B:Z3<B:?3)T)KY;1U'2 >+MZP.PDA6"0A:?D1`Y<0AE3MY3DXFE&T3)1!\H-A4COKR&]>N`<Z"4MF4F%@\! >+M,KYC,'9S*.HPUEDE"S+$F7C35E$_]LX*&QS\.OJZE"(-Y&A^!#7`I;;2X,X' >+M.8\3_XZLESWJL@K%G(RZQJ&P+5@[K\G.F5:KD>EDR$&)P?9P`OTU-X/F73B. >+M;66+#A@\\2G]\7+CY(UN'+$'ZZ_.AVUR.=MW!?H^95/R%.^TU6T5;^__AMEP >+MVW@[MRX7_TF[(!I_\YR(I\O//7X#4$L#!!0````(`"%R9#&MIJ;='`,``+@& >+M```3`!4`9VQO8F%L+W-P;&ET=&5R+F-S<U54"0`#+H"*05-YR$%5>`0`Z`-D >+M`*U446_3,!!^IK_BU*=V6A,*#T"G252;$(/13>L&3(@'Q[DFQQS;LIVU&>*_ >+M<TZS-8B!A(1?HOCNOKOONSNG>P/8@\L201H=4`</9@6A)`\K4@C"(?@Z^X8R >+M0#!L0%A@\%)8A/,Z4R1C_"E)U![A(SI/1L,TF<(H^@X[RW!\`(VIH1(-:!.@ >+M9N>')!$!-Q)M`-)<1V45"2T1UA3*-F6'DL!UAV&R(-A7L+?EOU6$Z#F""%"& >+M8&=INEZOD\K<D5(B,:Y(%^>G*7O'@*59A74DF),/CK(Z8`ZUSM']@L55]AV8 >+MGM`PG"\CQ,ER")GPY/?AT\GEV[.K2_@TO[B8+RZOX>P-S!?7\/YD<;P/R%08 >+M%S?6H6>-78RFR!3S!):(OZ1<F6T)WJ*D%4E00A>U*!`*<XM.DRYBO*.BY(8) >+MG8.BBH((++[_G4+2$8YM/N,@TD+!D<E;;A^VXO!_5=6:I`B<7')=.K"Z.>Z# >+M0X7"8QXA/@@G2W@^W8?IJU<O^\`GF@(Q[C'>HC*6*V@'Z9&,]P,4(W=9V]*/ >+MC+/&M3\)G!NWO94.190^:W;#QWW;QMNFE0%&1^.VILFSIT^G.[^_)9@K%3$N >+MMC)>H$=WR^WH2!WQ0K1--V[DQ[-X!?#.(+Q%'DQ.6+;?U[I+E?#DCMDK'0S2 >+M/3B,AQNHV`5=(KGIA_]^!L!1L`R-0A^7IM4@BOKYZO0!'+@_%;<K:;W_RVE9 >+MO-:B0F\%;V+MU&CXAXVZP:82GNM("^[2#2+W/HW3C@GYQ&C5))M:\0O0ZC*+ >+M9U?ZB,<Y<'?4N+/$Q`_6[\QHPKDFF=E,A*)"SX`GFDT'?0N7>-,WR-IYXV:` >+M$UXVNL-XEQG'6S%94Q[*&4SM!KQ1E//H.L3C-TPR>E6D[UU>V$T;Q]B%,[Q3 >+M$VE41.U'/-F9^X:M7K)TID)6K%`F$RKU-Z13+YU1*A.LEB-K"?WD-K&Z&([Y >+M8>1Z+8_Z`Y4?CTI6&D=W/)R/B_:%K1Q^.+Q7=OBUU?%>%-T3)=(M,8Y_Q_>_ >+M\"G_C4\;U_28=!??!T]27L3X^%HE&J[<Z"@YN_P8_`102P,$%`````@`(7)D >+M,;-+D`6S!0``<!8``!,`%0!G;&]B86PO;65N=6QI<W0N8W-S550)``,N@(I! >+M4WG(055X!`#H`V0`Y5??4]M&$'[&?\76?0$&2P6::3&33`B$A):0#)"FF4X? >+MSM):NOITI[D[8;LI_WOW)$N6;&$[)`^=1C,&^VY_?]_NG?S=#NS";8P0*&E1 >+M6@-J"#;F!H9<(#"-8++!7QA8L(HV$*[0FH"E".^R@>"!T[_D`4J#\!MJPY6$ >+M?6\?MIUL=[;3W3F&J<H@85.0RD)&PI439P$G`:86N*0XDE1P)@.$,;=Q[G)F >+MQ8./,QMJ8!G),I).Z=?0F:@)`K,06YOV?7\\'GN)^IL+P3RE(__JW:5/TD[A >+M1@WMV"48<F,U'V060\ADB+IABZ*L"U!Z3$+WY,:9N+CIPH`9;O;@P\7MZ[?O >+M;^'#R?7UR=7M1WA[#B=7'^'7BZNS/4!*A>SB)-5HJ,;::7.7*88>W"`V7`Y5 >+M$8)),>!#'H!@,LI8A!"I.]22R\CI:Q[%!!B3(0B><,LL%=\LI^#-$G8POR4E >+M+IF`4Q7FN;TIBD._DR23/&"6G`<4E[14W1#W0*-`9C!T)MXP'<1PN+\'^T=' >+M/]<-7TAN.=D]PSL4*J4(<B*U>"P)Y#3G7O/03Y5.E<Y_>/!.Z6(UT,A<Z0?3 >+M.?D(MT(_G>9E@.W3G3RF'OTYFLNM<G`BA+-Q793Q&@WJ.X)CEM0I-40.NM+; >+M9J?OE@!^40BOD8A)#N/\_W,Y<^41<W=(RN]T_%UXZAY(4&:"R.,%!/K3SW\Z >+M0%IP8Z<"C6N:O`:NJ+^_OZR,`^%#WZV72W^5)\_BN60)FI11)V9:;'<?Z*@1 >+M3A-F+&H_(I1&B(2][]B.'C>>DF+J33)!$Z!N,+:)6+(Z/LP-.@#]B9-P2JZ8 >+M_>J9)UU;<\%6ZY^H"OYN9ZM',?98FB+3;IC,-8\[6Z0`L"1`4%LE:3ME84@M >+MUH>#=`(_II-CDDZ8)A8WE@9*4Z,52T8)'AZ75HN=GE5I+U!":=.G%M&(9S<Q >+M"]5X]N.,Z5&QL*B8,WI!]36MB9SIQ>]+][U=?:`HD>3Q^@*'B]Y7!#Y@P2C2 >+MBJ9.H=,O;)US%'E%EA9O<4(@W'<Z7@E)3[`!"G(_R>&;Q3+I,0J8:DY#C.AU >+M7-\A$HWJ&R4\/SAHVDWO51SY@\:3?-JU.L/NG_VA"C(#S^"A:$J8]TN8P1)A >+MB,::O+<78$%@MLHE-05O33UW5,LA_WQ'YP.-0"8+%>H#SST0:I62[(A&;+'@ >+M^#\W6-O^U-FB5FBA>B5<<IZ\<]D;\]#&E.E/KHJU+OD<+`J/K;WQ`%/.Z-A0 >+M4>DP#\NXB=?C"1UY_6),!+%6"=*@B(0:,.&;$9<^TUJ-B[\FSYLH*;U41FYP >+MN$"VRII"[Z#,Z;Z]6#5ZT''/!@+#BB*Q.W7[++#\#AM,:=1Z7?/7.FZQ)S<9 >+M`/.N:_3D1LV_H6Y+XZ\,NL"Z&I?[M1(_6,Q5]?MB['NEMY($M4B^$HJ-6IS3 >+M6;8)=FN56E%;J[5N4!<Z"R@=S,:+^]2;HIHO^4"DJX:A"R761DQ5R-43LSD` >+MW-0,*3FR]_WYD[,71T_:)T&C%1;7\A,#8"G2$NT'0UUFWZ?U<ZCR_TJS:758 >+ME=<0P)!NVF2S&J(&YM>0>4E*L>H<J0`XG!7_L`2`K+O;SC^[+=I<IIE=.A[J >+M1\.\UE))7-BJG+9H556H'4U`Z$O;/*NJS-VK&;7/FL1+J2\]R=??IOY_`W5S >+M;M966^Y3)09+/=ID4D[!)BLL&2O1TD50]]1Y:VPO3-#"09Y]OZ!XDZ1-9J[@ >+M9>,BU99AXRJWP?3>$+?_#EU6:"Y395&BL5RC6='4+\M!5IZ>L"WX".&54I'` >+M%TSON,ZN1FDYDFK57G[)*M"=OT%1%V^5R+OO,V80,,5!5(>^W"PJN+Q_OR*6 >+M9Q`WWAY:+[N.VT/W!M)TN^X%YMM[I7,WY^77'HT+A2-V;-7&=0UU-UC6`=9V >+MZ_K<=Y1'G3"/>&__)D^:^HWQ^/&W\UXHO8@/B]OXOU!+`P04````"`#)`8@Q >+MWQU.)MT%``#^%@``&``5`&=L;V)A;"]T;V]L8F%R8G5T=&]N+F-S<U54"0`# >+MJHVV051YR$%5>`0`Z`-D`,58;5/;1A#^;/^*K?,%&"1CPJ3!#)U0F#:TA&3` >+M:9K)],-96EM7SG>:TQG;Z?#?NW>2C"1+MD-;JAELZ;2W^]RSKZ:[UX8]&$0( >+M@9(&I4E`C<!$/($1%PA,(R33X9\8&#"*7B!<HTD"%B-\F`X%#^S^*QZ@3!!^ >+M0YUP):'G]V#'RG:R-YW=$UBH*4S8`J0R,"7AI1&K`><!Q@:X)!R36'`F`X09 >+M-Y$SF6GQX7.F0PT-(UE&TC$]C:R*@B`P`Y$Q<;_;G<UF_D1]Y4(P7^EQ]_K# >+M59>D[89;-3(S>\"0)T;SX=1@"%,9HB[I(I1%`3H>D]`YN[4J+F\[,&0)3_;A >+MT^7@[?N/`_AT=G-S=CWX#.]_@K/KS_#KY?7%/B`=A?3B/-:8$,?:[N;VI!CZ >+M<(M8,CE2*80DQH"/>`""R?&4C1'&ZAZUY')L]VL^CLAA3(8@^(0;9HC\9/4( >+M?G9@Z^;WM(E+)N!<A>YL[U)RZ'DRF4H>,$/&`\(E#;$;XCYH%,@2#*V*=TP' >+M$;SL[4/O^/AU4?&EY(:3W@N\1Z%B0N`"J<9B'D!VYZ-5!_U<Z5AI]^##!Z73 >+MU4`CL]0/%X_!1WY+]\<+1P/LG.\Z3!Y]'#_*K3-P)H35<9/2>(,)ZGMR1W:H >+M<TH(YW2E=Y+=OET"^$4AO$4*3#(8N>\W,C/E4^3NDE2WW>[NP:F]*&64&#)- >+M2@P9#,CSIT^YVD#[X-8L!"8V=QP5EMO?/UY!JAS(21/RF>]D_Y7+'>6-9!-, >+M8D;I.-5BI].05G>XF+#$H.Z.R55WB!0`71ORZ//$5U(L_/E44!EPY/3M528G >+M6[,FR^M_T8$\,N6Q.$:F;6&H;#W))89J[C'!Q[(/%/<$IO2&SG!7?#%AFN*R >+M#P?V8:@T)4T?>O$<$B5X"(9,T;DUR9^T6S$+0\JZ/KR,YTZ>E(VUHE3S`B44 >+M[2S)`V2KSOH%Y84:#W!.;Q[:;;^$WN-!=LKN7KN5@O($CDQFJT64/+1?6(-> >+M1DF]@A;MST^5*3C(MU=M&L+B;"Y)@.^H&E'"L12^%:AR^5!Q33^RQ6B_O/@E >+M_;)O3CM&3['SAS.4$IR3-8@TXL5;2CSADC=]OHU8J&9U#TO))A1]%AA^CU4P >+M5(?D1ACUEM9B/,G<M0R+(XH;<A<<IM]+WLMPJ(^PH<`PAU2%6WU?SW"]5`,# >+M5>%-E%3"N!KWF=3/FBV6\4P)[=L+@@B#.RI."74BS-96$OI+)O5?N*44Q&D^ >+ME#QTF/W9^Y(HH:R(%IQ928U"ZO,)]>1^6AB#2*L)4FD<"S5DHIO<<=G-3MZ] >+MLE!1^K$<VQJXY/%'1XEELF3DH;%*4HF?%DIE):WM6R_4*J:TOJ,.;*D5-+MX >+MB6T=F^$RK=4L_?1"Z8_Y*$7KJIC;[6D<4^_L`Z.^>$(Y`,'44*<?T>A&U9YF >+M$#NXU=:<"KB5R/R':#W2ER->SY^WON-\,8L83SL%R0Q;M<?03(@FB/)(6VE2 >+MX92)O$.E$;;4H+2=K_H0T<U7FC-H.JKX?R.D:J+7B-27CT;!A@I2(U\J(MO( >+M;RI\V^S9^C3K"V2QWKA`*S3]E:)QL%(FZN,ZNZV.+-\VD*Q$!X$V-+F*XOQ1 >+M0518MY7JH/J^OK^W5F)5*HFE8IY6[T(M*:PV5)[LME)_FHAH%?IG-JX<Y8VS >+ME?DG76Z8R4IN.D@)./G_"M[&(N"(H28E\T"J4-A+P[0ZW34Q6\/?RTW\E4>8 >+M502K-?GI8%:<63=@K,VFY^@5WUQVR_/3#UL1M$W-2F]L>'RC<J*"<+=?1"AB >+MK_@K81N*AL0'_>I-.1JDQM(AI3+TU"2$QL#L'-@QZ2C_H*<JHRNXFGX@-%EX >+MU'[T>EL3M>'29,"I=0:^/UQG8*3TC.GPV>E]Q&<_JCOSI'/_!.G;D;4)\9.( >+M=\:7"+8AII[\]>R[#\=^LY6(*'UV[GN'RP`_?K4%LB=QG!IQ'#0;B367YOE3 >+MN_<J/W_O^'`;;%D3VYS13K,[])::GY+5SH@+K%HC?P-02P,$%`````@`(7)D >+M,<J@A?-C`@``;08``!$`%0!G;&]B86PO86QT=&%B+GAM;%54"0`#+H"*051Y >+MR$%5>`0`Z`-D`+U5P5+;,!"]^RL6'RBA8,%,#VT3APE)#AUHZ(30"\,PLKU) >+M!(KDD>0X*?#OW5BF`89,>X#J$DN[VO?V9?W<.EK,),S16*%5'!Y&!^%1.PA: >+MFHXD7X+D"<HX%"HKK#."RS,?"`-X7%1`V3B<.I=_9:PLRVBF?PDI>:3-A-WB >+M<L:M0\,FW.$M8DZ/;HH&(V$CK>0R6A0R7&':U(C<@5OF&(<\SZ5(N2-:;+%_ >+MP^?<A\-V:^NRV^N,.I=!P'9W=Z&3\=QA!F.C9Y`Z(P?%+$$SXLDY2DQ7%78: >+M(!0D1I<6371C@>ZQ8%RH*@I<NE?NX!R5:P1WU*D8@]]&E'J"2]C>!K^G]KHZ >+M0XACH/-^==8[^W[]\^1ZV!]=#`<-N*ND8@QZ6GUP(-%!*=0BAX3$`(+OG(X^ >+M]@>C_G`/K%`I`LD#%\-32+B!PJ(%X:*JB,?,3?7;PS$OI-MI-*N805<8M7I^ >+M6/\W;[5J#;:>BM!X`?OVD'/JGR8/%Q#7K:=3;BJ]]^'3EV;-RJ>TX`#N[^O\ >+M-GQ^?WIK['8,D^-ZNAQ/NEHY+A1MTJF0V8`(VTBBFKCI_Q%-RXQ&&9ZPLM58 >+MX^JX62<I+%\D;:!^635Y]2AW?6\KKF$>)]SO_B!1X3&7%GV7KQ&A#%_K_89V >+M\POS+')<)(G$5P)=LI;"/(M8I_,?1N=\PKVU-(.'(%B;R=HJORE!8)4Z],)G >+MNHQXEE46<2K($4GDG9#\@Z"L#?<V6->>5]&C,+;_UT5)X.O#6!LX=]RX(@>N >+M,K!D/2+5ROY;H8VDI>89$7[>Z9KHU56[Q;Q;KVR=U=^2=O`;4$L#!!0````( >+M`',"B#%O:6(`\P,``,$)```2`!4`9VQO8F%L+W1E>'1B;W@N8W-S550)``/I >+MCK9!5'G(055X!`#H`V0`K55M;]LV$/Y<_8J;]R4);,EN@6)QD*%&C"[I4B>( >+MW77!L`^4=+*X4*1`4K&]M/]]1TIV%+\4:#%^L7F\U^>Y.T4G`9S`+$=(E+0H >+MK0&5@<VY@8P+!*813!7_@XD%J^@!88+6)*Q$N*UBP1-G?\T3E`;A#]2&*PF# >+M<`!'3K?3O'2.SV"E*BC8"J2R4)'R)HCS@,L$2PM<4AY%*3B3"<*"V]R';+R$ >+M<-_X4+%EI,M(NZ1;YERT%(%9R*TMAU&T6"S"0OW+A6"ATO-H<GL=D;8SF*K, >+M+ER!*3=6\[BRF$(E4]0O?%&6;04JCTGHC*;.Q=6T`S$SW'3A\]7L\N;3##Z/ >+M[NY&D]D]W+R'T>0>?K^:C+N`5`KYQ66IT1#&VEES5RFF(4P17X3,5)V"*3'A >+M&4]`,#FOV!QAKAY12R[GSE[S>4Z$,9F"X`6WS!+X9K>$L"G8T7Q#1EPR`1<J >+M];5]K,&A>U%4DB?,4O"$\I*6T$VQ"QH%,H.I<_&1Z22'-X,N#$Y/?VD[OI+< >+M<O([QD<4JJ0,?"/MB;AN(&?Y'-6G?J%TJ;2_A'"K="U--#('?;QZ;C[BK;8O >+M5QX&.+HX]CGU7O?[@V>];P48">%\W-4PWJ%!_4AT-$5=T$!XTI4^,L=#)P+X >+MH!`ND1J3`N;^]YUL0H74N<>D%05!=`+G[H#%I8W5,DR(\_/O/@&0$4SM2J!Q >+M(^,1<)#^^>EZ[1J(G(*X"KWR_W)\">\D*]"4C,:PTN*H<V"<'G!5,&-11W.B >+MZ`&1B(]<JV/(3:BD6(7+2M#XMQWFMA`[7A=OO$.B\#1:.@UGY)`<NK,IM[ZY >+M#->2X(E*[U%2/5:6R+1;';5^QE&D9_2:5-HH70O=O6":6G((;\NEN\9*T\0, >+MX76Y!*,$]S;>8_W2LZKL)4HH;8;4ZQIQ/,U9JA;-9<ST0RW8-O2MN65Z23+A >+M6[:^7[O_^\UC9:TJ?MQ>8+8=_1N)ERQ-:;-X'#PL+'F8:T7KI/8QK'V_WZ"Z >+M+9QY>+\ZUH*?B=^8:?@5<B*I&X0&W>H@46]-7/T$3\&K-1_]L^#5)HN^<T5$ >+MT]1!X!KBRTG8F/:X+"O;W1&[7UH,#)Y:)/>)U9]HU=(V8=*V^99*XM;3<_1= >+MJQTXN*1&Y[:%14N2T?IH"3PJ$+I#"Y4@I]$`0RL;&V&KI?]:*YQWK*ZP\[>O >+MYP`=8UJZ:K[-1RUM$=)$H2\9BP5MDD.AUPHO0J_G)\6,5>(`&ONS^4VS59,& >+MM,:Y%.[[?7"HP_I][V1_'VL_T`5?=]<.[5\N#:?OEU7*]77)!%I+7W4L3#O] >+MG5?J\D:XOFVZ_V4W]YJ1V-/H'H=';GC,!;>K(>0\35'Z3/\#4$L#!!0````( >+M`"%R9#$\;$G>/0$``$$#```4`!4`9VQO8F%L+W-C<F]L;&)O>"YC<W-55`D` >+M`RZ`BD%4><A!57@$`.@#9`"MDTU.PS`0A?<YQ8@55$HL6#8;D!`GX`*39.I8 >+M<>QH/"$MB+LS;4HKJJAL:LF69;UY_IY_G@/VE`:L"4;V]W>MR+`V9IJFHH^? >+MSGLL(EO3T:['),3&HE!'-.A46F(J7"IB\+MB._J[AS++S"J#%;R,$EE5*-4H >+M$H.NF:S`B]5\'"`#^-(.X%V2/,G.4^YZM`2'MIZYZI9C3TIF?:S0F]2Y8)`Y >+M3O.H3H5UFSW!OBI7^-DE9[(NAJ/7'J`$LX)Z%(B;#;B@(9Q@T`-00H#O;`&S >+MB5.X%6@3;@9ZR7E&/-A6<9NC=W;V/-C6%/02R[\:O?T.EC4]LG6G^K/F<=C" >+MT['K?!97D1OB97&*WC4@C$$?&^L.<\F`3>."72HIES.NV_BAFYR27B'\G\J% >+M1`+O+1.]OND?N`YU#/L;?@;\`5!+`P0*```````A<F0Q```````````````` >+M$0`5`&=L;V)A;"]S8W)O;&QB87(O550)``,N@(I!"F7-055X!`#H`V0`4$L# >+M!!0````(`"%R9#%,J?#>D0```)@````?`!4`9VQO8F%L+W-C<F]L;&)A<B]G >+M<FEP<&EE<RUH+G!N9U54"0`#+H"*051YR$%5>`0`Z`-D`.L,\'/GY9+B8F!@ >+MX/7T<`D"TL)`S,[!!B1?B9<Y`BG.`H_(8@8&04L09I2^.=D-I*+$T]>5_0HG >+M/YN.W/7=:PX"A<P]71Q#*FXE)S0PI+*%.(C-ESRU(3$AX<>A`P<^S'.RZ_(5 >+MN:@3<"Y61?K$4^.`NZE3=G',]-][@X6AXXADN$(,>RS0"`9/5S^7=4X)30!0 >+M2P,$%`````@`(7)D,?'YWWB+````E````!\`%0!G;&]B86PO<V-R;VQL8F%R >+M+V=R:7!P:65S+78N<&YG550)``,N@(I!5'G(055X!`#H`V0`ZPSP<^?EDN)B >+M8&#@]?1P"0+2[$`LS,$&)&-$Q>.`%&>!1V0Q`X.@)0@S2M^<[`925>+IZ\I^ >+MA9.?34?`@+GQ&%#(V-/%,:3B5G)"`T,J6\B",P>`@"GUA@/K^T4?`TL673@3 >+M<*Y:139^@=J#ZY99SQ4V"K?R,^AOEJ@PCTAF!FIG\'3U<UGGE-`$`%!+`P04 >+M````"``A<F0Q:1<M0RL````L````&P`5`&=L;V)A;"]S8W)O;&QB87(O<VQI >+M9&5R+F=I9E54"0`#+H"*051YR$%5>`0`Z`-D`'/W=+.P3&1B8&)H8&#X____ >+M@0,'%'^R,#(P,#+H,``!2(:!B=F%B97!&@!02P,$%`````@`(7)D,<PJ,OJ; >+M````H@```!T`%0!G;&]B86PO<V-R;VQL8F%R+V=R:7!P:65S+G!N9U54"0`# >+M+H"*051YR$%5>`0`Z`-D`.L,\'/GY9+B8F!@X/7T<`D"TL(@S,$&)(L"S,X` >+M*<X"C\AB!@9!2Q!FE+XYV0THR%[BZ>O*?H63GTU0)CBV-1@HY.CIXAA2<2LY >+MH8$AE2W$06R^Y*D-B0D)/PX=./!AGI-=EZ_(19V`<[$JTB>>&@?<39VRBV.F >+MO53:XD0SJ31GA3,:CY@9KB<[J7I%.8H"#6/P=/5S6>>4T`0`4$L#!!0````( >+M`)<&:S'[2KV<G00``)X+```5`!4`9VQO8F%L+V9I;&5P:6-K97(N8W-S550) >+M``,N_I)!5'G(055X!`#H`V0`K5;?4]M&$'Z._XH=\V*()=F&IL$9.J$P3&B! >+M,$";83I].$MKZ<KI3G-WBNUV\K]W]R3_(I0D;?4@6Z>][_OVV]VSD[T.[,%= >+M@9`:[5%[!V8*OI`.IE(A"(O@ZLD?F'KPAEX@7*%WJ:@0KNN)DBGOOY`I:H?P >+M*UHGC89A/(0>QW;;-]W=-[`P-91B`=IXJ"EX1<((.$^Q\B`UZ2@K)85.$6;2 >+M%X&R18GAOL4P$R\H5E!T14]3AM@(!.&A\+X:)\EL-HM+\Z=42L3&YLG5]45" >+MT;SAUDS]C!/,I/-63FJ/&=0Z0[N%12HW`R@]H:%[?,L0Y[==F`@G71\^G-^] >+M>__+'7PXOKDYOKJ[A_=G<'QU#S^?7YWV`2D5PL5Y9=&1QY9W2\X4LQAN$;<H >+MIZ:1X"I,Y52FH(3.:Y$CY.8C6BUUSONMS`LJF-`9*%E*+SR9[SY/(6X3YC*_ >+MITU2"P4G)@NY73;FT'-9UEJFPA-Y2KJT)W<S[(-%A<)AQA"7PJ8%[`_[,#P\ >+M?+T)?*ZEEX1[BA]1F8H4A$9Z@G'90+QSS1JDGQA;&1L>8K@VMEE-+0JV?K)8 >+M-Q_5K=E?+8(-T#O9#9JBT6`P7,<]1W"L%&/<-#;>H$/[D<K1)G5"`Q&*;FS/ >+M[8YY">`G@_`.J3&)L`B?;W5+%5/G[C91/UIJ8+A9:'*A-['\^7;":^'K,C#I >+M=)(]..(KS$$ETP=^2_UQ]*U7!V@/W/J%0L?3%<QB]\]XBJ\#,K6Q4":/0^S_ >+M<H4<WE(;4Z6@MJK730MK2J2YRY69")6X!ZD3FGX*TZ)$5PF:ZQ#Y#_/Y@(M2 >+M.(\VR:GF#XC420G/#L;2Q4:K13RO54`D\\9\49NJNM1T7&2^<.T:*]OAY)GV >+M)`3T.SLGS2%W@3KWQ6KU@@@O34:3AMDIL38OX"\R*F".83@85/,WG4\;I%RQ >+M)).63D9C%R`]EIO<WB*FA52913T>1Y1BQ$N1+&F,>X^$P0IG-[`J.F\BQ\5L >+MXL?/F"OIX';)U"@:^HA5Q)7.V1^`P!H`(HLYM?P8F*9'N?1A?\3WX:OEG7:\ >+M*(6E41W#`/;;=+\M#?;DWV90HJX3C;.E_"?$K+TW:>W`UMSL&^5>N7A'$N$' >+M8*76S!Q]C8/JB<D6$S,/"B?&DF-4VFH.SBB94;C0U*"4J0]TVWCCAO2K4"/J >+M2$/8.X-P;8NG$\73C\CCAHGK*FI>]3MQ02ZMG\B5B+2T"\3SHA)91C\"9`X9 >+M%:I"`B*A9$Z&.2^LWUR?*IR'T&^KR]GZ3&IK\FE39LCWF1:#T<'R-@CMQ;LW >+M$OOB_H/7FR`MP&=>/(_Q_6B)P6B[VY4HI4O7%2BXAB^A:$JYMOB0$X#O^-ZT >+M14E_/:*9U)F942"+:@[65E.T#1!Y4XWAH&WAMG'HXZ4-VU=M/@HT^TN:$/BX >+MTJN16.9Q&H@=O!/I@^,D&@F_92KWBPJ/NB+E_U7=WQGJZ=I_:23-0S0:<0/P >+M3"YS4CCU8WC%2:W6PL_P<K%1VL8-1TWVC\6E_"]/_1=Q#4*C#KY>WC-2XK:( >+M'N>>=25[CV'WGX)M%JD`7P'-^K=*NXW8L(02_PU02P,$%`````@`(7)D,5#) >+M6*YO`0``9`,``!,`%0!G;&]B86PO8V]N=&5N=',N<F1F550)``,N@(I!5'G( >+M055X!`#H`V0`I5/1;H(P%'V6K[BKSU!UV8-$\<4L6;*GF?A>L$)G:5E;AN[K >+MUT(13%R694V:`#WWG'-/+ZO-N>3P295F4JS1/)JA31($J[?M<VPWV%.AW=,: >+M%<94,<9-TT3-8R15CN?+Y1+/%GBQ"-7A&.J+,.0<"CU%`?2K(\@*)4MZPU'* >+M+\8Y:8EL->X@4V35`58/80BO3!L@G(,I*.@3$QI2RD0.NJXJSN@!THL]8]H! >+M2@IAF+A29WU'/X"DLC9K5"L1>ZW8D<1*2H.2UF&+Y0P4U;)6&;V#SCC1FF78 >+M)0.X%<!>87#J0?`BCE*5Q-@LQVZV5&>*5>WGGUR-=8;TAM7%$POB8AR#?2?^ >+MO"+9B>14)Y[CUS1&5-=BE%P=_"VA..<R)1SAJ_R05?=ZQV:'&64TY+KOYG*< >+M:P2P,\10>^?$0$.AD>H$4O`+-,P44))WJ?J!ACG(8SLB?4->./K']?1-!I.) >+M[\8A]L,O].3Z[[JR.PF^`5!+`P04````"`#:<V0QR`53\_0!``!!!```$@`5 >+M`&=L;V)A;"]B<F]W<V5R+F-S<U54"0`#;(.*051YR$%5>`0`Z`-D`*U3P8Z; >+M,!`]+U_AII=-M(:FK?8`:M5#_Z"]K?9@8&(LC&W9$Y&TRK]W,(8DA]5>>@#9 >+MQO/>FWF/[(<1`P0G&F!'KQ\W':(KBV(<QWRP?Y36(K=>%CV<!Q$0?"$%0@_@ >+M:(D=>,A5R*W1Y_QTU)MME64YBKKV=@S@>4"O'/N;99<LHV,G#.A`>\8XH7/A >+M'`@O3`,E,]9`-=V[K:?E=/W!B;951G*TKF2?W:G*'FK1]-+;HVE+AH1!/7@P >+M.'?1=-X.0'U(;6NAB]`K4ZC&FE!,D),J7EM$.^3.R,V6>6I((#^Q^90U!`6> >+M?5"#LQZ%P>HJ0L,!2_8UJAB$E\HDK"3MDGTD)IS$D/3:^A9\R?;NQ(+5JF6_ >+M.P_P\U<G6CM6RP4^JA:[DGV*,U@!OK-=?%:@E>HMO#3!$&4^I;57LL,X]T3S >+M91+*V!WF*F%N(I;R:6BQ,'4:'=C/U>DH@J^0"63_/&\[F+\N>ZT"4BS.&K@: >+MA"3CWS/L8/6D42$DLZHE/A&`>Y#*FI(L;/"1M#]%KN5-!]LJQ>^E/H;S*\WS >+MOK/W)*4PSIIHV+:NIV@/0FO>"M_G4ATH0K=9N5SI7@)H4@;M?R6>.=?&%HYO >+M&_1'V+Q.>2EV1'&@'/$Q>5#3)"EPN^+JW9*FQ7,"N_G?8LK9\YW;-_F;*OX! >+M4$L#!`H``````!MR9#$````````````````%`!4`:&5L<"]55`D``R:`BD$* >+M9<U!57@$`.@#9`!02P,$%`````@`&W)D,<^C3B%D!@``<PD```H`%0!H96QP >+M+VXN<&YG550)``,F@(I!5'G(055X!`#H`V0`[50)4U-7%+Z4*HIKIQ44B\22 >+M`"U5)&41B`$%"H\80*"R!`E6EE($-`1I6")C6ZTC`GU!$"A@APY+96N0Q6!` >+MJA8>$:@!$A/0M"409`DT&$(""7T9;6?Z&]KOSKWGW&_NF3/W;%<#_7VV&9L9 >+M`P"V0;Y>00`88E!]<=-&]%RI!F)4;/R4Y.,%UO7K%K>&A3*;S_F&IP*PY6W] >+M-@"EW^U&22,Z1/8V&MG\SH8=^.>%HJ]0RISN'4;W3$E*BDVF`T]:[&EZ;`PF >+M/8'^&2;DLUB,#T0.7(C!)0.P20AY'0WY0CP_OMX4FF9NM"A[E'G7--#KS<?W >+M7*L'Y\JH19XQCI-_^''/MPCZ%DF7POS'YBP.K;%Q9LF<?OPC_`<DV[>.A>3& >+MN9!6K1(Y-@V!-I=SSGU[^P%/^](P)<6^CB$9W27/)C`SF,_=9!7SV4-R;M.0 >+MC!$03*U*SYBI[]^IS`I.!<NQ+)95)[BOJ]68AE&KVD\#@T,YX+Y';FUEY/;F >+M3`#N_[85<WV._5I#__>E4TYMM,&_),IN%0-\@;$@V'1(-*NI2K<;1/?RJ96` >+MB%)5A0&(/KP-8U@73>Y(_#/J2L&9N"'$OD4VUU[F3)NI<YDSS<=94C14B]%I >+MLCABW;FE]ZJUM$_>`%$2+Q(7%3S\>1&<6^(L?+8%W%_<X[%Q1K)M_VJGH"[X >+M(QV/JNG.FJ\^4<4?$;3Y[-,^26U)G+BV1_OMP70[`![$@SJ&L2#0_-C'E>YN >+M1LPIOG-]>WGJA>W4I>/B=+HLJ9N!/V!=60BY,PY/F&2=5C%D`_UC0IU+0H+_ >+M;&[>N[HK-<//M4%6Q`Z"I97_T]G6##D%-K0B'Q_BQ\JC`+@\!()6WZD_KSJX >+ME^;95T2:FBR@)/O/WAG6N=PR)SB]+5='<9JH!6E&>0.V.XB%FR7:"YR4R)OV >+MJ3*L)87VJZSQN.KG,OZ(N/2JN^9HVT"WZ^POUP,D1<7XY!YE)E?`2V=:V@T2 >+MG-V2J5+Y!A"]LA7CZ!3)\"[-;-M^=_\/\8CV1=?OO^1VGCZZ'L'[J3?NX4W[ >+M%^&TBWS?J%-JWX@\=V)38V3)J5FAK*#,I%H]7=4RD>>=0)1WY.YV<YI(68T0 >+MMY_MKRVQ]^EP,P"'<NXU5E]*ZQ]HC]&VABIW[/=$VFXW(;:V)U]V,^=% >+M\</"8=:)^,H;#K@J3MQ4:WP%I#%[H?OCYW=?BFS9VBD*_XO)T;F(3J?KY6XM >+M"0)&N+/\US5M^<+@-0M7ZP2'"PMIJ4L5>]"@C8$@2H^K\D>UUK.O@._K1#UW >+M(HK2$J?B)3T39>F^=EGA)`[K:.GBP<-'R@YVV$#\U"&NZ&Y&6MO%20$6DDP= >+M$&4A]W*I]$QQ>\K`PTD>WR$CY`)W\9BF+8DTEKLG,P:`IU3'T8JGPNFD>Z(S >+M0L=YIK"+^V2L>_EAFE#ZS1!5=5F9W;-$)L:"Y236^K5*"5@\:39B+.C.T+)V >+M`C3.M<S;%S&[ZMV/L%?7CXA5^*\(RG&JI'D[6N7D+X-ZQ!*T[E<YR`=A8*[F >+M.=O8!+4!C.'/*R]M`&"W!]H,R\\,O#9L02]W7LO:F=XC2>/-(CG:+X9[/31F >+MW&%2%P%I2'&2:!N,\+'B3!8V@-CE&EQ=?CA&8;V7:^Z8^1Z/30B[:U="W"3D >+M?(B$DG1T>,RORP$1LAS@QR2:#Y+*&@]7/(*ZPA4U\/@GBJ\AD^(L)KQ02.B4 >+M8M5>\$*Q,AQGC?2RQBF*7GBM68J^#Z6%PJNDBI*8!*0<8D8J1-`^&W4]UK:_ >+ME7A3^CV;&0=?X6E*H)-%!$O$<O+F"^CD#>5'\-H=Z3"+$*$P@M?JI2IK-<,E >+M/0+N]2,>0"9PE:72XLF5]Z$*F]D:K/H39(&DF*4]1B`F11#@I^B$`WS9'*D* >+MJ\Y&%OP4=!>5\COL@B^[NMZB6)J/LRB3BN!\2!'IPJ3!W859(7`KSJ)$JH;S >+M?=E=T@>LM0;I`_BL#2,(OHZS*(T)1B989]]7_X:ED(@VR/);Y(%L7G%CZ8AH >+M]"=[J,CNE&-7R^TS).2,6Z<KA[3OF6CT2;"B;[`QKQR7/STW,[T4KQ]?^D%O >+MDNA@MC3_!G@-CUV[/OQ;S_D<3>O?&`UI_D?_L4X_[%XA)+CG'^/::GW:7R&0 >+MK,_V*]PJU1?&:P>._SOXW\%_P<'6$7?PI@YCNF5U_8">A;S]O1J/15_Z"U!+ >+M`P04````"``;<F0Q*U7KX($'``":$@``%P`5`&AE;'`O:&5L<$9I;&5,87EO >+M=70N8W-S550)``,F@(I!5'G(055X!`#H`V0`C5?]<]LV$OW9^BNVRMPT=O7M >+MCYZDNTQM)TW=.$[&<L^3Z?1F0!(444,$2T*6%(__][X%28F4Y+;RV":!Q=O% >+MV[<+J'M$1_RABW?OKV[H^NKRW<WD'5U<?[K\D,\TCNA_,LV4B4?T\?,U]3O] >+M[GO\'W1ZW>O\H=]@J[M(DF]B*V.;D0G)1BJC4&E)(I64S;W?I6_)&DQ(^FB^ >+M*JT%?9Y[6OETK7P99[+T!#2XH==LV2SFFH=C6IDYS<2*8F-I#O.-"[GT96)) >+MQ0AAEF@E8E_20MD(4(Q2@'3H2P%A/"M@+6"?K/)PUU8D+)9%UB:C;G>Q6'1F >+M>;0=DTZ[X*#K]CLQH5WPU@*5V51Y<RL#FL>!3&M8B+!J8.`SIN;YA*XF3?)$ >+MIK(6P.ZO[G[Z],L=W9_?WI[?W'VA3S_2^<T7^G!U\[9%$AL!K%PFJ<Q`;DJ* >+M-RF##DVDK+H#5&CR`+)$^BH$N5K$T[F82IJ:1YG&*IY2JJ81LB3B@+2:*2LL >+M6,\VT0.F9&R=VT]8I&*AZ=($;EME#G^2.J'+R61M>14KJV#X5CY*;1)`%OQN >+M0\#^MO-SASY(K66*M\\FS2/Q4RF8+F_E%NXB,O&72)W;";V^/*1!KW=<9'O' >+MO$/G6M-MONM;F<GT$>2Y@"\A69<<D[[.#D<8<9^?91C2O="!C.D_OR_<PW<^ >+MPOX!='5D,'_C5I]K"TI!'QRM6L[Y_AI@S7F255L5"1;/V!!(18YY]/W-+_1> >+MQC+%%O87"`U8!!H4I465H!*;ARV,%A0PQC7$`H._@T*E;8%=YVB`0HDL(N5' >+MY(LL%UJ2FD>5N2056>4F4&C.-01.C4B@3U]XV+F*,RM%`#!G;[B^/"BQ0U>A >+MJ^B%RB+N"T)KLW!U;=Q$2H]%B#4F3:Q7`-LEL49A/::6DSJWC;4?P[89WAD+ >+M/E]VN,>3:V$,J^(`V[3Y<B`%J#F'`.$&4DO+U;9%F]N]"RB5B1:^XW7FNI4S >+M19A($<#8Q(5979W*/^8JW93&UD[7K`;&[=<%(0M1;`<!6H#GJT1!L$ZB_X") >+M`FO-A8C1/V-9HV5?8*Y>\L/FW<W;?4<-'74;C1_0VM`%:)[JU]_Z46IF$ETX >+M0H_I%I75!6D676YVJ04$GG7\+/OV<-QH>"98T5/CH'O4.)B)%*UF1`.Y'#<. >+M?*--.B(/;#_@-010.Q0SI5<CRD2<M5$G*BQG,O55CJC7^?Y4SL8,M6PO5&"C >+M$?4'/8>'0#<>SI(E]?AG&[EYETIO[D?2TL=)LT7-"V5Q$D@QX^(3-(%G#/._ >+M]J0(`&<%MK?B6,TFUCRB86+'KCDU#A(1!)#6R#DM7MJN%X[H!&:;06N2$?V[ >+MERPK8YZQULP0>L^9>F!EFAID=T2O0O0]YKY9YSY[4''7\Z>=))XV#U$V"6D9 >+M6I8P.G5[-6X\Y_R_H2/.0<Y.FVW6?BI$G@Y=1,^-1M1O18/*"A?OP!%?9.W5 >+MF7?FGPWK7/2/'>0V7<^-Z+@5G3#>7Z[N\VIXAWOZCA+\=LJ^?6&6K4:@'K?& >+M&+((GCF/9$XV/W-->4HKBS@B%>"D<('L0Z:YW@L^U\#'&C1*=K1G6YAY8Y5% >+M%>Z9KZ=P>#(<#$]>S&)<Y+#'NL5O;-IY%EDA)E/6W?5"M90!1KZVT>/D<D3' >+MO1YOUN6''_+4\E-9'+W>ORK,<%ULD>.>M604N;0..(9E&T<W)_PESK3:RYE6 >+M-2IB-"&7TY%6\<,HXLL./5$A`W3,,6%2_!JE,OS_?YO%]:[YVTB$UEFR9!SZ >+M:%_S<=3=2X_!F4!T'"KV@:9O4I'3MHX"6V'(#:'"RXS&'9"^R3N<B)GP=".C >+M#:$.56@UQ3(>7=->K6(4^M!UGE/\/<ZG:C+(A?_W,L!/50)E7^MME4S>5LJJ >+M"L_XIZJ/D_K&JEW3">.Y@;[,I4Z>27&.Y)7>1_#@105%<Z:JR[P#$Q?U)I.O >+M>KUAW8QMBNY1=C:F@ZH=Y?B41YX;?,0$%F@.8%%HU3,ZET?BRI`CK?4#JKVB >+MQW$9Y_JK*;EL:GNLM\N=1Y\J;*^/$(UO"^W,KK1LVU4B*Y+:;D?5_?4'6P)H >+MEW3Y[L-SCO9=RM<%C`JO"ZR?5R4XJ[G&965?#ZJJ%E=,%-5X3U=_KF-QN;LC >+MNW*;Y]-U'</92_M:]_6U),-P7#WX9]2&9KF[X&]OGR2K^EZVLQENACG1,_$@ >+MKU%X'QW8[GEV6N9Y)N/Y9X&+VU.]^.ZA"+/8!*=B7.-4]5S.D3@98\+NI<;- >+MRYLZ<Y)Q@!N:Q9T\L^1'(J4V5(!O='Q9K+!3GOC](ASK+MQ/>^F2[N/N#W"' >+M2XC6*[10YGN:RA7#,H([?G:5\FKH/N7R<L4!>BPNJT*7>4>>\TBB%\(8#GT? >+M>2IP<O_BC[EP:+LUR5@/W@M!W:&5R[>32.14[WI;9V&C:"S.*Z74B>/NH(VO >+M^.VB+Z4B4/,,Y>!F_M%=L2*>/`=;,6_2OQODCC2J0V64FY%:/%O#>3#KP>>* >+M(/*MP:4620:C\LE9!7QC9[/-T5+<CSJQN6.,"[>^M?5.6+DS]$+F;0KN$GPW >+M=*=#24QOG<S:/#S_"5!+`P0*```````;<F0QC'[<TFP$``!L!```#@`5`&AE >+M;'`O<')E9G,N<&YG550)``,F@(I!5'G(055X!`#H`V0`B5!.1PT*&@H````- >+M24A$4@```!@````8"`8```#@=SWX````!&=!34$``+&/"_QA!0````9B2T=$ >+M`/\`_P#_H+VGDP````EP2%ES```+$0``"Q$!?V1?D0````=T24U%!]$+"0T* >+M%/>#M!4```/I241!5'C:K99M:%ME%,=_2;,VM=.X9A6I->W>J"O8KBU,B)1U >+MK4ZESI%A0?2+4]Q`A<D@*V-VBBSJ$-GJRV"Z;G8P!\XU#.Q@76TWE70EC5TH >+MA:HML0T+V"9ITJ9+ER;W\8//+;<A??G@@8=[N<^Y__^YY_S/>6X6RYL`/I37 >+M62#`_V`Z(!L0G1V7Q1V/2WSJ:!:2)%?NK_2^7B[=4@X/`"6`Z'-UB_[;MT1G >+MQV65)&<9$IWT.0T4RX`RLN<`CP#E@+CK_UOTN;I5@C+IDQ%<""'L=OL0<`XH >+MU*<YK`%20#,0!R+EY>6LRR_0`M4#61G`%2$$'H\'J]5:!NP#'M(2K`'N#WK= >+M%!4]-@=,`V-??M%"(C%'="K$D:9#7<!3@"$M33J`T=%1_'X_-IL-P`HH6J>U >+MP+<7V\Z^4EJZ!0#+ALWD&O/H_>W&@M.NAD8`$Q`#%#7Z4"B$V6Q6W9X&HL!D >+M.L$SP,FVUM,E)246\O(>)*6DR,\O0%$4QGQ_,G!GD*:C'R$+F``FD\FDSF`P >+MK`.VRQ3/`E.29,&R96$;@6]D0=45G/@G(&9C,\+U2Z<XX3BVL-??WZ_>5TD! >+M%,HOS$Y7FUY&50!LD@JJDFL[(")381&+S0AW[TT!"*?3J8)7`UME@,;E>D`O >+MF?.`AP$SL!XH4B4;#$ZF@PO@1>#1%7IDD2*TW6B0C5<(;-."'WCK=?'RWMTJ >+MR=8,\EU5VRO:!TZG$YO-1M/AP^BS]*S-S28V$^63SUI4:?9IW]&M!&X_U4Y% >+MV4:"P3#OO5JG[AT`SIP_?XYBBX5$/,K`P`!'FH\#[`$ZI)J6!1?V4^UBT#<A >+M+K1WB=9KOXLWCWZMIN-YF7<Q/CXNPN&0</?>U*IKGYJNI6:*<OSL-=[8NX/. >+MZS>XY?D#]`92R:3J$P9&@4J+Q8(0@B?*ME&[LY83CF/(.700,.@S@9^Y\BNO >+M-5CYX6H7[B$?UIH:AH='F$_,J7X)(`),`!5F\WH4=&PI?1++AE(.'7P;X'/@ >+M_?1AI[3]=)O&7=5<^/$Z/G^`9QM>8GAXA,#87UP\V:2.@3AP3W;K!%!A,IF( >+M1*)XO5Y&?'Z<3B?`!P8-@=+R?3=[:BNX=+4'GS]`35U].OA^8$9&'P>2D@2@ >+M8N.FS=Z>[I^IJJXFE?HOG5H"BDL>)Z4()N[Z,H%_#+AE_J>!>5G0A)9D9UV] >+M5P.Y?Q%!5X^+T'0E.Y[;C7=H$?AWP!4)'@7N2W#22-0#*4<&,*7M@UJ@YUU' >+M&P#Q>S%:'>^HX%\!(4DPNX3&U0/+*#.3DL0+9@1>2)NB=J!2GL^F#`?-JOX@ >+MM(/.*('4<3LOBQJ514UI4K,J^Q?`6ZE+$16H?`````!)14Y$KD)@@E!+`P0* >+M```````;<F0Q+.5U5^@!``#H`0``$``5`&AE;'`O5V5B;&EN:RYP;F=55`D` >+M`R:`BD%4><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12````#P````P(!@`` >+M`+U"Y^0````&8DM'1`#_`/\`_Z"]IY,````)<$A9<P``"X@```N(`>6.*4D` >+M```'=$E-10?4"183-QLY&^I:```!=4E$051XVH62/4A;<13%?_?%^C%8I;4Z >+M.,C#4A%!$'&IA80*ZE1"<6UQ:-<.TJ5T+(B#.(B;X&*QBT.&%H*H5"<WA3C8 >+MH(-0OU#HTR::K^8XQ#PT47O@P)][S^5RS_^8).Z#808@RH7.K0-F,K,@_X.D >+M,@*Z8O#:VZ_YNA*QS^F%'0&:&POJU_?7BD7"6I]_)4"NZ\Y)PB1A9EK9/"*1 >+MRI$7'/Y)<7*6HN%A->_[6_DZ/L"+[F;^I0[(I#.TAY<`0H8PC'QD[3>[Q\D; >+M)YVG<P!\&NI@>::/ED8#X/#$H7=X@8JB<.I''&]OJ\R3L_U"[3R1@,;:@J&! >+M]-UN%Y%)>L2CDWQ\VTK3XZJROK]Y\<O+&XUG@Q^(1R?Y_*Z-4,\3'M77D,WE >+MN,@*[S1PE0%A0J7_^A-@Y,U3NMKKZ&RK(^`8WM\L3KZ2Y\.+`"''3Y%81:Q* >+M6@%P7??;Q.PV`:HY/JWDR'O`1BQ9'!PMZ%387F1)6.X-R25MH\.RR!O#OP`` >+M``!)14Y$KD)@@E!+`P04````"``;<F0QZJ%\:W`"``#\!@``$``5`&AE;'`O >+M<VED96)A<BYC<W-55`D``R:`BD%4><A!57@$`.@#9`"]5$V/TS`4/&]^A6D/ >+M0,%)=T$@I5H)(0[<0>*PXN#$K[%5Q[9LITE!^]_Q1]IMMMM5I94X5&V3>?-F >+MWAO[BR0M6$UJ0)T1;V;,.5T61=_W>:O^<"%(KDQ3;$NO`%`UQL`'0_J=C >+M8"#G-E=2[/*A$[.WJRR;6TZA(@97:D!_,X0J4F\:HSI)<:V$,B7ZQ255_2J[ >+MS[(L]S#L8'".5!&.?5]<>02739E$U<RH%KPL!D(7=L-E,3;YFG`V'UHQMY7G >+M"!JNBH4G8L`;YDITL]3#:D],M`9BB*RA1$XIX;L_^:[JG%/24RV*[$H3FM1\ >+MT`/Z%-BN*F4H>"O7_HE5@E/TDQF`;S\8B=9&@!^"YVE+M`QNC[V6:VZLPS7C >+M@GK?>[Q3>@0[3W?'.*4@;V=K(BS,?J-WZ-&\3NOF84C8>B<UPY631Z")F#/\ >+MJ=RI^DSM.<./W#&U!1/+3[:?ZK[[Y8BPH!B#X]H["P)J!_1VYDSG5;U__G7J >+M=1&H)+7C6PBZ8D0.B[WQKH*S\!WC$O:.T%I)A_LQ1Y42-&2E[HP-/BBL22=& >+M_3%[6)`*1$QQ2TS#91G()I]7O-7*."(G=:[GUNT.LHZ+/Z?P"@_`'B,`\Y8T >+M\,S).&+,&[X.!^+@%)ODY6-BW3^-Z;E.SWI.'?/_PE\4TE\L_,H`Q;:O;7J/ >+MN/4(I/D`PHZH"U0V0E5$))TA?T62B6MA::YE$P^O9[N?#N8A32_N@MG63#M- >+M6YT$Y^*N3V\`*PWR80V3X08!Z#],-THX/]TS9^7%XPYMGQCWY'[21,8#<_%] >+M.@YPF=+Z<#,OP]U\<OT%.8$]':C#'39"_P%02P,$"@``````&W)D,;'QN+@- >+M`@``#0(``!``%0!H96QP+W-I9&5B87(N<&YG550)``,F@(I!5'G(055X!`#H >+M`V0`B5!.1PT*&@H````-24A$4@```!@````8"`8```#@=SWX````!F)+1T0` >+M_P#_`/^@O:>3````"7!(67,```L3```+$P$`FIP8````!W1)344'U`D/%20( >+M]=:.L0```9I)1$%4>-KM5<%.PD`0?2U5:(T7#]PY$!,U1/0B)S[!X"^4DYKP >+M"9[\``YP4?[''OP"XP43C3?B$I6V,^/!MK2TH:!H8N(DDYUNN_/>F\[N`G_= >+MM&"4G\IOA)%($D-$$NZZ;N9\EBNE4*E4``!&/.G!\7F*@F69,$T+EFG"VC!A >+MA7'P'+VSS&C-WM9[%.NY(@70-)D6$Q),3H?4DE@U$@JJQCW:MIV)<ST8X/;9 >+MQ-5E9Z94#)$Q1!1$!.5R&>]3`4F`MFUC__`H$V#GQL&=_X9FLYDKVG&<=(GB >+MLOJ]+OJ][DK:*+.+3L\Z7TI&+"CH6C9`W.+L%P$3$;``S(R"7EBM`A$!\=37 >+M#"RG8!X@L20`?.+5_0-B`3,GV$\H_=W2710R#I/[Q/!\@O(-C/WU[RN(,V9F >+M^,105(3+&CQ:L$U#]EE`(6MB`1'CA4OP"'!)`@!M/L#3XP-:K9,HGC6?/EE/ >+M2,<KE^`2X)'`9>0K,(J;J-4;F:6IU1NXR+U6Y@",1B-4MW<Q'`ZC@RQ^J'F> >+MM_#>4$K]WHV&?\NS#SR<.LOL>*I&`````$E%3D2N0F""4$L#!!0````(`!MR >+M9#$_1[V)]@```.0!```8`!4`:&5L<"]S:61E8F%R0FEN9&EN9W,N>&UL550) >+M``,F@(I!5'G(055X!`#H`V0`=9'=;H,P#(7O>8HHUVO2W:)`I;U)`AZU:I(* >+MFP)[^H45JOTU5U;L\]G'=J>Y)W6#@3'%2K^:HS[51>$"QA9CQPK;2C.V$/SP >+MMOWI0CU>5D>N]%GD6EH[39/ITP<2>9.&SLZ!_A27\TA/!1=8>L\"@^V\P`7@ >+MFD,YPP`&V:1(B\GR?YCA.7,=(EM2:C=U]Q3$!ZU@%HAM=I"Q91A%4LS%*]@U >+M*>:<U%LSMU9@[SM0#7GF#7&0"5D6K7*;$F,>%67-`4$CT&K[0T\^`#WT][4> >+M!(5`JW>".5_@-^GF:83J2_CBFP:8\Y)VK+/?IG1V,[@><(^Y+CX!4$L#!`H` >+M`````!MR9#%`'A:M,@0``#($```1`!4`:&5L<"]Z;V]M7V]U="YP;F=55`D` >+M`R:`BD%4><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12````&````!@(!@`` >+M`.!W/?@````$9T%-00``L8\+_&$%````!F)+1T0`_P#_`/^@O:>3````"7!( >+M67,```L2```+$@'2W7[\````!W1)344'T@$'"P4&J]2X'````Z])1$%4>-JU >+MELU+8U<4P'_W1A,TB9.:*(@?"8Z+;ISJX,8GZ(!N@A`9K$MUT5EDTRYFYVJ6 >+MLQB8OZ&;H8LP+DHK:%>"W]*.%D$T?DP%OX@(K2'O\[[7C7DX':.EV`L'#N<= >+MSN^><SCG/OB?CZCT(9U.9PJ%PIAIFIKC.&U**8`C8.G1HT>Y]?7U'_\38'Q\ >+M_.GFYN9;*>7`X.`@3YX\(1Z/X[HNA4*!M;4U9F=G<1QGOKFY^>7JZNIO_QKP >+M[-FSS.GIZ7M-TZI&1T=I;&RDNKH:(02NZV+;-H9A<')RPKMW[UA>7G9BL=CH >+M_OY^Q6P"965D9.1I/I__Y?GSYU63DY,D$@FBT2CU]?4D$@D:&AJ(Q^-$(A$B >+MD0B=G9WHNBXW-C;&6EI:?KZ\O#R]$V!9U@^:IK6_>/&"2"1"+!:CH:&!2"1" >+M*!0B$`@0"`0(A4)$HU'"X3"/'S]F=W=7[NWM?6F:YO>W`21`5U=7QG7=@8F) >+M"6IK:XG%8B02"8+!((%``"DE4DH?(J4D'`[3WMY.-IO%\[R!^OKZ3$5`H5`8 >+MRV0R-#4U$0Z'J:NK0PB!E!(AQ&=R$]K5U44ZG4;7];&*`-,TM;Z^/H+!(-%H >+M%"$$GN?A>=XGSF7;3;L0@J&A(912VFV`*@"E5%MK:RNA4,@//CP\[`>X#9#+ >+MY7R]HZ,#H.TN`$((JJJJ4$JAE,+S/!]V&T`IA6W;.(Z#;=N?9?M/P-'AX6%[ >+M<W,SMFTCA&!Z>MJO=3FXZ[HXCH-2"L,PL&T;R[+8V=E!*754L0>>YRW-S<UA >+M&`:696&:)I9E^7I9RC;#,-!UW;?/SL[BNNY218"4,I?+Y<CG\^BZ3JE40M?U >+M3\0T34JEDB^F::+K.MO;V\S,S`#D*@Z:95F&$*+[X.`@-3@XB.NZ6);EKP?+ >+MLK!MV\^B#"L6B[QZ]8JSL[-Y8.JN2?Y32OG[\?'Q-^?GY[*[N]MO7CFHKNM^ >+M>4JE$E=75[QY\X;EY64'^`[(W[DJ7-<-"B'F=W9VQCY\^"!;6UNIJ:GQ@Y?K >+M72P6V=K:XO7KUZRLK#A`"?@:N`1^O6]=)X&X$.*ME'*@O[^?WMY>4JD4`/O[ >+M^RPN+K*PL``P#[P$W@-?7%_V`O@6^.F^!R<)?`6,`=J-(3H"EJX;>@$<`Z12 >+MJ2U`?/SX40(VD+[VN_<D[Y";/A?9;-;NZ>G1@;^NRY9\R*<W"5Q-34TI3=,< >+MX`HH/B2DG)61S6;M9#)I/S3@)N044,``D!0/_)=R\\9_`/P-D>0'6&.!XP`` >+M````245.1*Y"8()02P,$"@``````&W)D,;NIH:=H!```:`0```\`%0!H96QP >+M+W-E87)C:"YP;F=55`D``R:`BD%4><A!57@$`.@#9`")4$Y'#0H:"@````U) >+M2$12````&````!@(!@```.!W/?@````$9T%-00``L8\+_&$%````!F)+1T0` >+M_P#_`/^@O:>3````"7!(67,```N'```+AP&30(=3````!W1)344'T0H2$S@8 >+MOX7;&P```^5)1$%4>-J]EE]H7$44QG\S^_\FS>[>3=(V8C%*(8T:;`1CK39I >+MFU!+":@U-@J-/BBT;VU]*/BF#Q4I&)^J&!K*"J7^*X@M%"S4)&"W8+5-(`]] >+MLR182-.D9N_-WMT[,SYLLDV3[38J>"Z'<^<R?&>^[\R9N?`_VIN`^8?^$1!8 >+M;0(S-C9F7-<U#S//\\R-&S=,;V^O`8:`,"#*@2[]:%S7)1:+K6HUF4P&R[(( >+MA4(T-S<#Q`!O@5G)Y-)!)7!C3"EJK?$\CT0B04-#`P,#`P#S0'0Y$_E0W18` >+MM5;WQ9F9.T2C4>+Q.)V=G?3W]P.XRY/(U0,O=87C.$0B$0#JZNKHZ.@@G4X# >+M?`M$RM7$&&.,UMHHI8SO%\R%"Q?,KEWMQK)BQK)B9L^>G>;<N1_-O.N8P<'! >+M2KOK0R"THLC&&)3R,0;.GOV>X\>/<?#@V[2V/H7CN%RY<HTS9W[@Z-$/Z.KL >+M8GIZ&L?),C$YR:T_;W']^BC.W!0#@Z<!DL#L"HD6)3AY\G,.'.BCJVLG&S:T >+MX/N*C1L?H[N[DU.GOF0N.T<@&"`2B=#8V$A+R].TM[_$$X\W+D*M*5L#K35: >+M*49&KK!ER[.L7]_,^/AE',<EFW5I:'B$BQ='F)J:0@J!;=LD$PFBT1AU=?5$ >+MPN%%J`!`<$4"I5!:`0+'<;EY<YQLUL5QBIY*K4-*R>VIVU0M](%2BGA\#4H5 >+MT%K=AQ<LQT#YBFW;VLAD?J.IZ2]<=Q['<4DFZVEL;&+'CA?)Y7)XGD<^[R&E >+M1&M-O*8&R[)851]T=^\EG?Z.JU='F9MSB,=K6;OV45I;G^/\^8MHK4O-M]36 >+M5%=59N`K'Z45NW>_C.,X#`__Q*5+OP#0UO8\1PX?XM/^SWCEU=?X*GV*K5M? >+M`&-8?-3#)%)*8;0F&`BP8_MV-C4UT;NOCWS>0PB)D/=V]OZ^=_CFZ]-LWOP, >+M4LHBHV6D9-DB*T4H%"(>KZ&^OI94K8UMV]AVDMI4BO>/'"K)\\:^MQ@:&L;W >+M_;*2K93(+Y0FQF)14JD4U=75^'X!@0`!/3U[F<_E.''B"P#>?>\`5W_-$(U$ >+M*N^B?#Y?E,@4.UX@B$8CA$+!^T[48#!(S^M[2<3C'/OX$P#N3$]CVS9:FP<G >+MR&:S**7`&!!%0"F+*@HA2C$<#I-,)NAHW\:3S9O(Y7+,WKU+555U9083$Q,D >+M:BR,,1AS;\5::Z00:&.00A"0DE@T2BIE(P.2F9E9PN$0QNC*##*7?\8*"P2B >+M)!,(M-&(TF@QL<#W"Q0*!;R\CQ2"R3\"_'YM](%WR_Y_<>D_R`\#ZY8?UW+A >+M!*Q9>!?_X0\E!\P"N;\!WS$PY_(JA=\`````245.1*Y"8()02P,$%`````@` >+M&W)D,7R(&V+>````0@$```P`%0!H96QP+V)C9RYP;F=55`D``R:`BD%4><A! >+M57@$`.@#9`#K#/!SY^62XF)@8.#U]'`)8F!@5@"R/S`R`\E#&9-F`BFV`)\0 >+MU____^_:N^U=4MX7H`AC29!?,(/#LQMI($Z2M[L+0P>KK`>0PUG@$5G,P,`M >+M#,*,#+/F2``%V4L\?5W9K[#+")H+/SGY`F2T;(EK1(ES?FYN:EX)@W-1:F)) >+M:HI">69)AD)(1JJ"NZ=OP/L4U3R@PAY/%\>0BEMO+Q@*,AAPL!R4GW)TOY:/ >+M`U>:_P'1V34KC_7KMQ]NY1;7B]E1\/`031GK_DKU"XDL+`XRL0"ZB\'3U<]E >+MG5-"$P!02P,$"@``````&W)D,;2FO&Q+!```2P0``!``%0!H96QP+WIO;VU? >+M:6XN<&YG550)``,F@(I!5'G(055X!`#H`V0`B5!.1PT*&@H````-24A$4@`` >+M`!@````8"`8```#@=SWX````!&=!34$``+&/"_QA!0````9B2T=$`/\`_P#_ >+MH+VGDP````EP2%ES```+$@``"Q(!TMU^_`````=T24U%!](!!PL$)_ZFF0,` >+M``/(241!5'C:M9;!2QQG%,!_W[<ZB^ZN;MU5$*,KFD,O6@UZ<(0HZ&4CK@3K >+M43W4PUY2,#?_`@]"P/^@/80>EHB45M">A$2CTIJ((+I*4L%(6!%:=6=F9[Z9 >+M7MRI;:.68C]X\'CS>+_OO<=[W\#_?,1U'Y+)9"J7RXU8EJ4[CM.@E`(X!%8J >+M*RLS&QL;W_\GP.CHZ(.W;]\^DU+V]/7UT=K:2BP6PW5=<KD<Z^OK+"XNXCC. >+M<EU=W=.UM;5?_C6@M[<W=7Q\_$+7]9+AX6%J:FHH+2U%"('KNMBVC6F:?/CP >+M@>?/G[.ZNNI$H]'A@X.#:[,)%)6AH:$'V6SVI\>/'Y>,CX\3C\>)1")45541 >+MC\>IKJXF%HL1#H<)A\.TM+1@&(9\\^;-R+U[]WX\/3T]OA%0*!2^TW6]:6)B >+M@G`X3#0:I;JZFG`X3#`8)!`($`@$"`:#1"(10J$0S<W-[.WMR?W]_<\MR_KF >+M4P`)T-;6EG)=MV=L;(SR\G*BT2CQ>!Q-TP@$`CQZ](B!@0$?(J4D%`K1U-1$ >+M.IW&\[R>JJJJU+6`7"XWDDJEJ*VM)10*45%1@1`"*25"_-DF(01""!\BI:2M >+MK8UD,HEA&"/7`BS+TKN[N]$TC4@D@A`"S_/P/.\OSD7;5;L0@O[^?I12^J<` >+M)0!*J8;Z^GJ"P:`??&!@P`]P939\0":3\?7[]^\#--P$0`A!24D)2BF44GB> >+MY\,^E8%2"MNV<1P'V[;_D>W?`8?OWKUKJJNKP[9MA!#,S<WYM1X<'`1@?GX> >+MQW%02F&:)K9M4R@4V-W=12EU>&T//,];65I:PC1-"H4"EF51*!1\W75=7-?U >+M;:9I8A@&EF5A61:+BXNXKKMR+4!*F<ED,F2S60S#()_/8QB&+T5`/I_WQ;(L >+M#,-@9V>'A84%@,Q-JR*A:=JWG9V=/;.SLVB:AI023=/\/@@A_/X45\;%Q063 >+MDY-L;6TM`[TW3?)O4LJMHZ.CKSY^_"C;V]O]YA7+91B&7YY\/L_9V1DS,S.L >+MKJXZP-=`]L95X;JN)H18WMW='=G<W)3U]?64E97YP8OU/C\_9WM[F^GI:5Z_ >+M?NT`>>!+X!3X^;9UG0!B0HAG4LJ>AP\?TM7516-C(P`'!P>\>O6*ER]?`BP# >+M3X$7P&>7EST!G@`_W/;@)(`O@!%`OS)$A\#*94-/@".`QL;&;4"\?_]>`C:0 >+MO/2[]21ND*L^)^ETVN[HZ#"`WR_+EKC+IS<!G$U-32E=UQW@##B_2T@Q*S.= >+M3MN)1,*^:\!5R#&@@!X@(>[X+^7JC7\%^`/8R_#4CH!>-P````!)14Y$KD)@ >+M@E!+`P04````"``;<F0QVZR:)_0```!?`@``$0`5`&AE;'`O8V]N=&5N=',N >+M<F1F550)``,F@(I!5'G(055X!`#H`V0`G9#!3L0@%$7W_0K"K%NF-2Y*VJXF >+M?H`F[A%Q2H9"AT?3T:\7"G9J,L8HR4L@N?>>=VD>#P_4#[H,2D.XM;AW;J2$ >+MS/-<S'>%L4=2UG5-]A6IJMR^ON7PKAV[Y!IV.$-?)P;PWII!?,L8S(=4BBU! >+MWDVB9(>[S)N;P'\29\1>S.1:/%E-DX'"26IJC7%>&@B+5DED!9C)<G%#S14# >+MD)R4Q1XC$FP-280K[B"`6SDZ:?2/V&U0HL>]Z<CXB1T%=*GZKPTV4:L9=^O' >+M_:T5[84:,5GAUW;Q>6/)J-F4_O=/1/A"2IR@>!86?$"+R^)^V2P"_739)U!+ >+M`P04````"``;<F0QLGX3R?0&``#F&@``#0`5`&AE;'`O:&5L<"YC<W-55`D` >+M`R:`BD%4><A!57@$`.@#9`#=6%UOVS84?6Y^Q9W[L"2([20KNM9#AR9IUF9- >+MDR))5Q3%,%`2;7.E2)6DXKC%_OL.*?E#BI+*'M"'%4426Y?GGGMX/TCUMS<> >+MTK;_1X?'+T_.Z/3DZ/CL\I@.3\^/7A=/8/$'-U9H-:`W;T]IK[?7?XG?^[W= >+M_FGQQ][&0UA=C3G%6CFNG"4])#<6EH9"<F*&D\VCOWGLR&D\X/1&?Q%2,GJ; >+M1U+$="IBKBR?>0(:W-"FM^R4SSI;O]!4YY2R*2GM*(?YP@6_B7GF2"A02#,I >+MF(HY380;`\JCE"`]^E!"Z,@Q6#/89]."[MR*F,.RL7/9H-^?3":]M&#;TV;4 >+MAP;]$.^E'KJ)#RT1UAD1Y8XGE*N$FPH6&"X;:/A4U#FXI)/+#D7,"KL#L/<G >+M5Z_.WUW1^X.+BX.SJP]T_AL=G'V@UR=G+W:((Q#`\IO,<`MQ#0D?)$]Z=,GY >+MLCM`#75!P&8\%D.(*YD:Y6S$::2ON5%"C<B(T1B[Q%1"4J3",0?5[8(]8&:* >+MS??V'(N$8I*.=!+"FNWA*RXS.KJ\G%N>*.$$#%_P:RYU!LA2WSH$["]ZO_?H >+M-9>2&WQZJTW!)#:<>;FB:5AX&]$+?X2M"Y'0YM$6[>_N_E3N]BWS'AU(21=% >+MU!?<<G,-\0+A(Z1LV!QM-NW6`-_@_X%T4`JJ8/UT)V`VI[9/I8C[9%S>>RQ. >+MO2&0RJWSW[X\>T<ON>(&S)KSGO;]WDI$;LKD1X%UMG;P;1F9QSA%#L#@6U`H >+MH!K8:8$&*&3^9"SB,<7,%OF3&7TM;-"^W"Q?VV4JA3KWBK,,:1>S")$+91UG >+M"<""O?9E$R'!>G0R#(4Z$7;LRYU)J2>A7'5X8.BZI%A14BLY!=AM$2L25CGM >+MA`SVW6#N1WM;B\\>"S[O=MC@*70F#RM4@C!=L1Q("4HI("`?$RZY\T54DRU$ >+M'P@9GDD6!UW3T(2"*6ABBP#F30+-Y=6&?\Z%661\+=*YJHD.\082O$R*.@G( >+M`KQ89`()&U*TA1(EUEP+IM`6%:_(TD0L%%$Q0X[/7C1.D.W^QG,T+-0VY49N >+M=N*QT2E';QU)'3'9MY^$ZJ._;SQ7+.4V\]H%PSM:\"<^31FRS_1'V*-/G*/" >+M^UY0WA.VYQ.I=Y-+#[C1<UK+B!G4M].JNT=?-QYT@=6-]$U7&R_0P(N"K6'R >+MEXT'J5#=B4C<>$"[V0V^D.C=7>NFDG=%BB8ZJ(4P1O,K`K@J//4R-?*N_X'S >+MR.@)2O4P.(=KHGM\$]6=$WW+>^G@+@*5X`?(F\V/F$6^?)-G'6=RWOES:S#V >+M4V%G(^4J;V78'G3`8M]!6V.7]GZ/8BVU&5"AW!6_<?1#D4%,N1!:?QNCSX4T >+MA&PBS5.R(N$@1D%"LL5!P^_/HG>CAZD?'=G/.>=?4&Q.C[A/G!Y2]*$W+3'\ >+M%M%7*C<#DP7;0?!:&'4C%G_J1HM=77^;*F&5Z1$@NH:/PID+A>PVX9_V'\U^ >+MX--638];O#X6O[RL,Y47"=C@88'^Z$E;%_5MO-=!@`T.?MZ_SP&.+SA5)=]= >+MW@4__Z.^,F-)@I[?#<<-9(0OSV;&:PD?G,\9M!&F6?S[U0\_@OIW>QE#TN^N >+M_=[^/,&?/F[!;"V-"R=!@[N=9$8H]_U+>^_Q+/Z]I_MMN!4-LT5%!^00=$OD >+M=:HZ.`F)=8^3>6LMQ:46ZBZF:[EZ,=S*HL!);5U$SDP\K@-^T3KM2F9&?$U8 >+M#_"74(VX-L4A];_@ZMS5@<MQW(USZW0JOH2KW*K@N%<.[=+!H;_=-.E6&$]^ >+M6K:;2:M,I&;4VPF[RA`*<[UY]*PR+Q;46HR#E8;!G<BKQEUK_\N!5ZKHWD[] >+M='_>J1X_J;);@,RZT^I0WTCJE9KH@EHCW#=)-C?0)9:56;G2@%M06\)H1Z@^ >+MQI;X5(?7NF(UC9GU-6KJI^NTD5LX+:G=ZA_W]..UROT64#MB#45^UYR\C]:\ >+MG`/6$JW_BH(+$:;`-I5'&CJJ5*)U^7"(VWU_=AO\F.J$/^L(W+0L.M&O5+DE >+MXG/M(NX-=VJ+':YY;=9ZNQUJY_FCFV9XZB^@I13!9FTV[?#\6G^+18?.))L. >+MYM?^Y5MYC7A3D,V4&LA7G"FM^/R.[!.3@H_P`L^_.[)YY@]G_NVQO_:&W"TL >+MOE(5A`*(SX)7%^>'A\<7_H5.?]94<8R(HG`(?8#S0GE&9%F&<Y5__3XC4C[( >+M<4K&!$,+'I`8*6W"HQ05+9"*N[73<J1-PDT!T7P5"^](:H^67Z`$%)P21D;G >+M&$SE"P4':C;SKP%<F_<KBQ/2+-K9(>D!=/A?AER]T-2B7@SH\@&.-W9:N2FL >+MAS\2PV7\6?=",@KGBAPK])G=P/>@A-52)`0,SE]<CEFB)]4W>$^*6_J_4$L# >+M!`H``````!QR9#&Q4DP_10(``$4"```(`!4`:6-O;BYP;F=55`D``R>`BD%4 >+M><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12````(````"`(`@```/P8[:,` >+M```&8DM'1`#_`/\`_Z"]IY,````)<$A9<P``"Q,```L3`0":G!@````'=$E- >+M10?4"!</%RB#K[LO```!TDE$051XVF/\__\_`RT!$P.-`<TM8$'C_SQYDDU? >+MGY&#@W@C?AX]^O_[=PB;55.365H:1?H_*O@\<^8S4]._KU__)QH\45)ZP,`` >+M09]GSD23Q1)$OTZ??F%K^^?Q8QK&P>\;-UY:6_^^?IV&D?SG\>,7=G8_3YVB >+M82KZ]^;-2V?G'WOVT#"9_O_RY:6/S[?5JVF9#W[^?!49^7GF3!IF-,:_?]]E >+M9'QL::%M3OY06_NNH(#AWS^J6<`D*,C(PX,L\GGBQ#?Q\?]__Z::!5+GS[,H >+M*B(+?EVRY'5@X/]OWZ@31"PJ*A)'C[+JZB(+?M^Z]86;V[_W[ZD3!\R2DA(' >+M#[)96Z,4)T>/OK"W__O\.74BF4E04&+7+DYO;Y3BY/+E%];6?^[<H4XJ8N3B >+M$EV_GCLF!J4XN7__F:$A_K`B(9DRLK**+%S(FY^/EM6I9@$#`P,#$Y/0A`D" >+MS<VTK3+Y:VJ$9LSXS\Q,PSJ9-SU=;/ER!G9V&E;Z7*&AXENVH&5U*K<J.%Q< >+MQ/?N91(1H6&SA=W,3.+0(19961JVBU@U-<6/'F75T""J7<1F9B;8T0%-^`(" >+MQ+:N9&4E#A]^Z>6%K5*D'OCW_?N/$R?0!!E'&[^$``"Q(D<0Q>'5J@````!) >+M14Y$KD)@@E!+`P04````"`".<Y4QB#@P_5L"``#2!```"P`5`&EN<W1A;&PN >+M<F1F550)``-;><A!_F3-055X!`#H`V0`C5113]LP$'XN$O_!*R^;-"=I$UI2 >+ME:!)K(P->`"&]GI)+JU%;$>V0\NF_?<Y3E-2Q"3ZDNKN^\[??7?V_&S#2_*$ >+M2C,I3H<C+QB>)8<'AP?SV_,%L3FA3X<K8ZJ9[Z_7:V\=>E(M_5$<QWXP]L=C >+MJO*"ZF=A8$.%/AH>'@P<:X9\C\CE;U:6X-CC((A\Y`WU:.A.&\S/46>*5<;* >+M()#*VIP.:R5F6]J,"6V@+"D'P0K4IJ$-!G/D,Y8G?XIQ&J?%**33^.281G$X >+MH6D\36D>87P,^02B?/)W[K?HCKAM.K$]>Z.1RW8A)VDP_T`IN0>U1$.^5%7) >+M,G#RS(II@AN#H@&3#`39RK-?(S^3AKQF9D4X$XS7G(#("8>-^Z_KJI+*8-ZY >+MKCU":4(Z6<8=V#O/"=XSJ(WLNL?L)`B#8DJS<0`TFD0%C=,`Z2B$$&*,I^%) >+MM-=]2[7B'K;]6@,"!^C%>D#8/+QXU>)>0JTZ_[4\!WNKEYVS"R6%(5^M-==H >+MX!P,-#YT-@C@F%R*O-9&,2A)(159,(6%W+C2+M^!\][AOQAG=B)6SZ.1%<FQ >+M@+HT=FC(T56Y;E=JKUK^6KV-90K!2)7<R"<L2P?K0CN([4"QM&YB%Z`4&D.N >+M\`Z6V,)[Z;<H][7DH,F/6FJ[URC>1?H.CW5*[@PR@>I=#,_SF@6T#A!EK\Y_ >+M.2O)L;+:?]Y>)=N;*USO7B:Y[VA]2#/*-X9Y*0PN57M3ODGYJ,G'6MMM3Y_) >+MO9O!-0A;07WJ#=M>&U0"RIMFJ&PW]'9G^[GFI=A;->)^[L'R[8ME`?\`4$L# >+M!`H``````$%R9#$````````````````(`!4`;6]Z87!P<R]55`D``VF`BD$+ >+M9<U!57@$`.@#9`!02P,$"@``````@P5K,0````````````````T`%0!M;WIA >+M<'!S+W!R968O550)``,F_))!"F7-055X!`#H`V0`4$L#!!0````(`"%R9#%Y >+MQ*QS70```&`````4`!4`;6]Z87!P<R]P<F5F+V1O="YG:6955`D``RZ`BD%4 >+M><A!57@$`.@#9`!S]W2SL$SD9>!E.,3*L&K5JN/'CS]X\.#ITZ??OW__#P.* >+M/UD8&1C8&708@`"DEH%956+#G07*IS2O*5@\3]KZ_,#3W+L=C8LZ9Z6OW/7X >+M5)-3XOT?C]\X,C%8`P!02P,$%`````@`(7)D,7E;@.)3!@``G`\``!8`%0!M >+M;WIA<'!S+W!R968O<')E9BYC<W-^550)``,N@(I!5'G(055X!`#H`V0`K5?; >+M4ALY$'W&5?Q#+WE8H)@QL,ENRFREUAA"O'&``I)4'C4SLJU$EF8EC2])Y=_W >+M2!I?(0F575[P:+I/=Y^^J*>YWWA"R7Y";W3!6_0W&[,3<BQ+)J)PPQ8]/2&A >+M"JY<@D.;C(*4$O*$\B1C5N2)[O<M=Y#T,`![QXT56K7HS76/CM*CY@7^'Z>' >+MS5[\<=1X`JF[(:=<*P=D2[I/;B@L]87DQ`PG6V4?>>[(:;S@\.VSD)+1=95) >+MD5-/Y%Q9/K<$-)BA72^Y4[_;V3NAF:YHQ&:DM*,*XDL3?)KSTB$PN#`JI6`J >+MYS01;@@HCU*#I/2AAM"98Y!FD"]GT=V%%#$'M:%S9:O9G$PFZ2AZFVHS:(*# >+M9HCW5O?=Q(=6".N,R"K'"ZK`K%G#@H>K`AHV%>VT;ZE[NT.>;WL`L/?=NU=7 >+M;^_H??OFIGUY]X&N7E+[\@.][EZ>'1!'((#ET])P"W(-"1\D+U*ZY7S5'*#Z >+M.CI@2YZ+/LB53`TJ-N`TT&-NE%`#,F(P1):8*DB*D7#,@76[]!XP<\86N;V" >+MDE!,4@<5X\-ZLV0EG"U%NTHX`<DS/N92E\"L"=[$@/R9-N#D1ENN,FX&`*%K >+M;:(_N>',DY;-@O9]6$]_!PD,\=!N9X^.#P^/ZIS?$T^I+27=Q-AON.5F#`J# >+MUQT4;DB1-KMVKX43HE.NZ$+K8@!#?V9<_:6XLSDK>8H:>T&[BV#:E1MJLQ>` >+MVM*!8_`)F[.#X,?#3>&+,..^C%>K!LHC+PBD.NG^].+R+5UPQ0V,/=PQ=.RK >+M0H(M4[<-6G-G[P"G-1L>HX?J@<"/H-!Z&V"]B`8H],QD*/(AY<S&RBN-'@L; >+M\E5GV4^%N@C#A/!98B4*-F<9(A?*.LX*@`5Y[1LN0VFFU.V'%I\(._2#@DFI >+M)Z'1=7AA:%R[N,:D5G(&L/LDKE&X[M-!J'T_1Q9VM)>U>/98L/EM@P]8"C/- >+MPV*T(DP7U8%4H`D#`FJXX)([WWX;M(7H@T.&EY+E@==1&%]!%&XB10#S(L'- >+M56W#_ZF$67;)1J0+5@L=X@U.\+HH-IT`+<#+12E0L*%$'\%$C;7@@BD,5,77 >+M:'G(L=`O^_Z/SB_/J-?MG%_>GM-I[ZKS.IXW]IN-1BHQ/D_UE+XTB'!=?4Y0 >+M2YP9/^);Y%]F>GJ"=R-FT(\M.BZG]+0,1YDV<#`>62U%<3+'B&\2I\LDUU(; >+MV\+D,IR?W0Y9@6J(#V?,?(H'FXIAXFRHOL*9#),H/O?\[X?5,^V<'OV\ON3] >+M3>O?<3QC^:>!T<A6U&E%K)>"2S#R%1S'C2!0'&D,%D#<;^4*MS'J^:G7LR,T >+M3_(M[:-GD*,@6"GQWN\?IQ4"5U$4<O5.\IR/`EX3M7!MQ)CELV:[&/L4%W3- >+M%)>6SJ<E"XV'6N`6!=*$>>Y\0]EY><Q+X%GTNF1%@=?U,_"?^*H]GV(<AUKV >+M*K4'S^`!W1=)2UD!T?909FOBZ5+!S4K>Q9`_H$;*YXJ=H9"%X:K5"E0[)"41 >+M(]S"NVOXF*FUB3N@V,=JK05[B.)&@.'_X3PQCP*-0N?*C^4B@C;WJ;'U360* >+M_998-Y,U1HLJ(W?SH=$CCFT)!M"=MFD_"=7$MM)O%MJE`]'']@9@Y&SK/H+" >+MM#AI;-WK[7S(\T]H[L3?H-C6D/M?L/A@.V#*S17\>X:N@;NXQC"$3I;^+R;! >+MUJ(2_OAY@K"'+9G::NY_+P4_052(]K]2]3\2E(D!-I_NMP;#\WEKA_H/HR1( >+M]9&K9,+CH,@T!DR4*GB?5=*UR_*2C?A]P-_+->>]$FIQ.[3C*S2^Q/WCN["S >+MJ(4OV_.9Z"]=[[MG>.=ABC$)E=2LL,M?Z70DG\R?DK'@$WQC_.".">]P)YJD >+MK_/*^H08C$`PMKU-^_0^+CKQ(EY.7;]D8.(/ZRL15RHNX5'8":U0\;XG7W8D >+M.1MCN#$Z3C!C/:3_="C]9X.`=-QSK2C\U5N"!N>_`6`U9^I71Q\K3*EPO.F` >+M9#/_`1'V(8^:\9Q5=L4P%D(+P][(BEI80;#O.6P&.K-Y9>;K2[S`(F[Z0)H. >+MZ#N9>T'IG/=WH+VK<'@4\KER4ZUTS>-S>GJ1EFH0\[B"Q9QC^=`SWL+B,N7% >+MQGOL7?C2\-FL?VZ\+[45+GP"UW&'1*!/MQ\HE]"CV\OE(_;L5[_,_`M02P,$ >+M%`````@`@P5K,4B`FM%8!@``A@\``!4`%0!M;WIA<'!S+W!R968O<')E9BYC >+M<W-55`D``R;\DD%4><A!57@$`.@#9`"E5]M2&SD0?<95_$,O/"Q0S!C89#=E >+MME)K+B'>.(0"$BJ/FAG95I"E64GC2U+Y]SV2QOB"2;(;7O!HND]WG[ZHI[G7 >+MV*9D+Z&WNN`M^IN-V#$YEB5C4;A!BYX=DU`%5R[!H4V&04H)>4QYDC$K\D3W >+M>I8[2'H8@'W@Q@JM6O3VJDN'Z6'S`O^/TH-F-_XX;&Q#ZG;`*=?*`=F2[I$; >+M"$L](3DQP\E6V2>>.W(:+SA\^RRD9'1595+DU!4Y5Y;/+`$-9FC'2V[5[[9V >+MCVFJ*QJR*2GMJ(+XW`2?Y+QT"`PN#$LIF,HYC84;`,JCU"`I?:PA=.88I!GD >+MRVET]T&*F(/:P+FRU6R.Q^-T&+U-M>DWP4$SQ'NC>V[L0RN$=49DE>,%56#6 >+M+&'!PT4!#9N*MMHWU+G9(L^WW0?87>?V];OWMW37OKYN7]Y^I'>OJ'WYD=YT >+M+L_VB2,0P/)):;@%N8:$#Y(7*=UPOF@.4#T=';`EST4/Y$JF^A7K<^KK$3=* >+MJ#X9T1\@2TP5),50..;`NIU[#Y@98P^Y?0<EH9BD4U2,#^OMG)5P-A?M*.$$ >+M),_XB$M=`K,F>!4#\F?:@)-K;;G*N.D#A*ZTB?[DAC-/6C8-VH]A/?VG2&"( >+MAW9.=^GHX."PSODC\93:4M)UC/V:6VY&H#!X?8K"#2G29L?NMG!"=,(576A= >+M]&'HSXRKOQ1W-F<E3U%C+VGG(9AVY0;:[`:@MG3@&'S"YG0_^+&^*7P19MR7 >+M\6+50'GH!8%4)]V?7ER^IPNNN(&Q]1U#1[XJ)-@R==N@-;=V]W%:L^$QNJ@> >+M"'P/"JVW`M:-:(!"SXP'(A]0SFRLO-+HD;`A7W66_52HBS!,")\E5J)@<Y8A >+M<J&LXZP`6)#7ON$RE&9*G5YH\;&P`S\HF)1Z'!I=AQ>&1K6+2TQJ):<`>TSB >+M$H7+/NV'VO=SY,&.]K(6SQX+-I\VN,92F&D>%J,58;JH#J0"31@04,,%E]SY >+M]ENA+40?'#*\E"P/O`[#^`JB<!,I`I@7"6XN:AO^3R7,O$M6(GU@M=`AWN`$ >+MKXMBU0G0`KQ<E`(%&TKT!YBHL1ZX8`H#5?$E6M8Y%OIES__1^>49=3NGYY<W >+MYW32?7?Z)IXW]IJ-1BHQ/D_TA+XTB'!=?4Y02YP9/^);Y%]F>G*,=T-FT(\M >+M.BHG]*P,1YDV<#`>62U%<3S#B&\2I\LDUU(;V\+D,IR?W0Q8@6J(#V?,W,># >+M5<4P<5947^-,ADD4G[O^]WKU3#NGA_]?7_+>JO5O.)ZQ_+YO-+(5=5H1ZY7@ >+M$HQ\!<=Q(P@41QJ#!1#W6[G`;8QZ=NKU[!#-DSRE??@<<A0$*R7N_/YQ4B%P >+M%44A5^\D+_@PX#51"U=&C%@^;;:+D4]Q05=,<6GI?%*RT'BH!6Y1($V8Y\XW >+ME)V5QZP$GD>O2U84>%T_`W_;5^WY!.,XU+)7J3UX#@_HL4A:R@J(MHLR6Q)/ >+MYPIN6O(.AOP^-5(^4SP="%D8KEJM0+5#4A(QQ"V\LX2/F5J;N`6*_5&MI6#_ >+MF"7CAX"BT+GRH[B(0,T]:FS,T`[0*J`K_#^(-/H>2ZR;RAJC1961._G`Z"'' >+MA@0#Z$C;M/="-;&A])J%=FE?]+"Q`1AYVGB,H#`ACAL;C_HY'_#\'@V=^%L3 >+M&QKR_0N6'6P$3+F9@G_/T"EP%U<7!L_QW/_`QL9#YG^"'.Q=<Y8VFGO?X&A- >+M@-^A*,3YLR3]1VJ.GJ`F$WWL.)VG1L"+61.'2@]#(TCUD*%DS.-(R#1&290J >+M>(]5TK7+\I(-^6/`W\LEQ[T2*G`S--YKM+C$3>/[[?2A`KYLSJ:?OUZ][Y[= >+MK?7T8N8IJ5EAY[_2R5!NSYZ2D>!C?$U\YS8)[W#[F:2G\\KZ9!@,.S"VN4E[ >+M=!=7FGCESN>K7R<PVP?UY8?+$]?M,&Q_5JAXLY,O.)*<C3#&&!TEF*8>TG\D >+ME/X#04`Z;K16%/Z2+4&#\]L^K.9,_>KH4X5Y%(Y7'9!LZC\5PN;C43.>L\HN >+M&,;J9V'8&UE0"\L&-CN''4!G-J_,;%&)5U7$3=>D:9^^D;F7E,YX_P#:.PJ' >+MAR&?"W?20L?\>$Y/+M)2]6,>%["8<RP?>,9;6%$FO%AYCPT+WQ0^F_7/E?>E >+MML*%C]TZ[I`(].CFFG()_;DY7S-BOW[U:\N_4$L#!!0````(`"%R9#$)0OW0 >+MN````,P````6`!4`;6]Z87!P<R]P<F5F+V-H96-K+F=I9E54"0`#+H"*051Y >+MR$%5>`0`Z`-D`'/W=+.P3.1EX&5H$6<``B$A(3DY.2<G)Q<7E_3T])R<G.+B >+MXMK:VJ:FIN[N[HD3)\Z;-V_ITJ6;-V_>OW__H4.'3IX\>?OV[3MW[MR[=^_A >+MPX=?OW[]CQLH_F1A9&"09]`!V02RDX'5\\'AGI23':&KUEV*B"S@\9^N??QD >+M@/'[6IX)L?IE#!8Z3MV)B9T,?`:*3`P9/"S]*]8*+!!*\O1:O)KA=D)WXY$S >+M$V+N??AQTJ6^A8'!&@!02P,$"@``````?7.5,0```````````````!(`%0!M >+M;WIA<'!S+V1O=VYL;V%D<R]55`D``SYYR$$*9<U!57@$`.@#9`!02P,$"@`` >+M````(7)D,?C6!\S2"0``T@D``"D`%0!M;WIA<'!S+V1O=VYL;V%D<R]B86-K >+M9W)O=6YD+6=R861I96YT+G!N9U54"0`#+H"*051YR$%5>`0`Z`-D`(E03D<- >+M"AH*````#4E(1%(````@````>`@"````',5G.0````EP2%ES```+$P``"Q,! >+M`)J<&`````=T24U%!]0($A8=''S=S]T```EQ241!5'C:O5I;<APY#"-4??\3 >+MQX/]X`N4U)/\>%W)V/-2JR40!$&!I/WFS[)?_M$+</MM1INW1WV,MWA^+5ZD >+M&;DH[]'?`/-;D#=H9NBQF'\#1AII\''\/V@&(VSYU7(@_[090)^^__:/QU4( >+MOQ#Z)D&`),U(&`TQ*1B6T9`7-[D1F!$^-LT`Y,+0'V/X^`W28(`![#4!C8\/ >+M"%\`D#0`_EI>%3DB\TGO#T@#XFV2_8$8!!]^[`!JCCWO[/P4>'F_OP2#X?/Y >+M_#Y,>2*5%_C6DQMVWUY8`EW2X`,4!F,SR`2J&0,_,@<RKEMX+3#;4Y\)/,., >+M@6U42$'&A+\OV^U_.4[H&^.CF!&+'G!`PH;FL0!>%R_>]T>_$%@P9OW+L,// >+MSV=')1#+H4"5:P"WG1+DZ4OX^?P8QQ@#_R?VKJA$QM4%190=V1?C"U0F]?%" >+MC-S9E,?7>>)2)P'C-Z0Z(:VZ5$&MP9GW3!B#:K$CTW>4.H(/'H2X&/Q$9R+4 >+M<IK!6=3Q2HS@0#QUY!>Y9Q20>;G5O&&..I(%14=O7!<F<9$IPA$%1)RB&0\Q >+MY)^?/XK%6!4@:%Z#QH=C/;,[Q)#IP,P,3R-SY#9J5$$0@SL>QC/-+>L5A`T@ >+MOB=I>_]BQD%#D910SP<J,"7/4Q/P&7S]^HK[]ATRD/Z822[9:US"P5`17%F= >+MN?=$I<"%F%!N`^)6$."O:1(-%V9XU$;E?CGP.@JY+(G4)'L+`X#TVZ@=-B#( >+MDX54F77($YJG_R>F'4O"FA%SU5@J:L.8<S6/Y)=+[J,^USS(S.@Q0]X(D!MA >+M\T*#")@*(G@`\JZ.^0;N+8,O8^E`9GS+'?$:2+'EE)M@1LP6B8^S0GXCY53& >+M.Y%2+7)C*,?`"Y*`DFA@-4I\+G)R8<LQHL3MFC`S"H&4@4%:R&P3_!A7`P@C >+M[7%"<X6:"G#L>^A@OY6\W81>1$->Q6>8VP\SLZ>8+%<>N27!I*FP.5¤ >+M[%P@)@U8!TBH*99_1Q$&99=2BG7@NB-%]=ZH:!2[G%*!F]!KZ8AYS0%^7S#) >+M78EGX1>..BAVFX':10X%V-5`[A13*M8D(VJBE/'/1HD%27+^V2<R>/(CHJ)) >+M?0B&]LUJ@,G5E>D*XJ@ZKMF5#XJ50_V*^"R:0U=PLB!=V07OA!929HN<;,6+ >+M0J?L+U-W::^`>*D<$)4F(V5>RXQ=2/*UHN:=\=C2\1OI7N4JOZO6H\+!$`\L >+M]3[$I((#/!1L<]>XYR>5J$O'J%\@";3+6W]:.QITB2;/).(D'?@%LIP!X:FS >+MIY^08]3.H2TA8*_<[=RNZTJ&+D)2*TM-@W$UY'(D%;<5D?'J%7Z^@,@DJ:*? >+M6)]"F__-(U]5U<>M$E*56???6_><1?&MFL#E+;XHS0U%G$MI(D,JCOD-D+QH >+M#;T`,OL4A(J+52#>BS`:$WN]V2TA+&#J%`<?GG-Q`Q=,$>"82#U0VU>N3E?Q >+M09M/&S4LGPDYCV;MXLUD\;*N:AVUC"DNPQ(*#^D`00Z%GVD2JRP-"T>UB&#F >+M'0/@2FD]>68P&W$A)VCM0$@YVL1!<I`=O['E+@UX%-,;$379"4"T(-W4*F:D >+M8"O_V$9>3K^M!);0/"N\Y#`)C"R8J4R+1%=6Y3F9QWTB%H.F\D*HN9I3ZE74 >+M%H.=B0G#D&WQF\NZ?F;7E-0ZSZOZY"BQ5H8`:0LKBQMGTP2W$C&'J\@R00,Z >+M;+J?\:."(+1)2T=J/:>$KC'`"Y!&3K"C)%]'!/RE9CFRNBJR\W.?I2"K= >+M$,HQYZ[3TZ+A?E\T"^\:L7D>U>YS=]7#'CO+@+2?7:!"LQR&N4];E1&1-KEE >+M+L\LSLG67GU*46S3CZI-!P`^9-4-:$>*96ZK7XBR.U'^O]DN*S$\T2=NF6*F >+M#0H@=FI"J?1,+Q!H(X5V7.*Q%[;CFYLY,'`HLXW4@NSX+\;/OSE&ARQ8-+1K >+MPE-]BE41/`$[\"H121D'1J[AF&'O381G5.QBNZ:#N#Q)!&BL`JOJCI"BP^/O >+MYDMGU:2BLF=8EKK(Y4"2WT%H!Z)(!Z,UE?_!_FS6?#"-F9;D]:DE\H<;R4FE >+M+V;2;BZ'-\+!HEVE/O=">]?(+SXY=][C)$R&K<D;_/A>28VUXVY]3B=HQ>+& >+M2LKG=&%K_]/A([.IDH\:\,X:+O-6;VX.%UF,L-9KX:F$=@@:I<QD>!Q9H!+& >+M)VJAJB4JQP^CD.6EE*MM8+0!,S+"K6^6E#V@M0W(T>&J:J-=3:O,+.@F2!6R >+M.<R2588V>;3G*3T*L5]$,J+56+%$Q._:L^#7JOK5/K\`F%*`V-\]]:/M]V91 >+M[7;GJN3+,HN'K<E9I%$LFRUV/#N#PI/A>-46AL&HC2`H^Z4[F<UQ*7M(T5&! >+M9*/!'JNV=RLTL;NR45GJMIS"JD%0D5`=[Y3#-'N@&%737@S'JJC8;F*;E*QT >+M@&;B<L>7!*^JXN`%+;@EST"")1M/N;@\4N;AU7Q>`<KAL6[,-GOWW#KB+=>K >+MM+S)W$TUJ$7&*3$CL+E8^DTD7OK1U$*\C&21COD5#N"AFR%X4&<7=,VI11A- >+MC;MNYU3[!QC'(L91C:<!/7RB:-ND^PC=#Q2AI8AT'`'6W]@;=>0D*SV&T7/2 >+MU1Y)F3SH-_I*ZTHX/,]MS(Y=E^;@+<FV%%KO:I!O3>X!L<^W]@Z]AR/R6,L; >+MZ`F*D$0\+$X,VWW<GM%@2SP0H^A^9([*"B@1!E.FXFAD9_].TNZJQ)=1'YG3 >+M<L;!I^B$7FZ[F)UYI@-=F_N45D*`G$8-+4FM#(;A8$,.^50?DX+V&''I::?J >+M0\T^AVS'T/*!>ZGBIK*$$?9LA#:@IC":-1G5C#]:>D*^V6J\U?"\A<:76N9$ >+M.2,G#P>!TY'!F/*PVK96^F8LY*(NZ"D<<7]9F\\P+]-&0QV)(U,7HJR8:EM' >+MNE[L`SU=0J'/=M3)'J=,B'RJ*C^_$GE@'"A;90B,$WMRAD*/,J&E'@J3#&L] >+MW/MJ&CGT5@.[PM78B78S(?5X!:C3J/.%L-%@>NZNX5!/H\^^5U(S56RG-JCB >+M=PN#%WEXPIF'TSAJGC4]0LE>>U'4Q[^8=D^%?#J&:">GSA>IVP`YRU/?GFZ: >+MGX&H6@*FAF_-CGE.(A-.G`4I/PE54DE_@R4YJD6DYYOB1`BRI^GHY"/>:Y1% >+MU9=J4C7K&%+7W?28I6U-18^99T!##P_M'=JVG>3$:QU)Q9;G"KW/[*J\L!@O >+M-'C5E[ON^Y\/%?_*SW^W6N]>&W%D;0````!)14Y$KD)@@E!+`P0*```````A >+M<F0Q:Q'+SSX"```^`@``)0`5`&UO>F%P<',O9&]W;FQO861S+V1O=VYL;V%D >+M0VQE86YU<"YP;F=55`D``RZ`BD%4><A!57@$`.@#9`")4$Y'#0H:"@````U) >+M2$12````$````!`(!@```!_S_V$````&8DM'1`#_`/\`_Z"]IY,````)<$A9 >+M<P``"Q,```L3`0":G!@````'=$E-10?4"`T4#1[3[R\'```!RTE$051XVK62 >+M3TB3<1C'/YMMNL<DT3;?U(SH:"D(X5M$?Z@9L2*,-C,1O$C4)5^Q(#O4I8@. >+M19TZ1A2Q!;9+T:7_R+N"$BHB1,70J+1)1CY,#YN7O=740R/ZGGZ'+Y_?Y_<\ >+M/_C'N`!4%1&)`I=5-9$/P`T@(M$;%[HC[?MWVB)BY@-8YAR\OF+:FO>PW%]M >+M.V9_;:"J+3?[[E/H$U*3HY2(A/,V>&*_.E]34=9K-FQ@.ET4R\<"5455`:RC >+M![9F>MJ"&:`1,%UNOKN]#`.FTW.ZJOI["TX"97+N6+BI]_G[S]1M;J2JQL#C >+M]7#J^)D[JAIQANQLR[W09F)*3T][#`X=#A$,;2=@^'EK)^AH;0I+=C:JFA`1 >+M:TF`B)@4>ZFJ70_`LWL/.'ED'Z'@1@XV[XUE.Q9@BXBY"%!0Q-4=N[?P;3)) >+MW_5;7#G;07+J!S,N`R-0"&`#XSEK_#/I.<I'!C_^NOG3ER1UM6OI[W_,R@H_ >+MN[8U`%A`=\Y7SGD"Q![&+ZY>MV85`Q_&>#?TE=(5/N+Q1[P>>/E49_@Y.X<" >+MEQ8!'$AI"=>ZNCKK*ZLKL5^\(7K[[D@Z0T$JQ0G`5M7Q)0T6@"Q@4[83X7]D >+M'IG^KG#V-9(O`````$E%3D2N0F""4$L#!!0````(`':893'A'`_U_@```+$! >+M```H`!4`;6]Z87!P<R]D;W=N;&]A9',O=6YK;F]W;D-O;G1E;G14>7!E+F-S >+M<U54"0`#X!2,051YR$%5>`0`Z`-D`'51.T[$,!"MR2E&HH'"R8(@A7."+9&X >+MP"2>.-8Z'LMV1`!Q=YS$K+:A<#-OWF^L#%K6\%W=>53*."WAZ=FO7?535;7: >+M03&P2^22Z'G=%GL<+CKPXI2$%-!%CR'#L`3[,$R!9Y)-HRWW:)MX,:XQ62`V >+M;PO%9-C5WNE'2.S!TIC`L0CD"5-WC2`V0,+K2\FA*`[!^(V\^8\YCHCFBR18 >+M#)I"5V8?9/24B3U;M1/OQYPF4P#FO&B<R*ZY7Y:%';8\8%$%^$>BE'__]'2> >+M4=.-G(237Z'-[W2\XVIQ1FN%<6H[RHWYT:K=W:_#</BUA1PI'Q,3ASI-9F\[ >+ME41_O_(+4$L#!`H``````"%R9#'N*WO$.C```#HP```A`!4`;6]Z87!P<R]D >+M;W=N;&]A9',O9&]W;FQO861S0D<N<&YG550)``,N@(I!5'G(055X!`#H`V0` >+MB5!.1PT*&@H````-24A$4@```,@```#("`0````'4685````!W1)344'U`04 >+M`PLMR^VI=@````EP2%ES```G$```)Q`!E&E1&0````1G04U!``"QCPO\804` >+M`"_)241!5'C:[7T)C"7'==BK[O['W#NS-R\M*9$4)5&6J-LB)2-&8D<)C#@V >+M$AB.(N>08QA!"$<6(@<&8BBTJ5@R8E)42)J!<]EQD$2Y(".($2?18=*"1%(4 >+M18J2>$F[RR67._?\LX_*J[NJ[_[_S\[NTF_PY_?OH[KZO7YGO7I%8%_@[Q,Z >+MY\U#EP00>!2`4)H0`$H2B$@,$>`W4#^F<1#?G>Q/'RY/(/O1Z"]VR"I9`)_P >+MYO,_%$B"I,$/C;U1,AH/[XD/&AF7`LR<(!\A"_-PDG@V\HF^579;?9!`$1G` >+MF`SC<!C>2P\:,0<%,R?(+W;I"=*VT5[GH[J!WPF$9$P'9._NZ*"1<Q`P<X+\ >+MPC5DWJ#:AX"C6[WP"=_*)XA%%/:A,((=.@Q'O_6:XI89$^3G`^]Z(`*E+3@& >+M\T@0SQ)3%&+\"U&CQXCO(1(H31RP?^/I9`@#?_N3KQG%/VN"K)#CHM$YN!X6 >+M^+M/.$E(:EN0*80^$J:'I!G!&&+((0K[$9,]V!F//OT:($LPV^8HE184=)`D >+M:;!5.@./G\7VQDB.$1)G&S9`&%M4ML//]V$%%MK#7UV_:W30"-MOF#&'?'2! >+M7"V:[<"UL);B#R_S#7S;/H/"+IS'SPZ2**-K*`S(!AW>=05SBC_;YMY*O4-$ >+M2!G80TT1(&$$XHE%A+08LPGF(<\<0>VSA@)O`+:A181B6H#.':,O7[$DF;F5 >+M]7>/HE-H-3Z/TF85_\])$G@%W)+>YW&1M0,OPB:2UK7$T-_?AJV[PH-&WG[` >+MC#D$X.TQ8M\WNB)"=&XB_@9XJ[D<KC"B"W((-`<GX"ARF>`5+;H(G2/=#]`O >+MC0\:?;.'?0B=_.VV=Q(ZKD\N/DMP%8JCCM8=AAO`^<YR$(47X"RL2S6O>66; >+M;O[Z%4:4F7,(P./Q;0.NU4F:)&/DE5U@A$EK$$A]>QD>.HR\,H=7AS9).C#_ >+MP?&7KBB/?E^"BPQ^+@@689&TH)7URY?1`CN.^IG]<CG$Y9JL7@GA:?@!FL=6 >+M>PG9ZF_\UA6CY/>!0P1\(WEL>$LOZ*/X3Y`LQ";)&+V-$?))*\,A+M=X*2XA >+M:+4=1PML#UU)4.T1Z+:"]X^^<H609-\XQ(:/>LS8(EUT\*QWNPVW<#X!AT/2 >+M^L3V4<0^#TWJ[\,W;:(`C.BY*T.;[!N'V/`8?6S\]AX9HO6E>85YYQLH@HYD >+M.`1*N8;]]U&C'$'!M0O:$`Z\SNWC+U\!VN2B<(B!G^\B)KN>-5IR%-Z$.J49 >+MARB?_FOP+(2@VXKAW%W]@T;HM'!1.,3`H]&M?3^D<QRW'`;HHQR30?JZ'*(( >+M=`(6X;0.[>..+OKPESF77&2",&7_Z.BV/;QO6W'G$/V+%>TT0@KY"NP]ZHP` >+MV>TJO%I;7;ZW>$?_RY?U4/!%)PB#QY(W]-%S[!`BQ,T(N>2$97,1BQ3YW&'V >+M+"%_G<$6)$D\TOG`\$N7,4D.A"``3]%'^[>-T/:2HFL(%V"-!^SMD792(+2T >+M*N=_"W"==#@YM&#^CM[E&WP\(((P>"Q\1PQ=?*>!H98-4UU;R@V0(HD(J8C! >+ML*-H"&OU[I/@@\,O7:8D.4""H(H?O6U(YD4?*&J""'6"7\@7V6_S:QY%WBMH >+M($CH0.O=>X\<Y*--#`=*$(#'H[='QF'<1<2N`J2XPA5@`(8[/.OX`E[YO!FC >+M;_GA5R[+T<4#)@@*KO$[QW118#K!MYPE1C!(.XOI?9`AVC)JH7,@W75"NN\? >+M?^4R'#$Y<(*@X`K?@1Z$\.`IBIUCJ1@7I'ZYB1``ADN645:]J.TMK_/NG<M/ >+M;%T"!`%XT]#W25=L][!+QYTWGV00GTX;4N"A#NKQ41-^+/"#]PT>OLRRNKSI >+MFY@>_ET"ZY3+&HI_S\*>\;[Y'IK:=K_=O[?!87/&4K!XT,_6%"X)#F'AQ]O& >+M=)[PUR-&K^0$[UB^<L_G#I!DZZ#(>TZF$N%)W??L/')9\<@EP2$,Z`#V%.9> >+MQC^Y5_,'U1_%'4D.?[!]:_!F0ZZ@M7+03]8,+A$.00,8;AUZR\#CP#'LP`TZ >+MSIOE"%>U`]@LP,ARF"=62&B_?_@GEU'`\9+A$(!_$]/-A`KT;J,!#!9WN'SB >+M<H3:E^A?;7@KZ`3O``X=]),U@4N&0QC\4.AU$)L<AG!2CKIG#5Z39.J"$6M= >+M".&\/)=T?GCX\&7CD5Q2!/D&?1N0)17;.L('K@2XZ,]Z)/99@C/FT$D<J7/] >+M]_8O%]4^XV1K`_=X+9_ZQ(M]+Z">Q$9,0HCB^,Y"F?ZO=O_6&G()L$2(I^$J >+MF;^HQ(_B#"6D//U;!5-`'U^!6^'+JMDY,F_"P9<VS)P@][5(BW1HF[007S[U >+M/!\TLO"3T,B+/SM,]NX<%#2P38\2PE!\`7&X+*\3UR=&,^C?#'3K#L=<AT39 >+M%B3SO)7+A2!3CZG?YWL>"="#Z"0MZ'(R.$BSOYVM,=U*=G\I,Y3TX:!UD@V, >+ML(Z]&=T\S_)&/.N3'W1T'^@Y^%.TV.0DT].?+GH%+BF8F"`/M*!%D0"TA7K( >+M)S[5+163(;6'TAYLW9E)2_BY-7)$(/$HW`'S>@0='*)D0_!9K;('7X0-M6^[ >+M<_ZNRT"/-!)9#P80D#9TDSG!"0H!M`3YN=RA+EV$A=^^0'=</DEV_,."O!MH >+M*9VR#%Y^%"]3079JZ1`SW=KT:AYN1!Z1L##LPE0\\H^]`+6AUTH\-J:6)!!Y >+MT3B\>\9$KLDAGR7=I60>3=+`)F$5+W00XXN(E@7^*X0M_-N&V#F;)K`7OO)Q >+MY[$^<@V9%^A]`[P7W+DE[E@BZ#WJ8=P'&L/_D+86$FW],^N3H.C7?-HA;?P$ >+M-@,T;XA!#3$=D\Y/#BTJ0!SP?\4J7%"&*.8#9T!U$?P=5\2'TEE<D(5P8 >+MP6GX#KQLO:R4*?(+-I=\9!F.BP2(-OP43Q$"1VRE1PT!\LU@!D_!$VI_>/K% >+M_UCC?;Z;C%`$QX$?4.85==2(IM5?:XM2,J2O[H[NF1&G5(BL^SO>8>A2?5;^ >+M7=N(_".<#(P@7>7;Y4('W_K7P4OP,*R;AUHF";QJSDE&)"2\$98%?!24*+)% >+ME1MB(%"$CR/8GZ$0:JWK2H76KY`YM`ZA,VX1Y`0/+<2\5M.$P1=GCIY<VC*Q >+MFNF@A$,>:'EKL$2\[+M!\"$9XA>1"$>0&)/$N$?P)#P*)ATW6:>;'Y.)"3]# >+M6B?(DNC<F^#MTM)*CR"Z<:XB#@GA$3BKCFSWSC]HX?AN?^S3@/@>)P1ND3R4 >+ME^I!LV<CV/BU&216%'+([RS!*IJQJ2X0),`1.(GDJ.*$*N@@HBE\7<XBQ#?X >+M$(E1Q7#X`_HWA[`DE/4&$JWC7*G&TI5*KWK`$YP@'+J=@"6G_)-VP$11FSNM >+M3"M8P9@\Y)L]/O+K89ZNM`[G'':CA\*$FW130NX3W>>W408IGU?`$A+B)IFM >+M/BN(4<)_659WX#<[]TM[8O-G6_[U*GGA=D1"4>:)>8AL1%CU/43%'HEC=&'0 >+M]4%;B'4X8(X;)?-P#`EQ'(6R>8,CKI^>M\ZF+_W&WCX0Y/-D_1@35:93RRCW >+MF=\[^SA+!%^!;X'B=#J&5_ZA?.T^?(II$8;X]Z/.*4H!RA(E#[Z$;[,X/B=3 >+M*/*1;^]9Y7.VUO#9&4&ZN4$_-H7[_R)1M#TR(.?NFC+4G\'Q[P;KQ\BBZ=XB >+MW(#"9;]"7@'\,'X>4W=KTY.?.?/+7+&0`9.(;.]Y?!D$RFV$&?_#'+.%C,W? >+M5Z-5)[9'FB!I(K216`OX.2P)X8K)?&"9+G\19<<755MSR2&X,"U&4A`=%M:J >+MZ.@)>!=V<#]#PFUX)[Z_Y]0C!G#\,^=_F;D.0[HBD+JA74,[]9IFB.)RB$V< >+M)42O<!98I17?.;J`S\?$T2$IFIJ^>FWDX.?@C+G5E`1QN/RS7GO5.ZP>QX-; >+MX:U3*>ZZL`7_VRA>H!%])>H_V?5.DD!T\:>MD9&\L?7\Y"#9&C#C^4_YZ`@[ >+MLL)+$LRA2%KCA)A%%L0+\)]U[#(Y\ZFIYJ@X+T1[GAQ2#Q'`6^"']B\Z#_9; >+MNH**^[_!2.U%PZC5NWKO7"QNSR3U:JWVB/-M[A&@:'E%6E(G4<@LHD[HSO!) >+M3N*?(@B9AUD1Y'=\<HSQL^".=\(;IQ95]9W7X_#CJ'HWE;/EP_*1Y9Y^R&T] >+M"DNM@(E]']MD==TYL;VF]T5(W+P(0AZP6D5[*.Q8B<@Y[$/16'`';H3OJA]3 >+MBA1-D+L(764B0G@;-\+-$Y!CFNC!M?"C\`7+LO>L^^_)7E6UG_8D3+^608VJ >+M[&)K503IH2)X!777!4F0&`DRC^1X-]S"\9V]@R$5)7=Z]TSA(&J"'&-%2>2M >+M3B%_Y`NK_8M?>W`5ZHJOPO?T/;IZR&D'$>))[J#ZVWR@DF#SJ(5$5&`;-=;Q >+MU-$A1WP?2?`JZIH+]F12_6&$?`D]CY_,%79+>HN0SE1C3!KO9`5\*E'S5NNF >+M%W,(80U^!-^*;TD^:<O[L_'U2#ND*MQOZPD[\`[.>3;*1&&.OA5TVD("G,// >+M)N[MX<>:0&JU;3X)?`>^`>_)$9JSFSLK"?(@B^CR+0]N0]OCH$9RYM`O>2>Z >+M6J<122K.1?$-'O)Y(V;T7!'%F+YF'$1=!<[V&K[Y@K^>1-1?P+?]56X*EV5# >+MIHG*X`FX"=M*PT#?:5K,<8)\GFP>4F+O$`JL@P7FF;P%6/CT:8F4$(DS;YV1 >+MY8GRJ!8[;T&?]2T4/.6>O0`BR=]!)"4PD+_[)0%CT9]P*IIP@FQV$OV\-UO) >+M-P<%+,0QAZ;DJK2[1OQ=I@X_I'.SRK4(13+[J)QISEMO7\6.MO`OP/.[V(<. >+M%]YLDH32;3'$F;;-AWTETQ,D8:%G_K,#-QP,#7)A3<I[5IN\'.%%]I4!%M2- >+MG+,54#E6/X?^R1SWU=F?\N>9Y`C1YE+W7\*_['V&,Q/R0H>LJ)&`&VK%</8+ >+MT@^U*)$EBL7GJ=KL2'I1RRQ298^U>GPP,."\N(2?KL[VLO^+%-6S:)NI_MT( >+M*ZF6&236[^E(@P1YR*<=T50+3<^#)8$+IJYIE`H<-GUH)K)NX@5K6-'&)?PL >+MX!9+$6AI].L@ND4.]KTNAVD8N9?@79#OZ:AOFDQ7)AT)$L^S+`IAB1R=,<*G >+M,YL70.F&D>-_N.W;>8UE_5B%#Z;'PT&\VS9)TAQR`0UCQ9U+\!,IIU*U-]:_ >+MIC6`D2!D3C6\,H,(SRP-YCD=5@\MQ+MA][IW3)O!^9\T.09(CD@+R`_`ZPON >+M-I[9DP?W^]`QXP;5LQ/VTT-)T*C<08]X"\7$:52D9[0J#2V_P_W4?2?=\8]J >+MDK#O/KP(*FT^0(?P/77P,N6X>D!\$S0Z5GZK?8,1.FFGX65TUG8Y07;Y4RE$ >+M4^G0E4.57K$)8J?>&3*X<Q>!*_.!-K3?`+>7X,52ZE.B*R`!]<5-F1UR<3ST >+M$2*=(?X"$N)%'LBS"6`;L6K+S_3,\$?6PBKVU\UW6I&[`HN9NF>14U5$ZR3\ >+M5<1/,78&F;M-"LKD!H#]GXRWB1+Y#(\>[:$AV=,^KPD:&I398QOMPF!.'E^0 >+M7#+8V\7$,)]UGC<FSEB%'\^I9)\/4W,(<PE%&_LQ\XNUS"J)?AN>@`U9)3'[ >+M-M/4M[B2<,.4^<JO0Y0D.1%>-Y.WS#W,<H<A15IL,0&T!3_05ET7_@HJ\Z(6 >+MU:^9Z1"C068QAI9%QCI\`?X$2>&&.4AFVX@?C^<#+\K,KPZTI-><-GB;>2-Y >+M*;#ICT)L3YH3['<`[T?]D?]L!F:7WANHH#NMR93-D+`%GT9U+;:+2,)\9L$+ >+MC`A+O'R_6U8CR41X\RVLJK[E*_:TX!K#<XA@I3UN1V.W/'V.06R.3BVR?/50 >+M^6./D[R%YO<?(>N[^L!`E^<[+>)]!4%\,*%UMQ43>*_J3[X)7,8=Z=\AOD!# >+M?>P4DJ-5&P?\O%F(+-80*X)8?>-FY#D+C^JK"(^BMG@4=8%'D.PRR;8`RJ;W >+MF.@5I!2_:V&517N+O^U/@B_0!=WF*?CI`KF1OL\,'4.E0X*",?1I.&17IREX >+M<"W,<TX(+"(H89'GCE9IB/H^NMVS*G_]`OXE4IEWX$.\;DH=+(0S<Q@"\-1; >+M5JTDF]_47+$DZX[:^PA0ZRP5)K$%5+JU/`U"<M%=WJ-\7^0"\D<LVUN$G^09 >+MDV4V6]X1.F4!SISY4'5N7.>AV4,MH0/((('OPS6%26GV;-JRUR(OFN4>K^Y3 >+M'D'$_R%JC['NP^UP2VT\T$Q[DX.37-)<!)3#"7@S3[)DB-J%9Y`D1WBR@N(% >+M-45-/0[)Z`U[FH`;Z<WSU,NCO?96ECP#:5L)??I.^'.%[67WAHUTR">\)&A[ >+MT(H]-@I%(QKVPWNU*1!0J@S*>K&@)N##C\'#2`HEAL[@]NLLXT%]EREC(\!< >+M[K#)6`>R8LTU=W_`%U82K5T//]KXR=597J&5]8_\5B=IDPYED^5\\#TQ5Y%Z >+MT<+P5[;NEF$+-G[?2`8WZ1RK[/[WX/?AG'Z7MZ#/%S$2U;"2##+S%+QM8;D^ >+M>E%R=77?W/\)"JMUW=XQ^!E9L*#\V0PDUM[8(L@G_);/8R%\AA:31FJJD=42 >+MH6R"^=(G-F#S4S$76:9;TQ,@"V^!C\)#/+M=('/,ZU"?Y%Z/RQGV/$*`,KYQ >+MA96]O[J'>2'&"WS,7)![&?ZRD^91A]!1*O'A5UND[76IG,/O^6YJ!<UI%^_- >+MTI?1XO8_M*)RS%]7&EZL;\ⅅ0&[T.Z_T"F&+#'[L$XF:NR';?;SHY: >+M`-CBEA;^9<\S9V_#]_3+V(*_CJ]04RP,X6D4>(2O_-N=^Y$CWAI9IO/0(2WB >+MY\_6RA*%31Z]/?K*R/]+2Z0E#IURPHN3$B`/VCRY[`P/+HJWF)4HB]$&2[MZ >+MZ5\NJ8KOVER/J.T>O,!5,FLA0-OJ]@;AF`A?K!?AN_`DGUS8$KZ<G]>9-#E\ >+M%(S7PPWX?RCC8+Q/_AW]0(5?$IZU-!G"JZ_Q\4'?!K\'C^MLP0A>QK?J*GP) >+M7,_<*/`\7R2M0VP/)I\X-/>70DP$S^H8-"`G_UBIV<U&+MF@08\GH6Y84XF$ >+M=BB+!W1XG&X.CO,5'=9T:NP(O@K_2W%HE\ZC4E>7A3,E0186X<-HV_\!/I!2 >+MR'OX=EZ%*MZHNNQHN6ONUHGPTA)N<E$5HS+?`T7":^`O%"9!#5#I;_!QG!Y/ >+MS4YJ/S6K2W\2B;#&"9*=H=6!]R*//2<?#PE"J7HSX\*;3!,^L6$>/@!O@/\. >+M7]<YA"$ZC)L\K.)9+9B9Z"Y)\K,5;?.YJ`\T=^LT+R0H[G`-_*SEN++4T2%/ >+MP&:IV*_*ERA/]F=->!8P74!]?!BN1C)43S5JPWM0\$GL=P)C7(69FTQ+@+QS >+M3\+?P'?F_^"C*N3NP//<%';/M.N7T-01!?F!F#K]9+\V9#XB`Q]^`OL@!@R8 >+M.-KB\T)ZJ%V*")$&5DGG*)]+M<"'$>8;)`2QJ+><3]T*B`[A1P4WG+7_O@@_ >+M!>^"?\O?"H'4`8JN743(?*HU>_*S4L1V)"MM!A2A(/M&,\2_*$?R61[ON[`/ >+M7T1";#L^=[EEY,N!M!4D0H=/&O?18)YD`I659P)!DBAA80VRS)@$V7.O18?Q >+MC^&/P(P#7L#W\;K<1&\W]$Z=_<WO+;:8-^2A02%JR[21%"\77I,F!*L-P:9. >+M'Y($:7'3>=00&S:,]?Q*&@>>'I4?YS:X7^0Y#'\-;H8OH+A2FH!EF!]&)=]. >+MM9D>2W?OE\Y=+^N9RM5-\%E/.>2-4V>ZWZ*:PP*?M7L27QJ_\`Z3Y2V>-T-B >+M44`3U6"UG)R&`'GGOA7?L_\$W]0JGI4$&N,C+UGGI'-(\I*%JB#A?RIM5/@! >+M::3G]7:)<P(K-#7/9^X6S;I4N/-*1BS+2/6LZ<-(!Q>!Y\_.&N7E0-`J_P5X >+M##Z/`DMU>AN5_-6(A#:D3=XB'P3T=]KQ4\7(W=X5>0MF2L(A3H@C*9U6]N0F >+M0SC_7H8H6<)LPG=4'Q/:LX*+3:/YLPE%!O!N1,`?PK>L=L^BBK^.)SOD"]%B >+MY>T&5_)ZF4<.'XW3XWSUT'E.D$GR;YC;,$:QYM:)R-X[V_=O&.T=>F-+AXP* >+M.S\K*&KO#7`G_$_X?[I@)5.2SR"*CFHAD!UG3_L@YAQ(_<][8P-$>H<7U&"> >+M\Z3%0Q3I^W`.S=8$6URMG%^3?IW6X4G3L]YOABBR$JJFZUPL`N3M__-(EM]' >+MWE"(9JF<(Q0<[1R.H))0[H3H-#GR[MM&$BSQNB9=),6)J0@12T'%G,B^UD_5 >+MV'"?YHPLB<Z/[[`!*N!5BX%.E.PU"]]>0``WPL?1%/YC[3)2[J!="\MR%5QP >+M:OC:CU?L+Q!>1&.!!S!6^`0=!6N-,C5%:XFTTN*"XW5Q8_/Y(R9!HO>9,<,# >+M9XSIG;]9<-<"?`@1]X=R=$+`#I]REB5$]LXN=QSB%:\.<2]X@8?R^E81DH7: >+MF<R*!,)(*']VKX'E)^`"SUL3%U&>HH.>NA)5H]+&9C^:F`<$3>%KX3\@&1:X >+M[1_DCI#DQ9)\60=R!8EP+*?86L\B1Q?YH]RK5PMAQ+6>.]&D:I;>&B-_J(FH >+M=!CR#J(.45H]R7W0::%>.PG:5:SHQ0ZB;037\&[6&Y%I\8JHA_CLKWGDIB#W >+MKB-K=CE!SFGEML6NBE(F[.R?UKP*&[)`((?^O9PV`;-ZQ5LX:;+79*9RA$;B >+M`!&U@W\;2(X8\BVC+%>T."<L\,I7*_B7SE7)BI90+S/&DJ>/:4M(*&>E&:;+ >+M`15F1;6G;I_Q71FP85-%0UD`E`47Y;/6S_":QEMAR-G@TW6&_"^!/,LH>P>F >+MGI>YF3K'"=*Q'$9W>"K=$ALR-C;0JIX`K4H`3$((]QZ*F'4(8L-CYM[]>R7Z >+M@X1ZNOE0LO+LW<,8!1*KIF-6=2Z+I*I`Q#ROIN"C4E_4<=2.#&'89+#1D$9O >+M@N2(N5IF?\SM"Z%.G<I)I`4I"9V`?"9SQO-\7@!_.6*RK?8&OC7G)ZI50:ZY >+M1;:)-V=+!R>9(WG<X?%AG:-(@D6N%R)MJ3-@E8'F91I1MD?9\",3B>R:$,DQ >+MAYY'T=I'T^C,NH:03;`8/70-X[%>MS>(]/(W=!\"\!21^3ROIU@\RD9E1GP7 >+ME>TJKY3MOA8=N)KSEWF4'<XG7L$=1=V',?X->14L!2UT/>>F0GS1LQL;J[Z5 >+M]9*.8&$[._=JIF56EC8MZZCU)@\4PHMXVR$4D:/+.6$5>:%;6!N709LOZ[UC >+M\=.(O^\NX2+<.^9'(BG50\NV\M&<KCM/L"D.;(*476'[*<^K,MZHT'VK_'(@ >+M0I5JT']VW$%14#TN;VK+T!5$RS+^9X2H7Q&497<MHAMEXFT1:B,VR2?A*X,R >+M?DAKCPBUAXD(7U<PZ;OI<Y5=14M;L/DG@H=E?_&J[4];]E1@7U[-(?6[>A:> >+ME@I<73,/K^<EBN<F?%/;B-)M7@8FYN(HXLJY:,@TT8D)K`='\=HZ>8W-@5J? >+MHK84?QAX7I:)QR,Q[=GG!N.DJ]N8%8>,X5EXQCK'0^WP)B3'-)6&Q+V6D1#? >+MM_0)@0$?ALV&'_N6+768%RN?'.U5R1-1CDA*@RW.AG+='T[(0>($$9WY(54< >+M4N^1*#RE(S3"77H[W#SQ+'@52U(C?LMP/3RG5;70)TE*Q5/<%VH$M%%<-5M" >+MH%Z,(&\[Z^';<2ZU_0J?I"%_[;DU3(-/T-].U(7UT[^*.SF";\,+UN]KX%T\ >+MP:89,I+"6)*')+D5SJ&5$NGSQ[C=M9`^TBD'A"\@TRV\3]-^%>W+\Z;2_3;[ >+MGT#=*L^-=E/+^05F4!2@^?JDV??AVQ9W$'PW[ZBMNL5P:W$LR>SQT1#NX%MF >+M;"BF,1A11)*J/=1VK3-"/\D+5QU:C_7S%D4<;/X-D2":=#L/I9IG(DLGD^8% >+M3YI$?UFFK.$.'VZKJ!UOQY+B1OQ)N)7V`JI&XSN-<;O-M8I!`YNS-0N]2$O/ >+M-STGA?QAX!MRFA^>&<:9]488A^@E",NR>^L\U$LZ>LF">+?"VTH\?Q',$!IB >+M,@A0FZP@48SRCE,^S^%,R>3FSU5WZ*DL(N=9O#.4V0/\US`:I=MA!<RT#HFG >+MBGAN(.V5;1W`^^"6@ORE1+INTX)8@&@)3LN<E30ZEI!@?NJ*JA:;[5='E:8K >+M6D3,3GSX/O[IT?CMSV4N".S[3;/&]1!]<D4.#XE11(YQ8<IJ/4A?VT6T=WG= >+M-W%4<?L<FKI^P37%K=4_:A]3+Y>7>X:;K?4T'Z+F,*8Y)8"9R-(O:YT`?%$G >+MG]69Y&P-VW?GD(/R.&MSSJ@B7X"*>XUG!RL'C>7KOI[7-&W2SJ0<5&9A"2_, >+MP!X\JLZD="MO[4.'0_+"TE6=C'G88@`OZK-7X1TYJISQ1C,.;,)'\VC<GM?K >+MW'AHA2W6;F<:,JAMFK-/`'&<Q2?-0H$AS2V1G1)9]3O'""'6UF![7]:#KFQ5 >+MM;G,50EWWR9'2O7Y'6[@GD6!P&RKHS,64^77J&</<GC2MS3+#CQN6NO?,\IK >+MBRMU$X=),D'MO*Z(8I6A1O%8SO%F<&..&YA'CEDX9NDSV+CZ")]@(3=N55<C >+MU+^GP5NQ<+1%]UF]UA9;@CF_36[VJF82N?IX60=86&+=6J&3P;8NM<V6BTS7 >+M1XQRLX:KT3O)\8XS7MZ\]6G$&X6LT')G@'Y58X(.[BE(@^-*W<SGJU*#+*B^ >+MEU'^V_K,&S,!Q*1@FL,DCSP]PF;=JCMLD0TMVG;>#L]RES]WBEID(HNJ1J+2 >+M05S&&YLY^8UF`8<EN#ESS6"?D#@-(F=C[)IMY:FG%ZKUK0A6`H^8%5%&2>'" >+M8:S4N)Y#512I%#!$!RS*.:;'Y]&^2A>JGV02T/1C,LWO67X&G;`56W]8_`$P >+MN+?0X)0<(B`N<=I8&EN>G32RYGG?F#)WQRE=TQP5]<Z8ENC3\JB)9=GFK^<0 >+MY'MRI48FCJ*MXA:1(,.DNHQ=3R]IEX:A%F*!7"+57%_N=TS'"9.((UKKO.;] >+M4CK5+^`/MO>;UHJY]Y4@!@FRH%WUJ(!#=BQRI(]OZ[?B]2D+I]E\D]D*HHOI >+MHZ>/*_ZP1T#.\74.^>^$EO`')\ARLI7;L-HS1'(4.76Q'C=G_.'&=^*"%NLC >+MHLE;/(G>F-Y'M_>X9B]Q2B$\;K;'M'3>!U[U=ZBXB.J`N/TWY&4ABSJ\K;MQ >+M)!7JCF1;Z2NR57KR]F<+JID9M&HT,>_<XNO+[E[4A^*][A61W.]9^^Q!XY?A >+M&=/>[KVEB9,BZR0AGKI!FNZ;)8F7"></<=[Q5,`DRK243U*H<6Q_M$W9T<E: >+M-&:O.Y?E![P\FK@TWH52D-G[RL&)4R39*IT0/["\C#<Z09>DD(QU%.M^FL73 >+M&@-%^]SPHKU`:PP/Z\$!NO.YBL1BQ2&^N,`53B.=QI\/)M5FS5H^F$'6W*UZ >+MW_='WN_'L?3>;/*4Y[R<9^7`!#N5[D$%6/-;U!P)T_AF::86M18QO05<E*>M >+MM:8J]V"\^_JOBFN^J%_*[#4$89AX1.M9.JR>R*D)0D$EWRBHNGHD_0P*BZDT >+MS:B$D/M%ALD#ALVNS#<5W&-VM?A7Y6($''J?K1P#%`2)TQZG4MAEG5W7QT_J >+MDMP"HDH!-3VRZB-L]NWE<[^RP0(GPON4'O&'>&<;*B%52-F09%RQ>F5HJ?OK >+MG"`!K1'?G;W:GK6E5?\>QM\26+!1FL`3YL?NOZX1]A9*/395Y10,*R9>]C3! >+M6)J!W=UQ+ELW1],DUT[>XF3Z0_TVT=[`"9D\C2)+;D>TPN`5D*K];@9Q>Q4/ >+MIXY3SA_VN:'57GV$3'-T&L).RQ_V$2:R["';4);-8$!&HQ'4`,TA9JB%P;BB >+M(%>DL^_:<D$@!6%./&QR)%XL_IB&+&XF@JW03UO3GNG6@[42;@+W-@J95?RQ >+MIZ]:395Y3+N63=%V.?%'6KE[J>&'[YHIKM%>X9"4"]+*4DT*(D90?G7,^4,I >+M=#?A9EB+/RY]_5%?#YJB4,0Q;H;P-7/.UN_6%`ER!I4RU(1"KLJ@&EFA]1N< >+MCD93\L?LS=QR9%;MJ^8K:@51W2&I9\QK'=*:_"$)0IPB9D)@E3WHGH[-7)VJ >+MJ5.//Z;1'Y.[?_5:;#+R(7[%DD,"/AZDCO?AZ^:<OE]+H3,0!-%W$8L`]RO> >+M4Y4R0>"4<\1>)6#VXQ/[RQ]5K=/*:WW'`SDG<[!X!&3WOKKOH&Q#I\HQ'=++ >+MF>!O0U]/6SB$'&)#F$D0NI3XHXH`M,;1O/LH,\8=?O@Z%UB<=T;WU198DB") >+M+C<^=F:OYC^6\6^.I%;:&%G;DR#M8H1)JM_TO//+>"R17OJ<M;_/)[T*448+ >+M<[#R0(HL2@D1X<5Q14AQ;`FTFQR7,#X0_I@F>EO67KDNM-L0$7*6,ZFCNFA? >+M:;-GE/2@`0@KBZII5&P.4GE`<JC'.KIP,G5D4L1-@MBFPHM.=+R8#.G]75"K >+ML#.CY[NFO<&Y1DG_DB#*[(UXEE49<DR6R4V.$HMKF+S3B:U9DJ`,M57;Z>M# >+M'J]H:5X!>$%.C&#O.6S]U]H*G8$16?SGJ"*U+=)+N7<LA4X!9%V%R0@QV1A) >+M^9VJ'+MZA*A#(K8UQ_UT90P]9?RXT7WU<@4U<(+$<KE/6C%DZV:9N',PAC7X >+MH^K8=$JZF`3U=$43C>+N#7@Q6U7&;`.^+8_A>[X)#8$3Q.=U%YG/62[N$FW* >+M`5SEY+E3/7I8'Y5UCN6?06L=+4;B-+95]K6+^&1LXSA\T[@-8]*X]JXT>STI >+M=@:E)P\T'_APLS,N-J@4$=7[B\^H1X#RZR;GA"I]0V%>DH#]W^`Y6!+V[FL\ >+MCU;K$/8M'+Z\18$%&`OL&"Q8QY,:J_-,(XZ:>='Y*"SO5Q,W,?VK*[%".$'. >+MR.6_N<!JY($(X`0)(:"$3SPS=1>SW:.ZY)9GS0,1P<AQP35E,)F+UD1=3Z*X >+MZWOI*J#8ED%$D4_Y-9.#M?>Y">:9<X*TN`EM(S4/(88_EE"EVV>$%5>6/6X] >+M4[F^BS?INUY7DZ3/:W']H<Y\5<\BI`E4YF#E@=`AW&03!!D5S*%*K.IP)YT8 >+M;U*J>>I+_/3^^KYRO>NK[UZ/!^UM@@:O*CU(\,7\NEDT9E@_Y&Z#$%FT3>.* >+MXJF1Q4&GG,R\LBS%>F@J.UY7,4]J_J:/DYIW%.?..?RQJ6?*(_3NGVBI>VWV >+MCJ5H*)JKWM?9),MPK;4_R12YK(.&II;19,*FF7M(,_^KVNRB_C`KI++25*^J >+MHW$R@4)GH$(G5"T75_06F0C9*:=B;I@AX;0ABTG(E8?4XBOKATC*V@QX833S >+MM&,K!ROI/3`1?TB"M.E`I\CE&P:A)@@KZN(J].+1DZ9BI!F*ZPNNYJYC5>LL >+MOUV4)U!S:F)XS$II(#5R%/-!B"P8T/).FC&00ZDLDW[-=[WX<<O04L_=K&<& >+MU-4E=?K<XBMYVI.<UJU:872P57O(-@V<(!^G'Z.JL;Q9ABH+A1UYO5/!<`A) >+MK7>Q&AUUD5I\=A/^JB<4BZZ<X\4$A608R4&])_0RW#1)UO_]Q.7`5%Z67CPO >+M3_2-]%@@08'E'LF_<WU?N;FRKB99DTA4G3O;S^#Q193,4K`]7H;G&?W*LA'" >+M!QI&>&V0!/'T.CMYE0_-<M6GG)#)2`]*-9/=]9!G[Y_,YZYC8-1W.06ZYM4J >+M41Q"],XB>$J/?^`KVTLV8`K07J"Z1=8;H=KE]!S^$&4GJQZAJ?_=5`"67]/$ >+M)ZDB.O,ZVLYDYX3/P'S!E`1@\:OU!^JLAE$(DB!$8S:[_%M/$VD53CC'>KFH >+MF-QVF<PIG-0GJ6NL4YZ1R.IG>^#R%5L;Z$FYU!_?$]/S]T^RV)T%J=S>;.EB >+M:GD@QYP:O&/KW.((5AUY/IDI,*F=UJ1]5BS00YO*SRPBPY[_)70%+7)`LC&: >+M*'YE@R2(GRC.2"OIL;8>`&YV)L/OE10EJ_\6S\)%J[JRVB9SXU,>3PKUK;D> >+MV2)^??@>/&HEG=.$;MW?>'PP"ZGY(5D=,M2NXI(S<<V.;37UOR<+A#21^I/I >+M&$:`EB2(7?LJ>_T(OJHKT,MS-I+2DAEU07%(K&LY@5LRVY0&>*.32CS(C7K5 >+M(\UDME5=/LA>3PK;)'R"C>`&+W->?G0K1!?P"7O!5*`QW9@%=S#0?HC:$3MU >+M%R/M@<Q9I3.8J.KGH&<:3[D.LINH;(%N@]CT<<4-OE5U09V3E+1_!O7&]TTI >+M,N#"ZOSTNL/T2W1=5[=FV1,F>&B*]QV#(U9'QSGK@C93NW7$2#,?H8HKA2@* >+M^">]P#U-_7;;&/)E6P=(C+/6S!CYW8<+TUI6-B@=HOM@6Q*QE8UXM;.D7F_J >+M-WIR\[6I?T*XE21$4GK)E2)"B&U6[O,5OLY;CP\_)*F[HES9BR\\.$U!\`QH >+M*\MTRMQVJ`46JQ1M]H=.ELFT*%9H:^(9E!\AFAN$6+*/)9DK[5[$:#>QQ;BW >+MX&7\F%K9V7LB.49PX5\TRMNM`QD.L:LY&+1?+<NIB-_CPC&0+)JJ;"-[[[1> >+M-I4^0R#M)'O<)H]G+0\">6$=+B`G[/*2.N43,ECB%-V$G?NGB%D5@8IE)>KV >+MAAR)#KK[<(,3X]HM]$"JU'7Z]_3<)7C!<(-[7;YH8A!S3A@@'ZS#J_A$4>Z] >+MLMQ!$Q@GO6C[H:D"),4@"1([2EW`4'=G&5:MCBH/)$L$4C@BW5P<51$"I+$: >+M2(*X/%9,"+84*Q-'6TB./5VO)1]2Q(U12/63833^E_M$#`:2("$UG5=,K->! >+M@:O0*32/UBLT"ZN1/IW_[6DR&-W@OD3Y]QQ(;F"$V(0QY+WYV3Y@JVS`?$SC >+M)*3#O?[O%<>'9D^0?Q;?:;K!.S:VUMNYSGJ`I"*MNNCAH-9Y15<*7@C`+7U4 >+MY0D-I#C:X2090QGQ;4@2&D*/CN+$B\+PH>G7GFD`)G0B<TC5*CM#/7:X"H<= >+MRVM<0)!)?9+\ZXQN"'A]'8/*8C*PE(L^]I`5M3W/C55('<^[AC\ZI1%$-*1Q >+M/*3]R1)X9@.:($1.$5$=-9Z&J<;+]@PSAF,]]Z^^L!+<X%L1I2)"F!9BM)`V >+M80-[W4->&-6^&Z5,''E]%$MQ%!XD(138'*(?CFI/G*T'<I4C'(9`:XD;6ON( >+MX896:FIQE@BVT]KGV?B,#.O.S/HR_<"<.9J0D$8)VB9Q;Y+LV_T%PR$)]<UC >+MJ]`,A4-:H0O]$D&YU&]FOC+E',@`GZVDLW=0^UA9CPOXV>;AC%%FR?$B+P<) >+M$=,A]&F$!!F?CO_+15'1S2&3R"N6LS-C(*?P%&/#)+FJ-/WPQ8@1IK&O35;W >+MSMDV!7D&_*^'"IJ9JW'F7OE:(A%)4^,D3L90N%['I08&)](3$3$<96$%>M"V >+M:G'J,C*PO<3B!G?=LFR[ZGL/!=(Z_M_%%V20,X>QB!Q)3,=(OS%Z5]%Z>'', >+MU5F!HT.$61OST+IXBM?QV:5V1*>EM4NU)B%RY,WH!@IY0LF0G&5(LO46MKBY >+M.@*7T$5^#LN%8K-.DPAU0W]G4+?RSJ4(M@Z16XFV4GPXGD'AG(QZECERAAL\ >+MO4IR%J4V9X1(@&WN/?=XZEFQIVU?S5PWRN;Q]1.:1/VP7HFP2QLR5I8=,CD$ >+M:QDCMPV+J%+3@6@AA@PW.&]O"HWB?\1'&5B`>QOMI&%EX$._+I1GIL5QE(RB >+MO7NO`!*X8`BBBY@-=9FA93[_.HT<EDHZT.*$N6XM'5$20?0\+"7Z-L)*$F'N >+M<:$`RYBOS'7KDT$<TR09__-+P&/8']`$24;B\3T+14=3Z%);;3DOP@0RC+A+ >+MGTMYYNN("R-&B-T4SQ5_,T-5>,_)B/8_<\EY#/L#AB`AY<$3.V+;A2+;BO*, >+M)65[Y8>\V0#P-MI)/5Y2=I@S-)0%WAKE<=4>*NAX%-WS&B&$`DV0UC@,:5LA >+M18FC(O6=%4I"6XRY7F!6T@8*I?1RX$7<D+#2'B&/)(5);VO\4#G5KFC0!(E" >+M,F`$L37`=JJ`7Y[9*K:&2(`=),.0BZ>R==G=UC@O#,@(]4+4"C_Y&B:$`LM# >+M^WA[>!TK>K*F$T9/Z&6&LZ,>+-K%0MKK7#"-2RTC>T^2$'3;T'4+D^&9BS3& >+M<#F!4[;ASJ/Q(2!+>HZ4#S?Q$@&NQR#TPBXG2)BVA7)^B2TVQD#1R6"\0,-/ >+M77'FZJS`"2>U-B"(EW9A27H2$3R-Z#^!9G#"*VFM(QEZ.6H^GSN8H4H0^7&< >+M#*/^;UZQANIL(578Y,X6O2KI+%FZ0]A3L=8M9<-#XK\88_#[Z+O%)/SU/R-$ >+M(\A4FOE8$!Z!Y4-\4F/9J+.])V'4"I,HB<@X[/W&:\Q0G2WDK-;]#WRR2E=6 >+M?;O*IONMMA,YQA!'-/'&3UZR8PR7$Q0LG_ZQ(#J\T)UO^X2D+*PDAICP,89X >+M\$\ODS&&RPD*U[/_-'DIF.]VYF">!(PJ-$$5C;Y>%"=(D#_S&/8+_C^^X^-Q >+M+Q!Z;`````!)14Y$KD)@@E!+`P0*```````A<F0Q%'=GH$X"``!.`@``+0`5 >+M`&UO>F%P<',O9&]W;FQO861S+V1O=VYL;V%D0VQE86YU<$1I<V%B;&5D+G!N >+M9U54"0`#+H"*051YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````0```` >+M$`@&````'_/_80````9B2T=$`/\`_P#_H+VGDP````EP2%ES```+$P``"Q,! >+M`)J<&`````=T24U%!]0(#102,UMJ?>P```';241!5'C:M9)/2--Q&,8_O_U+ >+MV]#^[`>Q11'4P=$PAFW.:A)TJ"#*`@4)I!A2V=O%BY!T"JIC?"&Z!%%T<!06 >+M%C,B,!(C9U'T9YNU40C+6&41.5SNMR[;(5O0HI[+>WH^+\_SOO`/=0K0JS69 >+MRN9S9TXDVO?LC%8+*0.&:VH72T?;+M4=/ABM!F`NS;>YW.S<YI:@Q!X^4/%D >+M2B]"NAH`F4QFDZE8&/4U>J7&41=/3+YZ^C=%=G;MV]%U>'_;1*D+KV:BTV35 >+M;E3HQ@.@+234+C(?.="^^]O$R[3XF@/*O=(E5IM%]?4>;P#Z`"\P#61_BE#6 >+M?*$8V["Q^4(H%%!-0;]HFJ;&1NY)X_IUMYZ]F-2!5,GL`;+F"C&\_I;`5%/0 >+M+X`:NC8H/>$.M6QIO9BM]G@\D?P*.$O+BZ:%;HO-M&KKMI!\R'Y4`Y>NR,G^ >+MHVIFYHL8UB7*N=PA@`]PE6*L^`50F#>ZTZ_?J+O18>D)=ZAW[[/B:5BK1N^/ >+MB%-WJM8M`0%L0"\PK56(H`,7KT?.1]:L=LOS1%HE4U-27V=70S?OR*/'X_US >+M.6-[_KLQ"'S2?G-.W6&WG#TFAVZ[W"X9CSU1D8&K>XTBE_-YXS,P!LS^T5\` >+MK<!I_I=^`,)_H;>BZ:-R`````$E%3D2N0F""4$L#!`H``````"%R9#'.\8E= >+MQ`0``,0$```B`!4`;6]Z87!P<R]D;W=N;&]A9',O9&]W;FQO861)8V]N+G!N >+M9U54"0`#+H"*051YR$%5>`0`Z`-D`(E03D<-"AH*````#4E(1%(````@```` >+M(`@&````<WIZ]`````9B2T=$`/\`_P#_H+VGDP````EP2%ES```+$P``"Q,! >+M`)J<&`````=T24U%!]0($1(B.`V\!@(```11241!5'C:Q9=/:!Q5',<_;V9V >+MW&3_V#1)8U+:@Q`*`7M2R,V+>&AZ\2AZU8L@"+EY%KP)'O4HXD6TT!JIIH+8 >+M@`H)3;I-2HPU04TA)FEV^W:[SLZ\GX>\V<[NSFXVIN*#8?Z\]WN_[_N^[^_W >+M?@/':QE`^K@R_4[H'<.Y`IX"N/[;-78J]WD4UOAI?8&:K@**1M#@\[>N8\>% >+M%LP3!>`!A%&`XV;(.GET0U,]T`#4'M23\ZHG#2`&@:-<0FD0283C.5W']=,< >+M_D7SG$/<(L))FW,28Z74B0%X?=*N+-@F8!'I!2`Y5GIIP>L#8".MPV!P<;O9 >+M[::$;WA<L<1A=PJX_^XW;_/<^1=P<0FC!H$)4$KQ]<H5'OY9:1K%D5#[:Y<? >+M/[X',`X<`'^G,=%+`P)$EH$+[[W\(=_=F^-16,-1+J[*I(IP<"B;='[!VD?= >+MMN$H$8:`!AX`4Q]=^HQO?[E&/7I$0QKIW*__$3N?LG:Z&_W]`!`@`"IV7Z<^ >+M>>4*\QM?$9H&&97IY7S7V@6]1-A/&':`^/+-.59^_QD=ZA,Y/TJ$!3M)U_;J >+MIY<P$6S]<#=VWJL5@8?]YH<"(+N[NQ)%D81A*&$82A`$HK66[>UM65Y>%D"F >+MWWA6`%E:6I*MK2W9W]\7K;54JU716DNE4I&YN;DX%Q3Z8:``5'9V=A@9&4%$ >+MFFJ/GX,@H%PNL[>WQ\6+%[EUZQ9#0T,4BT4RF4PS08D(QAA$A)LW;S(S,]/! >+MA$ISOKV]S?CX>--A$@"`,88@"-!:H[5F8&"`7"Z'[_LD,V4\-@:QL+#`Y<N7 >+M6T"TI[)WYN?G7YJ8F,#W_1;G[6>`Z[KXOL_@X""Y7(YL-HOG>;BNB^NZ>)Z' >+MYWED,AE\W\?W?28G)\EFL]RX<>,\\$5:*GY_>GJ:>KU.N5Q&S"&%1N)5&$QD >+MB$20R'Z/(HREVA@Y'&-,8N6'-L881L^<(9_/`[P&O'YD&%KB$?MDQ'X3`65U >+MU7(@R6%?\A2R-J)4*J,]`:RL+),O%%A97J%8+%*Z?9M30T.42B5.GQZF5+K# >+MR.@HI3LEQL;&6%U=Y9GQ<=96USA[]BQWU]8X=^Y<`MLQ`$AS_;0)ZS$C$B^Q >+MPT:ZS]<#@-/!OW12VG*ZJY:]:MXE91-3&%!)ITY[*2V2LH[VB$B^MSS'*U:) >+MO@X&'!(*\FP.V-=:4Z_7$2-$)K*JEE:UBR`MZD^HWK1%B;478Q@>'N;JU:O, >+MSLX"Y(&:ERBW\S&T@X.#?@I"'*5PG$X9I>4.QW$H%`K)OD$@\"PW#N`#WU>K >+MU1<W-S<[%)O,BLD^UW6;[X[C=/0W&HWF\\;&!HN+BP"_VBUWXD045SYS8V-C >+M.>!Y_KNV#GP05TFQ!ER[!</`T_8]LI5,7.$*8!)QH!+WEC^GQ+<H,8]*5%DU >+MH`S4DFG,!;+V4G9@U.7$;`]$U5;"/RZ>#^=(]HF=.P`B=421(EW^\=I7G]8G >+M_?X?_J_M'Y%DOQH><[:"`````$E%3D2N0F""4$L#!!0````(`%)SE3'1^KS\ >+M`00``)83```?`!4`;6]Z87!P<R]D;W=N;&]A9',O9&]W;FQO861S+F-S<U54 >+M"0`#['C(051YR$%5>`0`Z`-D`.U76V_;-A1^EG_%F8T"21;YDL49IJ`O258L >+M#\4>FFT/01]HZ5@B0I$"2<5.@OWW'5*2+<E.T%VZKFN!.);(<_L^G@L]2M1* >+M"L62MTRR%#4\#8*")0F7:;A0UJH\@N^+]?G@]\%@<@17M33\RG$%1Y/!J-'W >+M"T\#@#!7C^&"2V<B@E*+@V&<:95C-)G0%BL*,S%W7$X:3;-]&J]SL;$8WI/) >+MX>$YV<R93KF,8'92K*M_9_7#>>.Q-*C#I8I+$X%4.F?B?!`LE$Y0DQY)&R5X >+M`C>91KQZES'R0@)5L%XJU"SA3ON[&NZX#>U:2M0G'F!-3P13)Q@L6'R7:E7* >+M)(R54.3-&WW#421D!V"?I1E9ZC':',"ERG,F$[A@VA,<5^_NU7G?=?<;<>W` >+M="/KTT3>1K%`)G\I+DHZ5^FM-<1.GV&2I\0ENBW!C0V-?1`8\IP"_9-'>^E< >+ME\6XD*D[4A>-*BQ7TGR*:'ZN7+>CZ7(S7OCOD,=*'D,OU/9F)V[*')C3QWV[ >+M(_B&YX72EDF[Q\=MP@U;"$Q>#ZTN<?C>F_IG:+ZJ37<`;O+H'19,,ZMT*_A0 >+MX-)&+E_VE_JUQ=RX?&P\=4O!ZP49\C0C*Z=]\,'D:!#DY*61..M+M!.[74$? >+M!K]5%,9J7F`%'#06R"Q,879*_I9\C522`:'85T>=LMWB_!9:D`D(M1!NP/U) >+MB)E!6"'H4H(J+:@E:+4RL.(V`YLAX#T7<"?*)$4XX#*F)TQ@@4*M#AV;.[UV >+M7O64JB-95;1[UP@1_>DT`=T:RRR^'DZ'[X^AOQC.]JV>NL4=`_-]HF<^)?^V >+MNWT3I6I)F^4*9[76SY39R4=+E=1U?)2VJ1*7&!VX*#"VG0)M=_NZ/J62V$WV >+MW=3ZB;`(AZ<KV-^]P75/HDZ$%\U0R(56J49C<K35"&\Z4E//SQ3T,9`=@3F1 >+MP%R'<RFY&5:72EK:N%#K[5Q7!8NY?:`6_:H[([?"MTP2,[;7U[K:LVE?_^:A >+MP.MN/PUUG0'39B`++N^\@"6BP@1CI7W8U"0ET43;?CC4;"U$6;V6VKCW0G&* >+M4?L$VKD76,VDH;:(-:/>5Y2I>Q)CL>7WZ!W7IC4F+2D_G:KAW+*;4*Z[6A>4 >+M#5Y8,*K[2#!J\''&A6\G2Z(M-/R1\NB'^:OF0K+A:5[1U``/7L(=M&!WD^CY >+M^U'+O3N2KMKN8`BV%XR=4'?TJ85R)E0*'K>+O@YP-)U.NYY>#,-MTNBGW&@F >+MTX^MIAJ&A`:DS2I.#U22'((I"Z?O.O1;]3AYLUS#`]KQ>+Q[8Z4J*`1E:[3D >+MNCF8XP^0:8^%[>-?U_QW['U*+_\]WY]+1)]WG/_'Z+\<3%\ZTJ_XO[+R,1X' >+M3_M^)S2_\/X`4$L#!!0````(`$%R9#$=?;A%\0```.D!```?`!4`;6]Z87!P >+M<R]D;W=N;&]A9',O9&]W;FQO861S+GAM;%54"0`#:8"*051YR$%5>`0`Z`-D >+M`'6004_$(!"%[_T5!,^">VUH-_'FV63OM(PM*1T:P);UUSN:%MWH<IK)\+YY >+M;]0YSXZM$*+UV/"3>.+GMJI49]%8'"*SIN'&;^B\-J^3Q>=]P"M6'B$P-GQ, >+M::FEW+9-S/[#.J>%#X/,G?OSN<[O[JY@@NNL8X(@!YU@`EBH3",$$#8*C^XJ >+M2/X/L[O/_#)!N1@[DMT$>UPM;)Q!3H"&DO1C\#,0AA!Z6:+L/=(HR4,02R5H >+M]\,MI_UVIG9-N_M4Y+E>.Y_9FX-,I^:L=SK&'Q<7$K\@0N!MR:;ZT3H3`&7A >+MR`.T[Y&_%BFYQZ.F*DVDY)]02P,$%`````@`(7)D,5NGG`E^````AP```"<` >+M%0!M;WIA<'!S+V1O=VYL;V%D<R]B86-K9W)O=6YD+7-T<FEP92YP;F=55`D` >+M`RZ`BD%4><A!57@$`.@#9`#K#/!SY^62XF)@8.#U]'`)`M(*0%S!R`PD5V8F >+MZ0(IM@"?$-=W[][]__]?X_*J64`1S@*/R&(&!FYA$&9DF#5'`BC(7N+IZ\I^ >+MA4-(C$N6+[+Z+E!(Q-/%,:3B5O(/?A:>Q2R!1S04I!@80D7>"R;V;P>9S.#I >+MZN>RSBFA"0!02P,$"@``````(7)D,?ONZ14?`@``'P(``"4`%0!M;WIA<'!S >+M+V1O=VYL;V%D<R]D;W=N;&]A9$]P=&EO;G,N<&YG550)``,N@(I!5'G(055X >+M!`#H`V0`B5!.1PT*&@H````-24A$4@```!`````0"`8````?\_]A````!F)+ >+M1T0`_P#_`/^@O:>3````"7!(67,```L3```+$P$`FIP8````!W1)344'U`@- >+M%`L3^P3T/````:Q)1$%4>-JMD4](TW$8QC]&-`@#H6F7AI=0=FD;P6B'+AV2 >+M@E!&MPX>)2BPO'A0`A&$<`</%H($@K)#$0P]61</E8HTG>W72J?X!YQ..@5S >+M&3Y=?N^0N19&[_']?M[G?=[O`_^YK@`"KE5A(BX3J?2H^=D950$B@!*)Q*[+ >+M5"SE\SD3.5?^ELED3BRX#,CC\92@XL&!04W6#(5"`V[OA#NE%A<.[;%0*&AM >+MQ3'PCLL\!A0,!@<K6:X%M)Q*'FYM;FA];?5HY=N7H_&Q40'R^7QQO]\O5^2/ >+M==[=N&Y.4DN+:FMK+8G\2Z3[P+O;+;?LG`O`F;\-&:QP."Q`LQ\_Z.&##NM? >+MK#K<V3>LI)-5SU!<@!J;`P!RTFD]&^@WD89*3M0[.*JDDU5W;%Q/1R;5V!S0 >+M\9CW\WMZTOG(1+PV>!90;&2"FS>N,S'UGCKO)>9FIMGXNF3,-E#CK6]0^O,R >+MQ9^_&'[^(N^>\QU`22>KWJ&X^E].ZVY[EVVI+7/IL72BT:B`'G/P^LW;^7N[ >+MN1P[GQ:8'(OAWOFC3*`(U%P-!.VTTC_<!UX=2Z#I-%G_!C,4S`4AH</7```` >+M`$E%3D2N0F""4$L#!!0````(`"%R9#'U@(5/5P,``$(*```C`!4`;6]Z87!P >+M<R]D;W=N;&]A9',O9&]W;FQO861S+F-S<RYO;&155`D``RZ`BD%4><A!57@$ >+M`.@#9`#%5DUOTS`8/J>_PG1"@FEIT[$.2+7+-B%V0!P87*8=G/A=:LVQ+=O9 >+M.A#_G==.TB9I-X$8XM`V\?OUO%^/N\?4O12*LD]4T@(,^3&*-&6,RR+.E'.J >+M3,E;O5J,?HY&TWURWFB3;QSNR?YTM-?:AX,?(T+B4GV/,RZ]BY141KP:YTNC >+M2DBG4Q11K>W4WG(Y;2WMYFFR*L7:8WR'+L>O%^BSI*;@,B6S0[VJOXZ;AT4; >+ML;)@XAN55S8E4IF2BL4HRI1A8-`.M:T2G)'+I0$X_[*D&`45:K!!*S:4<6_] >+MIO:*V68TORV,JB1+ZR`?.`CV>SEM;&/K#-<PT;(8OR8&-%"W\+7#DDZZY;N0 >+M$LQA*&+3@I0D'DS4<98KH4P7#K:&D%V>9NAIT+6VR6>J+*EDY)2:T,2\?O>O >+MP^C#<J/'O5P`E5_U:87S(8-%VZ#DD8[P`GL"7B2X=5B1!P$Q+Q','X[(F0]= >+MZ;J8-1JE'5?2_@\TG^O0733]VDRR\!OS7,D#,H#:%?9PXP22.7[\KV_!"UYJ >+M91R5;D>,*\8MS02PD[$S%8RO@ZOG*?-YX[J7X'I6OH"FACIE.N!C`3<N]?.R >+MFS(N')36SUP;J3]PP2Y:`B^6Z.5HF'Q48H16>KPEG>ZCKZ=WI:&$-;=Y9F#4 >+M+F&+&A`C^8<,0!(R.\+@-WP%+-2JM;RRCCHX&2?CZP,R/(QGNTZ/_.&6@_DN >+MU>,P('\=;M<],7L7NM<>.Z779]V^S0Z'C7NV.A>>PT&ZSKQNL(.`W/76I,NK >+MS99():$_5-OS]!'S$#X7E`Z/+F%5+ZDVJC!@;0FNOE7;Y6Y7XY'=."`87$") >+M65!/%GY7UMQ^IJ1#P:E:;:Y:I6G.W0.RW219].Z4C?85E9B?&W!$WWPV-+]\ >+MT'#1IZ;8-"U,FB0F@LO;H.`P\9A!KDR`C7PC<<]0''BV*5,FJOJU,M:_:\41 >+MH@D3L'55.T.E18:!AO9"K'2I[E"-YH[?00C<N#;-%M5:@>B#N.N7X:#BHF<" >+M6QJ4!<U`I((B5^9++CP913=8M=CR[S@,[^<OV_\(G2K/O6F;>/14WE$G[?Y0 >+M/?Z7I1-^EB0O!_2WQ;'1YJ[>@HH='5P=C%.A"A+2]N`;?'M)TM=\&H47XB6* >+MH^%]_@)02P,$%`````@`(7)D,8.\)]NG````40,``!\`%0!M;WIA<'!S+V1O >+M=VYL;V%D<R]V:65W1F%D97(N<&YG550)``,N@(I!5'G(055X!`#H`V0`ZPSP >+M<^?EDN)B8&#@]?1P"0+2*2#,P08D"QY-#0%2+.F.OHX,#.M/F+-VO03R)4M< >+M(TJ"\]-*RA.+4AD<4_*34A4\<Q/34X-2$U,J"T^FVC`P,#WV='$,J;B5E)*0 >+M\"!5@K69C8%%X'*&`(\>@X##8D&C$PP.#+UN)Q28&1A-I!2;>1A8+F2T\!B- >+M2HY*#A5)-H8C]QFN^G;?7PG,$PR>KGXNZYP2F@!02P,$%`````@`(7)D,;F. >+M"S]J`0``-08``"8`%0!M;WIA<'!S+V1O=VYL;V%D<R]D;W=N;&]A9%-E;&5C >+M=&5D+G!N9U54"0`#+H"*051YR$%5>`0`Z`-D`.L,\'/GY9+B8F!@X/7T<`D" >+MTBE`?(*##4C*V;@<!%(LZ8Z^C@P,ZT^8LW:]!/(E2UPC2H+STTK*$XM2&1Q3 >+M\I-2%3QS$]-3@U(34RH+3Z;:,#"P'O=T<0RIN)6T9O[NR]V)(CQ2#`(..@YG >+M3*1XFMD96`0TG"3<FQ,_,#0P2/5.<&1C8,HP<6*39.!8<)%#,H5!H<%-.64" >+M(U`R-Y77"*AS\43#$PP.#+W/(&JW\*$HPFY"=&0S#P/+A8P4'K`)EA"U:YVQ >+M60,U84N0/%BT^(0",P.CB90BQ(06B`F"1F`WN&&5_`MU@Q'$>!F(VFLDF(!= >+MTK\6XL`>B/'M/%B"`\W2;UB]N-8>(NJ%S\!MF_"$#O88PB[9[H?B)#1/R4)$ >+M_0)0(A<ML%RO@?7,(B/")IJB!$\[2@J`:3TAA4<KU,%1*;S(<2,62;(+20FT >+M4<E1R<$E:<`P<RW+TH;SB_X!RWT&3U<_EW5."4T`4$L#!`H``````"%R9#$` >+M```````````````2`!4`;6]Z87!P<R]X<&EN<W1A;&PO550)``,N@(I!"F7- >+M055X!`#H`V0`4$L#!`H``````"%R9#&INLD:1`<``$0'```J`!4`;6]Z87!P >+M<R]X<&EN<W1A;&PO>'!I;G-T86QL271E;4=E;F5R:6,N<&YG550)``,N@(I! >+M5'G(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```"`````@"`8```!S>GKT >+M````!&=!34$``-;8U$]8,@```!ET15AT4V]F='=A<F4`061O8F4@26UA9V52 >+M96%D>7')93P```;6241!5'C:8OS__S_#0`*``&)B&&``$$`#[@"``&(AI,![ >+MLX/SF[\?YS[Z]$SVW_]_C%]_?F/\^NL;Q/6,3`S\G+S__C/\9Q#F%'@OSBZ8 >+M=#3HPB92'``00(R$TH#P?*%_1K(&C#9RE@PL3"P,HEQB#`*<_`Q___YE^/[G >+M!\.--S<8?OS]SG#AQ26&LP_/__^:]IVD4`4((((A\.O/+T8K>4L&51$5AEN? >+M;C)<^W*9X?>GGPQ__OQA^/7O%P,',Q>#AI`&P]>_7QE.W3_#2&H4``000=>J >+M<LE.FW%TUK_&W:T,ZGR:#%PL7'`Y'E9>!BT!;8999^8QK#J[]K\4J^`L4AT` >+M$$",Q&9#_16J:[\P_`YJ=F]@./+B`,.?OW\83$0L&28=G\3P^=.'6P_C7ZJ3 >+MDP@!`HCH^.)AX[X#2GR,_QD90&[^!R28&1D97G]YQ\#'SG.`W%P`$$`H(<`X >+MA1%G<$CPBS$TN-<PO/K^@N')Y\<,OX'Q+\0N`L83#DUA>/WI+8:>_SG_":8) >+M@`#"2(0[DC<S@+P(S')@7_[[_Y?A+Y#]X\]WAMM?;C$\__84F.G^@<6>?WO& >+M\.OO#X9*QU(&-D96AK___C+\`6*0GM*M-42%`$``83C@S]_?#*?>G@`[X.__ >+M/V!#0?@WD/T'Z.N_?_\Q_`&R(?)_&9X!'?'H\T-PCO@-3!<@_2[2'D1'`4`` >+M8:2!W_]^,XAP"#-H"^@RZ`H8,`BR"8$M__L/A"&60GP)#"&HXT#B__^!^/_` >+MXB`'(@/M90H-[#-8_W//XOBKOD1*&UD.((`P0N#GOY\,)Q^<9=AR=0<#.PL[ >+M0YY=%H,`NP##RZ\OP"D?Y$"017]`#@):]!\4$@Q_P-$%BAH0_@-4`P-:RZ4X >+M[W]^4V>O;LUP__5]IG=?WFX!"BO"Y`$""",$UEW?P'#X]J'ORJRB29),O!W] >+M!R8Q</[C9F!C8H=;_OO_;[#E$(?\A=/@T``ZZ-N?KPR\G-P,VLOENK[]_7.< >+MEYN'45%`GD%16('AZ^]?,LCV`0002B[@F\O[CXV)Y;\JIZ3$\8AKKT%BZLMD >+MK_'P"&EZZW@PW/MX!VSY/W!B^P,.D;]`1_WZ!XFB/U`LR"[((,$ER;#Z_&8& >+M#G9V!A]--X8K;R\R*/-J,*P%5A6_,__"<P=``*%$P:?DSQ@APLG,W'_[];U9 >+MW,S<X!"`)4R8Y;___X7F%(@X*`V\^O82F#M^,409!X.CYL*;LPQ??GUAX&#A >+M`#H>-:<#!!#!NN#O_Y_KOO[X-@N4-4&Y`!'<O\'!_1<IZ,$0FFU?`AWQ_,LS >+M8/J`)%!0XF5E9@8["!D`!!!!!W"R<7`Q`DN\GZ`L",OGP&`&^1QB.3#8_T/2 >+M`=PA0/Y_B',8_D/+%$@.^X-A/D``$73`SS]_?#G9.8!!^!F<U^$)#^H`B.5_ >+MX67#/V@T\+,),,CR*@`+M7\,U]]=`U;=WQB^_?X*;$.@%HX``83B`)$%`G^` >+M>9I13TA9\V#`^5L@L1___V9*"8@SO/GQ"MP&@%L.BO/_D+S_!YHCP.4"4(Z7 >+ME8]!$%B6;+ZX`Y@(V1BLE<T8'GRZS_`9F`Z8F%`=`!!`*`YX^^4CLZN./<.E >+M1Y<O.VPV2@8%XY./[W4"#"T97@#+`58F-F`A)0"D61G8@=D2%,1??WUE^/[W >+M&\/K;Z\8/O[]"':(.+<4PZXK^QGXF9DZ?_WZ[7[T[BD#D"->?GP-U,N,$@\` >+M`801!>HBJL`B]3?;R7OG%@,CDL%-VX[ARY^/P'*`#5@3,C$<NGV<X>.WSPR? >+MOW\%J^?FX`3F>2X&'6E-!D8V1F!(O68`UI<,WW[^9/B:\[]"82%7X_-OW[Z^ >+M^/2<\=F'-\`&#-,39/L``@@CV_WZ^Y.!EXN#(<S$CR'"-(#A%^,/<,K]_OL7 >+MPX[+^_[___7]C"@C6Q.HI@-A$4:6!L:?/T\=NG'B_Q]@6N,'E@'()>&#^&_? >+MA9G9&L_?O\'PYM.[?YS_&'V0[0,(((SJ.,XJC.'.1U#T`XM6<'/S/X,BGS+# >+M^O/;&.1XN!-O1KU;@"VQ*B_ACW_R]=L"%RUK<,K??ND04=4Q0`!AUH;`E`ZJ >+MT1@@3@`;]@.8@D&U(#L;VQ-<!K&SL3SY]QFD]@<#"S,+T;4A0`!AUH9`RV'% >+MZE]HJG[^]3F#N8H!P]WW'W89;U`HQFBNK9,M>O#ARVY]!35@@^45`RF]+8`` >+MPA("?QCD@/D7Y'MP*/R'AP6#CHPJX[D'UWN``KW(>JZ]>-:K(:?((,(M3'*3 >+M#""`,!RP_NQ.O!K86)@QO`?,V_^O/+C+>(7A+LD.``@@QH'NG`($T(#W#0$" >+M:,`=`!!@`'?6R;L0-T)=`````$E%3D2N0F""4$L#!!0````(`"%R9#%\=5G8 >+M;@$``$X#```F`!4`;6]Z87!P<R]X<&EN<W1A;&PO>'!I;G-T86QL0V]N9FER >+M;2YC<W-55`D``RZ`BD%4><A!57@$`.@#9`"-4LM.PS`0O.<K3'N!0YH^+XFX >+M4!"J5'$H0AP0!S=V':OV;N2X2@#Q[SA/4@JHBJS8F=F9<79'2F9VBP7Y\`CQ >+M-;[[-$TY-11B'I(&C+Q/SQM*R_7:?:BHFAHA(223<5J0N5OMIN8R216*)8+E >+M8&\:^90R)D&$9-'0)&26*E4*GQ!(J;>H5^2P+1K&C;]%:U$[7X<PM^>,#)?C >+M\HFZ5!VI]1GEU(`3KDQV+I2?<RD2&SI5Q6I*D39I5B[-*D:HR+ED-@G);%J' >+M2)JR]JQIX?<HY$+J%(VE8%NT7W$"5V%-3>BR'@5YH)J?G?I1"G#_HZ-G]DVY >+M)DJ'R_A/_DM6O:YW5&7\M:J.4:$)R?#N=K*<SJ,?>H!&4Q6=&:J\P0;S?G^[ >+M_LQ^O?/39OW[-`("_QZ%WIG&>V'P`,QODC]+8)C_U]ARLNL+^5)3X=0/1ET. >+MXL2@YF$0.&]GG0797D+0201'8O<<N)'Q*`4QN*K,O@!02P,$"@``````07)D >+M,0````````````````\`%0!M;WIA<'!S+W-H87)E9"]55`D``VF`BD$*9<U! >+M57@$`.@#9`!02P,$%`````@`(7)D,;F."S]J`0``-08``!\`%0!M;WIA<'!S >+M+W-H87)E9"]I=&5M4V5L96-T960N<&YG550)``,N@(I!5'G(055X!`#H`V0` >+MZPSP<^?EDN)B8&#@]?1P"0+2*4!\@H,-2,K9N!P$4BSICKZ.#`SK3YBS=KT$ >+M\B5+7"-*@O/32LH3BU(9'%/RDU(5/',3TU.#4A-3*@M/IMHP,+`>]W1Q#*FX >+ME;1F_N[+W8DB/%(,`@XZ#F=,I'B:V1E8!#2<)-R;$S\P-#!(]4YP9&-@RC!Q >+M8I-DX%APD4,RA4&AP4TY90(C4#(WE=<(J'/Q1,,3#`X,O<\@:K?PH2C";D)T >+M9#,/`\N%C!0>L`F6$+5KG;%9`S5A2Y`\6+3XA`(S`Z.)E"+$A!:("8)&8#>X >+M897\"W6#$<1X&8C::R28@%W2OQ;BP!Z(\>T\6((#S=)O6+VXUAXBZH7/P&V; >+M\(0.]AC"+MGNA^(D-$_)0D3]`E`B%RVP7*^!]<PB(\(FFJ($3SM*"H!I/2&% >+M1RO4P5$IO,AQ(Q9)L@M)";11R5')P25IP#!S+<O2AO.+_@'+?09/5S^7=4X) >+M30!02P,$%`````@`07)D,:.:/Y2Z````_P```!L`%0!M;WIA<'!S+W-H87)E >+M9"]R:6-H=FEE=RYC<W-55`D``VF`BD%4><A!57@$`.@#9`!-CK%.0S$,1?=\ >+MA=4)*KT&!I9T![$RP.PF)L_JBQTY/(I`_7>2@@2+=:5[Y7/\%AY(R#C"$\?Y >+MF>D$6^_<^PA?#J"@998`MS?UX^?<_89];Z>BGQ/62F@HD0(LW-X.^M>MC6QZ >+MU;BV`*)6<!G5`>,QFZZ2IJB+6H`7EJ2GO3L[M^LR\^`_2A>[2/S;<\'<.:LM >+M5YLXFQ8*WG=2EVB^'5E\F]$H^?'A'A/9KDK>7`]LQ918<H"+_1G`?0-02P,$ >+M%`````@`07)D,9<4-<@,`0``/0(``!L`%0!M;WIA<'!S+W-H87)E9"]R:6-H >+M=FEE=RYX;6Q55`D``VF`BD%4><A!57@$`.@#9`!UD4UNQ"`,A?<Y!:)[:+<1 >+MR4C==3TG(,0=4`A$F$E(3U^W2M*?F6&%9=[G]XPZE=&S&1*Z&!K^(I[YJ:TJ >+MU;G0NW!!YOJ&)V?L[&`Y#RZ\;@U>L>,0(F##;<Y3+>6R+&*,'\Y[+6*ZR-+Y >+MF\=UN?J'@@'646.&)"\ZPP`PT35;2"`<BAC\*DA^A]D]9GZ9H%R,[<G^!.,, >+M2H;04PAC4QR!"*36TX32Q$"M+-'J!+W<)8)F/AWZ]MN,2H#QF@Q@NYE3F%</ >+M:`$RPV3NX)%V>L,VB%QN3/D/JC9#QPC:13UWL;!W#X6^D#/C->)/NK<0(/'V >+MV)<RUOD^09`'0^Z0?>BO(4IN*Z.B.@IR4WT"4$L#!!0````(`"%R9#$>!=<K >+MIP```%$#```<`!4`;6]Z87!P<R]S:&%R960O:71E;49A9&5R+G!N9U54"0`# >+M+H"*051YR$%5>`0`Z`-D`.L,\'/GY9+B8F!@X/7T<`D"TBD@S,$&)`L>30T! >+M4BSICKZ.#`SK3YBS=KT$\B5+7"-*@O/32LH3BU(9'%/RDU(5/',3TU.#4A-3 >+M*@M/IMHP,#`]]G1Q#*FXE?3G____:6V!!AD,#@R&O6P''S`Q,)I(*3;S,+!< >+MR&CA,6(0<%@L:'0"*-OK=D*!>51R5'*(2"8PM,FS5#RY:1H*S!,,GJY^+NN< >+M$IH`4$L#!!0````(`"%R9#&#O"?;IP```%$#```<`!4`;6]Z87!P<R]S:&%R >+M960O=FEE=T9A9&5R+G!N9U54"0`#+H"*051YR$%5>`0`Z`-D`.L,\'/GY9+B >+M8F!@X/7T<`D"TBD@S,$&)`L>30T!4BSICKZ.#`SK3YBS=KT$\B5+7"-*@O/3 >+M2LH3BU(9'%/RDU(5/',3TU.#4A-3*@M/IMHP,#`]]G1Q#*FXE922D/`@58*U >+MF8V!1>!RA@"/'H.`PV)!HQ,,#@R];B<4F!D83:04FWD86"YDM/`8C4J.2@X5 >+M23:&(_<9KOIVWU\)S!,,GJY^+NN<$IH`4$L#!`H``````"%R9#$````````` >+M```````/`!4`;6]Z87!P<R]U<&1A=&4O550)``,N@(I!"F7-055X!`#H`V0` >+M4$L#!!0````(`"%R9#&@6O)6;````'<````:`!4`;6]Z87!P<R]U<&1A=&4O >+M=V%R;FEN9RYG:6955`D``RZ`BD%4><A!57@$`.@#9`!S]W2SL$P49!!@6,3" >+MT``"#$#P_S\0_6>``<6?+(P,#"P,.B`.2"T#LXW'KCO[%.W$VT0G7YU]=1OS >+MM%PF\XE.DO/"L\SB5ZTSD.`HY&VS?OO50?!A,B,'@ZU@88++NRD'5GQ06QTF >+MRLE@#0!02P,$%`````@`(7)D,99T'I5E#0``D0T``!D`%0!M;WIA<'!S+W5P >+M9&%T92]I8V]N,S(N<&YG550)``,N@(I!5'G(055X!`#H`V0`%9=I6%-7M\=/ >+M!@[381YRCB#!@H@5R'25P2&)"E9+!2>$BA*0P5H54+2*2'*(!)0@J*A!T,37 >+M*K90P:E:11*,(&`D>''`JR6$&0420"2!).?F_;#W>O:7]=]KK__S>]8^%;UQ >+MG9W-/!L``.S6_[!VLSEZ_W=9@>;]4';V5W,@IK%_8@-`;4NPQ>D1\QG)"H_- >+MVI*>FO5;XL$4@)V<GI3BO7Y_8EK*YI3$Y&.9K2DKS,E\UJ]E;SWZ?TG),ILN >+M&(:OP[#H$0R;3*@5C9X!W%EP'2BQMJ44./LX%"BX?G[N-[E8+N.$<<(P=$G\ >+M$'NJSQ&@:BP43!U,@")9#),G\2"%WD,`<,_S=NJ8SM,)E\LK%@K8[)"RN/6K >+M2^(BRB[LC*E$?XH7H>7GKZ@U0[40UF#D<++UJ/KC6)K4E'#\2+FZ?2X%DF*! >+MN,<F-P(.<&0I6CQC_$`!%T-XODLZ]JX$(Y9==(U`ON5CAV^LALL6_@[GZ\N1 >+M#UUP;#@1"=F6@H00CR&BV%@X-]?0+&OZ)FY<6U(1IZK<UL;6-"Q?-!>EVDZ! >+M&S"]<=:9(%=BCSS-&I%4D.SAHUS!;?@#[PFMAJ#+><(5\;9(?UPJ=JGW/*9\ >+MKM!J^J($JEHF(P,S-LFTG^?+,95T`>YYVS.9;BI8KE0RX?$5NN:,S\U,092T >+MFZ9H8?Z9>:SOQ3]%1:[!PT69'KT'`1;0N$:VI=BGOO5"U=BW':9TTM5?AZC: >+M>R?IU+MX/G&XF8DA_W,#0>;E="%"D1?#4__],]DM;SOA%0S"<K%$W=3L2GGM >+M0S&\JAYK]/ZJ1OC])4JH79@.OUG;0!O6%U7G5Q?EG\B='>AN(C%O&\-M;7E` >+M7B@OL$E8_6;#U9W;T8H/ZI;EJY;^LG@7F!8(@HM-7.C()!..N3'!^.'$(V5I >+M@Y$LWTYP`=U7!0F842JZ(7?NK%I9$`5Q$1.-NL&&83!.%*$#+Q>!&S?M`L-_ >+ML0>](D!PXR&7C>LVL6N9Z;NX[[</NJ\Z@7W9+R(`^$*G41L_\(/=M;PGAT.1 >+MMXB)RJ!6#],S6EOH5M:'Z#F8H1@=>[T3'"Q)A\^-5],4P>UI/1<OI7)FIR^I >+ML0HE!(W*LA2M;5K2GI:$93&"A)($.G5T1:-,V[N0_YURB\!TD@29V`D(?-03 >+M]@I\/#T1VOG@B?IPR0FO!M.T9W(P"T#7\/+/LI\5\1=LF<287@>"4L%V33H, >+M>^U,TV7/N,NE53.PB6MHT0Z\W2$(5?X.CWL\81A2^\!F>^K>1[&(Z1XA,"TQ >+M53>E(<O%8B;:@)NGMQ0=9G)3==JHPL2WF4'@+\U14,3>(407[A;ZO`GQI>S$ >+M,H9Z_]6DL8X0B(Y=.%D9Y?*?KR[>]F]LF1C"*)S+1CNH36/N*'Y"I8(P&&,8 >+MB+,B??]^`2:4PJMH='J.?K)83;%TD*NDK"+4W31G<=]5Y,4:R4<++$5_ZF'8 >+M-1DQV?Y(&_U']JKGY=%B=OPX0F!8!LL[YYBK#C"G$QDM>WD`?KFW*B;$)U;< >+M.47JT$D_54(*<0/^I:=W,G@S@V.OPS04@O^$8=9POG%,;B'@:0K@7&G]RXRX >+M+E@4@5JTF\4-):AZVI+3(<TO(^\;95D:"04"6<EVJ%[30`^YM8)PVIC*R5&V >+MKCJNJ7[`VB;&X0O#PRMWABG/+1%/3-@V2_,,D$(6D@8,[B]%A1+728S<$2>$ >+M]GT:A0Z&54+.J7]#JOM9B,G3XC3AGI<<TT!0%#K1;A>P%+WV+&,$)/!+@8Z9 >+M20B2$5NU8P[\1LP66K"YEK?!_`2HO?.<TG\A118T^;6SMLH,'<\;KY#!=FUH >+M+XGJ1,,%)A%[,5E("AC*LQ[&^TE"2,$$A@.%7UCO*E^<ZR.0!$J1,X88'+B4 >+MZ=M22W"9YE>9=3[)M/.')1396LLWA$A'"%)VTS/P+__S6$*!(@VR:+5!*3.4 >+M3I-]7#JEYTNDE00K[YOW@KD9W3DO\8H83]9[$P=8US@C9KU$FYA4WU@TL]7/ >+M6R9;X-TB:U(V9F@&W01S6(K9KNC`6TIT/=!W9?ZM&?DZCBO`QSPZ<&+4_IAE >+M/[]W[`M%H&&*X%PK@ET_(4GB$U)>_N'I*[T\SL2PP1&]K\5O!DZB\.5WLSM< >+MMV95]1Q;(27YKV1M<@K?L;?N8URDP'?J3?:1VU=_+#S?E7J]*?RV"W6S&];; >+MUWIM^-DKKT*X+A*7K92%496+5AYB1A<^>W<3.22@\3Z6SMD^_FO8HN24\.*^ >+M+<6ENTN:I7=FB8Y%:$N4VR[)+%.%ZB\77$!'Y"0!IA!"S`9CZJ/,L>".W63> >+M)EE;]+2R4NWRD,@/"*[K<@/\@D")K0B^UH38ABQ!3]CC)6OUSO!"AW&:J-J0 >+MVK%EMDGV[1*R>=1@D43C_&PTS9D9BI7_UT+"`0^5]`D3-A724!M?,"+Z$P&A >+M=!MV'\40D8Z76F1%QQ?%QPE("I`%?7\9S;06^M65L`XD&FQI<-E>Z0F+1?%U >+M/J)0V'4A1BT3-21R#%9?'Q.CQTC>%PE^Q;NEJPQ)NIGYWCQ10^[L#/;Q!5?V >+MN<)IJPAOZ^XNX'H;L7*8J"M''EETP6N/F1@!91^5DE;\U[?I&R4+62I@R:)I >+MU6\P/I1"$]UAXG]N!AME=_EJ$O4W`S'L)%^,_E1:Q-Z$;*725J^&7`^?%D)# >+M03E/P/N#@2S@S@I=>P8F#Q[$5K.&[@'W>ICV$HW)E-S32PPK/%N.GIH?VT;# >+MTJB#QU[4G=J-R!7!S9#2-,$(T3)3M"Y<N;=]EB\_;YE\M.`@%%<EIAGT=G=Q >+M91@7=?D#<"FEV$,/5$+'=3\`UT]/D.4CM@FLZ<9U/"#IF'9.TU0BC3,9#,UM >+M;<^(62L7W=J7FMHS-.L0=*"\2\0[Y2CJ],)V.[K,MG4$'2?ZV]]W'7ZDDHK@ >+M[G]G&S/Z1X\+CF,I/+V7OXGD&L@B']+2,W"OJ$[9#D%?$%_>#9\ET?%@[+FK >+MNBGL^5_**M8?%MZ\V%P:O;[!H%>MR5_'W=:U#2VVX\08'!1\R2,2Q\(ODA.3 >+M;/G.@=QM3.QJT'CP*_T9?*!.H<8)OE6+A1!C5R&]YJB50H"A[':H3.?0AM1# >+MNSYCL.[#.#VD&EA2(Y7IMG<2P)"Z8]_.H.JN;Q2*5Z[^L'4_8*X7Y]==5<`U >+M?!S2Z@ILBB`2'^BXII`%S)#]&\$LF@O#/Y/.V//K07H.Z!Y6$819WO2)$51A >+MC^#;=ZNI*XQ67__E2BCL\$FIJF=97H/-\C5/![8(-*S;_B2JS>^!/,$&7""3 >+MJ$!&H7M'ZKLM[AN<_&\#>*NR8)-4]^*K,F^$*P&^<"\FL!+J"!_+`FJ$I=E` >+M6:<)/1_&S_/UD*_;N$H07K(-;J]_S]$9$JSA&MF&(>8MW"RN<NG^`8P:8#VK >+MD"R:K&"?<1AV6HD#(TXD@()#,D?+=[<L9[ASFY\.;))S!=A#U@+SX-+3-CR# >+M8>1<8]JFOW<;KAO=8E$#(/"KE7%!]XT_=*<0E[F@\V3C5&=,[GC3=)9]%2/] >+M?ILSF.S8DYS8X30GCTXUGKHFGW;@^U+[<_FGCS`X%:_?754SZQ:_.*KUE=<Z >+M**#74^.4',/$G/,>@<'!D=5Q[B1ZY>S9UL?%Q8DW[)3,LV16U*DV*EU;"/21 >+MNZP&@+"33B*8O>"958V&/4*(W8/?P59`*A/N(T$8`.742+)'*/+WM;(]YX'4 >+MA'76H/O.;1PK7-'H%1(")Y@XMSY.#J9.C1^GL>98$PY!$68<(*_M,<P$^O3] >+M5IT`M5>*S>AO"I:7.&"\\'&R0*K""#L4,CH>=I9*C9:72%S>`-%_+<S%4G33 >+M@Q[RBH($N`'GXET-4@DP?@E#TL>VF"?_\`**+)$R:E9B`S^JFPLN8"9L)?Z^ >+M9GG->M"1)6SYZZ`D<W/S/N&%!YBIZA#!11TER77?Q7EK']`H0A=?1;KBYVSW >+M)A*^@.Z<QB9\C5;4A=&HA+=:_SMYM`+?)80*ZO)HX15TP(U$>/FKO>#$>REF >+M'Y=3.VA\2#Z$?N,YOTP0W0!P)S]1`))6B9FDF?GYY>O%Y8VQ<-<1G77`FUS< >+MCCU2WDCOER?<'D>=24^6/RSA(KG`!/<F5_:_9\ZB;EVSR:#[SY&RNWU8,*?] >+M'SMAPWL%5%V;@UVNFV1//4EGDA@\Q@(YN3^&Q@)HUY=VLL^I=AF-7'V(3Z?' >+MKF41=N&<['X@;$R5</*["'_P0DU/5@OT?3ZZW@T.C$POAT/$]X`O"R,$?V\1 >+MI[L=X+[6C<UHMK%2TEDC\Y\FF(TG#)FUE4V*<%O#/#SNT@5S-$;VL$%/^<ZJ >+M)CG6Q(JW/NC@3ZJ[R[==R>&?ST?+2XK5!.KAJX9677;W4_(.2OTL;G(Z94\= >+MUISJ9+Z?\W#P073O<<GV!TTBT9BP2W0X/Y>V9\E=DTMILDFI4#QO^>K0]4OV >+MA%BM-&(!&N9=1CQ3/Z*\L9V92_C14_`KRS#/]3\MF6?LS2/G690*A)YTZ84C >+M.%>37"T%2\FV/BYUCY,2YUYH9]ZKS+!\`!/J:%IRLGK'K1NJUWT>'H"5=Y(G >+MK^8B\MG;O3]WX9L"+N)X9TH<NP:'AP#R0\D65F%$G/E/!:P/W[CV]FI.WO\# >+M4$L#!!0````(`"%R9#$LT`EO/0(``/8%```9`!4`;6]Z87!P<R]U<&1A=&4O >+M=7!D871E+F-S<U54"0`#+H"*051YR$%5>`0`Z`-D`)U436_;,`P]U[]"2RYM >+M`<7Y:(;!P4X!.@0(>BA0[%#LH%B,(T26#%E9G`;[[Z-DRW&:;4@'P]8'J<=' >+MZM'Q/7G4.\7)2\&9A9+<QU'47[NMI2@M.4:$T%R_4584P`Q3*21$HF6EJQG: >+M<F8RH1(R&A85><`W3&;1KRC:>5!A(?=`!>-<J"PA4_1Q?M/Z=4`K;3@8NM+6 >+MZASQT,)Q#ISTYT/WG**U3M,FS&#/C$)@'V2ME:5[$-G&)H@J>>U24UD@E46J >+ME??<"VXW"9F,:P:;YDQ8YZRB'1?R2>2%-I8I&ZS=$Q=FS]34#BW1$XLGEL-U >+M?)WGL]YW*]A68'()_/*\_/.M*:W@5.G.FJ7;S+@;IZF6&BW?A>)Z_Q[XT>A\ >+MR58@SYA8721D?$FCK;(3"RWM00(5.<N0R,[(VUZZ03A(XAAI(LLR+K="Q54A >+M5&F9E*>9`_L&"HQ(!X7*>G?O(\TWD&Y1)\>.',?#1F&3>IQUU3>\9!LP!JF; >+MH+:I=)EBG2N/RT592'8(1</#\7W3,EBM-V:X:YP^DV#LQ[.N>31#DR1I@BR4 >+M%`I"K"=MQ5JDS`JM?*_VL49VMV*&[IH&/D8W.2HO:'/<2*1V+#N>K_4XQYNW >+M7WO#W@]W]"S1,TUW"O9?5]LD"94%52)]7ZLVV4:O'H8:R-`A(092>^MN<?0Y >+M?'!U-SOUKM\[[[R0^(7IIMNRSNJW:KUXF;@<.RF^EO`356</H3@?X_@WK-$5 >+M6/Z'T@+^`VQ\!=C#EP#F8#W8;U!+`P0*```````A<F0QHU<`Z-T!``#=`0`` >+M&0`5`&UO>F%P<',O=7!D871E+W5P9&%T92YP;F=55`D``RZ`BD%4><A!57@$ >+M`.@#9`")4$Y'#0H:"@````U)2$12````$````!`(!@```!_S_V$````$9T%- >+M00``UMC43U@R````&71%6'13;V9T=V%R90!!9&]B92!);6%G95)E861Y<<EE >+M/````6])1$%4>-IB_/__/P,E`""`6+`)JO6(3+Q]^ZT>LMC_F?\=L:D%"""L >+M!H`T[VM?Y@#C.U5&'<#E`H```AO`F,ZX'T."B9UA\^/9#+ZRJ0SH:I!=`Q!` >+M<!<<Z][H@&X(.PL7T"`6N-R3_]<9PLHJ4%P#$$!P`YB9V!AV/5N&:@`S-\/> >+M%VO@?&XA#@PO``00"\+)K`Q>,O%@-K(F9,#!RHDA!A!`<`.,"UT.F.IH,81Z >+MVSEPL/!@-P#H)5AX`-5>.I5[-1\@@!B1TP%(8E)U"4X#>(6YX>S(O-(#H,`$ >+M""`63%MX@)@;JP&_/T)H/A&$!0`!A,4`;@9<+N`3XL40`P@@C'0`TBPF)(FA >+M\..G3PP<##P,#ND!*-$($$!P%SR>>0\<UU__?60HF%=Z8,?)/2@&[.A;ZP`R >+M`#TA`000(ATPL#+<_'D%HABH&5D1R(6@1,7.@!DV``$$-T`J7?8`OESGF.>) >+M51X@@!@IS<X``08`P4AE,T#S7:L`````245.1*Y"8()02P,$"@``````(7)D >+M,<V3)QW0!0``T`4``"$`%0!M;WIA<'!S+W5P9&%T92]E>'1E;G-I;VYA;&5R >+M="YP;F=55`D``RZ`BD%4><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12```` >+M,````!`(!@```%"N_+$````&8DM'1`#_`/\`_Z"]IY,````)<$A9<P``"Q,` >+M``L3`0":G!@````'=$E-10?4"!<2&A5ZE[E0```%74E$051XVMV6?4Q5=1C' >+M/^?<>[DO<`&YQ*LL%2%-S*!$\26F,450Q&;DG)DNW332HG^<VM:T?\H_,J=; >+M:[I:<Y8Q,=TLC5E#\`5%)PH.,Y:FT17DPN7R<M_..;_^X(!(]ZI_MK[;L_/; >+M[_R>9\_[\\!_#VN!DT`G(/3O2?W^J?`*L$EG'DF;]']/@A78`K0"*G`=6`<8 >+MG\#W(G!QU^0QHK4D4_Q5FBG:ECTG[BU-%Y?GC!7KDR(%<%%_-PPIA/)G#ARL >+M)"DYF:RI4W'U>&ELO(JSK8T/*]8#Y`.U891(!D[($CF%<]*9FY/$T>IF&EIZ >+M`(X#;P*]890_?67A>$>"R4#0%P3`[PTB!-ABS&BJH*6CC^+&3A=0`#0"&$8) >+MJCAPL')FT:)"4E)2""HJ`WX%R1J#L,8198^A^<HY#W`JA!)QP*])\5'3JCXK >+M8LL*!WD9?LKF.8BS&[EPPS,IJ(AI0)4>F9$XWK0D/2,QTDR_:P"A"31%Z-Z5 >+M"'@5`CZ%N`@C"V+-ML,=`SG``0!YE*#W\N<7(,DRD4:-?;MW83+*F&29&+N- >+M@J*E`,O#>/^KZ$ASUK'="\C/=.$3T52W)&(T&BE?ELS656G($HN`[:-S_J., >+MV-QXBXG>]EYD61HF29:0)'224!1!>E0$;R=8<X=J8K0!**J&UQ]D[Q?[R9TU >+MEZ9KU_CQA^](B3,S,24>(#6$\LN`)3O*\\@>VP7([*GJ8,F[5>PZ]"<FH\P[ >+MRY)9.L<AZ?7QT@C>LK79R7B<O?A4C:Z@@EM1Z0XJ=`7487('5)!`"6J4QID! >+MR@A56'^[^HBVF2E>O@I5$QPY?`A'K!V'W8)7DD)YW@#LS'X^55ZWT`J:!PPV >+MW)[!5'>Z`@@AB+08^'C=L]1>ZXEP>90=P&*=?WJ4U8@/B>Z`PLLU?X2M\K9U >+M)?3_WDR$3P.8'BH"F^OKZ[G;[L+YP$VWIX_BDM>P6,P$_$%.59\$V#.*YU5@ >+MR@<K,X@8JD\M0-:X"`!R,J.0Y4'#)Z18>*LP`6#AB&[B4/TJ0@A4;?#"9K.% >+M),%@/S0,5JXCE`'7MF]<0<TOIVF]?8<VYWW.GZU%4:#JZ#&V56P$.#J*Y_5G >+MQEBE)7G1>K<%A,*";".SLJ*9EQWS,%2RQ)I%B9A-LG$H!0"7IFH((1#B\7U6 >+MZ/+[?2J`*U0*U0+Y>W>\?^9$Y:?$*G=`<6&(FL2JBIVAVB[`K'FY:5@ES[#^ >+M`-T#-LI73$/1^AYY/#'52MX4.S6-/0N!;4##@VY?H<5D(%;1N+^Q5'>$!$*@ >+M:0*!0&C@O76#@8$@KD%+&P@S7&H!"@H*,,6\0$YG+7=_._DXQ]@G/QL)0GED >+MO!P\=9?/OVUBZ\H4MJT>]_"/+#%EO(V:QIZAR\KO6[L+-TQ+Q.]3\-YJ'I8A >+MQ$/EAR+D]2O4!32`RE!S8`A=G9T=B^(XR]ES=1RI?L#EJS<W`Y="O%WMZ?,E >+M+9X92Z35P%"=]_</D.(P,6.RG8PT&P"J)FBY,\"^HT[N=P7O`?N`QCJWOZ@L >+MP9)J,\JH00TA!A4&AL^:!EUN+TU>A4\ZO)>`\G`I`2#ZW;<Q6^QT.1NH/W.8 >+MDC7?A'M?"E1&6673&_/C*<Z+94*"A=AH$U:K$;]7I=WMYW:[G^-U7?Q4[Z:[ >+M3]&`#<#^D9/X_.Q41VJ,A>Z._H?*(T`(^KP*5]Q>*IS>1R9Q.&R:/7-JJ%TH >+M'+*`+P%GB!UJ)+F`@T!>N%UH:YI=7,A-%C?ST\3UW"3Q\SB[V)=H%45VTU/M >+M0O_:B_3SX_:?8428I"A%%3.$1JJ`^"'Y$K@D":?1*#4&@J+]*;;1,KW/.W2C >+M&_2<_YK_&_X!'7A!0=WWXDD`````245.1*Y"8()02P,$"@``````?7.5,0`` >+M`````````````!,`%0!M;WIA<'!S+V5X=&5N<VEO;G,O550)``,^><A!"F7- >+M055X!`#H`V0`4$L#!`H``````"%R9#'>BV,$S@$``,X!```P`!4`;6]Z87!P >+M<R]E>'1E;G-I;VYS+V5X=&5N<VEO;D]P=&EO;G,M9&ES86)L960N<&YG550) >+M``,N@(I!5'G(055X!`#H`V0`B5!.1PT*&@H````-24A$4@```!`````0"`8` >+M```?\_]A````!'-"250("`@(?`ADB````85)1$%4>)R=DKU+0F$4QA\:"J*6 >+M/ERZX)+]`PW1V!H$01!82Q^V!!'.1@=<@LJA#[TUY&"E@]JB($*3FSCX)P0N >+M\H(XN04]+>\QN^(->I<#[SG/<W_W?0Y$!`#PW^J]7`1`$5GV$:V*"&T=:K+5 >+M:M&:K(X2QV(Q8TV&"`"`O5Y/3<8]?;JN2R^!`X#Q>+P_]%8LZM"2BEW7O;"F >+M/V)[V&ZW/[59*!38Z7248-V:1@$PE4I=#Q&+R)2:I--/[':[7X\/J:]FLTD` >+M3"02.<=Q:$U&IC!IO_BA)+>W-\QFLWV3D:GXY-P!\)[)9/1WI@&,_;4'.LQ0 >+M*$01X=75)4NEDM[/^A%P<^>(QAB&(U&*"`,+08@(D\DD:[6:F@0&2?KB\/XQ >+MC3'</CAEO5YG8"%(.^2("%]?GEFI5-1D;I"`A\=1&F.XM7?"1J/!E;4-S?L7 >+MX?W]'<OELIK,]/=`L3WB*<^#36@ZN5R.`,Z4(!^.1%FM5@?%\S[I*,&Y$NR* >+M2!X_:[KD(QZJWP+19)N.D^$V`````$E%3D2N0F""4$L#!`H``````"%R9#'$ >+M`F6T50@``%4(```C`!4`;6]Z87!P<R]E>'1E;G-I;VYS+W1H96UE1V5N97)I >+M8RYP;F=55`D``RZ`BD%4><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12```` >+M(````"`(!@```'-Z>O0````$9T%-00``UMC43U@R````&71%6'13;V9T=V%R >+M90!!9&]B92!);6%G95)E861Y<<EE/```!^=)1$%4>-IB_/__/\-``H``8F(8 >+M8``00`/N`(``&G`'``00U1SP>'F&[<,-W3_:C?A.DZ(/(("HXH!$.TD]+@GY >+M`Y<VSF1__?ZS%"EZ`0*(8@>8*S"QI41X'&1Z<H9IZ^:[#*Q:ZJ?7K5P<O6KI >+M`G9B]`,$$".YV7#+NN4F'S^\K_IX?9=;JK\Y]^;.6H9MEYD8=+*J&-C9N1E> >+MOWK)P,#$])>/7^BQD)A4;UQ<W!1LY@`$$,D.6+]R4?[S9T]+?OW\(</'Q<80 >+M9LS%\'I'/\/$.4\8S#/2&"+K9\#5?OG^@^'&C1L,1P\?9/CW]^\Y87$9[[BH >+ML!?(Y@$$$-$.6+-\7NW3QX\+!00$!2WMG!@4E=483L_-8]#A?L=P8,U:A@WG >+M6!D^.JQDB(HR97!R@"0#-F8&!J`;&7[^86#8N>\@P\53AU]*RBIII\9'O869 >+M"Q!`+(0LWK!J<?2SIX]Z^/D%)4*C$AFD9.3`XIMGUC)X&JHQ/%A:S;#WY'^& >+M1V+.#/>N,C$PK7G`8&LGQ?!K^VJ&#\NG,K`IJ3.(U?<Q>#K;,_QA8!6_?N'X >+M0:!V'9CY``&$,Q%N7KM,>-'LR7M>O7R^V-TG6"(Z*8OA_H//#"Z.E0RN=BD, >+M-LJ\#*_WS&6X>O<WPU=V#H8'3&%@??^``?KG'P/#;Z#E#&<.,OQ:-8OA65DZ >+M6,[9SHKAU^\_VI-F+PF%V0,00%A#8/.Z98YW;]W8J&]LSFOOX@%,2\Q@\?K: >+M)0R'#UYF6%C!P<#QX0[#VZ=W&?:=_L>@$!+/8/A3%6QY4*`"P^^_#`R@F&6$ >+MFO?SV1.&)Y\8&&3Y&1A4=<T8[EV_4`847@V2`P@@%BQ!'O?P_MU944F9[&+B >+MDAB.TY%[P1`:DL[P?%DEP]5[_QA8A'@9HJH:&-($Q2$^!UK^&TC_"\UF8/H/ >+M"9&O0=D,7S\S,$CR`!V@JL9PX<1^-9AY``'$@N[SA_?OS4G.*F+EX>7#L#PA >+MP99!Z=,KAA\7=S'\^OJ-8??IOPPV-84,/&B6@^A?3J$,O^U#$6+`A/CI)P.# >+MB+`PPX\?/[AA9@($$#P-;-^TFN?>G5OKPV(2P99OWK25P=W5!XS7K=W``,XK >+M;P\R6-C;,'PXMXOAR,4_#(*JD@RFX7F8ED/I?>]6,Y3><V"HO._`</CC:H;O >+M0$>P`M/+WS]_F&'V`@00/`0^O'LW0UE%@U]2&I+*ITR>SG#XT%&X[ZTL31DT >+M.3\R?#^YF>'-^]\,1V_^8PA</(.!DU<(J^4@O.GM5(8K7P^"]?\%^B#Z7RC# >+MWU\_&!B96/["S`4(('@(O'WSVD5;WPAKC@`EJ(WS>QD,K:T8/E\YS+#FX"\& >+MW8A`!AUK3YR6@\20BQ@0FP68*E^]?<_`S,[Q#28.$$#P$/CZ];.PA*0T7$-Z >+M1@I<8TQL!(/XDRT,?ZY_`Z;ZSPS_),08;/*Z@;YBQFDYB';ESP;['&2&AT`! >+MN%"Z?O,&,-0$;\+L`0@@N`.8F9C__O[]FX43R@\,#F#P#PP`&[!D5C>#BYL[ >+MPXU9K0PG'OQG<)\]BT%07`&OY2#:F"N409<]!&@&(X,T+P/#]]]`!UP\Q2`D >+M(MT%LQ<@@.!1P,/']^S)H_L07X,*E'^0>`,E,#L'=X9/"MX,LW>\9M#-*� >+MLO1D^/CY$\-3H/I7KYZC6"[P?S6#+I,]@\Y_.P;^WTL9?OWYR\#,^)]!"IBI >+M]A\[P\#$P'B[+C=F-<Q>@`""AP`P^!L.[]\]GY.+FTE!20V<?[\#,^^KTQ,8 >+MF#Z>8>B8]9%!-R&+P2`TG6'-W!Z&SY\^_&9EY_H"3-&LBCIF/,JFG@P?/GQB >+M$/[=S_"/]3@##[`RE@6:_OA'.(.*$`/#DU<?&$[L6?=31EG''SE]`0002F6T >+M#EC3/7W\J/+/WS_B:AHZ#.+?3S+\^GF#X>^+70P;YOQA,(S/9WC,)/Q#7%H^ >+M+BD>XHN-&S?*7KAV<QL+EY".I(X]@P%'+(,D]TD&+F!<?F9Q9GC%N9OASY_? >+M#"L63/O#RR]4TI@?-Q'9`0`!A%(0!86#)2=N6+O"?-FLKN4-Q1&*%X]M9N`" >+M!N_S]_\9]+D$&-@8.&_\_?5]WX(%"YS9V=E!6/C/KS_\?YA^,@`#F^$E2RJ# >+M"#"U_>049OC-T<SP]?U'AG7+Y_[A$Q#%L!P$``((9W4,;.F<7+ILCMG6954, >+M'Y^]97APGI$A<OE9AJ,'=__]^/K%"SY>_G>___[E_O#AG82,FCZ7IGTDPW\6 >+M#G"Z$>1@8)`")KK39\XR'-^S]J>$O$9^0U[<3&SV``00SNHX,\Q=[]RE<PS7 >+M[[YEN'OV+X.2GB;#RZ>/&81E-)F_?OLI_8N!09I?3(I!TS&,04!*`YQ8^8'Q >+M+@HL9$&)>>F:[0S?OGV^*ZVDXUN;'74=EST``80U!!84>Y[^Q\YM<NO296`E >+M\N/_%R;6>_]ES87US>T%S!V\&9AYQ1E^_F>!%#9`S,$*M!SH:V`V8CAV8`?# >+MN]?/WPJ)RTYL+$AJ)M3>``@@%BQ![\?,ROZ?F87M"0LK^RM@H;'J[=/;4U,2 >+MFTP?WKN]^_6+I\SBP,PK+2$-SJI/@98^>/*8X?JE,PR?@8U$00G9:9/;ZVN( >+M;>(!!!!);<(I<Y=XO'[U8L+W+Y\DOWS]P@?2RL'-_YZ=D^<)EX#HK+I<[`U/ >+M?``@@!@'NG,*$$`#WC4#"*`!=P!`@`$`=.!->:C)AY``````245.1*Y"8()0 >+M2P,$%`````@`(7)D,<\7*\+`W```D=T``"H`%0!M;WIA<'!S+V5X=&5N<VEO >+M;G,O=FEE=U=A=&5R;6%R:U1H96UE<RYP;F=55`D``RZ`BD%4><A!57@$`.@# >+M9`"T_%.0)DW;-0R?;=L^>]JV;7/:MNUI3-NV;=NV;4[;MON[[N?=__?^B*K* >+MK(B*C*HC5QYKK8S*#%>4ET"`Q84%```(4I*BRO^58_^=>]"0_UVC/]X-_BO` >+MS87DA`"`VC$.B(BS_^YQ7,0T7'[;F[FX&SJ9`H1,[(U,@5*VAN:FRJ:&)G\< >+MQTUY`8!M$BE1(16/#://GQ^!04ILB$(`#P`:6#(/_%^5`P"=-P_/#"L.0@A` >+M%BS$,4&/`N4%`/W$6<;^>]0#(`B(-HM38H2]!?@!<*>!A0;HNR``$-8,(?%^ >+MRCXP`*@%:V!4@)(?%`!\S@(2Y[\&D?[_VJ"?+<V&)3YD@''MHN!&""8(!7$V >+MN,`?WP'S6QG>?!Y=%-M%5%34S?;MZ-\J9UDV(U)N;I?;/LU>?]]=GX5B=A&9 >+MF,5%A9J%_LW&G."V'QE^XWG<LYWUUF.FG(S@?I7H$"H]K@E#VR@IN:CR#-=- >+MU8\$C#&OYAA%Q)K'O/@S488,H1'=84UF!9)(>R<^BNNMQO(RA9NKQ'+A4)FG >+M<,4EMLME3$6#=#L5G,/::Y4Z)[%*_2']2'FBT9H.-)'?=]&-;;%5(D#D)(SQ >+M^'?EL/L64U]CS9K+YLWPM+O659<.=K^5GZ5?L5V#::>KM^"J.7>E=3Q\:=9, >+M.?GFK9HRF?LFYGAS/UR8_[E#XG4:V&Z-^U-8GGGDV,E!],%7,0TY>O6AV&WK >+MEJO:7%UYWFR_(9`_&HES.S'I0QSZCW7RNZ/`H]`HYO(<=KU!M$5KD"X%R'Z( >+M!7UYNMC348NH+P?WSS6+0F`%W/B+C"*!I#H<@[64-WY%Z].OO'$D2T*LO/5Q >+M*LG9$N*N-+SRLYP.RE+T-/E=F.&*1BC+R+LR.]87U*+I_U?O`WC,FP(8X47F >+M,TNLL2"(1DJ^?P2XU>34&2">\-#!./Y0%1^>9:6._,#V%&IY%;,T/0+`QOE1 >+MUE@"S.8MII;0'J7;>FZWVJ]Z+INGES<OC_[>VP;;/V8.:'902/J\BOZ@W7]% >+MN]>`OY.T;Y%:P4JQFK#S"$[G'83%,9,B(GL.;8H(Q(+_/>0I+P5<IDW"@C+! >+MBRVRFTKSL`!?UUY_?DI/H>469EP5/R&'!<<*YI;Y(IU__+S[^^3&[1ND:YD' >+M.S2=D5?#6K>@#9]Y?X<E1@[V&Z/LL`"Y?I67VG5PE/-4<U,-:0)_7-OCMFI) >+M8_'<B/],N"SCZ,=&ZUS[)R+A^T0(QH;_MM*!#8:7G`B#4X2L&^_"0/K2O7U\ >+MIG+Y"TA0!;A-600+88<4R!E/!\%$`#=_?/>Q"S.EW(W%;I'P:1WT0?WY'P\% >+MO_VRRL+.EVN/VY((4,5F74))RS#$]6'CP9A12^-QVW];F0.<P(!H):%&&YOW >+M*)/MFM-[?_@`(2>:=`G_0#`-?PN&VL=J(E(-4]:)44`(8NN#A&D/$;>[5(K] >+M`G#QKK38I!;HU]8"+K-X$`<9H4.(^Z6HMXAE%LE>!/12R^(/-M#QD%05XJ23 >+MIZP-]U=#L3^QQC2'[O;V:&H;4RX"ET1X0K$"QO(&IT"_JA[;0#`\92LW""PU >+MZ@8KJ:UFSG;1W=2E\I<X6^2N#.N79@F,H)$/9#Y@CYV<R%#Q)<[2DO%397,2 >+M'WIJ-%C9/#E)H%D#TC*B@9@@?[].9EH!EZD\B'Y`9`AU?DB!^OF1#Z)Y4:6X >+M)[JA@0&P-`T'4.SC::0Q"M"BSV'96,3X3F<`S+,B6(>QR@BF,S;/(`!-]9*S >+MF/#9X6[-Y1%@I'N_SH*=IL4H><M<&X`=-/O9@8$&R,?U:PM1W60RP[`&(1T$ >+M<5[K%`"/:85\ZQ&B!UEC,28(,@2&'&<=BZJ2+H'T__@:8\P_;PRF#DQ$(0>& >+MPN/\6T_Y#RY(8$179+AO3!'-V)""GN=147"=`V.1OL5V8T<S'-M@)(6JZQR_ >+MM5,;^*E3N+GZX_[`"I9IP4"S:3<<$W:*3>_]HW,=%EN>SPV*E[YGS(N\[@_( >+M4?U-6M<ZR91"$*B#EZ[O]`/!O_`;X%8-A/)'#@-A@2=O@&*P4_OZ>=$Q@4&= >+M-C+L?@4SYF5USD23T^;V#?!>5E#]ZN-);7+"1E)6C>2%KT-[EK\$X>2.1W%& >+MK:>H]S8KB23F,^KW<XBYU65-$C[!=H45*GZK2$&VSK#GIM,\4E%I5X<`L:1[ >+M-2;S#+"H#`EFYC$71&3WLA]'6L!]*"$$UUZN`?7DB:9="I\[,:MG_PP)Z`(W >+MN-F*1PXQ!%*3:"?P\(/M?7.`V^"'D!H=Y.^#PXO<<6/1/W9M3/@*]5`*\4/\ >+MB<4BM*9ED420$I(--%NDX_1S9L=I*.E7YI4Z-#;9<+XE($\]/EN'>RUDPY4I >+M=J-18=C5*D_I%$$D(H9Z;U>P?@LEF>FJNL"0A8\+FA=9$%<E#@$!X1S884$( >+M+M;WT?O['.F7"KC,D$(<!,*+,:T9CBF6*V]<>_Y<L%E)%H"_$Z>65=!W20SD >+MFA>^((UAQ1=R2XR>N:N>G);U*((*T;+L.-/XW*Z!:PD@ZK8A9/L^5W>ZY_\! >+M'RUL=6DFU\>NEL^3V%"+4D0Y6*HZ/D-PFK+BIE&H):M5*FXS>N)4V9C\EZ@4 >+MK\$@/24>3;K-:&G8W[,G29H$JNM&ZL8PU7>&C)`="9=\VG1Q.GI]3`+H-&L, >+M$(0'VRO:-OLH#-@7^O>#L[V=8N>R(?:\KXN,!.:OYS2FGF#X[><]6/\>=V<# >+MTH4Y5MG17[_>]N6[DK/8-!()3W%SE&745HP8TDL4H//;(94SXX#3P44\NYC] >+M&N)W[-DL0H+L9))E2(F$/[4_WO!BQ'+%"H5ALU4KU*S--*@D;%.!&?0'.MPU >+M(1($:TZ[OFA1F6MKL;O7.\($0]\]JI\NRY@0-GC!J5^Q)0ZL;KO#_,<_A0IA >+MF0LH5O)NOW!'IH_>/^D"B2]0AW`.^+D=S1WJ(D^V.%@L7/.3])C1R@G.U<Q; >+MV5=]BQ;3IOB/A[(W578$8,C5SS7)G,3,-C(`DI<.(;LV-F_!ZHC#6IHW+I04 >+M::V47W"CNLJ`(!2H7JQS5F/"AG@:X#@(.O,+]#CTF-%F0X(._\R1HR!1X3/T >+M)`/R/?I_KZ@AA`T98-&2ME)TU1^8]_,3'U[CZ"/S'VG10D\3MY/'C4Z1-H+= >+M>XGR6ZY3K]]HM:IWI/J"VX^B"89@(P$6<IVDS6E73`D?7,VR[^-&C45%20UK >+MPV:M%G*,SL^5!@L](=M#M=`A'(\L\E4:.PYC1EPI<L`DL*2AL$UB\?PH'?)T >+M]E]ZS$E@>D_\9(\;CK^C82I4H^H:>YJJ;R=3&[_//&#Z>MJK&.%!E5Q8<6S) >+MCN?E\OV_?Z"DFSC#VQ=H0;_\A,LOA+;P:\Q#WL#N,0@$IA%F$O["\TXH%;KF >+M=R08R5UL#V\!AGQ..__@?CKC=OZYW`:;[__>:#!N4(-IK0N0:]#Z7=0%+AT6 >+M@?Z++O]O+7."<2$9)BB+JJ.:40)D7!\+:A>)E;5>-!OHSYPDR@B+#A7E]GGW >+M+X,0?WI08;;''8*(6XJW^)KKT74(@W_P:MB0_L".3C..YN1CY;'_4AXQ:20Y >+M@?'F(QQL,*P>+]5K&H[C?VCDB^/`Y]<KSX%@]L2:T`O^%1(!5(>O5Z>$NE2- >+M@#X^0<&TQF>L3?604>6F#2.F":UF-#U9]OD1WE]<`I1C5IK%<2UVH6OA]U`? >+MV+$0&RQ2@UCE9:Q7`>+D9"'Z*-VWP\64MW$%H7E(BRTN.NOWD4$JC#1Z19ZZ >+MJ`UH^@AJG7KY"4'K[,5XH`,4T2459<6N\K7>?OZ9EY2CG?HYU[<07E"UL&`; >+M#X9Z<;[T/2G$W9S\YG\>W/D7O[&:)1!CR+H[5/Z!I@0M__4A/+0O>BDOEL-> >+MO,'AFJY_(:V+F,RM+N:IDAYW2RCJ!$><!J-MII]_(2TQ\BP?TD+ALQG_41T: >+M$*6('#=4K(7F1(W5B3*,N8:EX_`^6&0"@$+%'$UQNJX(0CL=#C)@:%JAXF_M >+MXP03\JSK1S&>,SN+8D=Z+;%\DJ=I@1+Y2*?:["(6JA<$H/7U5'](><'V]2Q? >+M`^$'^@+JPF71C(T>O_3G8VW[S@DR(QGR>DF)=:%I)T^+N_]^@MQO2ZH^B<E> >+MH6%^6R.IKN_^)3A1I@=ERWY:`B$C!%KBIP!0:5H0JCN'D&N8KF=TL10^?'B% >+M"0WD&+-L8!`3AS#)KQ*F:I8)4@*OEQMG]OI-=BD/XHZ##,J#8TO8A0/3K:^H >+MS&`7O.[DX*AT?@^V2E-64*66IR;AS14:1,!P>HV^_$OJ2[M'`)S56P(91Y)6 >+MV2T@"<@S,).;ESV)G^L,Q#5]RU<&Q!9QQWXS4MH`:XDY)B*]!29#/\?_&P<S >+M[8=`:#!#CY`4Y7XK69>3+X:P?$K;45^M?027HP!6LJ`D9J*'8Z0Q]3Z+"&,D >+MKX@6V<9G6\$U0`B:$9(_]D869-]>?P@$?O?%'0B1CCD..5HDD8\OPN@=XB\# >+MK6!MZ+THXRQR!:BM?L=?<`*:[-#&TUYELTR_L\RUCI,+S"93FT%`.ZF7;8"\ >+MEQOOT^)1]7[]\:YZC'$@^-E/P7+42\DJI(.9ZN)ZFJ]#NIZ[Z_1QK]#Q>L!/ >+MZQFJ_0ASZK=B4XI-B<@F?B=+A+.G7E",\&Y,0K@Y4--H&8M3CT%^$'#_E@*$ >+MA[!N34>[?FXF)W"%M]6;![K_">!!(+2($C@F1&/WI>%_V6D2DGN[7:R!82T' >+MTA\7+:XL57NCQ-?/>UQZF8Y;`J$!TI'FJB9=-GY=!8.4R!<2B"PAV!EA6(`F >+M6."^F#5UXUBHZRR?*BL$!GO`VO$[*.;QIIH.7`\&E1I>&7'1SCRFF#:%LU^X >+MY)TY682D##*;#3VKK1^_#F9Z-'4ML-H;C].M#_7RVF&`_["_('0[O1G+'TQ0 >+MQ4\I`UR!;@&;^C1&WJO@3<:-H5O9!%96D1FGUTDW_?/,LBY4I3W4FRX*).QZ >+M9Z=43EF`2O"O^@YHG3,=#_2`8)W,&4E*R>N/0#D*F[)%MB5?F@=;CJP%);YD >+M'D^VS]0]U%CJ^L&![*IT68<J"(EA.5@4L/_REYK/2'=8-FNTEI=YU#^J&\J= >+M)(24RN'0P$A+6`GPX]]9`_B[]G]BD?MQ7\VT"T$O[^2B)P-V?0R7O956X0YB >+MH@`^JK&0<0L;K-AOT%Y952Z2W#(^RWETDE,&1EFI\]=6V#(8TU9`8F6+&>5[ >+M6)(12AHJ"(,Q=,[]L>[02N;-Y<6EBI_HH^0@2H_1C:1>$W1+*AM>YS%P7'I` >+MB.<@P!K:O_\-9I>KUT>O0].E]YYAT50!9*V]``/2$-O"VGB#.N#RIU<Y!-AX >+M37\V^-?`"U<Y0DRTSCTUDNF_CJ1)O.@:35`/*#2R[!^(^#,\LV;AR40(CA#5 >+M%U*M!20ZLJ,^<!CW*68MEO1;,J5_4(Y<J8+82ZT@C>-O6[ND6<,]W[5U>QW& >+M-UQ^N'5LTBN7$7=WC/0X4`N-S(S5##!!D&()J.`EIT-8<"FVM%(")U;LHA-M >+MRAJ8XPLX@Q&<!VI%0YD$LCCWK]!,_*2^&T0CEV/W2RM[?I#D_%:5#Y%OLR@M >+M=1S&?JXA9'XM[.G@$D``\O],A79!&)QL.&&#^P.!>7E+)U\W97?+:1;F?B2L >+M7Q4PX0%"42S7ES47N4!]Q+T2K;O0B=*A'K`T"RYQOT8H*_*\*C&\N7^&W@,: >+M^NA6K.)>R'V!!,=F&*]@5;ABX::A+?6Z#LP>VJ_*D\I@)PF:PS(+-VTQ+-P' >+MFPV1KCO[+VH7`<9]EYQ"J)P$HMCP`09.6>D2>UE&K@9/L!7PT6ZUMVL;<-JK >+MBII`*!E+DM+]SAPQQ:R@>+W]QW!<JN211<HC<$3VY`%GX<,?`S)E43A0(:PO >+M9-0BQ?L1G][\!WE:<_%_L/HVPV\LN%+"7%KSJD(L;T:8E?/I@A\,.6<2`+<: >+MW5`A[#`N_UO8.>G/'_V%!<2@C;U3/Q77L[4]<&5(11?YF9GA_WHUU6)V3^%@ >+MU*N^4D5[G-2H*,.:]"U$FEK"CQ,,&CR."HRL&!Z9?%1T8SX\T?D'6C*?NB[9 >+M]DC$!K3&)[2^<IX#8@-HU"/L;ANO,(E%<DQ;;09RX)]^^,E>V\82+"DD^-W# >+M@2:]DBREO=PW>CI!7]`=54,(R0<1@P\.[<T?J@0WE7'S9E>9+#\N^UU%1R[A >+MF7CGDUR7CB*(B,9I7^(H(1.1WGW7^CF@4-_CK*0C&Q#LIC-=*DM5-ZEM&I(C >+M_^B_,:+ZET]`LN],7?E6YK]OMF@U1(;,`0M*H#T;^?$]3&E:6'(M,A?IX'\R >+MG(U&OPLP@O%^%IKY"W+XMMBL<K.)3:C<*['-NJK7/7#E6D3R)V2CYX-N?'F@ >+M9"K,BU1S/(N%!3G1:&^,;ZH`?9++#$6J/W0I_)F"%KI)UL\@*@8@E39"2!+[ >+M-JZ[=U8GK&7J>G0"\>]BX-*QPDH7U$27GC.^*L[V#$FH4'W?NE22"(PT^O8A >+MZ)6=Y"AJD-7XU8/#090N8D%9:[DM[4!?+E&Y*;"(*BK2-44EV*L]T#AUU&)E >+M[=ONH2X2ZR5C,$4U@XCF8!'PBS*HFHN_OUZLYD*P!Q.Z?;#$]<44S\)\]T1] >+MXVO_O3KK0;,1&NG1[</4H%VRV$!@`7[K[%J`8)<<P*.>\)]M`+O*8[65!/_Q >+M-9,)5A%:P`DM3M7SK`D*CHM""KH;TOX&O,D3-7/QF.4EX91I;((F/*_GNO2# >+MOA,@Q]%@M;?MY\?Z:G1?K``48/S:0%*8IV+"O-'Z0;?!N^%O'Q7!X[@]E=1( >+M23D)62I0NT'1Y94?44&2^I2BWU$AR%0P(4XZIY.<N>/@!T*&VEW/<9VQ.=/: >+MC7@88X7$#/X]@3@E,I+"`&`&?&T:(?^#+RD**TY'3[:*$5"CB#:SBB)PS6=2 >+M1?/?&F(<"7,MQ3`AR_EP`4[F.9UM6P1[OW*^5OH./7.('9(6]@7ZWX,)NHN@ >+M568WUT00F2.0/P,+A%N+^71684NS105\W\IKOG!],^N7C-"@0MB*BO/D/C^E >+M-EJ+%6*G4_3L?$]SSDC?HFA,_;'KNN+_"4(ZJ?&9R3'(MU:ME&Q2?GKE&H1@ >+M`JCF,>:!Y)P2!+4:-\'])?(=K@VVMGMH/\%9!.@!&(FA)VA.STW.6"1L+@DX >+M1DZ6:PLF$/P\5#YT'IK\Y%:8?(P]#3D]+%T_?UCFV8RD?QQ,)/195+5H`9H! >+M`@!4K<5=8A"K0X5Y^!,4`UDS4"`8(#_@43')KSHX`!^C-"M'&7Q,ZH1MPK"L >+MBLBSAO[P0`=D_J?\LCX,[!]7)2R.YH6FX0%1;"=G*D?D)AUS9HQZ,RKY6^\V >+M&M<XWX:Q_'W?;WM.9G4<S2-A%BQ6]VI&!T42VB/;C&]%Y(_`A/_L[@F\&V[( >+M?T+9+OY`677X\,<7.1RV#!?4#7^G*M]!>%^>5-^ION#2PVRE\P,I[A_1C`,: >+M"S2Z)@[%BH_".K=&PC]+0%2)]&K+.6C<J199_Q`O1T^<IM#@MJ>`V!`I15^^ >+MR5(,$1%8@'[J&A5"BL.NETF<8(.$R65+Y+8=7)4R(V=9^,OZAO>=5N7;T;A> >+M[BQ[>96H;L`)A[?$8%HAAT%L0:#657T'4`$%)AD`QGR.>(P-,LRT:3C5-<DX >+M?@K`090`)'1%M<E45!@B$HX1+FTW^B(%V.E/ZTVZ9HR[PD]2<((S,\5QX_-0 >+M<I,L@\*E&'DG)&NQ@_/(=L%GX(*L@?I%-:]`!U(>I*J/E]:E[X;#J?W$R\G; >+M/`F>Y@XE=D>,E@#%8?C)QE=RDX?W;C"2B?Z?3`@4=,A'JE]Z_\DM+R\7A)NQ >+ML925[?)(*3K+IZ`<O)RZ_D\EO,RK1ZZHK[15X)$)&_KTG[$Q70YT)!*D"1:V >+M.%2(02-G<+FPIY/2FJ!>VANS?@[D*NN".5!N^EG*;K('LVD@XOWA?(&-RY_> >+MOXS8Q6\*FC9#P^"P%^L*Y#.#>4!X-U[9&E6^J,K)EP1XB=KF0\C3@7,(DS\G >+MN"/F8[B,_,$?%DGS"M(X$(5,?Y3SXP0M$B@_4JT([A+0QMA7MI?\-VM<33PN >+MD=;<[;50S`P%P3<-WO)3T@9&=D:@DV!$PJ1A&Z)4,X*^VN7*?M%!Y96Z_7JK >+M03,5L>YV+#<%I@]%KA?+/2L2J)*9AKBJS&_SHC\B`WBN,8`2PHZXLMU%)J7' >+M??KYF<,.#/`W_X`\'XXT1S*!$A8VT-5?M?L`.\3C5$'KH?6)[$Y@4U&P0'K% >+MD\@/N4U@O.4PA&7]G`)/4JJ@&NT7(10[X8Z>=["GK],'E4I0D*D+SP9]P5:N >+M,BIG`RQ4%;)6`ORBZ!M"\_[]<:$,0_0#&_CT=/LZ`GWF#.3CAG[D63-V(:BX >+MNV9GFK@.H1)\!\4FY(0BD3RL"<-+4J0L[L-^<C-7!\,LWSQD!T""-!S70X*' >+MS0*(`QU&T5(DN"E<L:!4!.")LEW'M.UI33%RB#S!(++_@D40A`L>4VXK.O7_ >+M\O1!`7H)*V;NWJNP*!$)+S1D^1T.D9AW0^YM8-S!U,Z;I;BA7'$&YJN+*ZLT >+MV-__0OB2"N2%V+T^]\0&-S2``$^GSR";_/[QU6'NA>X$$WLY?I#%+60JV&_N >+M;NGK!2OJ:!/0GU4T&J7E()&3/18B/*W#FA'@^D<'4M!LAMG%5J6PH%H9>"U% >+M2OP^5R>`\U18..&)Z57\Z]LPP1F?M0Z?</=V%Y[0O0&($G&1(HH)B!GP/[PX >+MZ49QUD):T?;W$C0G=^(W?;$J45:%M.7R=+$`H(^Y%600ZI@@@Y7[(%UN%;L1 >+M"#JB6?,-D?DE4:HIHB9T8B`*JI#%:+.Z;.E6HA$S`/H_JB)!&&4;Q"=U*%:I >+M:]>%C2-7\H#HN1QR6JU]?M.F.]4^TVD(F?`3T8+QDY>PC!-!WDFR7Z51$-Z, >+MX<"')MX[W@[!%L;;XBL:@+MY'1XQ/-@\<D)?"W5%B_+/#XVZ%F61O4VCK4+W >+M#;$P-"*IV3X.CWP.`?`+)2&:=[@VKMKLC6G_HLEX"!K7RA)6E#6IXB7X`F.Q >+MZP"]Z?<>5.(WA9I6VC<66H3Q0*`+>(?%;W#6AW\5-K%Y:;=1D*E]XI!15<MM >+MG<TIL:P@$>D,V3(2[A;5R7\YY0JLS^.>OOY&:B&QAIWSJ9"5>8?V$5_5<W=O >+MH',FHPO?)WTF/-^GQ$BG_B>05VATJ>$*`5Y36%[VNU][4YE0<A-ZGC.Q'XE: >+MV$YU&9?.$5!VL]L8R7=A@U95.J*[8WYX#DUFA$5VB7_B!GS2O=$N/7-!+C)@ >+ML^=`>!&*:CTR)KZD'C[G\&U;/;LRKGC]V],5KK\B1\GX=_?95YPPM`<"7OTS >+MSKAYF1]B'GR[)EH!A]G6B`&,R$'Y$&+1N&@WOO+!MHX]VZA$ZK<2:"2B59?& >+M9NX:/Z!&[1DIK/A9PO%0@7H<WC0>^E!'3M+-G`@8Y)K3GBG_^OA./?0?OW7C >+MSE-^]PSP>,1!PU>I^,:)1`5`,>.O(,NUH,_;5_Z@R64G@3+)JNE@XO@J00K% >+M"A_,[LB\Q*EYWY-OHTZ&7V_E3>RCK)F)'7`6S4;-JS2K*NIJ[4<,*=FHAI37 >+M6IXMI;=@7I15RF:KBCF;PA#*<Z#WWS/VLN^!WU7-\M1CPVY5E!:H];2Z2S"R >+MP7RPU^=S+>".,KM-GGT.IBB;"C"ZDB4-2E[0]*Y_KYO&E\I"+GZ/?`T>L:`S >+MV`2:DQEH.^[KDW=S6_9"4YS`,I5J(,MZK]YO+!V04@;PV7?RK)D'6U_Y5FK_ >+M(WQ`]>NJW(Y&!@_H*]A*M_KW0_=Q@LLGR,VR^[2@7A8^/T0DO;6>_47Z#>;P >+M>HWNA>S8&L[/IAG*4Z@`@+*8YU+7V0N;:2"L^\5(+E-MN'<ZXXE;-?%H.<TN >+M^0@)H!2%F\B:VA\2LEH(>5UW<4@/OVX'OZ`/-5.IUX/=^#%HOFIEWH5?%??W >+M[P,4EW5&("4?&\TGA1Z:FWVTB?6OS=CXD:#A'V%AU[;;7E7[8"EKUC\&%)NW >+M22FT!OCZ*6<3T2</#U,$.2*A6@QV:G2CWE:?#-G.9VPP2UYAIUR)R$(*V@`. >+M73.TT)8%!9B/KNY_4R;C0DG!FGZ!E6>DY:4;\*'^G?1V9GIQG1Z=7Y60"?CX >+MNHM#2L19F6FG@>8/C01)CI>VMC;UT5!M]39ZU5U::\6QUR\>"OA@KG51A"DR >+MPN+Q)D*Z#0W4'8T%;.EJHP8"D0^*H;M_5`G0@\@[3UTV\):(^/$)P!OP",/W >+M9OL-S<HRM>`G(1.7R_YXQ*63*N11:LSM)AB6K9\NV8R]\Z2:ZD./XAR0'_"A >+M[$*W\?K7`Y"9R/:N+U+F;Y;PQ>I/DLJX78Z.U[#\P.[0DXH#E)^<)O+@VVX8 >+M5^NF:/-(P*$5%O30A4&`CR=*#EE&C+IX.2<P.S*CFC^WUU]9NO&S2./`/-;7 >+M3V[44W7VT619D&E'*#9EM=,DHBDKA">AHI$Y+<'R+(O4#!/4!7*K0PPT.ZUT >+M67N]2LB5%6O+G(_SS4W[]Z/'T<"4!VJ%;I\X^``+(^]%8,.(R$2+V%"PD=J4 >+M''0,VI7XA"H<Q&,*KL$*G$?+%H^A/K,E9!/41YS/Q('1'GE&7G`G7@&38RS& >+M)':O%XD^Y1\XP1V<*VIH,*&FI86`U_W,GY]8T.[DYYQU5#G9:ZRM(2B8D#D3 >+M<_.23NV?P*&,GA9+U5&/K%6.S9*KS>;(YF(.95K-LHTF?;(4*-6)4:MD9Y=J >+MH@)_XT,6<0+G-67IP:ZXY-)UN=7A81R^Z#W5)ZW!H`3)B0`O6+O?MR@N05TT >+MKHWD=KI0IO9R$NA=TM>CT5V'#).+RZJNL0BY(&//^_?F-5OO57HGXS=739`A >+M*.GZI%.&1ZDTE_Y"4!\7_4Z^?>_\[5:=TV`VHF'AZ6ZDTL?M)J]A\+"$N_=V >+MH!%02[#GA#\[&D+`%D1)P$(2/&GZ4(81MO_HRX><X-R-;+(NO($TOI#_W_*1 >+MEF,*TOR8A<@$QA+YK%DJ4%@-CFC(M"C'2<V&:5Y4`)=R,T@=IL=(](W[VN%X >+MQ*&0V3^QI!T+TW(<Y]Z<*\H;@037FB]+L;__T2B\.EZ((=!&L_RBV(9Q[:/W >+M\&]5N+;7"Y7=^C/T!PHTV9SRAXM[0M6GM1^E8%#J'-U"1!/=>EDLB6KF3K-B >+M[3VR?5U@U[#8S[L5S@W3C(2`;E2X&^P?'5#()B$EAESI\1-EV@BOYAA7GWIJ >+MS'+6S^4*24IK9A`C4,E-7A,5<F5[,93?<#N8,YGD.P%HRC0:I,,UY@4#V7OV >+MG8?88"5<X*Y'@*2^YB<*P6<89'SAW#WFM2"Y,S+7VG"T!H[$(5PL$*7=N*[[ >+M[I#C/CUW'Z(K&CYDB97RR26X)GJ&.`A$D.%ARC'Z#M=1,.`AE]$!@R.$8("8 >+M-ZCI#H_3PRT>?(P"4^1UG/F88NNG#F,B!6Q>$EGS(FKRAGAD(^'Z*;0@XOWK >+MUP@31B(#U?L3_3'EX901?/QZLK'>`32._GM5N$)9F\RJ>/3A`X?EYVZ\P)]I >+M>Y`RGL!M2$-@V,8($*ADQZ?R]H-D$X$<#/XRG28>[WE>#S4)(ZU8='EY&;5Z >+M+`!"^CW?@\&XA$\9_V56V3+D#JJO=I7<IQJX2]8*?8NN`/Z#D\]_[9K\Z3'@ >+MNMT;=['.0]@=T'LS`)#IPP<Q8'PQY`5!K'D".TIV^W"MMK9+U?CTFK8C2K4P >+MN_V*DK0%&9=_ME7QHG@JL]&21K2,=HN^OEX1:Y7-=:LZSGS^0VN8T<(X'<LH >+M)/B`A0)XB'NMYG_Z1/[C2!9K$<Z"[['7K-4?IWL8UL;R;QSK0E$HN$<C<UF" >+MUH[NTM1/\:+ULT26G4,1@)C.+Z6#!U0UQ@82,@"DDHFIO?!78ZN[XAM^`Z1G >+M9U4!FJ5O/HP7&T4^<<QS;@0O&P9(R5JDI+.1\G?/YPGE5*,CUF%VN[03V'K? >+ME(X<8A$AU5NI]P>26"QCHS)*JHCF>UCQWG""VS@U[/"#@IPIC694-NCL:Q\" >+MARUQK#/7/)4T%WB7$HQ)Y*QE%&=%C9__?DD>JA)-M#X):<HL?&Q(>P4Z7YI2 >+M6`$QW@2UZ+VZ)L.P^"0!5`Q*H\YXX\;9PJY)8NU@HH9?08YQ?IS<<U>8_Y`% >+MS:H3VT8_:4ER#L\<MHK)VJ<+Q]Q"%/LYW-A++WB6W'.]H:/Q<WGWCSL>5/A* >+MK`P:+PR,%Q]>[U\)6^;H<WU:,,!V[1(2[/TM49C9E9DM_C,%I[%\<,`.\"21 >+M_OK7,2$(*;%X"W.Q>*IA')KP""=T\O%@MF,3AN&CNF-I[5/=-9(R(C-QQTRX >+M/YPZZ]E(B#Z.7V17+QA^-I!(7PB`!9!$04,Q1!&EO.?&0QYU'&=P6>?9L>!# >+MR?>^#U/]H>TOC6GG$-5</"3Z2GT7)#Z4]>\\B0"]R#==_*.>)'J2`GPGC+7N >+MDKD[A=A#"<!Y#5V[$#8D[B1S]@)[HNRUKW1&OU1<)TWZ<2'%*=8LL8@!6741 >+MQ@\D4*4H&H;XTC)<G!%B'1;W0W/@`P>+V+Z=*P3SSGN(Y5^Y21;HWXA#N >+M5[&UD079GW(M_D_C9/S$$"AJ:N+S^-4H:@='CR!0!1"_J4:PHVC"XHJ;W\=W >+M-)%Z5.CY8?E$3=_L'3I"/0AZ`X)M4BOI2^5M.<H[@KKM#3"6@PAL+[\:.+!% >+MLSJKSV`,MKBR@XR]1FY;79L??2Y@9DBWH9&1/R"1G@R4$-36L1?5`2)8'K'# >+M(`UHP#PM]T'[@"(*P%`7>S;)S3A_N3``BFIT>U?`U[-Z!"ZCD'T@:LM%E`2Q >+MH*SM)^+G70GE:)+W$J<[-%"([S)C0N.%0<5P?(!TA:4ZDAF=QB[/H*W@RM0O >+M9'-&WZ&+B#=2D):NP61!;ZK@YB9LH*?CBC%,%DKY)H?2-(FP@OU<00U@-"BV >+M!C/5C^R;%"$`JNC.WHD0*(@,B:=8J>;Z[X?,*\H8[]0;S!7))X"0MNK0@&8] >+M-]W43>IGB.NZ8FEKD5)M$1+-BAK3?E&*<O(7?I&2Y6_@OR2QQ^U[(:0V)G$- >+MCO[*%[+A58AY`Z,TZ"(>..DQ"]/;R^N:/Z(LD&W%KO5"D^EQ@:\Y.;>TYM3O >+MC2OE.,2/>JFGK?#'G)DO&/1P#S&.,2&[45!&\Y&5YJ^?`@H*Z"-81O3)3RI` >+M\:56I.\[[S;C6X^P+!KGRS+7EW0^$Z1.HW^-S`+H(JG.8>Z/19=Q>M<RY=)U >+ME9PE2WJ/?YE',F[NS0+]+IPG.HZ&J"@AJ#)ACE4F>@0Q&_;Q&:0][9S;4K,+ >+M$;\95^IS"39)Q5:6/YU0:A>%N$=B$REIX%I#9NKM!,SQCUW4)Z*&*)7B>]]/ >+M11P*,=E:V$N\6NOO6#`&XWR^R+O?PKB[3\WQ$SPX1)DI`RC&FGNVKJT-C:N( >+MAP1$AGLA\JXWG)!###6(M,^X7_>^5P^51K1L2D7VH;UET8#4R%($/':OC:@R >+M:=,YXB!Y<[0>;*`[ZZMYF<\!AQJ.NB[?>*:8>$'5P0$9?^/-)SX"UGA)I)@7 >+M?QW]+NK.-,EDC]1A!LWE67V40\Q1E".-J`B\FAE5-@Q(!C';W%FRJ&PV"H7* >+MKV%7"MHVAIR+:FYS.P[GZ_H)VLWV<UT43R54+.)_6GR:"=D%@W;Z':YZDX*/ >+MM'7#D8->=!(!L]\OD(8_WYV$O\NJT3@-`1(:P52]_XO/B`$&_30!-]"N56:' >+M5'2G1MD:35BR^Y><%>_7<-I)WKRA/E*)63T1*F2YFXC/`FV^>ZK1+M+7F\\G >+MAC;^O9;*VPGBGU084%$[N#DZ!FET?46C?:Y+T9`@UD1&*;/$:"ZZ*$QTK3^/ >+M&:^3I(>P3DB7Y-0<%?8$\!6U9@OJFPGZEL3(5D45#S:$I7T*UX/LQZE?21I$ >+M_S%;YU:((3;DYK0]'#QEW4>NDT8F63W;WR8.F\Y^PH!?2'1S(ZAB\<JCOB," >+M?[EM]#L@OFK^'31#36Q7:X>U7Z\#06OG2+*LS=P&=P2B;"OGC(5'TX;H4ERC >+M+ZZ.8Y:2VR_;\\$U";^%_&XG0,SC8!#W=L=\=O*S"`TB$NU4M5_>/+R**-)] >+MK7U\Q&6Q3,?\!OTXH2.G?`4=D[>5ND(?]@<US@U1ZON$6N@(M%$"DA[O>*,) >+M-:2QPPJ:-G2U$'XU739F$``189/5+0^5Z^`K48(@G1'R`W82)U^_2D.7K;XO >+M!WMI/JZYY2=ZQJ?`NDNTY<H$.452K_>?7.CXF:AINIZZ;[+B7UQS8QDL!7Z4 >+MMPF`'0&"R!$+1BT2QQ9&Q4I`-C[>8TQ2<=2)T!XR+V8G4@5V<0E$;1U)<;6- >+MM[]5)9'!=&AD.C@;4KKC@GNQC=.R0B,UM>ZK(+[(A[\!YS,.'/]%=D"N@[W( >+M;R3N.?#%=ZA>22OCDI]'\@`E!/U(7ZP_YNKA[5X?/\C;3^5\[9AQIGK=G3AB >+M;%>@65XZ?$::\5]F'4ZB^?JA.0EL`/FOM0<E[F#C(:8KX1FNDJP+0ER/&4-N >+M683Z`)A-;?2].3`=XM9`E;51BM?Y",M%!0\-D8MO'UL.+I^SHE`.5_<=%(B( >+MK-A)6\'&/'UX/LKHYQDNQ:SC8<GP:_R+R]OKJC!'X_XE,0]/]CO+6CY`F+\S >+MSI%:45G@3'B17P9_4Q.2!!>"/YJ&>Y+0.&.S7Z<TC)T)^AF;)C'OY)QX]^RO >+M03VI&F3'V$RLTR40`):"?`$"GRNE=KIST.9YHE9$WDJ>/YO4P]W=QCAK(,5V >+M0J`*]QFWY$23.W/ZW]$ZVFN-SNF@H\"LH1MC7Y:*B.U8R4.+SN)*#8$"Y"4% >+M]JIB8\&?3MC(+KM,O2YY:(M3/(*(8*)C!^Z'OWS[U!1O\XVH9ZOZ@Q\8?ATL >+M:[;(8?ZG]$%%H671J,T_/X%\3W.H'3;'T0BJ_/E0I$7`I#[NQAR<S5!?/UP- >+MX1E#Z,O:<NLN<UW(D?Y,O:U0P@U3](333SFO3VLM:7FV:5?2S467J6%?9C&9 >+M![;\T')MQ)E\FU*5T48QN0SU@]P*,I:C":ZX+)T#>;TZC;$/)<&I&9P>NFO# >+M]+[Y"')4@YJ/FL@K,A3R:3U:-=Q?.))#)I3BI>MVAE>%KXQ.4_Z$2]Y3="UJ >+MT5W&<\+*S'K0R%%AHY-VDI<'Z[D2B`&4'-R"D-K"E&X!3`NM\]W7PBD0$1A% >+M9RJCI2M*H=WC;JP@J,*LBL*SH%:JO;T)Z#`P%3*XS7,GK.%?-;X/BQQB!.AW >+M:N?#_BT?9BU_0IM'GC+?K]V9N)E>YD9,<#N_#)D$=\)V4N;<,LI#`[V`QJL< >+M3YVPTE3;&((-C3J3ZOW<_R;-ZW3H+;P6)`E!&=TA.Q$&&>&;L]!%G#7!;#Y^ >+M["^+US>X#PHOFS>Q:/WB9%"`=A92Z&0_4'Y1(:EO2,$\)4'0;["Y!72/YF/F >+M"V!`AZ%,S!,PA8)AKUSHYH*%UKN*;0.?J)^IB=KU,I%2JUB9/_DQ0D=X#GVR >+MKHJ"U8-FZ5PE&B?E+#YC?0HREI.B<2M*D9"U,VCL.'(RZ`]V_*NT(O`F*.-2 >+M_W21LS!N?K-FI?V$*ZL3@FW&)^>ML0G.$3$I<'`<SGX^*U=[35L<1P[RD>?` >+M+C9:F"<[%Q\[:B2'&E"L"FV8%-1<L)X@QIU[AJ/IK'4*@A8Z7.6X'8R5=Y?( >+MDIXC-Q?KI;,!B^8_]OA`%?QMCA/J]6TV&?S:0GM<OY8-M`'0#,*<+1*K4TV? >+MX&VK]!#U.J6O_/(LS5P45`1`,A!E0H#2#M8'<"/`).<'];R&2<<XD<.PZJR" >+M*'=<];<M2B2;E\)J*Z`KV]IJD!$YB$2SQ#8OOZC]APRN&D_;Z20S.>L9](N8 >+M41Z8=VGQS%;I"S&6BQ=&V$K+I?)H`$Y)KY6,<EI8C>S%ND6MW-(4F'=8N/F< >+MH3,K"2KIN=CYPIN\6G[*E9@/F^WO*BV/=#P#;%SO;XXZ*=-77`/#/^V'L^D/ >+ML2-&7[#?0"@W5NR_XX_RM;<N.VH*PV#7O+G7=+U_^+J\G-;)^#JF^,IG..4[ >+MG)P%%-&SQ^GZK?<*R,M5_J6BU`]P52,GV]DT%'&[6>6TB,5$2YC(NC?IML0H >+MG&_3:;8##4W)V23-:X-TX@<(6[E;<(=1>H]NGH'$@<2<A\0X(GF>^ZAX#1%< >+MAFX3^XM>"DG3*36C>\%#PAAZQ\IP'XCN)OP2ZPR&,Y,Y:>R`L)Y+'"%N<B5W >+M=.1]LMN_=3=$&S(P7<,(C4M$0+G1[`U`6C;*O2:4E+TJ.EK9$(/3_1A>/&_D >+M34KCZ`.&/=AG?J'XM;),*&&'^)^RPVB!HEY^S;83S97`_#5N#893'*>&)M5" >+M&7WVX*7[YQ(#5O'E$/>J85S.9D&L0SI'QQ$@>\(7%IQOFEG&\1TWR13:ENX\ >+M!]-K,@3--51%M_^J*"(Y3V*J5$H5-1L'"[&8`[ZZ<#*&JO:L!;K`>DL>KP>' >+M+G3\)]F[%+L8E\26OY8.^L4R\JA<P)LVCUL3PE'\/F6`OSFWL7AKV0HII``V >+MS^;AE[I+`A3B_<W$)2\&]=(\1TI-&:E]R_PZB/':US(CN7`:B>P;^<69G=G) >+MF94;C'<AOD\$H>84NQ#K&C3Y/_0!\3)@5.QH>7M@'"95`.TUM&BDI5[,;<@# >+MK1#;CF;R17[.'`G;Q@?V'=[^NCO#HWA?=Q>MHUHH_PX8ME_('9],-,:R-L8C >+M[R!`+_]08T@\A&?SJ0CSA;M+_=CZVOU1I=!6$0Q\(S85,*1[91?(B"PC?)JG >+M6JGF]9.ZU?04F##UK`NTK_LN5U$"(CNG-OH<_HR5:<T6$0"7M5T:V.15>.15 >+M"Z2_A@QJT^)6&U+2LT7:LCVB6+,<;>G#<`'BW"#(1*&6$U'(2Z*.U4()5.90 >+MD.T($PMWU<ST-"K@T\@<<(&B3J1OGWLO`R:]G==G=]Z=D@X@DBL(E#H<BM." >+M;#;D)#,I?))$QR@G<8[T;4RC=P3'^4%O@BV\$?!%O5T&RE35GMZ:X&]O(QU' >+MZOS0XDCB,)BA*PC(-:U6B,.G-?VB,*-2?M`PZ24%(W+`\C-:=<,XQC]K(+]6 >+M]9LJS*S<ENQ.?'JSOJL+EP$%Z)5@$J;<1Y&%KU;<WB(NQD>#&^5<'OB(C.\_ >+M49C_2*`7.:\'95J5H6XY0,9('\GC1%D-27`P<#QHM4=OO\.81P-M=2C#=&1! >+MT:9`%6Z0K,.Q5X)H@X,:.?;SL"Q^/F'Z-I>O*>$'Z\R,Z2X186#"7WS%2>T" >+M:*:'Y5N2L3A)27>A]&TSANJ[?>GK.X#KHC3>250#YC!BI\_GE,D[Z)=3)5@: >+MO6LAI&GV/F,VR0.\YR`SI^O29<)VMN,!/?NLM7SB4ZQ&T&&R`4X7@@$ZG#\H >+M):ZCB%D;LQ`@\_A4#;L>R&K#II,5?*-/7__!45`O>8"`T14D]AA%LZ#8'CL` >+MWW:/5OO09E2Y?A4;N!Q0N*'<@R,;D#YN71_]E+CAI'!3.LO[-[^H<?:.63H+ >+M+Y\'I_[%C=1&8:P)>8*L.`CAC0OW@>'#2Z&H:U&$1]*_@)[&Z4H<CL!D2WUZ >+M-./,5)_S3"-/.TZ%@MMS),P&!4?$D[#G+W,N_EY8$K2%&C<9[3MS.'!&*'\6 >+MJ(<8-"J5DJ436!`X*P8)C[_\#VX=H2-AO&=6Y7(W`-H&W]TNZP>2_6Y<UR)F >+M7!=//3#FZID"8'_24`A$%IW_.\<7@(R&U7C[TZN((T88[6JO6JG/"&=D8`B: >+M7S[:7?JNCR69+2V%WXBJJS)0KIFUGGW?5/`SP1!"HJ,AR>5K%)1?TM_$XL6( >+M0PRJ%J$L8L#C!QQN%7"Q/0OEG]/<;,Z0/JHZ]VB2CWKZX9)W7AD_.17ME^;? >+MP:0/P0-O'SVN>8GV>H]&/B/WR,.T0V89Y%9.2K<XA//FO:RY2<H1X4,CL:$$ >+MR=;E^*2M06@DY4HL4L-[0RP[O"`ZCYFG>Z%Q#S'ZNEM"X"AWSXN.#&O9!#\Q >+M<`BDFD2I"A4=C].&#:1'8"4O4'1'X;S*>Z0B&-:#X"<,KE8L-HOD=@W<@H)< >+M%%I':FNI%*A@5F*#8'9$GN^K7?')8.N^;Q;4ZG7J1^I_J@?K^2DL"YW4-NQ9 >+MKE%7CD`YB:XG+5>ZI2;#P',>=&,B%U]`B?*Z@_6.=P2H0'`>$L_J%FA-)$;> >+M;Y%T&D8I:.BU<)Z^\X_C^<<^/'[-](#O7FDUX`<9IL$$@7;.V%W[#EB*"(`D >+MU)N(I,--_;I)OK8H--=.N+K^Z=L+0*3'&"3K#3$]K""^G@PEB>M8%@`K$>9[ >+MTOXYLKZ(X*R!#.\5M);$8IACEEQF=UB(69R+@H7EM`%!]+ZV1'!TH];P['^3 >+MISF/2FZ1YS6'@,8N2]I).%;]6T>OV>\HDSF%J[I@`TC/7>>@Q!'L<$LD).L+ >+M\1G7VI5GG\#Q"T(08^&C[\!Y4G;30:[$ZLGK_>S?,/;9(J-1%+PP>S84@1]R >+MK!ZDNY)Y>J1.2P6J`'*\[%GM\::](([P0??H486QXB/=H[&L=0=T_NU"V!J/ >+M2/../GM3]PO'@9,DN4ET4-SE\-N"PR0_#/^NX0M(NK=TI"UUGKKA@UN);'YQ >+MRHYY^D?TT"P((0*>;2`QC^5[H.O%<'K0KPP)Y3!9IF>*TR".'+TV*%/P74-J >+M4;":R2Z'%T(OVV-R_*NI8.[M"PK8"SKG)M8),\C(>+919'KY!W7CQY?(N)B. >+MCG0K.WKIR@<)!1A$O;%VTC@K_Q%;Q'N]W*JREF(5B%KUDOE7$8$^EQ4>>WS< >+M]$Q?99M9!$+/<8`$%,<^EE>TX95);^L2/A,R#WRP#&R+%6'?0:4>2:]S]*3J >+M37F\^3=\=1$/&6SMY4@CC#\2KX93)`W\KOG6P)M7L./ND]%)>.ZV8(WLGE'K >+M3-MZYHA#S89#N=<8TG;]`6R:!^T4E"ON2%R1@[UP;#+=*UN/4Z[C-M52,+03 >+MS":G=$Z!=/L`#]XV"VA["5E(.%LL:G*T82Q^:5&O_W\<F02L.C?$'H2J00(? >+MUQ!,#+M9HU?X$RX:HM2+Z=0431S\6K^#%10*#5;?4`MN?>U2$_-4^E/!V+DC >+M+7GWZYQ!N>=/1'5'0GN(KINA.>O\!7&39WXH"7J^GV[RLKG-TWC8.SQI4:OF >+M76ZK2<!_I"C3090!LEMNJ):,ADQZP'5D",.GF/X19)BJ@DK`BX5$5'W$QWZ' >+MJ2G3Z-_?VIO=J@"BT9GP']ZQT]C/G,X(OG]$)I13UCQ&I+3":235%/>"C"[K >+M1P\>?:/N&L$H(5.K<^%-A&;="J*Z%4_<ZO^]10F1?\R,\Q<RXA7`JHA-S6.Y >+M],*'2832^.3G>FVP+@KM0O\U$@<;L";%#/#/['J(AA.\4<S5&U-._MK9V@PE >+M)UJHR!2+>7HW7&JKXJIRKW\)$6#7S^[BJ[<7@9X)?"_*?B;ZQFDA"W)#@?)B >+M=_D+D][0M/4K\6Y#1(>D\*4>HMK4Z!)IBSDTG]#DK./U,;"MM9%R@0>K\^'> >+M,2K-)S=05OX1C65*6Q)7BLO?`%^VR24[G`>V%[-<4JK0:BDMK]]T9F8Q"G&A >+M((SG-\3K#N4R020Z[T(5[P6NOHP;#W=8B.Y[G6IKEV)>_;.T(O/?.Q7HDWJK >+MUV?5*ZT@TH%Z$)QQY!*-'<:&EV3I1VQ+RFX*6JGA4X11.KI&04=HH?>2O#$B >+M/7T0B\X`_.#_A5>NLQJ<XO4'#<MV.=@N`WQV"%/3\1C9D;(`^GR-Y5DV1(%1 >+MY5WK\45($[S[!89^6T(ZSRXUZ;[\-@H>)JZF;^HM("\NK&<!?>K%'&29A<P; >+ML,9-CO">LG'3$NJ?!PUFGBW^U&J:[N<T4$63<+W+*6LF``Y/9'-M2UE.:OQ9 >+MU6D2?=I#YKQ%RFEG?8S88U?1'I?-.Q$X\1,<JF(BK4Q!9#G?V"?#\=_1QM!/ >+M!+BB;(\;M=;5*97E$H4RR"5APUZ**!,9_RX[[+OI=L[4&>#\T+U^$W3(8Q!Z >+MJRC-&0C5G*`QB=.<6Z,%86X'SXOP%TMLJWB0-*W4,U&QUP3OT0XT@6.T(?Y/ >+M'J-WL?8T0.\<5$]9I=48:9):J_-IUYT&V<\@4#+<3-)OG&`K,F$BX%`MC2"= >+M5-:Q"GY#P&A6]IC24Q\7[!0I?SW9+&A9B;@\0>WJ)RA(<(Q?&?2!J%+U,(JJ >+MUOL4Y/Z75<BXH/_+*C*;27+0WS^3OXCC$O?KLUDQ=+A4VHG139GUS++VD/)5 >+MH=#5:2!8+FOQ+_19YK,I]5\[,1S?A!2:C2:X^AS-.,<B2O;R.J@X[NFHDBDU >+M$\>$EK93BZ2+33?S?@V<3AO\'CH_;_S'+$IZ%)?'PKD#;2Y*_'%\&TXZJM$' >+MG,*%<T*,^4_9M<8IY8`GQK!/WW[<2I%"CAA27Z=%\)#!9ZXPFA(FB36UHE9_ >+M*WR@<)-M:A#X>)&@C4Y[A^XU>'?WJ>F9DHT)S1760>)4-?F_`(T8^G!OE0UV >+MECBE!S(*I8P'4C!J7=.:M'F>%4/2HIB0C:;1QK723?"=)L6Z_N6ZKR*-6(=N >+MHD-!^CV_/R"B"[`LU4P4`^\09$TW&;PQT%WQ47/,_9B!00R+Y;5R^Y15\S.P >+M:29T7+?;@>X2'FB#\UU`2DR^#]]G%+\6FDU;[!##ANY?%&Y&?=\_2(L8/*B3 >+M.%1<_A\@-`9-"G0)(=Q4YWL"$VW-O!KKK26PS"PHJP7V@!&HA*W4KB-W#U02 >+M?/&:;DE'@W9,I'_0!ZL/+(I$53H\\H0BB&A^>^@H)[]!>,>ADC_G56LG''KR >+M.;<W2%^:L[(UQ48Z0>$%QAAZ4*2WXZ)\]50Q"3UB((A7G#:/WB'@Y+FY$#%$ >+M9=MU"LC^F3R]6X&V\6+?4>CL7>@<XL"\&^=.H[H[LJWB)*D@?,?WMMR*4U^\ >+M`";T@@^7N(_Z^X2"1>'JRQIEN,.K0XSB^P=#PBX4QGB,!"(&(N<L3H-)*EJZ >+M$(#]+V3WL<SN0NWG^:]NIC-I^@FAO\&ANH<!@@K;Y,ZM$TOV;373_L)Q30`N >+M,HF+&&N8%Y^$M2YK6_`<.->,+[#2OROS^#9>]!_U`MK717@RA?/#YRD=6'=H >+M"K.&YW>N9D.XX5/JMKO3F0.P@QD\[%ALV%1M:]N&/X&]7;B+K7^^8`0WF\F( >+MH8<8W0V1[^Z.HG9^HJ)NKC.*(`X!W(V%N0$A);89WS12LTQWJ]:6Q7&:Z[.< >+M)!$ZT/"*597LM/55,@=L1VHNPK.Z&N=->0H>@G87\B'0DD,O4'.V,W^1Y$LI >+MI13T>DP")>5XQ*/KSET:*1^4YL[)I!9HQ)!3E&X`X],G-.*B,?$WLF-$0O;" >+MZ)Q[,DT:C<2"K#)M?``F9%+.MHE%O\CM#-Q`7<_('1@@ZS.-BYEO!/G851;J >+M&ZH7^U0D).I`@G(Y$\X&S<B`&HVE#VMR!A,O*^JU4"><U?*N!(7@[39\TA@` >+M%'2H#[.JPQ#3U5CV`099#$&,VUDZ>!8,4"#BL`LM^'N=8V+0N2M-*'X0B>9M >+M>ER@M$1,33E5X%O+/S4%=7TKMRK257&F$K%'(C&,D":.-?.7DN6!<C[5HOSB >+MG+9H+&"\\N"VW%)U9U2Z=5X>=;NXL.7RNZL'M,Z-O!,&3`@Y>QH;.U`4D4MT >+MXL?7P`CEP'2AUDL\YB9>$)K8L4YW4<95]8=",(`-62.U.;^Y%&2V#3I^7Y<0 >+MO$,%6]!7K><`C&:VC]1NCFQ/[PDESL?'WG;3^^Z4A7F;*OR7.6;7F(A0J70H >+MW.]E\KXFIVV]R&I",S`T0<=&ILH=S"+,$9$U#'D$4.*P&KRS"M'(F_GSZ%HE >+M9=H>`;EJ#@:W_L2-'0WY&9`D!M`8_*V#E"T2KQ<W?;(`#_=4"^&*Y5"BU#E= >+M!R)BR-52N%JE<"&MCF-G4Y'H%"T,"/`^QNH_2BPAQ>*Q]#FLU=RZ1WEM"/1F >+MY32U@0#22F<82"CTN\@EW5?+:L,&I6=NFW8PDY6.P#$0P3!\@`FGS.-IZ?OX >+MC5^915.X8R5]X7&/&?S?Q7UQ%DR[FP5))'?62ZM#@[<#P@7/,:;+>9*V+]_, >+M'?7&TNH51_R`);M$F%[L^ZB2P=7[LE<23F6PD*+\IBC'EJPT:D6U\H>'A7P0 >+M2NM^W<35?,@W#+]&FC559,@`02'!.Q/9SQ]?;P:FN97L=-UX+(6;N32/7REG >+M4S/RJ]_ZR:^.GI)A`G40I,L:JLXZ&N[H+H.3@_U"'RN$GW;@_F/OT[!W\7>Q >+MOS5:*<3GEU>1L8\?BH(+MF"=]+P(4!6<":_^'CE?F&ROB&?HCYP>NQ=G%S@Z >+ML8BHK@&3CI&V_\V5+YB+!63ZT-CJY(L$$^\#QDW81O]<9T),U;OH3-K\DZON >+M]A"#'Q!NN'^WV?EKJ^_+ZIW1/T+!HFX-,-E>[(AJJ"5DR2^F,8=TMF%RMFX! >+M,V[+&!+&6A#\W3&_1M(NH3:$#X#^&\X`P'DO2X;5!',Z!_US1,L,@F_X0,XT >+MUEEDXT.H5IHVJNX'[BS*6=\BT7K.$%B4'9]T@.A'6FK[#^R?>OWHR0#&SJ4R >+MW16SP+Y8/^'SCLH@6$D1$+'W**K77804`BE&392=7>!12`_4P8V.!W%`D!8F >+MKB%)V%VU?./G9^)>TLV&(EA$P2LL*`Y9N0_^X,YCXX=L[_QWOG[V"T$Z]:/- >+M(:M?/JAV,K-HB%W#0>DV?J]J+^8H884]JP!DR`UY4$^A15VR6T1U[?DJ0,25 >+M8-2]'^F$00E>]5!D<S+DQLF-:@J9[%0J/G"WS`Z/%6]N88A$5J%A6L@)?C-+ >+M5?\6"^37'Y@9V\ZIS.YN1JJQ*9P>4)]_V)RX'-/9G?\2,ND"HE*G\CD8\V.* >+MG-SY!35>2,'"`JU2=0,JTFHCQ5F)-FK!@+22YIJ7BA*0$:BL[+_.391,"'6] >+M\"Y3*QD@'?/'E.>.'Q.B".@43+*D58)?,"E/Q:6XQ#N6ASXKZ]3!"O1%[UA8 >+M6JVM5?G4SYH+H,X1<99MER@5^QJM=71B:7O^"E>Z\/DPVG$''A+(=?F!E(3# >+M'<@.0L71ED(P5-<\5JGT5O>-4-?EK#_3@Z!K-\D4@I"^^VQ^@OZV":?GB@0_ >+M=Q09>_KL^8'I6\>X8H0.%+3.;)OJ,/GYR?6::X[BL:CFMPM?+Y0*!G5W*!*( >+M<&!28J/O"BN!'BGS#ZL_@],7+&\"^E:B#`A5N095QH&Q=QQS0;KM@&H:]*(# >+M.<=<41MT=8S,\YWS)%M=J)GVE1$;WV'4)3@C!OV^^KK22!B5Y-740G@]!;$9 >+M%/FM0.LNA[FMGE+V>+C<J/>Y-1MWQ*6R.>4K2S2MU4;'&+D/KSQ%C('GG&M' >+M-#PKQ9;7+;YC.3*+:V1X#-D>;C/5/UCJ,O#\M.#-&-#2M!HUA?./Z4]9['1K >+M6(L`<ICJ&04HH25@O@"WI*EW>)3?C*O?CP/GRSRTL`\REU&HNRGN704]U<8B >+M#8L1;@-N4SA]4OZP:$T,<>MG(<9%CI74)H30R4.9"5%.@6M+^_D49!K*DCT% >+MIOW'>C303:+_=P+&U<K>-N1^P");`JPX?>@_!<!,#7!4"!N2?#=(.EAL4^_Y >+M1^$ROR(EKF;TH"CLX'D)32PI_.K.@_;'L`+QF6?<C"N_L)7=YXN^>(O55J/5 >+MME,DN-)W!@DRJTE1ZZDDA0G!>>:LH`][VN/JG*1&RYLDH"@\FL`O0*[7)%X$ >+M''_!KK1!506_\G*)*%7N6]D),6XW?[W,@J^>@C]V(>SK="6QASVJY0N9@1EW >+M3\O>#_4/)RDIV"_"7UFGW0J&WQ.&FL9I6`'&G@(8^)[G`?(A\'J+%??>BEH% >+M_^8?ZK:/%2%(/)6*#<]44ILY:#L1I5%U56]Y`3$73O/_EE6L(;9I5J0@_0Q! >+M6U=3R31Y\4<".PH7HC::U$U*%?W,2YT:X[8++`,#!T^NC3<Y3MDD,Z&C/,+W >+MK,,*JA3KULK7!16,5A]?Z-W#*.JX=CVUDG'X=AV,=%UT\$*\XJ1B;:,W_AHU >+M(RZ]*0H$.EU;0S*JY$?@V>2RQJ7!^5XFL:(38H!]A,[F`K)T)Q$#&>&M5W]1 >+M<S+9_ORDX]4VK$G!ZKBGS=&'17=$'PR-^Y([P\1(9A-%0UN$(YQNIH'[,X", >+M-]E=:+L9`<!=5176O&!+(GAUSDR'D3"Y_?U8@FERE_;0E<Q=/J$])=I;#-.I >+M$5W]J3;S9PYRJ)<CMK8QG\RN/9LU[S[@PE.8[BI4Z0'JD>G53,4X?YM8%S4S >+M!.A<$'`Y)%_G7\*]PYOU4:V20>Z^\.]AX>9K0YQM<K\LPM@J@V-I7F?XD'=T >+M_?>ZV#4>=(39`)?!<S+*W"`E,19X4.TQ]P4?HARQN$B9?`VWO7O'<V9NX%>G >+M)(+R&`1GMUF//%,5:(G(R?FJ!].IELWSX=QOH3;D;@'XD,@I[3S`#`/4Z^!( >+MNF+G'%S;`,49<PN('K^/@2:0TJ2'^%!K^@]=HKL[^_P=49&<7Q;M\C7AO%JJ >+MK5[@>)TO(,6MRG'_%U*[04;XRLL2RT9$#:3![Q\:[;QZML2";/#.JQ1MOZ$F >+M/?2WW%_=>'.23-D3Q!I.GGX.&MN]FS*$=.X_5-9O"SN<30PG6?G)C&RT4W_> >+M_!0'C%YFO8J43J^,A6G'9Y8PQ.(2M.PW:[;V*R.01S)$9LH;`'"1>V5XWQGL >+M5A,5F5PM''R(,M3Y>@-AUS:A:G.2J$$[:M-(W"`H8IY@PZZ_NH_<!IU1SB[7 >+M$2/"O5O3=Y*P.M05V*!@"R4N,=<-;PJOP<M@8N#ZXO$X9\!'D_-L=C5*4G:$ >+M1FE4U+<&3%/@35DIB@3WC>)?H/\D+",P!/\5TO`.Y!>5C2`L.>5>$8*.P>X; >+MSN?/I<3ZE5#0ZPZHE\/UW!1KO4HG.>1=8.T-TDN9!4$4CR44`J11$77J]L@T >+M/P/W?&N-_7!,8Q"B&_.Z2X4<6-M#\IAD:U^<P,=J`4FZ0O\+I_.61[!U)W:= >+MX7\V9(18)',-C8IK,88'N_NI`+J`-.'=/F!N6/&;M?$D;UC>EX7\NI1T%`JX >+MK+@(KKBB3R9YXZ>F\^Z?H'>OK*5YS0G4G+1X&3$%(LJ*;_RNH8`WZ@N@>]<@ >+M2#*;R\7+GW72")AJ;RUDS)K<&2?.N)WP$"OY45_.[0JJB.,^\+]Z_7O%:](X >+M2E$M5/^O[#Y?#48+HID/KJJC.O]PR!*37.`Q94/5N)^T9.0SDF*1,NC][YJB >+M09QV,]\OK``\BRM%.JT`OVH9!)X25S%4X?=H;;%__A&9&$;CUG3U#:(;51:Y >+M_;#<`1#_GK2=/[D_GS?/"E0H]VW4!_\9<\:,,$T)<'3)<DO];`<HZ,&ZG%_> >+MWT7&;UGQTD&YK\)4)@C3R`M<QH-&\ZRIRR1$]M/BO7%[$"!VYU2NE(9F3\Q7 >+M^-E;B.8"2QB[95/??HMB7#;4G-"%$H%0=J80@/MCM]%`1U:2DG[_F'L"1*X> >+M08+3L)'X'(S`SI[96&Q_D"-G:J0@'-GY!R4U)$7.PH]2TESC,`\L#N2]`085 >+MXOQS0X:%!%6VD1DBEW9J0G;G$/*_&NBCW:.[1Q0#8K>B$K0L1Z6A1!OI8HH8 >+M#CXY&WD1;&1OIX^\=X&Z;6TIA+5`$/S]$8D-I75#PN#L@BJCYE(7L*2OB!:[ >+ME`(U'.>8U@S5J/X@;/29G@U&9&0W:<7Q/W2:4`GVFPCD6:&D'=H(O7D.V;_7 >+MN`S`JK0F-PN@\8N85"68J6D+3LGB`!RDDEO9DA2(:$=SP0B#?4E(V^M?@\T2 >+MHPX/VT"=R\E1L8U@=,MP[;]_.:'_AO"$%?[A4:A?D*^)<)5LLND"W(>5QVH? >+M0K=`<!4;^5EZW(;'`ES^RYD#C/`R!F"04:,@,.$_/Z*(O"VH/.-J,((9GB79 >+MC9SUB\=(S*R%'MACEHMW,"0D\-<2GIQ%&EIDZN[?R9D^.8R2>T;0P6NW-DHV >+M_W!9A$UAR]$+]&,9)'H;*=N0ZEPN;06%F6QK5(K)Y.Z?R#7IJRC?`IL*3AE3 >+MQ5GM]9:I`_[^IIQ>6M6[3/8',Y^SG:OZ_6=?^$3X)]L1XNCO`3Y(V%_MPR:" >+M(T"<8*#I/,HJJW/8R=+>$SEF4%BD!M.$>1\@1((5].R!TLF72Y+2\L];4@+Q >+MHPBLD=W'\A.F"N*S`8(?X[+PNM=V0F"1<GIIULX-];LOU_LQGIBN!S;`\2+D >+MFQ50,0:?87K^+[,"CM`'_CYX!.9C(Y3[]3;$$95%>@VS"Z7-I>$?MV":$0CC >+M+C!3(U/RS.A8;KQ,@=A"C3G;_8Y`*-DV89.'H3S2M&/NO*/M\X>>H@"C\-T' >+M/.]"RPT[R%`##GV.\.>G%J\XDL"\.-%M5R7?\G?#4O@5K:^#A\CJP(OQ'%+R >+M"(T+N4G"DD2U`RZ7$!%(+JRL3@UN76J.&M\UI-F+:8[ZQOF6&SET0G^->LV_ >+M/%(W9P:=[S+J:9`^+1>C'>5L@J:>J40&IW`/"ZMYL7CKC!*W]E/.S:E[I8AS >+MI8@RDDI#_VV#M\B+:4O'\*/$W;>^*_`MFLC5QZ&JP01C"NT7AS>;Y)9WAQI5 >+MV`F9A4LR+H&RB?0@J8#S?LMVBJG(>ZUUFWU8@S3CYHMA3*0FNBR4\"RJ40DH >+MU-2P;Z.EG7P\ZG-!$)215Z?9A[7X[JS0;OG?27>^./W3C0L"TA?KE,-TNI(0 >+M#VVT*_:TW^CNHV@5L@TDNBI,TC<6TP6]"LH%\AFGI=Y*5#G=5TA)&&YRYB[D >+MOAG@O?I-7.4/-K9M3M[_!7)"#0_2:%?O;AGS/4[XYP</C+AY57O:`HDL#LH8 >+M>H1!4Y-D6C)QQZBR@AT\(G&`+F>W1T>3#)@W]+7SXLWG!-GT#B%"KW@N`7M1 >+MF[1O+FV9G?+&/)N8*IPU!PORZRD4?#3TW<+&M5X8*8:YCFPS,%0:UF%TBP@1 >+MN-D2O#..COB^]N/P%Z0[&$YO>0?2NBGF+P&>@5_=<5I_`)8JD0ER_/S7.!:= >+ML8^I/*W!*IR+6LR^J$DL1$+TO8-A:BJO<+)A('Q7)65\9$5L/\G21C((:'4J >+MKY.QWYAJJH+(C#P/LP:531D?::#D<Q^!HK662LLT?=15WV.@/;WS*10_=<C\ >+M,\/)(,^D!R\;![QO43^6523ON=U6CM`ON6V^/%3FD9HB><X,_!YLL&-&Z($T >+M3W:E'^C)&6N:%0Y79E6$#:D+_C`?)Z7J4C9.*TA+7?GOO\_FF2=>F2X$U$<G >+M_B6^(*<=J/^;+V\QXP#ZO_X(@-C:IOTNO>",\Q!*&9&R*?WHI&]UWCDWDEE: >+MF+\4<%Q:2/&_L-5<]9*%07B#;'VW9C"*.=-&[D0[K&7!'8\D@Z`>M8`R<S(2 >+MO"5M:F<0;6H`:+FU*1]O)9E"1N1JN>W*(O/HR_HE\[XJAP.;&D+ID&E&22A@ >+MNI)`)7/8)W09>4)]%,ZO4*],EIX1S/R-`D((7=PLK`&#M#!*7!7@_D?D3'6- >+M2+=]Z204T;R$M5.MG@-F$LR\*(5))L+[T)RN.54!\`]]5C*7^!F!P0IJQQ"P >+MJT^CZG]ED6L[KNNU/>.XE?@)MYQ04M"H660M!E",WDRH%\8VGB[J5TI9D!'+ >+MM1>6AU,#KI\F1.[9?/Z5J+!6419"T@N;AAZ=%UZEJ0/.2RD=8K23?YM_?:\R >+MC#Y[P?6M-E\R0@_6M70]&X@L-GW]^"XT128"RMGE]B<@XD?<LCI^G!?S"6!< >+MZ[PJ["21Z!R.4/E8CK#<$S@P`J(^C#1N=Z5O0NN)VD5<MICV>?7/&[9(U`Q! >+M*B$S4]S9RZ0V;\-HX;IJJH,%[<1F[=P+6I1JF`@HUT/U4K.E_JAAX.90>:UJ >+MX:_M3E$0A.PUUL*W0AL>Z>!KN($:YB1X5EV?#"%'PH7P;`A6K(3A<3AP["&" >+MBOR**.IKMGX`+.^[((>!SN_710O]=<=0WCRC9M(!5S\@A'MH.:+&!]\R3D!T >+M@L81*RC8[D4ZJ=L];4$8VOW]NH\5M$`1<M/Z5SC21T!W/R]1RAZ9BILG&T)Z >+M'<DJJQ#S]\SS)S(%J&CK:P^4'_<K=D"B/=),H7GA#,/CN=I"Y&N>#H8SLJ2_ >+M27H\!DT"W5I9R(8'E:^8[/]ERA3L(*$\T6B69L+_O/[T#&=UO-D?RO0-$7D] >+M?#!0N$X=+DE[;M7N2V1S'!+-)D8)I1D%,NZ]L+6!P:#"5*M7UJ,LJT-)MF9I >+MRJ&;9LK<:)88<H-SJ,ST^4J`#X:X9"?/<,57X%5U%(\]P-&@#"58<5U3G4^2 >+M7[-)\M*7QTH1;_2+;=H(IWJL\)=@'7T5D_'IZ3UPXJ),:!>X!F"+A:T!!@B^ >+M)IMX=ZL<Z`=;]_CJL:55-2Q4V9SS#@1"E7:=Z@DIG;NPPLU"RF$)D8VLE,/+ >+M?SE5QOBS1#;*-B):O6M!<N?)2FAISW.\RS4Q&$^X*G]#M<,87TRY"/>-\]O9 >+M*^>Y,4#Q<<AG>0`=BD?*>I>52#&"5[FG4^DDT,SLS#,TJ\2XP8[0BR7Y2R.E >+M)>N%^1:*-.2B%\3C:@%-_]%W`".R322T$'4`E-SGC\!CT$)'8V?Q\-@\&/&> >+MY(;/U.74=P=0HVVCK*S[]Z%5@%M@#I0'(IMJ6^?$-C"^.,/#:M,X.N%\R7W+ >+M_K4?S_<:X14QJJJ0&.H-B^T^N)4;[5R4G`>-'C1\X%V`].MN(FZ$K7W<0U"\ >+MO$U\>4QM(W,?*-:(($K5..D"IF&,TUQ6?C;"#N-5Y$X@:GPM"+_0'Q0<RQ,F >+M4J"[%I?O7Q/`G),I%AK@0^A/'^;#1X42P!;ZYK(A66FJZGG<U`/83C8%#Y6A >+M23,'>R^9FH]]O*D)O"OD^!K.K+%FBV3=:FUGA>QAL2'X.2K(0B_4URSN,LX7 >+MG"V(AL#%1+7,;J=.C/QABZA.I5*'C_(#B59>=."'$M+!-+53)?E5*U8F^M5N >+MN2.2,[ZYRL;LJOSW`[IOM?T*^+]53]H6MR%,\T,_/]+&@<,SE_1`(4)X7E#' >+MSM2<&9L4C2E\"(0_9];3;M4TAX5ZN4!GN*(_I%O6?UQDEMKA3]B+1>VC?V/I >+MN(TJ/<U,T9/@<BQ5$6$XDV."7/ZR9H1G8S108C_$"H10,R4[X;J/OG,?'&WK >+M@RXH;S6N.-`0&B174^\\'6ZDO8691PN+&+`6H1.5AJP)&Y=U1G1('/`@A$_) >+M8YHESK\,>&5]YM'QV(N>NC-RB`H$#6><]<]2=,ORR9_B&I?XPX=@A$5!ZO]@ >+M7%L(.5'?^D],C(HW<(B](B%T[-@N>8S[]]B,OO#W(\U'!IBAZY.<)H%'3,I6 >+M4CH))`ELQ^T.KQ3LWD"\1@_')/,X^%DWQPOK=3[RJ\5.,`*<^OLDU'8X,IZB >+M13B&:\99H1[#),>.,S_[[,GKFX;^?]Q1@/$?=ZS59%J$`M_W?WX*=K>V<)U7 >+M7=S0<)A%__-SSPDZUUJ]UIC8)3P6]P1<'#DIF<(0\#S;#S`)NZ..5QT.\UZU >+M[4,H,*W'>(>JV4^!OTF5MV]%_2'.2Y69%^#-`7Q]%L&Y(XR,DB.K?<!TRJTH >+MS?#P2'CEO/)+W.`1FQX"VS'>:AL[,.8,'+N!K_+FQ.)R_1KS]#7M0AAGDK1' >+M,"9'-4Z.WVG<IBD4YGO]/@$,A@88%P"L#5-%2K8.0+A<60J)H"#9'WZ+#A@K >+MF&^D6<`7K?()A2;QLD:`,9/RK_P<"FTL5>HQ#&)@`:3X[%\E$ZAN=/8&89/& >+M""[?^D(;M[=W^/A>8F5SBEZ'J:NP-FW60_4TE2:O8L=E=Z:K7=Y2E@O044:L >+M:WM6@^RWV%.Q0D*IY1B&%"=HN-2Z4CBC+:9?7+.&K))&37]4)'P9ENGA%%M8 >+M/DNB)OU8/$ZLN98S?.HC<V,!0?]O5D-;9EU0-M%M_>>'3#$O.[NHB[Q))%AP >+M'U3N=VD,P4RN?*4@%U!0BSK.(*#''ZU,_:E_T\;)4XE\^&/.B!G4:2FG4AO* >+MX.V2U@M:[(OX+_X,XVA)L>B>^;-D%'5C.,!0\?$19+01Q!^U6-THX<*F(4\; >+M\JZD\4*U>\AF?DR83""B?Z\*.16SV(>HC/RB(M-DMD/20?%"&B^M299H*3L9 >+M9"Q\/4ZI*J-CV82NS)FA1OJ23^H!6#0D6J,:E8`C@8I*98K[L'&AE,25JMO< >+MR`D2M.&ASOMCL(B][6R[A8>QB5BPI+0NM'HE6#LN@.P\"7^MSSR.Y3%T5'FZ >+MYJ9]5/05-WY/[V5A((M-TE*&LFKQHO%M,K7"DRN-LT*[TR:$>:E`](<8N^Q8 >+M-3K7<Y952"Z@E9HKM;^UWSGW2VO/K45;BT]N9CB$[Y@J:!@-\@U6<*WY$@@] >+MU$<'@K(4B17]\Q,NFB(QESYSKRC"BXRD![UN67IE0_&3SM[(M._E4`J'..6* >+M/8K'`OWM`<!V%^W$_6PM`+;RHD-88.AF*$;E\@5F?7E662%B9M.G'4S&-(PF >+MW$`PAVKC"0PV6@K;&%N<'DK;]V("S\:VG^#_4H@(\W+ADZUJTIL,^E.#A$4( >+M\W_FE(53/Q3+)/!<*<LPP&W^]<&%E4LH0LISXVM,W41)<V^R=!MG)[GQ:V2G >+MA.:7I_E\ITJN9/[E',X7>5^VG-\U(Z/HKJ/`;062-<6NKL7&L;Z5E=!'PQ*. >+M<I$DI-S=WQ[O!G\!*YAC>F'FK5W8:SO;=A7TI6NR=B)XA\2F[4ZW-JHQ#^?L >+M1;?@>62NCX?BN62%XF<AI$!":1-9.HBV_@%F>X7_JQR"9_H>.1&,AQ*]WU'R >+M?(VDW_]240Y","!/<K=.J#]/J@Z9M#P?B&N+U]>5<F/NI71PP=(%87`9X887 >+MY(\MT3@7PR>[^?U#H6Y1J,R\Z7ZFLB0O(@Q-*`A*WW*3X.S9-Z9WB-U98_\Z >+M=[,FX`>T@7E/KOK9TE107XM"@*>^&;EK!F6+6HHPRC)2QG#B9F53JM$LB>PZ >+MI8<&_059OHPCQ$2$0LKY5^'$+L2);]^>NSY=VQ!+)&]LOP7,VJ2VC,\IS6)! >+MWD](F9$UMJI-;1;[B>D@Z72AL?7W83?=ZUVTD>,VU*IBG!Z=:'SD"!W6RS*+ >+MP?W=<X!9`B/MW^FMW08X`:%<>]6ESV@^PW7B>IW*E>9(/3KRFUYKDTU:Y>\4 >+M/LX0$>5F[W]S@65,AWC-RHYUR5.M3[TAQ,]1"NL";"-$8T:Q`28/G^<1PKI: >+M8?C+\Z#VQ3R&#NF>^"BT:#,X^"P!8$%:7H7:E5^_PGB/3$D-K?*XQ_S1.NK( >+MMS_R7(4,[T5D.G&=E4[=%^)(81-6EN5T3W9*C]>?20#FJPV;0'AP6QM291X^ >+M5=6''P%LI;#-)`DS,[D%T0CJ)P--!P`,[TZJ>TAEA4^8T+U1`ACX"$_5*-0Q >+M6(YK7^;.;NX'9@_"5EF<T\E+[?I)4M+,=KE5CLJ-0=\Z:SVUU;2T5T+3VX?* >+ME-,C6!]3Q_=:IR'E-;1?U-'HTYK3<`&B7Y0)D>$_<)[/E*LP:'X5",F!@5^2 >+MS&X[`00Y*R$-(#UJ*\9U*W/(J9[<;>WD<!PE(LVGS'!BNH*`(1HPU$J+R$8- >+M\T3%/"0>6]G@A#?F%%3_01VQ<QCEJN!2%W^,\CE<D0BLT6L5`FVR_%TU"+\] >+MTW_E*_&<+L=6%!=",@5J`#_1FF4KD.N2I:;OC3?[W5L%)XUOWRU6A0:3%\RB >+M$B<81,UH*;C72BVH5VAL\]6#\Z`W-.=YGT]KWQ$^4).4YG1K)*1UJR%ENWW( >+M!OQLZF640M<__MJ]MW*5!/>LB#B1BJ2LN->N%BL3?:_8)I]WFO2@<6YN/-`# >+MC.AFS*CP6!;>/Z&DC.!OC2=-\(S]<-&677M6ZZLU/+H7KM?_0.(RK?`GC<TE >+MIVX:N"*3&!J9/3G+]A7'J<`C\H]AF]61.[.2JPLGH<F9#1\LF>DS)0LDXLI0 >+MSN-45"6M``MCOU"1[VC!3:1Q701X08+B"U.'405?7T\K4,"U1*P*T`AQ4>)D >+M8\EWM,`)3/.Y<&/E=8P(P,^R<WS490Y>,O=G+9L"HV4'LP;D$QV3$I#C8'11 >+M"7A(G^$V0NFK5H8AVX`+`^5)"7&I[RO>W<T%`3V5ZL::+:X,)N+LOL9]7TBC >+M;WPK>R\H(K1OXG9,S,Q-X(4DZ,D&*+\HP4`LI_6\!..\2/&`:;.9D[[T>GG( >+M@CF@8V&&I<^7":GW+E;8Q^GU8@FMPA-E\[2]$/.M@"C=*^E!0>0M&7J4*#KJ >+ML)N?H.:1$?;];!:>S*9@6(2M6'!08G?G#\=.EO8^:1U^OR>/6ESHB<E,)FO3 >+MY-VU%F+^08*K?LL_A&!`:HHSS19YI5=\;J>_Y[7!0V*'_:^DK5;@G/POB5?\ >+M@`0F`*@@IZ!9.V4H`-K=!$24;%(>4LYO:CT&,#8.4]:H(?WWO"(KB<='8E/B >+MRC=3#;2G>/(W@NW^'!T<'<46V+F'2PU%FP5L"0T_^</?)!84?#0DW@YB06QG >+M3AH2.!1#/@J-;)*=TM-CAFF^1ILI+2:?R+6K,]<+8X_UM=NHGW8<E<IC6X#& >+M+UT]3>$NI3KVUI/W`-%[=IAI`7Z5YD[UV,$"=IDTPMDA_!L<F@X5J5ULM"Y0 >+MC3!=EO6>?OQ2^X^!K[0:$*<R"I`@/,MD6(S`!WC!QV`0KNU*=,"9]Y3)\0LK >+M4S-4XB4\1B#<EB&Y)N\.Y5X*M?D??OOVGW<TOP;GL_\MOF$,D=N@#%69^/F) >+M_R/M3UK3VZ]-J(S(5Q7'Z:"1QI93/^JA08"E';*9_UO_Z;M?AWMGDI"XO?)= >+M6!Q9+F`[Q@>?FGB<&?6NLOC+NJ@^:R>BANFQ.XT:?\'^1<(YVC6F\'D``TX1 >+MOBB<$Q_I>+-HJCJQ9WF2?K-)5(<PSC3QY5CH%9K/<T+DY/!K=/:WX*(1Y >+M4])PLJ0@;44I-C)7LB6L\HL/`SYDJ`-*-=>./'<+!2*.%:Y.Q8+-EC9;ZM#V >+M"9STKG/8(SCDS[$FB(P\B+;8DAB5P-`^K`$H-MX1@?&FXZJIN7JQ;C/2%3Q$ >+MCV*.;8VPK\V5)D;R)Q0PQW8RFJZ<II&I961PC,<JQA&!$8!>,`;3)_K8-L2? >+M4/;OEV7OZ+[>#8N?X*95>I\0ZC>&X)\VTT,/<BR4NMOJK<?>`^3-MM<ZE4V? >+MBM>7YLERWT/&%>T7&H"N>N<`$![,UI5[:V3GAXL#96.9WMW2^@OU7@19['9J >+M]6A!:=L!S6B<ZY2$J8<)TC"=*)W]A:",?D#7%SOV*ED;HGJMIM3M=WXU1;O, >+M;:71/5"/%@P<ALO-%ECU+BCJ^0P^%)4\$;>+XL?I&21X-GLI)*SG!U:75I>" >+M5QBB!EVL>`UA;IG$6T+4E.$"=WA>RJB;Z.-3VK)F)*+9NBD.`45UB3A=2H3V >+M.#*-'Z"LT("*6DG-+M,1O!#SE>(4C:70XF<?'$+RE[;08P_+[TZ6G7U0A,,8 >+M!(@-PKAB%Y*R\@?S-_<2U(T!HDTX-3HW05SY];**WAXN,)BTHW#J-TF63TS? >+M%MC;,+@?XQ!J)&P<0X7F/9,"U1\)5VNXN#&$OCK@L="B?P6K)2L!&-,T\R'% >+M&J<:UET7#QBK+7\&&@@'&D/%NMDJ>'5,+\`FV]8^0!`YJ!T78^/QZ+?`X\]/ >+MKY41,HUGMCGF31^R,2LY*NC4]LSU)2+QRNPBXB_FOS\CZU*S2,]E7AG"8]!_ >+MP@;HR6,<$N\`)N`"T_(@,>/T---FY5KJ;*(HMP7(,DR2OC6=(_6A[M"D2)$L >+M8"11+%>?X)QVR8%Q6;=5%8Y6?&D(9!YSO[%@G_Q<OY8%SUP$K>`_9Y>?C1`( >+M#@S<N%_XJ"SEB70%O,5R\20[QSCD.+<HFPS/G!86_\%!B+BP8;8W=?)O:7]S >+MC$LQ^K`)`I"4%MPRIF(*<'Y]/\UWH6K=?7MC_7B@27(S</_'%M+=*X]/"1EF >+MS=W$U45_*@4=VH6/$W[TJ__0:HC7\$BV6<XP@SGBAVKD3+!A,L_,.,YAO"XS >+MA'HCSN1?4!Z;.<!S`9RFA2[M7RAA[76`\'ZW!-,;*S'-&GDQ\]=YZIE:($6N >+M[VTL+D[S^\'#.ZS;_&R1X'+)U/2IP8])>Z]8?O76ZX;((894<S`Q/)<_ODY& >+M-+$-:U*5\HR6ZD'<X-9H/.'1T/><$LCM%SZ4T/+O\9!%OU16PL2(>=2>4%3& >+MB=L5DKOG/HW)U/T9Y)=LYP("`A-R""V)9=AZMYNIDL?BPSE6NK&W7I/4;7?9 >+M'#I$#/INSKRUHK;:2^42:[C.-_(B1]'/7#ILP#3IF;7U:/)&5$\F_@U&YX-9 >+MJ@ZYBI+^AS1P[V>,V<2BP!'5C'2K],7J=$/AR(@.E77\?$4F!MCP)8?3JU;0 >+M3^H^6:9NY<MC%)/#8^QUJP6O6E44]#AO[Y?8INX3W_P0.-J%K!0!;]V9MQ%B >+MA&=HVQ\OB+,U8!]:%-#H;#%1Z4".'8[U9E*(JT`2-&7NI<OS<0V)!MV_[(+K >+M+]"&PI_X9(0>O3)U*"\TPPZASE##_([:QZV#YY51M8P?GXZ`+M5F9=GK%;IO >+MHYF6&'JP#W2#N1`12H+A^P=IWQC9XL(N`[0`RYQWTB-N:)H\\W+$RU?S"];< >+M^PB&R8GR5#XV0O,0;R:DH\54]\($*\N8!MI(53J!]_`P(VQ<(F3QG0HE*"09 >+M+*#Z(BFPKDL861]EBO3D98K#>\GR@5OJ^+M79Y#%4N+?X>P@+\#!*$\SG2!N >+MG+NK*&9,?8)5)Z6*6BSK5_J=QDZ[4Y,DF$.L2X78E4Q##&I%D;?H5G]"5=&I >+M/Y"7N"(D<S`.GN-/4/Z)7]QX/)KHU:*R>1MJ(%Y!Z,&]AHC13MI7O12X[HFD >+M?&K!1+C[4*MMCB;U=^3`+1'UL)@R7;8#!2`<=4MX8;T;E'H+74AK%Y)'@PXY >+M"$885&!?DWCC5<0S1`^-5+;AUQUO@43W;*I^(/(+L5H`VJ6R)NFXR&23'F(- >+M)%H$PW9+%?L<9W@'&JK`LQD_RB$9P%8];I`1>K"D05H5*=%M[2>7B]N"FR=$ >+MN)+`<]W?NOB7;)8!19%&[6*Q?Y:)U_ME"^.4'AU$;\%/.L'R!>[+ITBV9`BR >+M5N)>M36*I56-`:%0'8H&?C&^P'AA6,HOZ,0[]A\EP'BPGN9;>O[!X7)F;:Z= >+MZ>Z[KG@9%:1B1^>F52ELG!+9[R?LN"G\5RQ!CT7G)EP:[<,.KL[BE0\YIA?` >+M<,&Q5;$9/"\UZ%I-JW3&D1*(L'0=TK^BO[`?Z!H-V<5KILKTO5`K(FXFW'2C >+M"VLVJ4TO,3V]DBZU/=C/1PM7T%M.:Y\(0\6DZT+WS]08A:,%K<BB*,H5PV=) >+M7)2H`%2ZY,\#*,$J7)CE-GLZ*4YY(*7JO9%?$8UG5E/@0W$CV%9&U;8\>?GO >+MWT.#]+X0P"M9M__M\E]!VP0!,U3\'Z4GV5FA\;8<E$$3DR+R.52*ZG6;\(J# >+MG_W#%_"<O9C5P>NR!R73`)=(HFO83]_4!$>!$:5LEDA_;P#MQL7!!EY46*84 >+M"9(@-A!:K.VE_='"],JB(Y-IG'`A[.J&19=L=;M!SX.%WA5,LH*.>-AUP:/C >+M-G#Y[!PC=^#-.R6YR#,@B7"URE&N%[S97L!"AERB4+NBMR&8T*K\HTBP/N3. >+MC88+?R#/IE(B2?D!3J'K.4BSR$@8-6]D4>'0Z_B;Z^-K0MDMI7'1O@?]T+9K >+M08EEM@0,^!8+]A><UA?+>+G]R?A#`J/A*&<Y/=%(;7WO6)2?&0R1>BY7'LYE >+MX$@(!=RO"A;L6QO0D/0^>,Q\2`F2D&:U<OT62!+,"6BG!%K0P`';<6]\0$G+ >+M7Y+Y>P'WJ/]E04TC9$A_$1ON@Q]?ZTSY9<44LE@K)#Z'V_W^>&0#HE.A'N_\ >+M1%)LO!J--&VG-<.6L.0XE]CC+=OD3&V+5<P,V@#3!85HAU\RI@:5/1(V3`-7 >+MCA:K$\4OA9W"M<4/BB%_TQ'Y1P=C\3N >+M>A354<G,=3]!#B58M![/)H#^KM6I!^/ZU"2(@P9IVU>OQ&(T#AX'29PU-_Q] >+MG58Y<3BG>!/(:Z%7+2TT`J5!(_D&K-.(%ADE)DN7[Y+YB&(V"`N4J?D9%#$C >+MWRN&U37+%=`KI.#G2?=$P-D\ZY8>8NO[Y6648/.WP=Z_V1--.>!<*1WX5^0V >+M!T%J(-J#!/C^U!X2MA]$G=*S2['F:/-O$]$7E[U,5HH9OY:>M+SQ\/-,_!W% >+MK\9:TQ`9,B"$4O@_L.5"5,:EV9JY/=2="\T%1F08HKD3DN!7*S",3,*A=WSF >+MQQD=-#-Q<D&N3!TAJ9W8GF],\G#)2$(ET$N5DU.O]PG8".!B9T@W:OL6J7R- >+M<*[2[51*^12IB*EGV3_RDL%#CF!761NIA;F3!?(<L4$E!3E#S@R)X^="+5:1 >+MJ`\9$XW$O8!1A^7@]>^(M;RU,&\B_SG[)V>\6??W'>AMKIY+HX(4LE.(N[LA >+M`SFR24FV9@`JX5N9'H^HX=Y7;?*X`RD1*5L3$J90O=OI3^>N*I+1OW.U>X-T >+M)+QG9._ODT9/6"T9(689;O+;'R#M!R[?C$XZC^M5KQK9W\-'`P-&DU2ZLJWV >+M[;<GBU8LOCWN-_](KJP:4D--OUFE6,'[4B'F.S1ZB_9?M"8-L8,,B^=L7P0N >+MBEP3_?8X]U3?E1S]J!E&W>HHL]HT>&AX:^*];@*N^`@C]`@^XU=(.(Y2-05& >+MW-3EBQMJ]'Y-R\"<7O8W/8&F(+HR<CZ!"B\]H$;/R'?_)3WT7*C#L3O&O@N@ >+MR`<_M'QO)MQ2\)/6#;&UJ12Q1!*4AQ<P8GEL598>5[_!^UN@$O>2?BY&?5]] >+M"EL?"4UMHP`>YEUL/Q)I=5]`Q0&TY"(QES^8P#EG\45K/U)M:,5Y,S)>)%.H >+M/K>;RO@-/&K/U@8/\_AED!AS'J\R`E1>I4SZ=9DPU"H+>8P*[:6,^TN)6B0_ >+M0=.G`I%4/^K2[C7%3O:U$2UV$FY88V=D(IY6$5->\'?D$Y9?E?6F$')(?B%\ >+M`)/XSP\+&S*J__B9K2D_ZX>?TD;S24+_EX4T,]*N5.OQNA:-6$I,!JEW/@@& >+MS5=9!#F1]E%\IT.JQ4!"I1T4>1[--HRF>-F;KE@4NTC2^9H63E!:DZ8B`S-3 >+MF]^5-U5M95G.XR4GFT-`GW0["66PX+")@8CLI8!X7W'_&^7D&P4%^1G@SCIL >+MFP$,]:5IBJ=3J=MPVXU_04"1$F0'=M^^#Q"]'YFJ1);SNZ.WY+$O7!J4:UY; >+M#IF%D&QQ@,Z?YPJO9FZDXZ_,J]\!#H6>'AOB29AVYY[@X'TN4+U\89_D>:@Z >+M]EI(.$`2`D6;"^V5)KM].T5<N`SE'[1MDEP,E:C.^Q,N#IKD3C!R+X74(+GZ >+M\+YD1E0^7KUE2H_(0K*]FU1<+L!$]PHVD!'^,I0;>_#%=YX)9:6J7>>]F4@, >+MI2I/S\O2&:M88Q,UT_8VDB5FN>+!X[,^/H8TU9M=ROCTFN0`?O_@+SKHKP72 >+MC8J%&(0=)0UZUHKDL^=4XOFHZ:ZBIP,?NJ_+N*T%R+*Z!)7NFXE_=:O?#,DM >+M=AWA%E[83)I6$3OF214][SQ,KL,I57`)=/9A;8J;MR1EV=\K;CR<K,^2)7(& >+M6XY=,;>\-(SRQ>J0B%-`).[5"T`_>BJG15UQ.:6$2.`M46@5J^<G"`604U"Z >+ME]Z0._69SU13[;H$LD0O&R0`U4/>PP)W)_O>5C#H-AQ,OR`5XSEV"U?%[*DP >+MD`0).$]B]H<TM8Z8:5Z605$U30%ZX8_,WG?X_!]KQ"1$5(ZSF-^XIPJ`CAI3 >+M*"%LZ!850B61@I^?5`O%P*7L==TX2,3,OO[`H/SM*]ZYHE:(S-:2ZU]GEB[& >+M^>QZ<V(T"F-""5CI13Q`>C4^R`0+&HF"IT2GXKX1"-6OK6S9F_CQQOMZ>H49 >+M!`U3P8K`2G^^4BI874Z(/[1EY`OLXY.E;C\N!/U;NG\_4SXXBIJ:FSRVAZ!$ >+M/</!4K1#VQI`X@SI\UZC-+CT&IRZBDK'#3W`S7`0%[($2K%'VHUR@,(FU%V? >+MCTNVXTM7-T!2/1'?SC%J4$NG4B5GPAO%8=M<@VZ=[Y_%XNAY$$&G>+$<]8:- >+M_RKY6[JC+5X`F$[`_'=@A3,RN)0Z4M9(?WZ#4/!01NJV*&-&3$!1D1@9&LWR >+MN5>G'\3E3@P:;=0?:[U6)7[1.]&$7P?G3J8S-)XYD`:R^J[+JQD:^JV@#>:F >+M/`ERXGL*@(49@]#_W$"^X'P'X?-/+[<<:,05LG3SHEJX=K-(92EIY14@;G0[ >+MD9XJL%FC,*#MSZA65=;6^UF_1+X.Y$/Z+R:0<`Y!]HGE^I`JE:O#N1YX*=D1 >+M&5SGL;H%L]7@<5]$0>0:P.XIT;^/F\&!#DUM\^E&]',E_;[V/$+AP0%DF([5 >+MKE5%B"#WGH7#92BYOP^O=4X.<@^;3M6G'Q9!2('M[///L,%[>,`NQ(DUQ[C: >+M29OM4O9'9GX7?V.Y/8L7(9IA`1"<S)*_4$7+=2.''A#E.U2T#H\4G:5_`^2[ >+MH6$RRTL6L.Q3G$I-E,8@89:ZO7H_+`(&06"P!"F3%&2.KX.*.$D?*:O]6#^' >+M,YL8MFM_`U9J3/^W/Y=6@-F$<<;/S[SL`C?GSC+)<9(,$CP\E+P>Z>2'8*3K >+M1I%Y4B!%T,SXUM<$'"08+OL+JG`2<1^I+FJL#?T\+`C^OQKPK=3T_9)-K0=9 >+M,-^%CUI_4>FIBDBQ"()`FH)659`8#"X"=/DGMQ`4B`G%`BI9O$JMD'?#1*Q# >+M#<9)4)U*1%`?M07II.5!JJNY:1*3Q-W7"UL,]J-DVFWPT4%.=:2I$W/G(C`Y >+MDY!ZUA(51KTV.U[X+5_V#'=CIV!+8!E/(ESMPEFU6)!_J<6P%Q4%_W*O2AP) >+M0C-DZ_`S#G#0C`,3CHZOFUD6C#&EQT"=R7]1EWXIK`G^L/S,HF"X1#$A671@ >+M-WQ"<&$G\TP8$[KD?7'G??E&^^>:&C(I4AW9E+RT@<[^"`&1QZB,L-:<-9]# >+M$#=V3726;D4&T%(##!7"#BD/MF7\_EFU+9O&W?0/\!1TJ!#\)9<U\NR-=<'' >+M'"8K,1>>7OH;X<[AY*QMRHV,D(`L5?"76U#6X<QAIX_8\>N`M$$*A0%96T-C >+MIZITB&.)5\:0=L)H_\:73FRZA;5_0WO[<4:^%_Q^56LB&IN[S[M[`&X^L?,K >+MS)\`-#H&VNO"RP_Z2M83CZ00'AWO?&&_O0>>(R^W/["8/ER,\>:Z]J&UAU.T >+M3J>Z.X<I`JHYD'\;&266S`Q8'>.C^[M5.=+B<<NCU"X0GSL`Y86HUOA`%%ZW >+M078U$N""8;-9=AF=NV>**ER)K2;BGF#M]D'5)FM&PF^D2K!`QMI#14;'!96/ >+M,_T9:O1"!Q:D&*@<''SZR2)4F;)AX<Z2R5]#0/R(JH0DV&<<2):%Y(AGK/\4 >+M@HPP<HA_4Q@&QK6O<BCW7(9<"Q+^DW8EJ!1[[+9.CZL?[ML_]335/,RN@['W >+M'AHIAW:'=4D6-Q)NA:'&VW9+9HU@Q#]=%,&O=SXJL6S,O_X<(LZ<Y99W]2[! >+M%QT2^=?!HH`W;:JB[IY$03.?D^O(D=1=X#>\=NZ=T'`"J2&!=;"WT@5A_PYV >+M@<(('"%WSP@$#V-*J'B#OK;M[*#-.&..J(G73#'MJ?]8_4]`;&FP(0^]VJ!, >+MK]O?EYJ"4017QE#XDZ'0N7Z'Y\BI/84J;A*];?^6JI394)BNW\*;TR0LI2.5 >+M/AD;BL#RMEKXN'K;:0D%(Q08&P;`>X:%CL[M_XJ]G6%*THJ;)&<L3:BJJB)< >+M6BB82,8=*0H!(7POFS>.=T[%#V'[%Z(ZHZL3=P-C%29DF++2W+2;IXW3B&/T >+M+X]\:$*C52U)A?(4*%1:I="R*O%_C&"('6*[/6)@\?-3:3R7PEG+CQT*&RX2 >+MK+(P5'XU]=907M,21US&I8VC?=3/A%EM[_9L=Z_5VG0;E,$'T0__65IR?OR& >+M[(\RA:.<)"&<R4[M)5'<)@'B9'DKCQT6M@:5#N:'+T@$5T,^5^X,"7./MQ^D >+M6>OBW,\M`(L0N=[!*8LF*@3N>O[X"WN=@'GRD]3OCIO;GN9(N]OV4Q@#_V&: >+M?)[^6_BO.UC(,@[T5LS4AM.0(4:O`PSR).&(00^RX-<R-'OU8HL*]0.S)_R" >+M:Y>3KE9S=N/$87L#?@.67>?5F8WX.&';F;N:C2A#?0)'#EMBVSM#9XN)DF+O >+M0HP&'B8$3*H:.I#')W+65J/]$%01"B]`AG84V,"!IG]Q:?AZ`%6$E(NL!7^/ >+MX5?'8O7?0/5W6.0B9[[]^5$:KF>[II=:G0Y`V@\$4N\T6-/KVU5\J<@7\X<1 >+MN"MC!W)J?J;1A"5X=&MEFV%X<XYCJPUK-.]0@_RI>[U/R!I^<U!N_:F38$3' >+MDG3R-\FX1X8<[H<:"MBLEG7B+Z`<LXI/$T)LF0M3>*75DS(R4L3J+/"OG'2U >+M9(A3QWPA\((0RC5&F4E/+,V\1`Z=@W_-'D]30X8Z(XT-2]A*U\WDE1X@^%,? >+M8]A(GO$JOOE>2GNT`+W\0UDIWW)[TO:L)20_VI<]L>A5#?--,*U7G>,/*B5. >+MZ"\@>.3!XE$0%2S:/%$>'N"@6S%=*+'H'/721[?TS;OH%86^V5A.V`A7]`14 >+M+DZIX%P)Z.=YU7Y'TE428K=+&G#/#\?LRQ+EOU)XP_"KK[RP188T`OE5KU0D >+M^_'3FX#D>@5L;;Q9@.B0]MJ%R9>&.,F*O/(JT5"UKK^SE)!E?JRD,[N>L"`) >+MM5EV!O4Z"\.)3;*!U4*?/UUOY]V]8(1F<<+X^[$A:>T9^^@/_PU`GJ,1`YB! >+M(TJ;+Y#QERWGX;F`!O54CP'/$2@NWO%`B0MZP*/D+ICBT+8QI3?VWMHR,]#[ >+M72=Q:Q915RP1'KSA%D%7"X.&$10Y`$.=_5FN8;%$!#1%"47$46<#<EP4EM&! >+M-*YR]LM\B(U=C6K*/QD//'&>EG_I#%,%YAS+@'LJ0H?-@'N!EX':HM*Y)R?T >+M]06<'<>;_N5-GE@>%@D;!4.,_`=$%5(/Z8IQO2T_(XPB=[^N1+5T+#Y_O;/$ >+M7-AH)#)UJ3TF=FE3/-TP9-9KC*$^0Z.QCQZF(]1V\^5D#%H<%1IS^>VW%7MK >+MN^+L"]\'"<#$C-U_PBUDH!(/$?K]N]8RJ`RD/\>-QE=\$`)FO$WKV7&EFF\; >+MI$'>)]<K(A++YMI"U&7,6@IC2'N!(/NQ!O_6$-591B^ML=\?W$\%7E+U_="* >+MN1I`%>!I#`))*96H0C)`N'3A$[$E*Q,'%5L4A_N/!GAJ@PQ"JP)>W`P]55R2 >+M]>/(V&0LF.-7Y-,64V[1N=,L26.(\0>1M'G>7KD2;=;J>-@E@[C-8A/4TGNQ >+MB&2;NP9]*.$$,Q1;Z_'6&'14Y+U^?-61!N(-"<0'Z9/CC.`CG\LNC#[M!TX\ >+MU+));@_'%1]2,CY+P=.9==PO"`)H"AG4V]M!R13=WW_#1B.5'O`H>#YO?0ZR >+M#`#NNW$)\#%0JZ%BHNSL*JP)M&'5+G:^N&C+'TD`1OY?+FLV360?^ODAA[[[ >+M&[PF+\%QU6<X:@G=W)"X)M_JLJ1!HU))`RM#TEMS,"\9,3L9+#X9ENRA[YQ( >+M*B5HKM6[A29?]B",9N`'-D<%>W1S6TJ"%3D>P5Y>*U-3F<&2^@]HHI49@+%< >+M6-XJ&J5J.<6I/(?7E/`5B@"A(&VL'JV4ISEK$G>0J\`"SD5H'_,+*0*5@9AB >+MCUXHA($3UBB>_)?Z^DPT%$NLKDNM`Q>CQ+FOD:@RC=/A[+MF:[--\(^%FEZA >+M5B-<PSV"M8+/HKR=JO?S[_$-E83903_T?VKD`V2R*&0W.)<MAGL]Q6BW4K5C >+M=/O^256O,1OBT`N9$5_$,'R"]4L[PV2.03/"L4QS8/0B[S[2Z4%116H,9+H# >+MH>CAV6^(X'>9QL]WY\SZ7UE97S8$745KK;Y[ZH">&ENX_P!6/X[X^5/KB7S4 >+ML,%J.@8@XNPJF"MN);T*W_/]*`VU]O<[SETX"A$4C=QW[#Z#%=#(6ZB4!SL2 >+MX<KZ>S^`C8]"4]*6@CSYO5RRW?&.[,1FT@</5CHRE4-S-65D_;P@Y4RLX[EK >+M+93Z%!`LQ#X#]4I4)M*`DO^X+$3QRL9^`.@9'9K614M"KDG4:`0%ZU^!#(". >+MVT$IXA1VW?*4[WFR.:<:)O3+5=@Q1?L[$>6@)U"+%60'6D*9(9F-.4[U[C8; >+MH\C4.#A<59Q@DU0X/+`B"30RU[\+HP?BZKPO(]$`PWX-;D*KAC_JI&?3=VZB >+MY:G"KP#/D8"HW!J8E(0&DN5^^-F0(<T>QLS2+)3P1M`,II)C0$U*VC;&[8(B >+M.M9RDX4\["<L!$_?<Q)"Y:K:__M_:(`1WGJ4$)3^\\?\5XB?'5U]8DP,IJ.0 >+M<-@H:_!:M/$+0FSD!(/E8/UR%\M5H((3#U4V)_=OC83)M$YV;B3)QX(4=JB@ >+M@:A(])"^"N.;G.,X:%"%;5E$W;L_)%J_`]2N.PIU(:V*#>2AVMF<0PX_]L/( >+M2(LDS_(>P-?AO9MY,>TP<ZKA=X&@!\CM@&^4ZT:O:3_U6P2U,+;?&X12<X%' >+MYXX41,,@A1Q%@KJT"+"S>^61Z1(I\Q^Q+6,^7Y8<5V;*QN[E"X(_@J9G"J(S >+MF!*M#*BKE`E-[6E)&%I=:@:"N2JTDJW2/!N##L\&ZCD\`^D$QOOAF"V([:J2 >+M#LFZGT^)9XW6%)HBRCO,N/;IDA-'._OU>"\LR+5@PE^J2D<OE6XH1\1J0)!/ >+MDE];%\1UY^3V71.VU=QCVH"!&C<(0V"(KCW>[]NO?RHN:&J9C_R>QONQQ-!X >+ME)/-<HLN/9P1I,R$6DU"U<[<EYJGNV577T(<*ME],E;D5#9%TZ;6E@9CIW9V >+MS>`2]DR"3XZX].5%AK9PV;A7AW^T+6WCCTV1MM.LKW?(CE+*TE=*KU&R8.*6 >+MK8)YTEC3!@@`H0M>X;VQ,0\\RQVJ[LV&E+"Z+JRP\Q^*K00%")24VBY3\>)\ >+M`22_V!=V>#V!U5,82\0_M7AIHO20+\I6Z)Z%1`ID?M]W,U_)3LW%B@L<=D]^ >+M:`6#;WF++DY"J7=_@BTKPY=)?0AY6[&FEUL!@]5IJHWWBD2>%3=I)8Q*DL:Y >+MX1/;8MT]@N!:9=U:5XN+U)*R%1FM$A*E\YF(E7Y##']+H0`)IBP&O%>8D820 >+MJ)W[/R__20_K]?_&IJ$<+'[<ZT\NN*,1Z'SUD&N#751H6V-_BOK5&L\;.I#E >+MI]RK8SB]/@:NMJU/(57/N2"S8@!P]I:(#@<N5GQ4[\,@BH&[H.DFRD6@6YH5 >+MVRBX[8GP<M\DZR=61AQ[Y6<'7MT=DRWL5RCLCK?`ATX4^_Q+.V26\H[LR$EA >+MO0(])<^ANO0"LM$)GI0,,;:D0YCX?*D+?%Y+Z)7.;=*X]C,(%I0!"5P:_NAZ >+MD-+?;K*)JS@A-["EJ'EV%Q?BK=*<C-B?Y$NK(0NOAU:MZCCQ?<6H>K/%#D/W >+M9)Y5E9_&5DC(#;U/9$T';1T1X=\X!#KY=\KZ:4BZ2'9VIBX$'!$"XUP`R84_ >+MYI^9?F6%/IWJJZ4$YE;58.;F0V.A]J6,=Y?&$T,A8G4O!88*3[WO8`80;)Y$ >+M`DA#[+`1*2[@TO=/ZD(#9<VH&V:!VGY?,)SPP%"X^0ZO^!\&S;$F/)DJQB@9 >+M4Y$4C8'="\FD#.QVARQZ&AC=`;6)[D,PT:\#DP<[<ZRSHZW/06E9^)D&V&K! >+MENBD0>DZQPGKZ\[27O%%6U/!&E0/W3S^F09UC4/[GZ6P$QCORFR7?R`V9$,) >+MF]J>1NC@E`^5]9VL(7LFF6F5F\Q_\$%AP5O6-375)B<=\AW@SL>7E]KIC:M* >+MF`D+ACFW_)ANY[:W<+%"<A8<T>P6U&F0\)Y_5$8@8ZR#E;>HQRE(QQ-=F=G> >+M)*!U8MO>5N&GM>FH4=UL<R\'T@13')X>AZ@576Z@8!$15=4O"4.;=T\T7PCB >+MV,<IBLKKB:@&5`F#544V:.@29"*?,/P:G#4-D</R+490XIF78;]^D)+HFP*& >+M,9O_G`U51`:LMZ%`GCBRC+=3X1O'31]BDWV5'_7#B/W"[$9QMH2QTZL.B<DW >+MCP]N"5/332YI_L^&"!VDLV)>3GO7"[5,'0K#.8?0>,]\73+,Z,T+*HIC48P< >+M06KV45['89%%G/;A!IV%Z4R%C)8I#&3[S]KYU9SE]UML$G*'6,*5![DA4AN7 >+M9I.0^3@N9Q?"PNM2,DY0AY5"G:%>T]W13J&9GY$B>UW+1>_O!*[T4T%=7WY] >+MA@J5.O5GV;9J?[1SD/O?<=I*W?-D5R@&1YM[T7*3\C1!L)_\'4IEV1A/EY?T >+M^J+\255O2@*,2SQ;O!BYB6H2M>B@_=;(_T3C,Y_SB,R?IYZA\";7,=*-M6:1 >+M0\Q`1_J4CN;Y:QMZ3@/07DT8!$*+^H>L#9589NS\Q$336S0O_'D00L8BK5FB >+M)(FZ616K6W8)F%:+KPX^HFM?NI\^-\@H0+LUMV]IR?K_>ON'^,K:IH$7WK%M >+M[]BV;=NV.G;2L:V.;7;,CLV.;=M..OO<SWG/])M^:[0F5PUJ7:NJ_K_27)D& >+M+2G2Z?IL!HJ5[3(.].=G</:>,B18$A6C<Q(E6R=K4"9N(Y3O@L7/.6]5]@"O >+M>ZZ+@/G0;S%^P6X)*/#\90YF`XI;VGE6_^ZPJJDT]%IPU>R'8`]B[?+Z1*[* >+M5Y%![!Q6$_LR&Q_G;M^FV"YZ*\1.T)C[2H?V%=3MMJ[T@C[GF=-;6R2/A%6. >+MRA3!XT?[:3)!>SUM;AV8-<6.KL?>;,IPB$-1,URF1KE^RX&I],*EES]DSM28 >+M-H(H`H6;U+'D(%\//'[3FG#P6Y<K*X,#:_@TSLK/VN(,[43.B3>XN$`*_*W0 >+MN>>@8`Z><>/_T-+Q?S'K"H(H(BXS"!0;0R7WIZ%KL?Z2Y:U!Q%O'I,A^]26W >+M.9^\>EJ#R0JW1%&HG(IS]A1^U5<>`0^]^7.0GRZ@^\A?AYMWGY84#.38XM8& >+MKXP-ZV$#A:K-D1#DS_/$WW\(#\MHAT&]<8.R1+@OVG6FR@4WC.55",9`P+EM >+M;N,9P)+GQ-SUHMSU%`I>#,W2+(_18),9*M]N=\EC+7[]D[Z?.FZ[OH@I0LNP >+M6_4^IVMRV94>6N\EGGK'+/D>U0UHOPK6$E(W%#?UQ)<S[+'>;<DV)RR6<W,_ >+M$^JLM:FFVJ\*YB3?(_?$".1AQZQCVN-5]FZ:?OP-63.[ISL2"'CR5"$$'L%1 >+M�]FWR`+<V>>V*>ZIV?@BET33;]-)"@)44+&N<5KRQ+&\%X);'@+A+&$UNO >+MB4#Q'=N'+AZ=S_A]CQ541[\NB@I=K)X$.5PY#P+)X+"4S_'Y(=R+R/&`IY[G >+M]![?_0ZV+@!?HRAT3RJ5+1FQ*F;,##4ZVOC%\C8S1B];LDZECXS9CGG)2,^I >+MZ>Y[RLORG#H:[4`BEYU.K),)01_R-4=^@VO:L5/89P+#NULD'M=/'>-N]SV` >+ML_IG/W:S&8Y_'(%_'`,,9![S9[89MLBLY%D)7I0MARI\3W9+5LI`>IA4F@&^ >+M"YIK)15"M)Q/AT+7DN!"J+<[V&3G_02ZXDIS6-6<(XSMV'5>E<BCJ?$*#DN$ >+MN=$Q-\OTX]7$=;'4B#_VB]O1/=SFQ%J/HU#/#:/1=JPA9.^S%8/=S,`M24;@ >+MI#,9)0B)NE;G3\81B'H&FW95QRJ\<]L^INC&?7B"ZIQ+KFML<(U<#O5*B==F >+M>EOD%Z?(%ST3YH;?7P_&+TC@I9XG1I2I22X6/6FPS2=H=TT<*OQFJ'[L/FDN >+MOZD=BV!T=BWK7CAE5M@CR'R/A%'1472MABN#GW2P8`,UI(2D44>S(0_:?*6& >+MA9=[-DV[ZEHREZ'J)H=C.>;+YLR"@$JT%2GHW_E5\C%/.UVG$C7U@C/3%\W8 >+M5-DT,GHF==BC0';PHM?2@=-FD;^@G<N&JA!84@V?2#;[9TJ%Y),-`!F7&>B7 >+MNROH]N?](NL0$H$D"!+=")>EU(B*C(>1J8Q@/SG063P=O'3_3999-Z3LH?QW >+M7%8I@1XN`HZNCO_/Q<;]U['XE#%3M%_67KMLN#\`N-^'ERF7&_GT`TT4*B^] >+MRAM-,(CO`/A:K5/(R-^HM5)S_&'#7%0H!WD3ZCFB7D01#G8DKFFKV8"SJ"%2 >+MS5JT-)=7'$]E51$Q-]PM<T-R-Y,5RG+8O2Q(0\WNR.SQD^#EJK(O'FG_-]_7 >+M51[=]IRL/X`C;4!]O224*2XT%[V'DL8=2%A=DEO7W&C5`P.>#3>TT=YWPK`8 >+M\$ZDEYA0&1!4VAXGTG&;5JDNX,RC9?*)B.TD$B2>L$]KPS37]=?BZ@A52,FQ >+M[L:+>,YW]/+DP2RFIBXL*8,A-[3>]4\6.@ZO4KSV/GRB>]>6.K$3GV)%7J,U >+MV(HT69Y4XJK8.:V[8F5D--JN75AU+YJ>1F+<\M)H:=ZV>KT_>6USF8?/.C75 >+M7G2]J;ID`7-0B980?`$&V\%*HJ=S,AA,@6BY1V'O7OOV6$]$6#>?AO%B8=<, >+M.&"U,(H0G[,IY-`^%I&PV9@<)A9)H*15$CSU81DX5X/2*(L^D!43/;-<#\AA >+M8E70(:3:^$/OH,9!).'FLANX_K))2)Y/6ZH$G33.9&?,B`E^FIG@8']/4[S+ >+MLI5E"IG+.5(#K?7N!(!C"EG^&0C6T;6R\U^H(H,^^;$6^0T2[JS7EY>'R[^] >+M0L,II8$-&R:?A?KTCW#]=,0HW;B$>(JE[NP;-\[J3T_9/X13P^J!R:0<[OD; >+M?EZ>HZ8-JD8?L#<GHQ9-C0IPG$0GK6/7^64)DG6\4D5DNG/$M>$PK#%<X=3B >+MO6CGFQ=IPA\OI%'SA-FYG/:KJ@U\?%0IQ2W[7-$>*$_TR)-[Y2_YDS'Q9HY. >+M\1?^3_5C=#%"@?4P?_\29SV6S75YQ!D=?BRM0,S0/X'NM@;((=@Z:$@?#.FI >+M>-`HPXBDP<#(DYU\X\=M&=RKPU88NK_$>SQ?4[[LMWB^H0U$5/#*):2>U$O* >+MM`[DF"UPIP+_S7`B0]T&(CYLU=3?AMGC%B\JWPMN*9'IS]+9)&U7N5O[0EI* >+M]ZW;&K6O>WFI[7$;-=E80$O*@==P"[%R@B%#MQ:DJOF9?._9LW%4[N6PY_QK >+M`)0JFC^#OE7K]?\R7C;M_QL4`EWNN?@!$IZ8DB-E^?4TZZF6J4$AL4PF0<Z/ >+M,_9"1'ADL",/.7",@!(G$M_A:&BP6(XI,C06,\`&LP^PP-&AH+.!\K^FFDX? >+MVC@(H^HXD,*T.PS\24FVRQOE27<B)Y*!PB\R\L$:I\SS=-1_+1F-,6E2QN#` >+M3+5-"]$ZG0EU.>^HYX[P^ETXN(R\1&,*G4)1."_W?OI=#;UHB);)7G'O^`"Y >+MM?+OCR[9W8(%//2VJBF3I.1/GD^?Q]6=)\5<7A8"UG`7-IZ0-&Y8-00!@M9D >+M;V.%1L]#,U#GV<-+(":>/=<EED"!78T>]N"8F[9%%,?/`0=29U3=I^K=JM#2 >+M$V`C[SAI5M4!==ZD-;MPT6,7D\+W%NI!9WG-K]^5N+9>/X7O+0L(S;8\8ZAS >+MRSRRFNQ"GC4IQ*FK1A5ZC\)C)JI*GW*P))W5N3X"@5*9)H_D!V=H!=)QU(22 >+M/YV5W@*0ZYOU$BL`!H93_QO[G>:`Y^HB=PX*-)(G33.)JK+45_.R:FVZ%)=A >+M2A!=L-EE%\4&^30";8+'6&1U5@.2XF&)PAD%)`W/SBRP?I"XMF*N/1<:OO4V >+MPN0DXO&(Z8L0YBU;+DO*PTRL=YZ8IFO<,DF`W;@C$`,'`ETD<(87#\@LUB5H >+M$!\,&QO^622&_E+NMWW.WGYB[XS>B(K-H10Q/GK9]&OD:%>E7!-+,1&`I?GQ >+MXZNC6[5V;/,SCZX%`&N1C41($$0-AF##>:[$\QSKT;((*!ZIT=`5=45800E* >+M4U_$<C,QU%QSI-,QLCQ2.*9?ZOSL3;EK!6M7ST"QA_#E/5X1.M)?*-4QV'>^ >+M@\)\<W>#DH6*&JYO@26&[T_^BRD/E1,+]0K_S)Q?1R^R$&A2BA^(J=C>[MXW >+M,Z'Q4]7ICWW/Q5\5%=BQ!G61]%(<Q)Y<QXH3Q-JQV/`=8_]/W';"5\?C6@TF >+MW`_3L7J#\H*'3WG``R/`9QQ?B!6![%:__OQ-&.RLJ^M_!@07%A%.<Q,$BMX6 >+MIS\3I\;<WWDGGRA_)F7&LD/=6Q/ZG'T"?@J3KL2AV@^<D".RP!B;9]\'2?$S >+M1GR9&KB-E"Y'XOYK:>/`G9?#[!9R/*9"KC2-<TO934\D<%^738#NZ9NTR><[ >+M<2P]2!=0M)>E!Q%>?J7"*W&L=74=A(I[[(F^;`I>;XKKR^K0,ONK3F6S/=1$ >+M1V$Q!/[+73BV%U7[R<I(KS4E>&N2;J!??7Z2W.`L`3YU+4>*7K4T>T!F6:;] >+M>#E?(UQINNLGB<+6V9\?LZ':7*/CQ4*&=QV%=..II.CI\703%K0KB6'C-`![ >+M2XJ]D8V.)'Q4`N&Z41R#&R]]_@M1[7GCP#G+/?(7D0;Z02>;!A;6(TLS%AQ> >+MQ/U/Z%>>[4T2,E.4TGJJLQF6D!F](I=&_+RV%!L8'FIH0M@ZAWUNT8>?>T(% >+MQ&*.:X<1V[_?2IQ\4?$1%Q'9X)"6/QR!S&#C7<7;8::X.LQI/Z+^@;B5_'`) >+M<B`YW$[X-Q5-4+"8)8NI,CZNIO`(CQ[!@,S8_5"TP1I"\PRJ673=-5YL^V:1 >+M66'3(`3-+LF3.2*D8+"D.V?)T%RDWBZ&T`]:FO1(=OA_E.AU86G*[4GT1UD0 >+M26\70YSG&B&W1MY%V'UZ0@;Q<<:7J5!3Q1:TRR.9;^^'`@$%O1V+)L58%K3' >+M[_T@Q.(+2]M%>K`FZY$+&Z<4<KZSR*R]_A\1D&4K;<^1@%\*>0;9C_**.I/N >+M3[,TNC<<G3YAFJU#5H\@<!;$!H[J-6Z^I6[==NZ3$UKIQ7`S18KJ*U7#A0YN >+M7F.F6VR,_HX])Y=X0&,[?%`P7BIA]OGK`CDP^KMRY/1O?1X,&`WE@KTD5(W* >+MA[C87PZ'=C!%/O+7!Z>4>R1@3SM5Z&=)!-Z07-WRA9NU62VT4'R+OLRS%=I[ >+MH^*W!B(A=)B7?H43.@`-`+DE[FURL?OS'_5_@/4KAP45XE4T1"6M[>*?TRHS >+MV3,$%J9,5#OQ7R&`2U!8>L@UGM\*1-3S)P-4XV))2"F6A:'8;^OSNCP2\YD= >+M*F[9]5M]E"X(Z08/+CQ2[&;IG*!R+2YV+Y$:'6+/JEZ,R3+$R1R8PF;KTC5@ >+MZ!_[=Y2V01@2=RM4.Y&M`?HT_]VYK.R>`S67C&:=)(/O'S?5RQ"OLZ)WZ&Q/ >+M+!NSO3W?>"@PMT+"Q01C>9\?.]VB^RLLGE25$FK]O$!K7:T-S2%?W\[VUE^( >+M477OJFFCPU.*,QK4HHXG:7;=JVAZIGX6[7BU8GLO>7.*VID><*>=04QA,"XV >+M1WDFDW/KBO(^[^'>*5:A\OB00HT?;"Q65'B=*4Z%=C+(B!0S<QM#RD4_EFF6 >+MUHTVVX^O+YI%&]9T@S(YO=<N-/)U^>WK%.3$PKE=J*C/=C(<HRFS1-)BL)DB >+M@ZTN8=S6?%A#=2`GX,N*'^`#EF4[!TL3E5D_2@:K"_:&5(UYSYD+V'B-=Z+D >+MMOH`88;S_QEQQ+2\>"KB3Y`30^@-J3W)PO!.'D7-C]<&L2+42M(VAG/WA?E0 >+M_S[G.N4.0^P#<>\::@="I%*:`>>-Z<'4*C9+%(@/#;$N%?Q@:(-606U=RP=( >+MUK&C$M!'#8FBLY1[#?*+%+>[VP/%1*22HHH=(E-OGL8;/5+QQ-^8O4<M2\,< >+M1:EA)XER.7E@6MV^N>C!/R[YK-0TRB'[O<]@@2.WE+)^=RN"F#KI2Y:M/+D_ >+MJ_4LK=?);AK6HE,\8;Y[K6.,O'O-I%<+Q':Z2QP^N]1$I=)_BX;E\AH\;4)F >+M3P^:O*I[SA[CC%OCR060$,O86Q6[*0<9.#%1JI:<"1<4I?M_YP&21ZNMKJP" >+MJ&*>Q8W0'%'%9LWG&Y$EGS!/8QCA#[8+M92;G1GX<(F8;H]AZ@*V_`K>ZW/I >+M$U**^=A>S(>,M]8NP1;_4#P3O\=Y>8SZ&NN<A#QG93:;'WQ'[H3^_?V?ES1T >+M&F1!E5\9@!#_`@F/EPN*4DKEV'5.]R9R0%2AHVB*.M8KF17\0SY[_SEOZE(+ >+MAHJ?XS'S!G&)A@GO)NXOZ$@F@`Q^[;A''Q]&AN?8VLHZ9#O5Y6PKYW@#D==] >+M;O:F'_M%K4S>P!XVU,K_P_+SQFHXS%V<F0D8?[P\6H45^@RS6,4_7US^3G4. >+M]I1Y6AK,9SF$6:68SV0YHR'M2O2TRD>R,`9WYB(:7,BB9"W5SIEK_B>XHSRR >+MLK&09:WFVV`M0?[%DSD)*"0]]I04?6:E<*.*!!VQ(#M,J,=]HV>;E`@-;LD) >+MY.D*$:E0I)C>$.K?V,-S=?ZE)3"J0)+,PXP1P</`@0T3,P!O3I2@>&MM-[3] >+M]^7/KM'G83'),,*$SI$=H(@:*SZ[L#7.:DJY"2:U>L/'M3W@5'4P,\E?FFO% >+MH';BS]1:9T#W@NUN8AFF9+):[:G_9QV]D06*P7-$GP+<)\[-.Y;,9[3N(M8A >+M#E2JU5='"G_U7[NV.'SA0/`&#\O_[7R93EG%$@>!F$.)#",QY<WBE]`LMHGC >+MA#AMB.2+&6+,BIQ]H^B^)*U_7R)27/:SY\9=C?PT5')1O.;35NOJ'M7M.=KN >+M#I8P+&2Z71*;UE&?SAZUH'SO\*&\I@$'Q2[JT-UN_B!D](UG!"+V&%F_K79$ >+M7/FCE3:0+]6S(U\AZ3QUM;T[.K;3DXUWFV"<)Q?D/#<G"J!V\KB354PMKZTS >+M^>U3(Z_+]UL)0B&1GQ@@DO\)#F4[80[2]1S+[I-UPR5'I/AJO<)<I[!(VBED >+MP]2/N79C7,-_QT*=JCA>$`GI@."V$^<'FL==J5_^N5%9)[Q\[B7&AQHQ54A^ >+M&56OQ(C8ZSWAN=:8U=[$\)C:(B,\,YT_+[5/2</ZYR04+3")CF6K63U9E7_I >+MS?&P/KON*H@.7;X42B"3N-P4//MR(REK&+*P8NB/Z\#4[==C;OK4D/0\`(?W >+M$@UZ"[[M/2"=YJ220F7"G1@^(DS\-]DIB/?XW58`@NU?:7WA@AWJA\2UV0:! >+MDE/+>R#+DE9O9B.J-X4D9-*#Z(8;_W8VP_@WK!IC<603P)TVD=\FVPLT`VRF >+M,VBRA;^%ODAK\2Y[GWS^)M-JR`MG!^/F+#\3E\)S[()J7IG<5]'L/]4ER7TS >+MB[@8KH%9[BNZ,L2E--":$90LD8&M<?*&XHK<YY/L[UI3Q"]."B<X/7"#=7^5 >+M-I*7\H,Q&C^8F4WQZQH`Y_?*L.9KS!;])J0\C94E[21M-]I8^24.6278>PF( >+MA)F2!4R*==NL\F4\CRC=?/:,RQ#K@V+CH"I`K#/`BI`CS7FI,BYAKVY!`47? >+MM/&=53IO,B$S*)J/98O+]'6,$PD*NS3C(+I[L-%(DFYT0$(JOE"GF@_ET*"T >+MM%;]M,=P#3`F.`&WI@QAFRCW'"AAY#43':DXB#/;G+K%M\X=Z4-ONOAYWJV4 >+M676)2QEDAN*##<+6(B(<G'I<9B\]@'O_]=+`8)\93'KJXSCUK.6TJ85^0#=I >+MXR,7G-$GC0^^V'&**A(X=$OR:[F+GO$@2\$_[C$0TN3RRA,CPI0F;K%`<V,' >+MQ+M*(-76MN[E`--EAX-5*8.ZP//B,MLX<F+(["*,X80;HNC?EGGYO4&F0]IL >+M`<E>8V96V"Q9OYR;(G:%LZT[-EXJD5/-HST^4VKQ_`==(OB)A9I/PGJ;2'76 >+MU4D0MZ%V',=H&,PYUE!),1(A")VBWZS#'&@<%WZ9X\=Y<7G@X/-WH?++CLA( >+M@1*K56@'-U2"VYL<9T]!UP:XH4J?MC"DZEV4!Y[8B'$HMV#`'8@+(ZI?\Z4Y >+MCVUWOZS)Q3*8F/7(S25<NH^0B>*39&@4)I\^W(W3^6S$>]U)G'-$$4OQ]"<$ >+M;"!\1:AA,1SI(<^%07R=`2Z9V/BYI>G5+S<7-9^P(O\B7?4/?EV;@S.FJ'8; >+M\]GYK@#CK5Q8<UJI(6+)/RRZ?)$O[*QI<M'.+Y-3C>N!JJ[.5]3\O)Z.".ZP >+M9S)BM#R!S_+;2'59/MPQ&A9TN$WBT9Y1B.11<1?3$=@+'D1Z<Q#A6%,([XHH >+MYV_`X?2SX.,ZR&ZYWG;'&&SM_^`?EQI-;UFP!03":;>UDT:EZ+]Q$+=M1X&] >+M9R1S^>IXY!5>\-OV$S"%@"H""(1_)/UIEOKU'%:6:U&+.$"&;CB/[\YEVJEH >+M9PT1H'-,-JG8:)MZV=@^J=&I\6TT\1#,JT5K-%2>4^T`37VERR%U(;)\$0LT >+MRH>S"@?S4UGBT6.T`I;B*FBX&J>92-+]F5[)GF`:;4%-O]$0#=W0G:^211!K >+MX*,4I$[O;USLP<IP8K^!69-Q%'1%@[Y<4KMPL<>(9[15A')Y;)$;/=!9'L=" >+M]BK%S22(BM!3;87:DFG1YMSXRN[YAXZCJ?.W`SW_OF07M?C/`?;/L60?VTF( >+MA3EJ4Z0%O4%V^4C.1+[6R;!G!Z/1`QO9%D*R;==H`L'OM=-#RB30Q_ZMRY:Y >+MTZ)Q.`&<*7U-E#)R<[FZ])@MK,+.Z:P`K-FZ1"]A:VY:N25BS)DY"RPTVZW* >+M$&Z$<P_F42`\XJ`(S?XB5>X,&.@1QL<Y4?"]OTO(%&C\]BVUXW+\'07&?TT# >+MX\7=>3\0^@4OLMK*10T+(2HC<Z\/`A4X\-M`)1]U=6<$J3^+2UD[0_LXW+2V >+M2SON7`H'Q3%4RF2QAZ'QVPXS>;BZ$'OBHU&4%EEH;<&0\;/1Q,1GZ9ZO8P%; >+M*(2>:6\>!320RN>:U;+B$;^2E)GK3&NP2WT3\[]2(WG?3NH'L=R>LW))R/.. >+MJ#Q2_IBZ/+F_[!<9*E)Y\]@\-,+48>UUF.ZK(7BRSJORZ0YA971!D:!:M(+T >+M)Q1R!1:[NS+P4(Y""KX0&PON?@6.X/XM4S[=0HH-Y]`O`,2!F<@BG$ZA`7_( >+MPJ)"XW_\8+(B@L3\)_^J8%J$('IONXYF'(.P?M#KWU]Q>*^>#/8WN.<+5L&Q >+M=L6\Q`HG*.EL!WH3H6L21M/T-L^Y(]:6\-X8),5R([M^WCAP:0DJ)IK>_Y5' >+M5E6[]%1G4$MQ6<3AC#BF4S6:-9?&0DTVJW!H5`-%>FNGBY2#94B/Y5JI$G+F >+MP(:PRT,9S&KZCX]6]=N<BU]AGU3YRU?FH@#@\%]@%,J".`Q)HV9<_@\DW('3 >+MHF5NFP-Y.ZND,J57)?9']&Z$Y#17%O*;4!!6:.M,(M[5,6OOM9I10QPV$3=2 >+M3SP\*]6"ZJ,BCWVC*\.WSP<U!_*8G=5`8F:DPM$?;!FNKOJ1PJQ!<*:T$J:Q >+MI:VRP[HHJ5[;L/8CY"XF#S*JC`%&%B!;'H?B5:`VH.HV-#`],""*AQ]C[/H- >+MV1.]=H5*=0#[*E_I5\4#=T:!]BI*;M!0<TCNCC/:TC`&M;^.,WWO=ZD\[CD: >+M=2D7A$JXH9RL10N=Y+LS"Q#[F6@BJA4BHR5&/CE=-NT=C.(`64"Y3;9SF9\Z >+MH"DWRQ[$YT19D*J</B=-(Z=V+V2EA>Z1'Q)7E+E`\:-QULZ3]P`MHD[1VPZI >+MK$DY/L7WKLH>JRKTN"_715BN;*)O,SN,?VP^NOE`YN[J=ALW%6PXY;%G5^Z2 >+MI9QN+GG;;UC&I-^O]JHB=ML.J_9)Q,9CJ*MV3;M^"!6[/PFK6@J:"3`&Y?D6 >+M2^\34SRK<[EY[A&Y6_`?`A@J_X<`M==6?B)?H+XH2'0!`*-CAK,U__E_KQ(7 >+MI7;Z&T;_`J01FA3ZV/7S6P<S]*28%#X?>.G=.^CRZEFF6B]C&SZ,/@T&\U#E >+M$#G08".UBW0S#U70_EG,*A-*BJ-*I_8$4$@>7='BF\!]4XR2Q#/'99]/T,88 >+M$D;`_V18`%V!)66;L9(7+*E1'SFCXT.LT704>Y=468-1:.BMYP]VA:X2AQ0C >+M>Z'=-_U86S`#ORPJC0X^5O'CHE=6K/^]W'#T`!;4O]Q5R[@BQB?+5_<#E@CW >+M6\L#1YX18,;U6K\,.=YHROS$]'O-(UC_'79/:._[Y_X@.9DE`I5Y(%O-SMKR >+MG+>AO&EY(1\-'>.S/YVSSG6`28\EM;T&XRI'00&E'0/;T^>W[FM*S$]"++=V >+M=(%?L.,]FANB;(F[]CW+I;'P4GO)&"%^Y1[<[4#(R29HRL6V:_K9+PMF+&+J >+M8?P_))-2PS@P,9,$W[/=/'[%\IH[>I^B:O=C`J#_M?3/__CO#Z`@M=30:P>! >+M>F75J34KT5O<BP:ZNR%MVC,$=60T0EKBW3QG[\-WCWL(@NOLV%\"OG\Q8>@O >+M3+)>@0L0W,$8H-D1`2AQ_MRS_#U'(FG3Q5P27-EI-A@<"^HG]_7"2(&4IAB0 >+M.Z4Q#9J;0C,\HR`CQBE2XB39-+-LK%@:$E?[`3<DI7:#%,W;"60;L&6`=84( >+MV:(%4LJ/G%3!WF&7ZW:7M4TA-U7N5PUX*B'K1N%BO,-TI%3E'89I>@_[W]QC >+MS>+N5MT_SX??'8M]JKYGS*XZPHP!0EK<40L5,8*!K_%(1LCCZWJ=],ED)&F% >+M]9S2SJAA6G<]<WO6@=*5;WJ288Z8%BPOYFT3'059/<;V@8K)"U78:A41L8E5 >+MIH,"IRH9]$\W55ME/&%5Q3)(+#9\>H4NOQR-M&7$#$EFA_XU=AT5E*EH(B]H >+M;9@':1[DO/(QJ]U[@W.?LBV7<[^WR+ZSAB6H(Y=%7-JP%,%,N_*7V\C,PH1] >+M$$&[2XTK=8';["=D.EE,"]\/8XS.?`H2;W8+K![2E;XDKBP(@[-X.G8CA:HP >+MP)RIV7Z""FK+;:K9+&G#UH5$V&U1XL,V2IEIQYWK/3].UU>F:YL3L0FZ`<HI >+M1.80(ES@4,P=X)@D:],WD%%G3N%(?=6_B92KP_)XS!3)':3BN47^L59$85`: >+MG%ID4(W3.EE?&(J[T!!515^.FZD(-.7H!E-'7AMQA\G670C.BHMK=(4%"'RE >+M'E]1'I>S/"E$/'N#]B#-6<FN?FJ58/ZM'B@PX0#6-D8PBP16D0:8<?_1S74" >+MC+.5^<`)L!(2IL>+J\L'Y8$MC,BV1D<)(XCT\*P;0L@(ZH5!]NW3(Y(_&BF5 >+M);&L`Z+!OULU]27GW_T$,RO(0\(4LB2+?)WX'#304=J2\$&`83Z1KLE4G_:B >+M)WX-QQNA>"3B1VHGM[E`@2QUA0+64J$>>P7H(,BM&B^8O:#=L;`Z/30*D*&! >+M0)1&J0\&^417F\WRJW)PGTL_*3._K(<;Z2/']%:72?:P7(BV2ETZVXF4,^X7 >+MZEND0\E(EVVS]MOC\Z4V8+3>L^)_F2:E5:M/L#\@@A]B0!.1Q0C(W74D8/!P >+MJ1W),H?MPXCUIT-BH']^X'DYLY'102$CMJD=_WSL6_..@I8^&L7`TM>]6(,E >+M(%^25B>+<TT,W22%H9GOU]"?!(S^>U5U&5QOX(NT>;:1,RTW_4N:Y)5C/SV$ >+M"P#R7'?82$<IQIVL9.WEN.J5C@VR?60%G0W$7-:Y-$S_PO]\YO'%5,V1LN+] >+M<`9'_)LQ3EES-!(;Y951":=GEI&8>;**)#*SG@/Y=*44R^SKHP*FD7=K,'[3 >+MW")F$=Z2D6]$#%L>S!^>E>K?-V(I[0%94LA<C+DN*RGJ5T8-KOBJPT+F/@Y" >+M)4XU:*5=K:\=&940&9&!/R)6TPI&LH4VA!L'^:8.MS42+@_Y%=ND$9.WC!1C >+M`"VBQ"^>O_M(:W>W,IQ&Y\FH<))[@_3D<76E2<TX_7&SX<C2^Z>/)`LQQTWE >+MA6*:HR,>.GIKN!<\$E0VW8N[B!`X[P0>8)Y$.R9<EO*"5T]'P9G+80`A%!3@ >+M#]^_]G\L1R'0DOX#!-+V%#/7<)#_TQT+]R1>IEEM$TM'.9JPVVL-GM+#X?98 >+M4BY\?C1#((]]C8[9'Z^=9`/..O$%`55BGBP`">C;-^H(&J*"1X=U,:W4^6%J >+M=BNQFR%`ER*^/WZX5ZG1,I'ZM8P>L%-3<(5%-+X,W@+V*2I&(_U'2(B+FTN4 >+MMG5<&37EXPJY@^B8`&N$;!T,2.$N_4N4G?P]'FI[X,Z8%:F`!<TJ5!T9+*O. >+M+^L^(#E@QJ3@KWTU)9`Q2?&F"M``[AP_S;N?_3$9-:&V51(,K1=28N8_]HSO >+M\S7)5:1GIQ);Y]'^C&*U@'61H/M8[XUCSIN^6`#][[VD+,M6T2\.?$U#O::= >+M@J4-.#,`4<//,2XD;\I=4RI(@VM`-3LI44=Z#584Y>1M?!\I*X9+<_OP>>&V >+M+(%^S,LS%C-?Q5F+>.HZ>9PG&97#VO:=@Y57--33?_S1GW\6MMM/S_'[A]!; >+M?&</5+=AHW\'[(LY,L:CTS1RX#\XD?76Z_^T/Y<4)D^]QF<+`H4N:T2+Z>OU >+M\X\I=0DHZE'2#9=Q#J\.CR4$YFZJ[8C^+/F"<*5XO&#UKB^A["]L\X[&C(.` >+M[@0K8B73&\:!I.3H^`$()O'V_I@?,C=L!%TY0BM42Q/9XZ;W\V#YMOCRNS.% >+M-ILI(C15LQP9E1A06&)3;S-X5$5]8^389Q03.^>_;S0'1<&-N<F7L:ZO"CCF >+M0.^+LC+:4DZAGTKP7]PDLY/D@L'M)W@?0CL*:S?VF"1)PXYV?%K]%])U[=5I >+M#>'0OL^"_Y#&NK;%PA?PS"%\6D&5@J__+0$_G`E+#NO\B__@#@?YIUD?3K6% >+MV&N:SH>)9J_F9!>.&B911C6LG/%QV,_P(;/$60-ZJJ!R/0BABMF*8CBA&^C/ >+MYZK`?S7WHA>(Q;]"6:6=?HE#IUS%/;VV/%_8#1`I1D<QF?)Q&4+FUFN'3RL] >+M2J[REY^?W#!\M0FLSYH'IV>-A^[]9G^[#B,I'7E#GB^(0H8TG582UF^5T!W& >+M_+@8OGY0WM\[E09,_G]I15((/<WJ_\!M5+"PSC"8JIM_TY+9;TU<(KD:4\[A >+MYJKYL2+8>S;/)6^&>YV4Y?B=4;?-<"<1*S+OINDIBP<,Q^ARLQ^%Y5=P_5&, >+M\!X""US;P+C\$Z.>M$"7RRY=EI@U\Z9/ML)8FKG7]@%C`.N_GQSN"5;HPTH] >+M:Z/T]_V8VZO@`<2?BQU[5!%PZ;'[QEQ!*K[6++__VF!$:``6_'0T!1`Q!7H< >+M@OCIZY&.*LQHPCYM*`ZRV`:C`#U+DY`;SH1P*K+T=U=,+VD$\13*;Z0I=VBS >+MXK&&G<CL27)F2A4AO#LN/T<Z3`Y23XYS(@$T)(X]/0F#88WS#?5O;6A]"2]6 >+M[CZ=VH"F!;U143`;^)%0&(P8*,6X0`GR/[\2,)T\9#@1M.ZY@I%938`=1TO. >+M#@+X+6RAM;^)_TQ^.]7P)6_)3MZVM^S-B$*0@IQG1;_OXG^S$_2:.`9@TB^C >+MOH['&1RWR.`M?%*7-`O"J5VK?N;X@=J#OV!%UM*OJ1"'^WM21*)4WD$H1]$P >+MV1&_3IP%V1$T/\%3PB'5ZF=JK^\UC:9IJYM-?5(D%F/:FG\%SWL*<$'HGS.5 >+MTR>T.;I"N+=`V8&=K$X4"7>Q.#<R-&_?&GMV![0AY[9Q'`>MZ:]ZE.U>)ZD/ >+M,TYQ1KT'JB+3Y[9I$(158<T;T-+99+8LW^Q%)XKB#V@@]*[]MI5DG1%#9X&$ >+MCSTX(HTFZTJWS!,U?/O"QCF<(*Q&.R<?04%P9C>"+^8<4M0J$M#^"1L7!B,Q >+MF"BS"X=N(?-"T.J\U<T)Z?M'_86XFHF[II/:Q_#T'U\@B8$^L6$LL@D\$0.$ >+M>M#>6)E>R.NXZ11\3-`5(#7<A&%L4Y-.$(?3?TYDI?9-O$4XKT.CZ]$&MVZG >+MG:95L;*;-+AAB788.]^PKA:#Y^O7>1S_+Z@X;C#SY]OEP%U?L#!%8G0<R'`' >+M&0X)1E[<&I=LFM77:$"P+139N/'U/#-!?P=FMOHYPS7:K`,1_E"X@V:4]NZB >+MD+]XMEGE=*P@/841RM#[ZSM:4'/-I2)N1+!BMJBTY@L(1*8L8U[,8-S-WTV_ >+M,<2!!`=6IU$TJCWV\I[[$TSZWZ7D'S`:VB<3,W0C2%PT$5AX'9W&WFILN5F, >+M?$R8CODRX((2[;U!SBD,?3&5@PEK%*+F@.GVRT-;P2]$U5ETT[T0UB#E6?:# >+MKFA\HS@PO3;=$Z&FSLZ(6CCB."[82,BIIV(AM]YWO[O)?V>I/>3YPLI/6Y6N >+M\)=BCCP<>M*2#*.(LJBTT-"[?]]*69EY[JA^ZHOD0@>]O<INYS`J"+:1WZ%V >+ME]_\(D8$]@?DV_W\LP*>M.0_^([WFO+Z)%,>N@"L/S?7W0(ZZY!ZIE&@48/' >+MMNZ9F!9T]Z-[D78YB7::DNCC<`=Y$X5REHQ;1`DH$+UX,N<(X':!2>27Y&V; >+M,X!+_:6NRHG26G#<XEIGNYK0Y33;7)(Y8FUSO]F&'+Z]/$6R5UI.IE^6H>D` >+M$FWC,O&,4M'\:*XWW*S^#NY[OF%]^&C>NB]8S0#4&D[];TTQ9&H04=4_4.`T >+MJ9PF%OQ+-7LS`3HE+_;$`0"FG_AE?WV]?>//;=K0[7K,*AJPBG0<*Y4%E9'] >+M%9U\.T?6/:SS2P3H*0;@&H*'!;*D(WU7@`$GP,0V1HB``?@OOC!^)IX;)P+] >+M]>$,=JX?PUV\D3&:@82<=J2>U$\K6@E_?>Y>G!RBW"ST0UV>)L<+,RA46V=J >+M_#IMXE,>G*.SL6:%KI:I#5(5TWYL*_S=QK47`"NE1P'0\M'?RK*99?O^E>EH >+M^P4P`\CDU=:K&V:$**>;RL+OL!]N5")F#G?PW1.E_U._'0WM'_A.P+M-H]8B >+M0^97^6-:C2#VU.U^Q=C]*R2!W<8I"LQ/;6]V9HE1"LG*L[WF]R<(",.CA(P* >+M7C)`[E!F3_\JD%C]I*&89&#QXBFJTJL!Q^@/8H`VP0TR>WRPUT&1._W1:M@8 >+MP:1&)OL/ZM'+LUT.P/OZ@[>7C*4`"CV1__OX#2.HJ<;>\;^KK2KD@-XF>`4" >+M]7O\OOXUW'B\+:MT-H5+G_E+#*Z45]XZ3^EH,1!\F'_KPA)GPQ#Z]>^HY4[! >+M=POFI:@FQ#L\.HQ$7%.IX/:JA]_`C,YB,BSJR9/E)FQ2<3DB:R>4=S_N](G4 >+MH\UUKZ$;&L,IRUMNG6J,F?]CUD6/D8+S6G_.4*(G@6$GP)4W@@5IGVE*E"?W >+MG/7SH!694Q5FEU:+NQ?96<K`1_5ZMQKYUL0B7._G.=@OL"!G/RPJ:^^@2WK/ >+MUQ$U!M8D7.`&V-@5,>\H=?&=F]-(*!5Z!5][C!UR5$K1$2,VC!S`9%S[+@>^ >+M7-H`D:$$EMA?E(X2S9;6D)BW:LIZ(A%;]F1",F[`U[@Z>#B=>8'!;U:=!IZ[ >+M`AJYC?UV#07Y=Z3-CX,QJOOTQ0GA-Q^(US@^/SY)PE,HD.&5:S8J(ZI?2O9" >+M\"$53\50>J?T:P>[W=7#OU9MB82PVU0TUU8FIA?7AM[[=7W#DD]4Z@/NV_M" >+M]FX7Y/QJ-:=64('MU_<'6E"3_?]J($-:BBB3)4`@DG@<#*R/_JQU+1YO%0Q* >+M7X!:ULVTT+G+!QSPF%X$^;!CZ6BZHVXG(-+,Q,69&2`Q,`+)*&;\$O*7LHXV >+M;9($7JO4[D)9F?W\5)7QLXC*YZQ>4?[Z!LL!'7YG4DE]XZ5#NIEXLZBF[WB* >+M=^86580C@,[N3#&W^/(CE,FD0&,!3$X3HAX/S/0LTK^>T.8LI_?9!YJ[:R\_ >+M=J(YWGQ-64Y[#*U=D-UP&&F!)`;AOLK.$O))1E$!IME.24_?,#$-`3,!J%NT >+MZMHO=^\7M`R_YU5RQG`*`498J)F@%8(=ZD(YFT`MDO8XJO16O=P(-Z"0252' >+M)0<AL_T)@B>+_X^B8A(YVG_?]K1L5=!&>E!',^:S934K*?%S)>>T=%HB"UG: >+MEUJO!(K/%"$ZJ]#?P>JB[@W:I@X/!<=K=&KJ3,",\"AYCS2/;"#KH?^:V,D> >+MZ:C)N"G?>_E(9'A[?L8.:G73=<2%+K9A0,.+7/@&D?SZ(8?M$ETK?9N5O/4# >+M`0DW!(<+]J]XR>>;.E35E%.4\U<R-I&=]TV5D/SK>2P8V85*Q-_I!CC4P@DY >+M=(.NW[GC_OK+0T\]?_S?OOLQ52-^?Z3YXQ7[4VD94"$237'N8NH$V53EK]-/ >+MU`(=@VCBD0F)1**/-^40FBC5K<:$KKLZ<]%:1!_?9Z7PY\?TL0BOM3;NK228 >+M0JQHF>WNC=+[7HD?D$%#FQ2>,!FE3_D.F#?D+OU3ML[.P#NJNLM,DV=(">F_ >+M*+GOMEC>QL[WIE"R%<*B;]BGDN`EH1;:]T@NRUJ&C)IKF)@U4*,>\Z`I),_2 >+M`>]B^A)(91/U3SR^6U<[M>=%J_[1S5$$7</YE$G5GK"(QS7OW/Y(/&#]E/V# >+M$&H1ZF\FC6\;O7V\:]96M4^(.5/.$C()K%[$^!JDC_QX]01Z-][)YI>7PCPU >+M\.[+'-]5>U*^@,*0RE(`P=VB=">/.*__\#\^O\^_%P.W^O_KH(?[+YA$UW/& >+M_`?J6S(G"E^ZHH):BH6QY$/D1F'PN?[QLUZT*^_?MV]KON\_(Y_/MKD@/K^I >+MC71<P-@LRI'SKV5FR`AUH#VNQ`VWUK)AZ4(;C%E14B9FN)"!*':],2KXT?W6 >+M12)T`C9`T/<I;2,A.031V:J=G5!*[='*0KDYA8=&::/E=[L>T;+AE9.X4#H2 >+M,+5'T-I/]D;3533&4E5B_4!^A_Z&%]9"7N"]<&Y">>D?!B$\#%X0<W!;O<OO >+M)'"]I29F+J6;8D6J:#NE-!);H`@;@+2BI$P+.B%:Z1$,]6ZSR:LNQ<$-26KN >+MYVDY<Q<R2D"Y:@!5\?X'<?<4MZ9=)9C]8[L<<MQZG@8+JWH3-MTB'8,YI0@` >+M$0)2K[VT#B<0&BXYS*.,IQ<VNA"5UT-[B9"LEA>`^*:W74GYZ@%%Z9G+3&*O >+M]?WB!]>_T7K)`@O!Z@K'6/T&4KY:\30%P,G\?8'"Y7>/$F&`I1P3=,1YP?AY >+M!U0,+'(1LG59VH=MC*K:*7:CUS`YJ$4]9V>!00?:]($#90C3[LK&UOM,G-7J >+M<$)A?\_;W$AZ_'Z5_\O4P:\R^3SND;4O2882#=ECKT-$4<.=JO`81%B:X<!> >+MEN-W0"S(<L8FLQ^S\:["DG`[(+(44'-YYA16D"T;B*R2AFC16BH&]7.Y!3N^ >+M?)W6$^%-Q(.Y,2,/NLF4I`DD^DBL?28#_,MB.L,FWZ7;S$^)@U(Q'5&$BSB@ >+MC3\@<OOZ`WB.!ATR-QE2Q$+TI?Y<:B57L15FTE'QH!&:Q8UO)$N8.=GLQWOF >+M;0'<D&U+5[6$+(EBIMA'.&HN0D>L7HWNA!Y;WN?,GLZ+U.>AP/@@^&XDV2W@ >+MSI3N]SW[FZ]:Y>M27PV^)QT%/9IG-4!20F(`<B(W!I/AS\B+,L6-22EEV`,) >+MI^I.@\^QV`X*KBI5F$&@IY-YK$JZ'4I?'2*=W1I#-7U]AZ\8(%:.C!U3MWBV >+MP^WJ/^'$F:P_A=#`!_8@=DXO5DF%R$=FK>?K8Q"G;FT0E_DXDT,X!6:KQ?!L >+M(6]*/_DS$#R*`W62`P0$('9AW9COIM]L&<>O[!UU5:=XNY2-M49_/4'O&F14 >+ME#2I9+#F&X70#KRI9#*ZHT2(6'%*N;I6J59]ZN#U29,JQ!,3\$9T;]'"2=3, >+M[/@X<90H](K+RE%:JABLE+.$SE_!#]8<Q&E1P#*>I(8!C2C1&6#!@^="TJ=) >+M3<8LMME[[K<@7?+S7(9Q$3;3]H38ZW);Y70\HD6Y9-<:IB[YJ_T:GSNV*P6) >+MF[#_V;B[-B_Z/=0(T<I06/:)XW1>J'3*_<,ARL(9PL)GH'^LW=DRKQ<Q^$1- >+M]K=HN["?W8TP!MV^8P<U-?]G<:."[^I78Q=1/[Z=UE+4@>%4GBWZ`2D&!A@T >+MO%<#0N$F\5K"[.Q&OXU!,#(;,#(@0Z94F_?@S#N!7(UK/X&>--22@*W])QI" >+M)G4B_+ST0PT\J(S&%=>Y#,RL%5]$12-PU!YR[!.3E&L4/HU=[L8$&7TNM;(# >+M_>Z]#T6GBF%AC[;2/0ETPI.IFTBD#0%HLOK2O"N%+U(^5\S'DF^!45CY"'JF >+MV0%V"X_UZ-%9A#2]B"@+]!Y:2PF9B*)P7?G=ZB-W[8=R?<VF@6@:JR"2D'(( >+MGN+52H6\9'O$3X<V5DWN:]Z5IQ]40L3`BO9Q8.0=W0"#S24)E:GPG"?FP/?J >+MAL\E<^>#I._1>YO=LH!9/WZP.3=TQ,^3D62#[RBFY3A-;LFWK6=8Z>8((L;) >+M$6XWRY7:"8/#XL!/R>`3!_U.\6\-%9Y+[OL!-S(WW,]TRW5/&.Y%C-"9KR.? >+M99*I\^>L\41`6MZ,:R@+8M@85PM%`*CBJBC2`OTG0^=&.N+1@JT2XI"S^&B* >+M5Q_1C]?/OF_@)Q<]?*G<7[_%0H`5/%(/ORK7]!W1(JU-3^3V(AQ??!FILU4K >+MI7-+0)>C[>CE4U:=#$_T@-T,6(W<QG"15:$.`Q$J=)/D\`<X:MLZE?0*8"IV >+ML1&*?BV$]_,>1M4K*!E00'XV^KC.3HY)J+`*=2O=ZY>AE::"?8AER>%Q2(!+ >+MQU,E%#^#)(4U1LG4HFTW`V<KTZE_Z<>F`1#?UK!)7*=RGJRN#_.\LMD?#$WF >+M6)K-["CB4:$P]I14-2@?^,LO]`494-A()8-G/?G?=\#N(4=5WJ_RB[)#:>4] >+MEE"#3B5_'#Y/::J8A/\'FL(O':JC=Q6$OK[?6A`0%U6];ON`U<X.."(\%$N/ >+MO5.P[\?(<?[\]3-"K=?1-`@/R3N?P'RA5GABPT2PGJ(IJ7O%2+UU81<J99<A >+MR1A,I[N+&,H4*%-4%G$'`AWV$&;SE\R]^/(WZX=QD_BSL$JAB[[89^;=3[D& >+MU(0L&7J]8%&,Z!3C?K"@EO-D?^AJQ!+HUXS0U2ADY[1,6_ZZ_5+$Z;24D^%- >+M_(GHDEW!,F5=2;'C=N&E$@^)'FX/&W$*,2N:E%GJ9WMRV8FM!>_]<\FLF_C- >+M<&Y3\:(MPFZ0:;F-@,A%%2Z!!?4R+,VV49@`&_JJ<YM^GLZ_+K1GF#F%6MG% >+MN1KJX,7>7$YGC\L5*D*<*S]5!:;&U@2O7E5_M8S"*(^9S\Q#T/%HOERM%T:& >+MX&DTJJ/*%&6#KD6EDAA'(\Y&>39T@^(IE+]S(;^R_?F,<#,H*93>A<BS)F;T >+MQ8%U!=VBV-IR60MG`CTBJ^TYP^MP6C$E<S)$J`&_&WW0,/4&)9C=(S()_/S, >+M\)7R]C?Z5CO/AV1*?V+NIQ<L\3<16Z97G\IQT'D\84[ZYR*)YT3BB6@!4E(@ >+MF`V_&V68*6X452\X^Q>(>P%LHA\1=4J&GA8:GZYZB6*<[\]G&M/C@YO+73DR >+MY9B07<G5B]Y[IM@\ZK(C.$]LT$EB76$;"::B'$:!G9I>*U]T/=EO#?GISBOD >+MSV%J,BHVUC,KY0E@HF8/B;Z)#C18K;=F%VFYYNN/.#NK%-=7X')O'=R8\(]E >+MQ!IT3-N+@>2RV\J81_=`&18O\R8&LD"1.?B:R:-DQ=%]QWT;YP8V#:!."N=' >+MK3)6>@(C7"9,K)3U<`.##:(X=,J[1)8"71,]-E!R?QT?,ULP1E6AZ;QN<)5K >+M#P6_@]O,?(T)IMVZ@.0)47RE3GN$!0Q;L0<E35R.Z8M"7@`0MY)NK8R[<:0O >+MZ)+E%\F3?ADL1\;S!QR>#(QU&&,5MZG@:_SV>?KY:+#/AXEVIZ,VCS>5@1!X >+M`QY&IMV2NS3=)M32!S,N#UBH-X3Y3Y/'JG)H!Z"^Y'"FJ(4%KMP`KU(6(`4T >+M-*H9;&8NAG"V_"X($O56Z76QU*?JV\T$0/DK]LN\05`)&\T6'P^_:DX,(YA( >+MHD01DA2WPG+I(BR,Q+7[4B\+3VF,:<*:@LAT[IU%RJ[J1!0VWQ<B0A7CB<6( >+MU`]K3X2'4XJV"ZH"'I7Y`FZ$(`>1<(_04WWT%YT,J392P>S<X&GX*V\O_^A, >+MCZS\IUW]/&B^3K/UHQ^'67+Q20TG2)6N&D70D6%D#^?HQY'Q)*>!LB39SEV^ >+M%%C(ZS5L6`^1XN'\6GTP&G>%XO6CW?[\=RP-24"XY^H3=-IJ%!:7"TDP[=>< >+MPM^&`2:47\O>*7R]*%0$.\OLL^"*8)*F_\3K[C#<XQX(;2,#I)(XP+>RW2/& >+M4?W%C2"`]4WV6Q9$5`#RHM_DPT4BEVH*#C9CRY;/%E^<_FY_OZ=$\__?M<*P >+MX*Q)X9('H,!28@%O-563O/-I=#)65F(96!QB^?9K=[Y_V:6WW4M04/7QTERH >+M0LY')\T1'`OR#6PO9LH<7IL,3P4<I,/_Q/%])?3@[+?4HDQL/HFU$U@2()1* >+MX//6;@?TH-4$<2<-F?!C4=U.C39:RT6:LI^CG*OQHX+[6K46:?ZB.ORZ%NT" >+M,LBA=D43J3;4$_QF$%S*)NTO:'/8T!W":JDFI<APO/(0RR7=4)&U+LHXDPBN >+M-U^V4\(0=V;[?.1-+96?Y`:_HH'-0A^BP9-!UOE(:H9BF:ZYX&=W4Y3F[BZJ >+M9:GK7.,_3WY*CG2P([2LP6=RX:5;4\A=XI1=OKM?LF$?;"E!^)EH!TRN_)N? >+MP#!!G$ONI//C"F',L1X6C-G;E2XAEP'*M_P,?.<XP4GP8$HQ>)$A'/WPK]F( >+M+BBLR@$2-?`5.&-,?,0(L-1N"04B0JQ;3$N8?X%N%V$.4\-@H)K6NUL)_IQ_ >+M0D*X][2U=__TCQ=FY#C$0D`]Y"(M>T0%9F4SBECY%`U?!J<^TS"_Q&"XHN-D >+MX'X\H@_),KFE%9O?B4.Z`Y:`2GIG2G0H_*0J<^P%F9(LP8QRV%5*$_*KI37@ >+M2)JX#<U5/]$D14:=@623/4=6+0(BM[`4,;HA_R!(N>`$4%RB7[+N\=^<1<MH >+M4FUT24I;DCS`X,EBZ?#J$5&7R<GWPT;"=2M]--U?/8JO[<`2$`?TS,_R1*LK >+MZS;P@460M($5M0:!=]4""QI]AG81XDAF[WG:1<W3*8C$'40,]B^[T=B3RX52 >+MW'1S"[N3_8QRY)L`7;@^#_:)TF`+=/B",O9C8K6@W>-.<*UMKMJM:$ZIV:61 >+MJ5@^'K6'QOR0E<`L[IR70-3+W?\-ZVG_OX[Y%C\X.)Y^4.`>Y&FCAZ%8;MB" >+MRP$DNIB,@0E[5>K:CWFZ?\\#Z>Z:8*[.@69W]U3A%+L\%4NPSPGZQ$=AX0$0 >+MB'_.&"*C<K9PM6E+<.PVU:4WDQM*J;4%3$;^--*8T$`-."X'T978"6B:<I58 >+M,^WI9,S,X+"D<;A9>4F=HF-_M"7=;R%ZW*OKCS'9;-3]D5XA>P("8#G(]H"* >+M7,3HQ99,=*+2RW!7\PY4!R&SW1A!%(Z.^"*UQ:ZR,PV4Z]YK8!3^8*5>08BC >+ME-`P<DA)Q(#S+YICP+Q/LEMEGF-0HIXP=M_R;L6I1%/W8<Y^HTLL^D3$9;=+ >+M-.`OEH@6I^-B!)SRXZ"L8@F&/"6ISP6]GH;:]G[MF!6U*=_/=\X;5<6%$L*R >+M01M@-/F6='$U^#LI27Y4Q_2J.U[Z>,#*BUY_(/@1)<!RM6F1!1&2B%JR9UX> >+M1>8+]#NX&KR=1O$BTV=M5(;0IFR'3O+<[L_.V+3"9B`G<80PX&`&>61"O)C# >+MA8@@,#[+G9<\,8P<>!>G?HO5.HYPX"Z5I+1E3U;O_5QDG_XAB@BKYK60Q$*; >+MC@'DMDA\;I-I-,3OOM"*K_\96%D$T<W=1>D\M%(K<7\#S@[HU<TZI"V-\I7= >+MBPJ/R,EICTPC&UMSR"O#(A`@9"?IQ:S.B2R[.>JH:?=2K]%I<7:7)!"$19KI >+M7,'X<<]!!7$T!Q9F2`]6`GYJ8H*L&<'&A1)^\W1[EMH)A\\%BL\&BK7G-6@W >+M%_3`:F-:&\6*4M`/[!I*WUU88#U[](NV.ET2/;>W2%;6J:7_QF'.#JMK>+?Q >+MYUGL@+[]!Q?41VIO=)]_.QZ!`SB"Z'L7J[6>_W%OH%?1^%:`<VM=EA8(5KR` >+MZEL3)PUX.#O5___\#_1*598*&@/B%VB7-0A5A2X[Z&\B5S\`'0(=0IS`W_.K >+MZY#95KHN60U)N^?",<(PJ?6@8;HY#>)\F)]A!)>/M:,U;)FH_4^ZL`>YL#$: >+M3PLQ4J2=1H*F7N-/;R9*1`R5,QA7:)Y:TLOYT+^3';4IOSYC,4HHMYU63K"R >+M$HI92R1DM4N@-6R)"),#XXS<589HV)W2*)<FR*.07O&>YZ[.;U*K-2`#,29+ >+M96G&P`@YMVECDCS_X_@:B:R=#[+)KEB?_>BLO!3V'C"*`'A4U<=L:0U$;`W; >+M90C<CQM2CFH&9MU'?FMYU@=G$'+B#S+.<5:IR1.TABLJ.,[2],U>9]$)SZ37 >+M/^E?29?HOC@SZX]Q)4=*?IU&)"UI4XPOD[\/-*`Y?%U2![/,HM`.:2KD?YL, >+M/"Z34SPAAY*0R3S"B/R_[H;^/\AW[I9ES,?TS_WO5JK3Z,@':++[+&%!SHOK >+MGI4U;$Y0I#H,OD=64J8-&51F'^N2ME.BB#2BKEHPYK11E*?7TI/M3'3'$SY@ >+M(Y+!A.M&Y7Y%QC'\X_0WDND"1[9,>"R$QQ-K*U6/DLU17%VW,Q^@('^8)XSN >+MO2JI5A2>%$'##>LGK$7"CQ.D<SSH5_]!#7C(_!!</V9VLI'>O\UYYEQ?#)T? >+MFY*`$5%3R*N+@6O!T$EI`D^E!&M]RC=O945O98/!VHM*<'S_1PMQ2TBG96I4 >+M820L9.OM?C+D?]],'Z+UL*^U^3HH7V&>EKM]I)%E^,?D^#Z6Q1S%!]M#K;*I >+M9[X'H]^CA`M;HB<-^L0/3&:5@_.!<,R'W=Z:4U;%"*DID!M7W!]E.GCA]66M >+M0MQO(9L1\+(]4BT$OO^_)C2`#WS_^G(K$'&HOTU<XLXR!O@-VJ6FOT%H*S-: >+M8-!/[GECN1H2V7+EE'7SDG9/$@^ZJD#_@D>-'NG'**<VP&&XNT7[,3YPZQVD >+M["^$BLN\I7$HN0);2!_R%@>HP::\CG5\2&-LO1)3Y2&?,4.`L$*)D>-_+*ED >+MVTUF8#O53N8^5TB&90DK)89`-U"KO`PB6B7VGZ.@P_S%1041Z6'O=8#FLR5> >+M52V4%=E-.]=MD5>2<GR-2*COV#0/44J<O$'&#_V[4%6KG`U1G#8B9Q+#23-B >+M%E"\36JZ41"=9$;9_`Z):$<-/.0OT<MLM`PKU[389M@>;G&4CTW@43$+44O< >+MO1OH783%6HD\&UI0*<3>Q8`"9OUE+;XY:X!#E*GCJX41B/1)9\P>X;1S9;S( >+M74NX(5HO[\:9ZRC`+U5!\H@D_@DE\TV^\Q/*Y!I>#34BN%!V4QP%2X#F`W0: >+M72DIX9#=T=PLZY848L+TC!J;%K<YH63U#8[Z/7`N0O:#&<$^2;(Q%<\ORR_% >+M%L8'6KIS0*M78/Q4J'1I8M$%HQ/!0^"V4)$Z4SD4$QS84<S/#R.GG])%H`H] >+M;U'!%`L=0936A4*V"0./ZC.F%B\-X65SA\871<UI#Y0Q@TK(Q=#YX\]X"(G0 >+MWHKA8VBOQ5-+3NE2":MA4)?KAB!=+VAO"(7I>Y]=&LZOON/RR27-FX&SIA$- >+M^WCWS*2)5-HQOL[^J@(AZ-FO61TJ-!H;HQ<%YZ8<6L%IK94$CI[1C--8`UE_ >+M+[$4!#W/(@;Q4<5NL!R@@/,.9_YP+^525"Z@2-!5@\`][^PI.(16HLEV2%0) >+M+`%``#IW2/3V>U<1VN%CL.C^+?YO]C_6$0?B<'^M(9.S6'$(!"@0/T.MD,-N >+M4:)[*JY'*2=&'JU'(IV.4_>ZUMK,[X^:(C>@-!],C1E@UDE5)#\F^`R%_8*6 >+M\R->Y3,D,E!0\1VO8C(U[:8(OE5ZH='BV(+B\,\+/EHA#V]=T^J?7WE$AGYS >+M2AR16+V\![E3;=N2A=%B8/9FBRE66O/8*_"+*T%0#"'->*5&17%8$KN^&I+; >+M+FT?0=@.,6DE?8(VZK%DA'H7ZPYY>,JK<E?_A/S_B.G)A+1D9MQO?@6=P160 >+M*RQB[6MUC.NFU0BB9_WHS'S"+F:QT71Y'8^:^[5'H%?%^SMR0-]XT\M(T5K! >+M)_]6R+Q.Z_)=*]LS]LFKMK>U%\F+;7C@(6+7Z=Z8H/80&>VH.5[LD\T+;J54 >+M5]JCVB%@_P#I4.-S**GWTWS[.A$0L5CSFAC0#B4"NR.\M[<K)`R.ZB5)#SLD >+M4KN]%4$V>0<2GH,A"3M?._&E\G(\7:(VQH0.B5+)>7$]2IE!V9UP4QOI\FN# >+M8O'D07]9%"!Q%B.*M+43[5(RF:2NE8J-7ZF<KYU#U9L@30T."\S=(<1L?\8# >+MLNG94M)5H;#J2U6H(<2JN`.]M;SG!5%NMS,1UR>J=1_!",NCH=@FNZKL6?;A >+M1YS+D(TH`\(YXL&ILY2>@C%]T8>2N*2?&CG98Q357C84VKTZH0R&T58\9")` >+M/]U]7K/P@$[CN@NL&;^N[<>HPD:&1O4C8F)->2;LZ<94[.'LOTB[2J<,G>*2 >+MZ_3D1"';8?1;P8-4V(\YTDY8%UVE%PT:L<5S][H;2P=CP(%E<DNT#$?3T$+" >+MYB@&5E`R,H#SL\@I`M<8,O7)<([F8$?F+^S@(F7KGSJK]7\3PX1)R7OS_],? >+MYPQ2B`CF?,@$Z1`(%-[38BNK3D'S(HB-3M6>?Q#'[BOFY7/U>O.?_^ZFZ&93 >+MD9^"15U1+^A'A"'C01T(]X8`PL)?+_S*D]V435PNT_=L'$;.WJ=&/]):KH:= >+M*Q5L3(H0Z\!$0&:D_\6-"17QK-'?2=(_"!C=XV6N93$'&ELYTW"QX5+;1\&; >+MGPPY(*J87:/M90[8Q))DZN+7E-(.-6@*ZE-,E&X,K^_OU$G:=<NKF?Q>5LB+ >+ME/7(Z8[&W,;+[,GK%/81\87XG+!?HY(_LL*XTI])]HUC'_?8@M`L[8'^',ZC >+ME_*F4W6V6OW%)5_(3M3*<#;MOEK?P$QVULO$LRYFL-J/#.X=J=<FPN8?^MSW >+M]DHR=VLW.B'.9.S\X;P%"`V^?6MC[[\/]A!<>7:LY>1&GJ6TW*4(B-@I@DYB >+M7Z8-U"Q((C3.!YIN%KRY.M]]8`1U_E^J#A,Q:AP46-&H8@1EW=:=YOU8'LV* >+M*CCGT?W[?/HWLIEYI)QH_?#.BB2?\;:T*=.Z'\.7F]XO&,]X;'XG!'X.POK. >+MM-AHTI(+0_E>^A$?N0JUF49>W(2CZ:TN6-)2[PVMAT4X%P*RB$.)X9*SPJ^0 >+M1#_"NV<1_`0U;SN:7SX\^8<V%P3;Q3^Z_5;[>9WGAW1E2^>P9,?*Z;"<:<0G >+M!4]\A^'OFNF/'WS\Z/EJTZT[,[:Y>7Q\T.;>9LL2Y3,F"(=@_]1ZU-KUK;,F >+M/*[=_Q3E'O^7N>,R]1=(Q)VN;.01?U^A7*?7),[3/EC(;DK<D#%W8G(-<<63 >+M>"@`A>N6W8Y6_S#HAH',UL\*3A8E_70G<5!MQQ#S<!B_B]Y(T'333<:TUK;2 >+MYEGF[Q5'PS"J#EEDSI"BY4(&0OF=")@VG/\QR(*H<-A2I@\E]@ER(L0O0X5G >+M]$HPA';R(U"6@97`^+QZ8_+\,'?57-<1!?2':-!R-"Z,+LO\'B1&:(98<SC6 >+M"UA@#;IB!$;G!23M+<4,5D>;C="F=6LHR6&);CY=3A>EV"$_YJ_QX$M%LS"N >+MB03?(W"[#)_",!PFCT/C"K@20DS_2SG))#!2AD,BHO"L:]F6;C[__!$+7"`/ >+M\5=]$5L:?H\\LNI9:_#DIJE9P<VQ3SAH\N1<J&[I\`R_VECE%B(:_8OZP&5Y >+M4O:CE\U+>:QA/WL`JT7IBA&;Z$1,P4[6@!>>FA=AO^KRW'_T`S3UZ8>&?/'( >+M*(GG-F1UHE*!\=-OFC;`F*+)</&O1U>BR`-8U$^A>!\1O7*W$5J*,/4C"=&B >+MRI]V*K)=;?\0WYA:M64">LAL+!\M2MYT5K`O58:L<6>Y8,)677VHBI&^0L\& >+M5L4!)_46[:*X\-EE<!21+R!08SPZ/24D<Q:>,$:V_@]),4(6]*9=-J?;70T2 >+M=^())B\E4UB/*Y,^V:MG-!AGR"(4MQ+>R.$G).E$3\'*!GW/[(%V+K-Q>PLC >+M.$>LE<RC*7!M)ERWZ3^FFKO.RFN.?T-AZ]^A8?DA!O-,KHP!D$S>,!WAK8;R >+MUH*.D-A6UY&&PL01B;^'.D"0H39TB#GD_4]X0RF1.NB:##`3)EJ^;!-ZHGC/ >+MZF1[$N.44NL<$4KEO`_R=9+7W$_6XH]NV2DKI?%:+E8&_/(?]/C:B!@Q^KD_ >+MUM&Y8V(LET0*K**938>`RP%Y*WC/]4^Q\:A`+P'9J[ZJ6P%8D(0VXR_0WI4` >+MQQC>M$MXV.NWK[FC5/\'_]Q`<54O8Y\3;X^MFFHJ_;N&9N$1'6QVMHN#CT7= >+M,\]0GX+;!.*OU*`-<HE7X_I(P/#_59ZT-*:B5F6\@`(;Y-*AVP6&\;?P?E]3 >+M=3XOR<CT!P.L[F^N6!Y/,:>PSQ%FR60A*#8)]LR,98S'QHE8DQ*,;HBAHHTM >+M!_0+=#I]&;@G@N+N*YO#JW()CN\H/-HKW#^CK!VD.%E/]UC<:5LQ7G:=O2"^ >+M#T-$OR2JOX('7:.:FJ)R$_S:4<UO9;MWN!-&SO<JHPZ-/U,#Q9$5TGTM/'\Y >+M3_(ZME4<LM.RI>?G\;\?M!1:P.@B5TO9:'*Q>WYP%M.S,"+9;96C<F#]SD&S >+M5$?Q8?H3"$$J'Z(M[FWD<\]$NEJCXIUM(Z7Y*PU\L9[,4I!+C;0]/+[OHTG6 >+M*WZZB27O86>&YN]:*BY:#<1L;`3[+24/$\\*$OLXIS^S\2I+!*E"KFB4A&5` >+M,),]^+&'6+MJWZ:)<Z9@EG2JPJ*&YI6A\7@+L0Q#_)1FBU83",9`\.LGI,G- >+MAB=J6!%N0]']``@DS4D'AF:!L9F/%.74VVD!1PJ)7G@YV]H'85''STI%.X,\ >+M@%`EBZT6;<D\*_-7$HCEA4V9K.R>`6^L*6^1,%5-@SWC<\*6H4:'ZH:*6G]% >+M?R&*F?:F*7X`XRP9M/6.-D%\B/G7NQ&IS?IK7/#,U'D'QF<\1._\:L)Y&D>N >+M4^S9X=JK$LQ304S$(=67IN:,L)8(BK%G\6<>?"\#[$*U].?$!EC9AS`$'(Y@ >+M(F7H=2T413`%U*U9_9_L/@#;[P-*[*3YGHH6I(6_Z&PY=7HDK#HBZ3>Z\B"6 >+MACO"8#9:A(&%V="TGZ?QT\W$@DL['@!IE(9V@7*D8'LGDV+Z$Q__<`RM1WJ' >+M$(0V09-$:PB"(L8VV7OPJ93G9R-K>%C_UH-U:/EV\AHS2ZF)$3L0BQ#XG2<C >+M/_(@BW,JJAS]-0AT\%+T2QKN2),O%=+WO*KZ)2C$%8P")>'Z_BV5PTEI?%Q1 >+MUBI/ME'EBJYA]>W4M&$Y?8--O(5V/FN1(8Z!/B.G"PY?$Q>/3)EI_+$7%G64 >+MD!QQKE0>/M>+7&`2/"B*@'AM/]'G@:EM932VN3'V9KZYD80+&N5`'(E\OAG' >+MRK/;U_,SXDI:,UEHQ#0(/(*FSLT/-ZMIECOM>4#U,F-7\ZEA06^IQ<=`(@A/ >+MLFQ2X*UN?`S<;-Q!_U]U2`U9*35W2I$_0I(F$15V4!@W0/?\=/H\'`OHIA1^ >+M*$?_@OWRD]TR?Z&%:5',*+4RI6$CK!W7?N9&T!$YTFKM_"*A,,L(8L?LH]OC >+ML/-ZS'PSA_[/:!F10N+G@,)*H`G3P137Y^^U_X!O,_WH?XEQ]$*LNB40*"5/ >+M9&5#5D1&4.-X#@)^"JK4A6J(QY-R^*\QP<//HBMTDO6#H\_DW')"12$WZXWC >+M&=^!6-Y.;JFRQC0+E*`.FJ6DB6"#>?Y1,[I)A""(K)(6.;F$$3*+IYR2P9$@ >+MO-_-&R^9]U*.7V$;/T?U:2?=9.--1AW@@\*LYNUUG7IKEV?F=#%$BA^QP"M$ >+M57J2[&Y@2ZDOL2[B],ZK%#6SKLK&N032.][;4_K*:RJ?:)"A)BPT+M`MCR0( >+MDKN717S,]K%'QKYC>[1D/IF;2M5^\<1,E<I\KOFQ7RVNK0G+8;H!!G02.JP% >+MV*(/`\+E<$Z)^U\IM@]44RY+&`$7W$&AD;ZUOI`Z'=,7=[5$U,LOAPLE)[A) >+MG,Z=,S2S&1[L)P<&=$PM/4,X_>&!8*>,`'OM[@,@(J3B4N76I_"):*/=S*HO >+M>PY-F8K</B0H.FJ6XN;FRL%Z1OLHJ:ONH8]]7U(:Z%M!]SH^4RN[L"#6<,#M >+M.M*>[^QZA%_7=RZ\B1>/]%<-+!XQ04^F35*I-&$2.SC4F>X-V>;``;4PEKM. >+MI:_9;1#UQ@O'ZK>97G$&(SC]5:L:D:GZ*>H/S!\^?*%<8)F[J?>'%R2+/`#4 >+M:P5KCV$B88Y0<^FT9;[8,*:IH&7,4K35"(X]6J)U@#\>94BK=GHW9GCUC^J+ >+M:J;UJ#K:_1=:&>'CTXSO$BI:I=M&`[ZWHRKJ`\26,KIH-R6YE,(1`<&FV<P! >+M4?U5D4U_DJS\>(-GW<G^6?3E?4ZKKE`&X,B!09]RR>9'KQ]0IL_<)<?E']+` >+MVY>?/M<5<;X;F.U?=?^D/K+1V*`K\B3AX&]O\10<DA(0Y60!H.5_N[:!J!*Q >+MQ>>@0!MU1F8/_F:3RZI1<=DX&`SS)+"(O+P>R*1LC-IO7XY:.[F>=/1H)DU; >+MF;G,0FX`+H;(@3/2F3Y?UNLS0\N_<A$VFOIE-/B7)?\$-CI?6@ZZLE&C?(\) >+M#!@FD:$WJ3E""&?T+TX4CG)*)_O]PS*6%.1N2#)\G6#XS$XH#%':`.Q#@ZW1 >+M^;*=C:"L_*9HZ1K;O>LY#\3'Q2FD7(MT?NHM!75&05_[\<:XLF7-&62!$^_; >+MWN'P'(TB<W,A2N@C'1G_C*V8I=#:WU6;U)XNP.-P<0=.8K74+(YRT2$E1\17 >+M2O__N$&@[`3P%H=%`TY#K#_-T;?$+/"95."]NJ4KOV_BON9_H#3!5W;*WM]? >+MLAVE:9'GC^J,5IOM'LT^-;'''W(`SW-TM,X,&.\+:FQO_U^])W(("VJI&,+H >+M&ZC/MKBPK.Q28<JNVIGE'L`(@R[6M2UM[<GWZ.>=WO3*XK2$@@4#CQKO:K8D >+M][>4'^:P@9B\("<%EX1N.O_$02JZ.H:?@BFCNU,"5\5"\A=,&*RSV;P3M\,3 >+MN_F]-R1R49)OF%HXA]BD8X4#,[3I^`%4_N'>Z!RR]BZZ5$('/_*:H-_J=L1. >+MUTZ;JT4[5B.:^M').>%:4:&N$L59W1W&ZLP\-MERUQX!EA<;%D"U!N^W*N^5 >+M<3]#55"[KU4AY5U+TY=1E-[R'N-P'4/X="#P2,/$X('R2LA[[-7(.P$,ALUL >+M0#A)7\'[KGWB$>@T>,)BJ@[+DA;$2Z_&OL_G#]..=PLK@.K6\O,Z?YVSK/,, >+MAJK\A/(Z[J%Q;R8"[,HGMF6?ME3*0DLALP^[/Q]\SE.2'W90)"X<">P?:)<# >+M3<7=P=H/`4*,Y6,/XE;DQZ5'=UM?RA/#B@&29&F#LBL20PA-1+4F0D>;"%KL >+MQG)MDQGO&X<5?^@?UV.%%@I>TC-@(;0[.VH0]B$5+\5T9)'[XPMZ*J6`701A >+M\.QBFI>,BKB)0UD+TH,WWE*P&W/$;*:;NG0+=F]=S5A9W6>Y)Q^.`K(&[[$$ >+M!E@<CNU:]'R`PMYZ-H=>.NTN<+UW0HZFA]PM-OV4H7@RHEVWI;$2\T$9;?TD >+M;*+7BHQ?MUC2XL#^7H'6",JIOI%%3/J65D"[15\0M1#";FN",L*4T&EHK8C1 >+M4NYJ_);A?+.,I?[4-HS"W8R5YOUUX(!7=IH4N(CCOX>![M\L<E0X=RPS]:H, >+MZ8,@LHEU#80=$N%34!@&@>2,*9+PPF:-G+IDK>)0A*[@I,!;MKOL;Y'[HJ16 >+M\V`'%_V^'D;.2U%MT\/.A+B0[X`.>KGFQE/9G']*S5"2N`^+0L2T8S)?2.C0 >+M4"/.*/.27'$RN\1RL>%Y:K!_&L)1NR4-M.F>[N,&;62G;O$?.,NCWDF+EXNV >+M1MI0:P-P5?\:H0;3*"F[7L=M=6PXI!RPG&L6JT&<'&/!7Y_V9DW^CM`>TG3= >+M6%`8$;G#`QL\IA")8-F,-Z%ZZD4<@=OI,F2\@'CNG7;!<QQIL/CD2@1\E.,R >+MMF8Z;.+.OY^^'SU^)9U94<T]-4`<JWWB_IH)MLR_%Q'&=3<TSL4?K3<F+.6L >+M6"9?Y\Q/_3ZG00&SZ>["CA#%74,$@8R)S/^%>)1W9G:HI+6B!,"J/1?!5EBC >+MNYW+S:78&1:3E*V04^)D!=M$/?O7S@@(;$BS2N]LX%?,\GAT_#@[O+MIW&%Y >+M%G8^Q>1#+L)&LB:W2]S"8V)6M%A5B+,PUJ#@;-0.SPU2T`Q4I5=^M"8"&E@X >+MJS9NZ\'$V7.H0XW?YQ'@C=5&.!`^^/;FM*[3L]&)P$X.T>%#)&=!,3EG0:Q^ >+MQ+40%,E$^0I+=SK$]@Q3O4OM/A!KVWS7267PU.K"VX_'<_YK/VP/FKLD80(< >+M^0V&^^=<>N$$M;%OB.*&%=%`!-R!0!H<#"$F?E.%-,-O>RF4FV)2.CQXBLSM >+M%8+_(&463WH@'O8TW,W2<PP>E29H1I%'_'T1`Z_+\W^@?6GN8R!;2SD1V$M] >+MDO]+GD=F\Z4AE4?'8*LJP:4L\9,R1())'-.(;7+6_2US>'*0A,.5._N!`BZB >+M\E4.,3C52_;(%[ND=5VZ$8&DW`8!#EMK'[$Z00Q_THLH?I(-9DJS9C#3%9\. >+M'>P+QU%+7Y<LT`_;76&RJ?[E4O%)`'5Q5Y$2YQ5+C4RJ.S^U!T?HB89Q!O>M >+MX6@5=`0%]+GO76[&<P@$.Z;\SV^W#`,1!Z&W08'7)^MUJW)!O+D]OH]?`..+ >+M,CC4;#\AL"0;BW^(H;O(<4T?D8/B!Z!57D;89RX`JE->2/=R%[8(II,D@[TL >+MF!YL,_-`"(L4N)E&UYD>S>.AU7Y)P\-E#OK#?BVI_R203F;</#!.%!%H,0^] >+MX='$D&T._=X4]<%KJ$>J!,:LS^X("%E/1=6)`$W81U]=.RV1*LO0N!>7\_:5 >+MLC###F/.K+%P()[^^@E(X<M`1++"\P#Z=$`D;;Q77&ZL@@'L>#KX3)*F\"S1 >+M@EK_MWHQ+'B`)P$$:A9"L!1OP,._/GL:AF).HD1)W=8'W(NHZ3*%"\&$C6IZ >+M\@JB.Y[A'UHWZXD\61V?A(2NWQKN[6>5ZKIL#OT128N01?_4WG)S;J6AKL7O >+M?L+9/XX@WJ'Y("9!(2,BA$=GRC_D'R[&",(UB\0W4\WR&^#I`5!DH<HCX*8P >+M_'Z7!X@30`]E<_>+*]#<SN*A8?S$#6F&+].+>DQ3G1[(!>.UQL=GGDZX]P'* >+M)!2-4<7%4O-*?>U3\E$'%L5.+N_2Z3J!Z71O8,&:XGKF#?:`NHG)'LVY\CRZ >+M>5!0GDY%AM?G&.(=A8>?<'B,-%]HJN7.,SA_<[B^9W/#0_5Q`-!I[GSJ*CA_ >+MD(_G/#\3SF"+*I/)[;'W(S(<MM!TQA0RIP3J@\V`,[Y?#4"!?NFC*IZ[!E$0 >+MQ*6*>CS=MF9=1-HKSP+N0ZKT'>%UI@D,/,)WA8.P[`P%(=G#[*4H<J!(W\4L >+M1%19[$;G7L\Q@9D6S_4OMK:03I<"JTTQ6T7\YV*^Z02O+/V#B;6DRE-=_H[_ >+M\S+T@!"6!KQ_H%-HW;I912(NI!#?2UF5L1E'KU<XT5HBT^2@&3<O`T$P&)R" >+MW-![8(`G,C-/,#JT_9-:\_`)-'/^0;Z.`2MM\M\J:N",?-R\"*:C'C4VA!)& >+MFET(N3]P^0<\'F><GE5E,>'7WM[%SR:\`_,ZJV,@+99%M:9`YUZ8'%F<7]`/ >+MM6_HC>#8QAJX(VR4+I(;D<21J_7UHW_D\Z*^MB>M>`!^D$#FU$7=3)X5^3^. >+MP^.?&8!IPREX`"GLT@6HSXOTS%0NC;+5;P/8A6GH.J@Z=C><2(W5N#+R)3$& >+MK*N\182XAY&:Q$L@K]X=R]9_J4EOURX]E1*!H[V-)L;37)T8BFWB=HAK''-\ >+M0+TEN,5UST9]('5!P3'%7Z9&:E8*RE/Q1-Y@TU(51%ILC8?^'2O]4K4%%1.Z >+M#QJ0C#M4_%ZZE4838>BK;.<.3Q8!MR93R4&5.RJMWQVH`)&TT$+RCD#/JUH$ >+M*47L3QH,3^.SL^P)%0?KE>T$@COX/P6"P_TCR9\6@P4-%7V3P%DEA=@B`\"C >+MHDTQXT)4@S``D',VT'A0)0`4`&SA/"(;O!08,0!5)`X$`I$@A:NRP#L#@@#X >+M=:)2`S3]$`!P&X[0_QV#^?]QK`3/`C,.7```#))B'Z?!A?(&B`#BK9+^$W/W >+M/S$SP!(3S#TP`!A']O]?!;(`PG2Q_]R?Q)`"_GMD)94DZL5,0OX?4$L#!!0` >+M```(`"%R9#'>OQ1E.````$`````B`!4`;6]Z87!P<R]E>'1E;G-I;VYS+W!L >+M86-E:&]L9&5R+F=I9E54"0`#+H"*051YR$%5>`0`Z`-D`'/W=+.P3!1A$&&8 >+MR``"_\$`R%#\R<+(P,#$H`,2!<DS,`FV]*\\_99_\9PMM[HWW]OS>[TH@S4` >+M4$L#!`H``````"%R9#&CC=CT4`(``%`"```D`!4`;6]Z87!P<R]E>'1E;G-I >+M;VYS+V5X=&5N<VEO;DAO;64N<&YG550)``,N@(I!5'G(055X!`#H`V0`B5!. >+M1PT*&@H````-24A$4@```!`````0"`8````?\_]A````!F)+1T0`_P#_`/^@ >+MO:>3````"7!(67,```L3```+$P$`FIP8````!W1)344'U`@7$`(8A;F)V@`` >+M`=U)1$%4>-JMDT^+4E$8QG]7T\(;@8->NDX3%XPV[N[N2L$PH.`M)"0L$$0$ >+M%_D]A%9^`/T$.="N9C$0+5H:+8*@?UR+<0SG@IJH<],\;53&/TB+>>$LSL/[ >+M/KS/\YP#EUP_``'\FMW%[/QWB1=/$_,A42@41":3V4IR915X?WH*0"Z70]=U >+M4JD4LBQ3J50$(*WVNU:!ZL>?&(9!)!)!UW4`LMDLU6J539NL$1B&03Z?)YO- >+M,AZ/`?!X/"2324JETAK)10G"-$V*Q2+!8'`Q>+$2B02*HE`H%!9RYIJ$JJJT >+M6BW:[3:-1@--TV@VFZBJ2CP>Q^_W,Q@,J-?K!`(!;-MFR9-:K08@+,L2C\(A >+M\>3NGKB_&Q"=3D<8AB&$$$+7=0&(6>^R!^ET&@!)DG"[))+A$(KO*M/IE,%@ >+M0#0:93*9+/5NC%&(9:-'HQ'E<AE-T[`LBU@LMCT%M]N]1N`X#L/A<)'*5@+' >+M<;CA]?#RVPG=\S_T>CV\7B^2)&U\B7/4/##W7P$HH2!NEXNS3IMNMT//_LW) >+M]Q8/'B?H]_O89S;3OU.4FPI'A\>2&^#`W/_RYO7;Y];7QKN]\.Z]T?D(%RY\ >+MUV3\.SM\^O#YV>T[MQX"^&0?\G69H\-CZ5*^[S]?H;?7T7LQ-@````!)14Y$ >+MKD)@@E!+`P04````"``A<F0Q=TYP^E@!```7`P``'``5`&UO>F%P<',O97AT >+M96YS:6]N<R]A8F]U="YC<W-55`D``RZ`BD%4><A!57@$`.@#9`!U4L%.A#`0 >+MO?,58[@NAMTU)L))UQ@/QJ/W4D:VL73(4-R-QG^WI2#=S4I#*--Y\]Z\:2JU >+M0F,?Z`C?"4`EY$?#-)@ZDZ2)"TB?QJ=TAW,D'Y\R^4F2%(\63:_(O(H6QQ+O >+M9&S6JR\L0`MNL)QC!U3-WA90D:[/P&_(_K/@3W,7ZKO<KS/T,[78B2;0QR*# >+M;.L2LQHEL;`NNP#7';)6!N%*M1VQ%<:.)`/W'MN1,A8YL#1HD)6\KVBP(T$G >+MZEJ9IH"\.X[O>MKX$JTRV7[2OLFGX$'5=E_`-L=VJLE$GT%NZRQR&$M=$6KX >+M\].9_!&N0P+$O3]B+UEU=G9O;O\F]^O,J"AY!4MXYQQG50V6N'=QR2C<UM'[ >+MG^AL%C1IUOCNNKR=12_E`GX%UQ$X`LZ-P@70BZA0_Z<MW%!B-[U@V,89WY-6 >+M-:2[W*\RMFLSS6<;C2=R>QM"EZ_F+U!+`P04````"`#ZF64Q\$;M104$``#7 >+M#P``(0`5`&UO>F%P<',O97AT96YS:6]N<R]E>'1E;G-I;VYS+F-S<U54"0`# >+MN!>,051YR$%5>`0`Z`-D`,U76V_4.!1^GOD5IGUINV32"[!2*I"`W0(2"*16 >+M\%#QX"2GB=7$CFRGI:SX[WM\R<69=.BR%>I(<XOM[WSG?KP-WS1PQ03_0#DM >+M0))_EH3$>R2EV64A1<OS*!.5D`DY*R7`7R<T@V.R%R\7ZSNB6GR/3AA4^?'R >+MQW*YW6.KSPRN+;+=0IL&J*0\@X1HW'3ACFQ$)(]8W0BI*=<6/-Z;XI\K334\ >+MWQJ>;GVU,D>PK$8=$]+*:F<K*Z6H(8ECE(&,5*PN&8^'T_$5@GY!2%E3>?EW >+M_WS5\&)K=T[#CH$NH89[E7YF$0?):'^T`.E)D<Y[KT5=4YZ35U0:)VUG[K_Y >+M:\@T-,\9+Q*RWWPC!X?X\<S_</JTG'%4HJI>M5HC;.^R5H&,+D36JH2P@@L) >+MQ[A4,:4CI6\J^&^ZT4SC=VIE]%IY218HDE#@CH1(R/0.DGU,#@^&3WRP.PV( >+M*??SG"F:5I"C/V0+WAN_B?&8[)/#VRDW.7KXX=G:41Z4V,S\`5C:$1YHSQ!6 >+M8).H-_9BR(7CAV/Y9T=AX/Q,D0=@>T=Y\,`Z9=$86#6*\U\EV/_\Z"#'M3B0 >+M<K]VF8J-.O2Q_&GM7#D[1BP3_#$)<WVZ%@;G9#4TWWC1*H7]H6#<E713T??] >+M>^*%U=`*3J'!]JN%')V/*KC0B6D'3IL"]`>,?[O#-^/M?7R=G)B(,%T[RB$3 >+M"&/C`=L;R(IQ",3BT58J<[81C&,OZ\_2"O,+PX@5I9Y-/TR^FE8!E\0N#752 >+MM-I(3`B&(<F%UI`3QJ]`:O*(3*>%4:]TAE1DYQV:D&7$QSN>)4"SDO3>)DQ# >+MO6OZZ*I_%J5#%%^S7)<HWAJ-D!*,-L/_SC$'WJ9K(.>4(P$,4>]A__A_#@X; >+M<N1V!C1%:]ZS_)<&\T[22T1L3'FY7P)O<=](?A`$[[$4D'?H7V7\.[@\F)+L >+MA'30STIN3C+C\7)18\IT#C]\:IXO[C(4#X+^(&.A73>*4HQC4:-H&S6+5$A, >+MK$B+QH<Y526&N9O%3TN:BVNK6X]UKJ#"VAP4OL6Z)='P8:K.,'^+VE5&PW#C >+M=/4,90],-Y[=3'1BD1!0XWU!8=F"-9S92N]/O9'TQO&;"R=CA.XR<3O>'2VZ >+M(395B;SSV%234X\5CO(;E!DE35_Q14,SIF^PY*^.IIEEA$2<UJYR7PBNHVL? >+MIJGP%[,Y3-\%I"]A)M*)W=M(,%<18\4!4K'OJ'*%9UQ-GY'3^R",U;#^9^"Z >+MPM0'1HNSFZ:[2WFG]GGY)V8"YIS][CK6IL,_5_C(H1AGK.RI3T[MEQ+H_,75 >+MS!*I"`O]?E<NGKJW:U_!'6QABD?.S/SD!BE=^=)A)2!B-%X%;&?*!ND8Y@79 >+MFX&JM'10/Y;_`E!+`P04````"``A<F0QTYGVB4F\``!GO0``+@`5`&UO>F%P >+M<',O97AT96YS:6]N<R]V:65W5V%T97)M87)K17AT96YS:6]N<RYP;F=55`D` >+M`RZ`BD%4><A!57@$`.@#9`!LNW-P)=T7]WMB&Q/GQ+8GR<2V;=NV;=NVG8F= >+M3&S;3B83G?O\WK?N7_=6=??NKNK:5;U[K[4^W[77CE*4ET""QX,'``!(4I*B >+MRO^U$_^=![#0_UWC/MX-_VL@+83DA`"`A@DNJ.B+_YYQ7<4T754<S%T]C)S- >+M`$*F#L9F0"D[(PLS93,C4R^G23,^`*#WGY2HD*KGIO$G""0P3(T#50+@!<`" >+MRQ>`_[OE`L`6+B"RPHN#$0%0!4MP33%CP?D`P$!QMHG_7O4$"`+BS!.5F.'O >+M`8$`O%E@B2'F/A@`C#U;2'R0>@`"`&[)'A(;K!0(`X"<MX3&_:]#E/__#@%M >+MZLDAS(@0=E2]J;Q?<J,HGJ;:*+NTP:@_Y%7MV%(\>]F5[&_W$*>]^46^=,E< >+M]#Q1.<`Y`AD!/VG<SJK/UXTJ9SU#@K]:O`JMN@[E9JVD^@P8M%=1N_=/5-J/ >+M(](/_<(.2KH3#GE8HV&;F'6IX@\%4ET\9K<O#B]\&:ZK$`R>5$32*(??#(OB >+M,"*L.*=-)'M&%:<2*TD?[B1F[BJ24%H=#Y_R%8Z^7M]X/E0`<:O_WP]5U.'B >+M!00S(P9V/'XGV!KKE*,&R(^)*@P`@_37/63H%X^8<)LCT\3H(S5U@V\T7)8E >+MYLEQG$N2".>]<,6%#ZJR-$MR[D*TTM@Z)&NK'1@$B%"G59WA!]@P:.NCRK(S >+MU3Y(U9^IY<NNF^Z_\W>V2X5R_1(O[T<40`<3;$V]$W\=#*`,^Z_5`9!&U-N6 >+M=Z"A;)M;@<J8XL(8%IH4SM]D^3)!K:L&FOGV3M\S(;#KI``$4]/$22'<E#@> >+M'*"NA6PI]FA,J"_W$$'"8]ZUA")4$*Z7.X1(5YR;W`]%:S%7AJ=MFUS]PI@W >+MV9J8E=QUP0F<3ZJ9'T%$Z+DO.?9]FZY$L0&>J+1M*[\VP%`IEYI;`T*G?M,; >+M_@C$M=DPPH$V$EP$@7;;K#.#^#1KI'B?F=7\2#G@1MIG-`*O&[Z4`BWK^?>0 >+MUBT4`X8U&NG@D=GJP9!-'2'4[$VE@U0T:64=H?JP:<H"BYS>PB0>=\@_*-,0 >+ML>"3T]5R]7GD_[@D^QKXZ+?HJY)!F"YV+;+FZ>59XBAIPYOEF(QLV6*RVW## >+M[I;E6=B]HM@([_<$C1AC5CN_O9D_1FT)!(HPF8KP_&'\2Q)`K;JM9]0&(48E >+M5;O]"^:C`]"K"88\#(1]'KD%W>V(>A2JVS73ZZ1G*6Y:6R$0Z/HB)7Z@`%BK >+M:>H->BFWRD+V2PILL%A5M[I^>MH-=+(<))Q#*$<A](>W1H=(2($?CI!+RF+^ >+MW/E3`F$6W'ZQ'A(L]]X7R<"\?O7^##:T**1^E<G+4FHK;E.#_5A2'Y/_-&SM >+MI$A]A@@8=7-:2'1!3JA=P%[0/WQ25(.(SR1Z9N(6<PD\%["<^F"ODA'*]'_4 >+MXX]4F<>&"=?*WE,P,`DT85(>V$WJ)U0`BV3)(8061H6=3O`#_:VSM!CI[HEX >+M7>3D1WTUY!3ZA[,?%[S]&]5[;_*Q-LCYDLW=V&_>&`T5Q]Z>.3T'%;5%NHG9 >+M4@*9+'M+Q3):@TZ_3[5A=#L&W]9[2SI9BIRG=Q]%&BA;_D>-/BB82\_P6JM0 >+M-Z?D1V`D02#S`1E&[B^\9`'D*YLP+T"S8>15U^JIJE@G9"YU6LA_3L*.05P4 >+M`YRCA\&7)+V?_)DIYY\+[H6?[=M3,7IP%4%+9-'0`V&L'?BNL:5PL99Q]"=C >+M9`1@)&OVO_^!&((!?/XRZ&ATCX?0YFH=;I7B557]XDWT;:KK_P,44$S46E<3 >+M8CR5_E'R@AL<`>',#51%I183&]:0-YF\'CFLNXU'."#30=]JQ@'2F"N#1:MA >+MDOS`%G(U1S+C1L01UCL4;(*6-73$9%W8:#&L1@"NH8+@(_<ZY9@]76F#"CZF >+M)JN?3C*;Z^GC_KC6]QWP(JWQ:P/C"WAKTU'A!Q;^]+6U<($+$WT%P&)Q_+R^ >+MPZ8#)!DQE.RE10?QE[/(WJ*1"YR&EG8%T+QZ;IY8Q+STA6Y#&<[INO]G'D!) >+MHF/0[P[N3EY.:IYGY:HZ[T9!6#$@7^W&YW'2-WRB@IX$O__;"X.JJ`/J%-V@ >+MDA(<'X,3">'5AD4E[6!"VW6T-V`*.["05,MXMI2H/3.<FWR]J"!0%RVP=MJM >+MI`].,A-2G!Y-;/*V-;WNHQ4CO$0-$-V5'3R!_UN\360U2&,%('U9Q#KS$\"1 >+M5W:XH%BILL<F/3=`AOU-3+':)Y<V%O$D2_2[;[_\'(F.M8!X;VM$!:`_ZQ@A >+MA`H]E'KX^GUG,]@CC";7;CK93FQ)CK<TM&93PP169!L@H]BP5YEAOC/+XO0Y >+M8D@+BZT/CEKK:\4_8C@<*<-Z>W]/AD_[+O%8I!`<#&;H6S^_I/2YF>IC_TDK >+M0A,>K6A52:2*#3YQU1'8R@N429(7F^"$,?;?7,$!Z:&=]R(7YG=Q`:I")3XV >+MQ($4EE6J'1V/5H#FK=!2G,C!J]:<9`KE$="0H]U&K5[?1'_+WSH)WKX\#KRS >+M2D[D/Y\]!QVQQ.#SYF:\B,&"\UC>GZ`]3H;YK`VH5JD&&.)8\1+8VVN"4X?* >+M[QSFZQ0T%`%6=!RN3(;6%\30:XT+LU0JYE9IA_7[&MH,F/MJ2!@KB%$'"Y@( >+M/<<;Z<2WKI/0#[9H&K4RD<6G&T;<8;ECLNILP"#0<A,L$1!_]Y>X#Z+4'O=X >+M-*2-L4DZBS5FM^0-KTF3]3110W)PSCG7P'K.<C+`_5R,>-U>4P6`2$`::$64 >+M:I.H"9!<)&-I/.1;F,M1W8TWBO9KT22E:)7#:486R1<VS_+(W]".*$JHWXH/ >+MF5`!J-=91ABA0@:[W8!`M]A&CH8KYEKMI7:QY>5,ET[;1E_J?A\Z=O<G@1`$ >+M-)7.1(RQ=KF4;M(PT>U80*F*@E?IBJ#2F!)6=;\0G+2)G21SM$4Z;^X86.^7 >+MW4"2.5ZHILWB=C$=+^V1ME7]>0"Z1D;EG@_\#4LNU@0*8]^Z!/L*NW=K:HLG >+M-TY:121>?!HYL[$L+N&.Z/H70X3?9E5WRDWMJ<`J=KK#M'H+EE#4\)FO'5@R >+MMJ`N^TU#/,D>3/S<#,TH$F2V=PB9W4]<[Q"X0\$#FM'>_&ZL@[\"#F"6;9N$ >+MT$(XZ\$N/J"*/-G-EY@@ES&S27_42!;IP![]!@((\H,_:)`1X`I#T(G<UW@T >+ME13YG1W_<+R'7IJ%$T!K#,H-;B7@Y1?^^YW]YXLB;3]M,`0M#S7DEC04ILST >+MR["I$Z#27QC[8J&HX?&0J:IYZ3;6>1GA?SZ%/06+\)\1`LFR;)VE'CUF5N.: >+M&O3"O;(/X+FRKJP%*3L%FS\R#?<IO.1)I[V9]AJQR5F653NQY$SS*;70`]K* >+MMB:<]7.'%)XGA>*77W\7I!`LLL'\HZ8YII$@EPKY'.*W!-&C%8#?6[LQ(`X# >+M%=<B;D&@S3A3MX?/3&1.36)U5&UJ]K'\?(M?$,>UKNH$$N90@MM*2+V]@DZI >+M#NR$GQ$FD/[+9,]".]YR*3\@PY`BL^0VNGAHPZ!MAKT'[*P8`^D=8W,VEC\^ >+MC!D@FFD!L^6V22@H2]3Y>Q>EI/>%\2A2"\$R4DFJ+GQ,M&W:K=89=)7)[P/S >+MY>Z;K>317\<F=0[E<F^OP)H)@.*S]R^W5,4=N^UOO>`3M@BRGSF6=^/[2V38 >+M:D$(;4.^M*8>:G!1-@F[WKT!NO_%G[9N(F@CU'7Y'1"HBPW)C,!`ST\9HP4& >+M746N-BTDY$@I$%&)@31(8G6J"SKD:.R#5+O@DZQV28K6*^-6'!L_3K]QC:=4 >+M6#ME)I`6]6_HGZ7I"+5W0*1I0MZO?"GW,EUJ]]D5V<&3$`RS?E[P8PF2?`#K >+M_I&W3)YG@MA2F^VTCA"1X(A+91KY&*5@*ZR#W-^8V`@'<BV9RTG^UZHSB'2= >+MF^ZW+KV';UX1S)8WC>#P9@L3FXP<!ND&0+QE&162V;>,S#L=H,E\^;^X`WZ@ >+M_/&?+1DOL'(7ZNP,^V[*QBZ,_+A:"^'=9((@S=Z=A8_OP5[Q6&#=K>W%WR$[ >+M6`F*'D8D',I5"G.'?81:A&YS[#!*:91JL]K!^P!7A1F90A<3#>+>!X)%JA94 >+M\5$MVG!AB]-GTP?ZIE->T:_`1X+HRV&KFC<*W[F<D`*=!'7=E<38K@81>Q[` >+MCQ4%7^O/0M#NG3OH3S!AR*45:JCIBJRR"G+ZZ3CT[HX9B9U9;,!1?0CBB56; >+MS11M-&!,[.MYHI_&CV@`3ZOM0T!$$1M\$,A'KT1K3BHG#6E[:UT$+;4X\=29 >+M<>K/7J8>5$2#DDEF+#2M?QXL)W^0.WX8_&\29KI@@^C5]C:28!&R*LEP?^J[ >+M_=I*;RALN>CT()OV_11`W"&6[Z7B%UY]V9+PH#BX%ZF6>]H?2*G8UI_-W$:Z >+M%TR1_&#/6P/,+"%W9@W($UVA>4?*3\A%(YKS,I*-:)X??PL!;]X$_7Q2RPT6 >+M5/E&'P"PXZ-H8QBA'_ZU\*_OE$+I,.V)%`8X)5%<NTB%/'@L_SH*Q]$"<`E# >+MHKMZMQ%/!+Z/O>$%M]-NF!&'F&'GOT%[ZKDNZ(PD=IM+K^I5:=R8&`2\ERA@ >+MS5$.Z@E^2GOA9^+%NG=STOM;6^D=?>T<OMY3[7(DS0"X*-A=[D#ELF=3Z)@J >+MN'W8LBOXZ7K!?`ZT%7%)T1$$%01@GZ\S#&!$`;QARN/"SNN&V0B9Y6X^:/,1 >+M/J_40U>$AUMSY?<GP\AVSY9G[(TU@)I90Q>&+;@?');CL;LQ?P:WV0*G=[H) >+MEOLQY([4O46R+K$'\4%5B_^/+MMPH)GF:<Y7+L,UNZS'[(%,X#4OFZ_-<I@: >+MR5'^<MG^]E1VN/G&FBWC1<!WT#X%X$[=.?0_J>1GB)%=`J@N@JD^*"@V;&1P >+MW<!F(_*_G_!,5F"L<Z>H0Q$8&38,[+<8V@3PJ'"[?SS!U%Q/E3NS1_8&<9*/ >+M:9NZ>2OY'7>JZ)1R#?!S;ZI/9Z7:QPD^O&A9`0SA1?Y9L6O]T7'%3;8,R*[' >+M:*-`'`I,+C.KERM=`(JH+KQ.0?JW!PH<3F??"7*9!$XAMDF$`F.3T%#Q@X\R >+M%7HI^1*.\TGNC+!.Z5!,X1'](?G`@S)+X"2KZYGXI2&HZ>OQXJ+O"=%0D^JI >+M!;=;NS[4(JH%2J*-[S$(H.EKC/T1_>2V^"L=;ORW?A=?.?,GQ'('&J4D@@+0 >+M'K$#/6PFA5'#@^#$J//G(#QQ^D(E[@&,.S[D`;V+F0I7"'Q<C*Y@O3"\FY.F >+MK$L%K))6`749,,["=2PN-=',^@T#?F[JGIG`N5155<-_\L@X"!XC@L7?K.D3 >+M1)OW(@#2I#M1.3WJ^]WH=O89G":H7<5M")<V[*D[WO.1W"/:#`@':3R&"C'L >+M&]3Q+<J)JMRS0%S!W06\1S(>KM!";<:9L!^.SW:AG7B&YZNH(JI!\2HU=:F7 >+MI*NX%TD'7F9U3B:</4\]2CAELK\IE8&39BYF_63:M_!9/.":S&&(0,UXWUFI >+MX8X0:-BOK7^\@?10+_\<'T2T0A6BQ/R)/*C6;[G0<>D`+M]*<6??N.1,8)%= >+M[@2A1CC9D$N1TRPN..3R@TC<@A+N]:&0X&MCORO+S`R#261*.:.3,_X^VL+X >+MD];BG9Q:_3/(TG0?M3.@TFKAL)O5T5,8$?X%"/5K8K#;`MD/4M^LQ*70WYN/ >+M-:0AFN,0)CG&B.J[27+:UX'+<L0K5@9H4ADF,*=W4B6>\@7EG@9R_FS&1\B5 >+M2'2T92_@JE@XHKUS([EV!H<$PL?#3Q'DJ&ILJNJ[O2)-D2MF"2\3[A(`_UX- >+M,QY/D1(`%LB")ZWHDM&4)AQ1QT25F!3\!D@NCI"F2#=(VUI=O;S<[V`3<5R@ >+M!<]Y`]FA>8B9D%#-%D]7<C#A`^4C=G]Z?-P,A7_#A/1"[I]$)Z&&!@&CA/0M >+M;DQLOX(*&ML;_RHADCE[W.HQDB!MHE%"0>'"I^_(O=H'I.B[6>G.ZD3Q<_'J >+M7;]G(!$(X)"O<5J&NZ$)I*7PX88`^6&;14R\X9'1;RP/I[9BC:/5J8K`RKS. >+MAYM@3,B#I4X--S6=D:7[!(GO*]9:(D7'L&.:\QW)X,K&EF+4*WFY;_NZNUTB >+M./B%644!HEH05U03U9*3UCF><X5OLI"K`.8QK0K9(YV[43!C:Z9LR^@Q'.N) >+MHLUGBH-Q9P^,&W=C/?EK$41<8.\H,(^*4->:([89>O8;`+GV]$J+LFRM4``# >+M(PTVOB@+,?7U#GLV+?5*6[>#9_#?+$@G##="Q5X<?P41\[XDA1N)](CFN-\$ >+MV:B*L>"8_-R%2-AM/,O2"/$^6=;^<<(DZ%N4"I[IF<=3=W`9TJA-2!F.[N88 >+M."OFG=JX@A>1H8R\T9&\9I9AI-UGK-E-(%-N4)/<@V2;2[R4@H+>>X(W%\;W >+M>7#P@O=>EEF@V!<B#34Z-E?T&YX$,#X#QQ-)6AWN5.U*;RU(;>55!^\VY9-0 >+M+%ZW[$TGBA3HZ)3(0;[,)[17E$@S[Z%Y<K\'(D"LWVR&NS3HL/3X6UVQ_.YV >+M]WMU[^<JZOX$$O,IY1@T\$U_7J`FR2K&,6"PB]Z33'`7'-7A1!)VF%G1'?F- >+M@"'@`.+9-X13Y$^+L[8E!2\:+GRW[!@;3W4LA4S/)C^Y$.?`'.]Z'HVA7_4V >+METSVVXIU5U9M__S<BE78TNF*2*&I21J<`G=]>%MEO*BG]"'DG:B`M9/(LM1] >+M!/2-.KXJ'*(/7##>%L*C6W)?[DDF\<+QK"U;LIF<0IEKU?D":QG"S$+@&%8L >+M&#!^I!(NL%>]W7K0%D)V)70JR3)5>@'A%.<=+-D-&I`A,)H6IMF:VETU./:3 >+M>M:2G+R'RY$(L8*B!BII4JX<'GN[>J`AA/>S;,F;?_<7S_X2S^3/LY5N>&%& >+MH>J\G[$%?^/K.Z:+;.\D`,;UY!%".-`_28(6U_XR]?W52M-<PAT'TSB<(R%( >+M!,+RQ78X==L<_0Y0LPKJ??*CR&[!R\-C(1A?%%3$C\U^M?SK(CZ#L3LC7&)& >+MP)L'&BS@`0_,!!>S@?OPH.^66QHQ%=)=HWB68?029[^7329FO@6K^9/=LS<) >+M^5;.5O-0O:48E3RY3!>2^ZE4D)##=EJ8[33O>JN9!7&;$UAE.<6AUC,Y$[O2 >+ML<J1RC]`0/^-!LONNFT3XM"%KE(,"'PX<EY3:I2Y4H:0JEZ:]*S#$93VH1C' >+MA,0''*7Z6:A,B8'=7^9.?+P\[)\C$934[79I_H*6^L$258]ZRQ#Q"0D\A7?& >+M"372G(:\/NFY)>1]:K=2*7I!]X$<<8\@`R<1C2,<O[`":-WTO*81^[`F_=T- >+M&]CD*_"]KBXT;\,IZNQE7!D_`9>R*<0A&%JU),%`^E60'X?J*\C5TG*=5:.< >+M>&H-7^8*.=Z9F=DQ14B$ZPKR3^P)ZZ\8N:PN9L-BVR!OJPLI$7BL)D>-$X29 >+MF)_NPNO%J=`9/4,'WFDX::5-J=BG@4&K\:.X^R$2A/^9-O;^4V35NHCMT\$3 >+M]`*M\DVJPWB#S<O/GK?V2T(\3[R2YU29=&ULB\P-8<2><8!8TI`NO^(#A;N> >+MUS$V0).4>*`9^THIAL\^Q3HI)3X!,**K@_X?LD%*#SX\$XT%*)RL1Z-SP26X >+M\@E6!.0M^K,C;%Q3/LPL'1DP<OB3IWPE=[%E7.PA'\J3<[#$LI:JMV7J1XJ/ >+M,N2P\SW+M;X`Q"O!DZF+210`1B<[9,?DU5UT#V1F#%2<L%-2OHIP^_OZZ/+7 >+M/$<2L&2=1_/NY=#",$&J_.K9QB<<70B=B#H;&WIJ]\7*:EOK'1T^_%RHCWJ> >+M,!G.:1\R/#V'O'MA@T)$"ABL?"B)@")Y\5AUXAE-90'='+DX.(;!9)M<4A=L >+MJY8/1,?E#1^GS%;C-,6SVXZ(.O4Z:((UZ/A^E=1^IFS,VJ=4V[>)14'G2[A' >+MC,!,&RWC_UP[V'(1\6["19?!&NG\#BQ%V8T6@03*+]9LQ)S9<#%Y8C:YA[[% >+M*+:<S$+<S37O3T\Q['XBO-Y"-I7SZ%UQQB$G;<=.*#!E)_VN3(B&=1<X6%0" >+M-I9^"[?LOXT47`;%RKFF^9HWKS7NO1#;AJM@HI=XI$[&]/CJT55IBCZMI(*< >+MM_=1Q;(BB_OFS`#Y28@6V"O"4'5:1L%;P##"5EMFI`GV##O:;4[TL%[]KZI2 >+MI<1-BK>[S_$`7Y$0;J09/'>;RUV\=7]&K<\`SZ/S)B@)VSG]V*>*UWF[XL#A >+M$>>+:8>UGL5^"\\S&8!Y/?`_VPY/:]T$O0;VF1>(*TY=ES(4;7'+\P('P[!# >+MI:[)OR$"?9<[=W$*N86]OKW:$ICSY4:J*6;T+7)R:"?;$8))#PJ#0KHLK,"0 >+M""`GJ"-)KRA'8.F6@R<&6RU*(G5MQ4/2[C+I.42O85G&?ZFMK_4!(MUJLUO@ >+MDQFV<^86Q:1^^M0_*F.23\^,B>"Q$AU(WV9DN;H[9UYJU\0C'L60'7I3( >+M>-BP'X54(V]N.+U@`4D0'?[A`46>)>,S]PA^3X1H<_!\'PBQ$'733/7;]8T_ >+M?;,U]D(:GE[;_V>[0((0"=,@Y$6PGQ(PYZ%MTWE/1^"'2%$2BL5\0)B/VY87 >+M_P,G4=W)`SQ0#QJ_Z6(R--E`1J37W6P+0JLHE<ISL4LI`=<?U)`#;Z`+Q##D >+M1%,1K:1/K]O1`2:T%-SZ8CF+9[WIQ!R,2KKOL64SGN7?F>\-;S!-*-2U)\U: >+M#9X?+\'GD@VKP#"\P&XR;[C1?M,,!A:C-JA,XPA)XHQAQ_M/#9X/=/_'[97J >+M.I%\OX1K#UL$QPOMMW[*A58!XCFWN[,()N*&DT?!?W`#VVT[`-BA@>"Y<W#D >+M`_3;??!ZR28&393@`DK_S'LSV")=8H^;.T1(U_#O>"B4)8GM70!/@S8)%SQZ >+M3F<!RUR4/;`4EA2LNW?BU+$E,,+]#[K'KUVUZ6+*I@?8V"^G(!\UJ80$Y^JZ >+M$C/K-`?&YL<F*$<I&P)#J<VANF8F*R9JF>[F>.YY_KFE5-.R9PX[C23;0`BL >+MT\`"27K58YV;]1)QG]TN%UVK0!Q<U*,5YG?#'`-&@3&@IMZ=RK!J4L2!0?^O >+M]I15OW_+DHQ@F5WM9/_1XRKY+W53<$Y#9$[#(,:%P<Z621EQ^X.4'O_*@$D- >+MMR93'2KZ)MN,R(\KIS-1BUC^0]_7\J)%;2O28-?60;$L&8T7,GZ(&DT1F?1@ >+MCJN>!Q+^!6&@/L'"5R*YV-V!#^2BD<3*;#A)%9V5C`@CK;*2J(K##F)4H94F >+M]A?4QCB"4>]X.6/3-49W8Q'#:QKR3Z9D$YE2+AR$I"..:>I4#6&!_L5I1Y*D >+M>%[@O1-R//9_5G;FIV>?<+4G^9\.R**;-`*&&D&.+7WW,UW^KK:G,4&/%+RL >+M4^8A128P3N8>"X!-##M[3[91OI,B9S5@Q)T::]=<EG0*G&^/B.]3U5)9TK#! >+M7G:V=B`NWH;`IIH7L!%QT7`],OUE<CD7<;<`FH"=4]1@F/5)J6#_B_8+]G6X >+MOC&*R979"QSQ&X)@O0C@"H$<:#GKEQN9F<O3LNQ=MM]N8^YNI5L6@P*Q4Z1W >+MBD'"^J+PZZA3EXR;;_^LJI--K8.FYNV?[9GI9@H@VJ4PFHR:",SW[TFP@"8Q >+M6":/S_]0'G[+ZE!1?@)IG0<6G8W*T.S4-!+]<"U3\]-5I%B90N$FN>'5Y>9O >+M1:!O1/@/L[Z8:[H[Z3QHV'6<?<2P$UJU]>ZJ@63TC-@+OOQ%I"'!U:A':JQ4 >+MR99*AT!VCW1D*:_W$7?*MSI4%N[]!IT[,('?$(:K?:F:1JGP)]8SA;IBO)QW >+MRN1HFJ!")(T6:<$.=_MEJT);V3[]Q_;Z9Z4-KP16[8D5[[R_/_PO5+U([!FT >+M,/:Q/S+,/,Z_(ET<8;YN#8TSG&SUKS;S=7SA/+;S+'W6/R%3(P"]>8/(P<R( >+MX6N3K*-OHOI^&`6[(R%LTI$#E`$=1EF'DYZ'LJO$W:]W:P:PH=$9>5M98GYZ >+M[C-28\A^'8ST9F2MGL^CRXNB.E)1Z@2+*X/C?B3;^&`B<SC]F_6R4/@8QR7S >+M8@T>ZG4=2N2PQJ&D(3O),'0]OR@36?M.&UK69.%L`T(5J$#IMT?NX2SD0.3( >+MIEM.W^?&DD*A":G52B.(^_9X5<-/=G2H\"N,$7&<$Q$I.=BG5$7XP=]"G\X+ >+M?#.R$1YK\P>=&FM/<@;R]7@%Y4YU-YN[R%^&@-NG7WR&B%@&[PHU6+6HF:H7 >+M0/#^6#JMQUGAA4L%[+$*0*O>%G(($+%,533C"U3`F!5IU@IULWUBMI'#0FDH >+M?'&3N[3GUK1_0:5(80>FQP-](*3TLXX:1M`*U1J"Z(&3X-^MV+Y=WU5;@O&9 >+M^X2.]3ZOD>F3K7"2PVN?5>59`D<##+&1:B@O1A6C9ES)[OG:9!R;#UH:O/&4 >+M':.<5&CWCPL>Z1_J[;[79*$;9D)6:5/XU8&-"!C=7C&/3@.#99DD5,:YK!.9 >+M,(O:G'"6>J(-?G[B^OE.4\M"UZ[=S/NH35L(X(9)-LOHG\TB`96S>YH9D-=] >+MMQUAN-F(,W`<U[$F.Y9Z=.RQ.J?I-`B%V7S'&+B8\C"^;$4JG)1Q%9_F;-#& >+M"("3`IX)$<!FO>5_80TRO7UN!`1:$[.[X)Z?B-1Y9360C<6SXZL/.ZH5"+N\ >+M@UTXISC3^87_400H.D;R&O.T.2@=?CIU74,P^CXE&6.P\067A91D9<.HR?1H >+M_AT!--JDSHA('-,-%:HV%B7E41N43$-QUW9F95!76K)AABU7;]Q0FB:LM'^) >+M,=.X<_2[C-+U(R>T3Y9KL&FMZM:P\.+`!Y@A!9,>_D((Q'9%86UK0U`,M5E5 >+M-YP([,72CBHZA>)>/XZ>^4JD=\81(JVPZ&D.&:Z+8BR;FWPW]PS"AU4YONG* >+M:/=8V9XHTMI5&(_><#4$4-J."+=;^9*`)LL<>`+)PVI7)XERZ-C%Q_Y-OZ(' >+MMO]?E.%;:0*!:NK*C+.1!L%-%/+RG^EKI=)W*#*)T8KKVKECWO2&^.HRU?ZH >+M49.8G<U4;&AR()7F62`AM?[!JI(Q\/HG'[T()GK'L"2*]*QVV")B@ZJ;Q"C? >+M*R'RO'VX;I:WW0N-[R`$0#]]C)#H#'E;%M-.]DSA8N%-Y?4H:DN3_3(5P.W+ >+MPPH4=BZ!$92%HQ\X*"FE%I\AGCM.&Q'*O,6-UH]0>1EO&HQ!-LX8=+H/-U.] >+M+MUP?)^A76B]X>/T5[!Y;UC22*0U&U8^&=E?1P_$-?CC=U#=AH/)??M,[2WI >+M%;_#HI^4M#PM>3U@K2?6]Z^HN747%6_3P_HT45OL?(_]3@>P6U\/8X0*?5O> >+MR.#_"2*V+D:D:X?J"&;KQ_DKGYZ8>G52OV;@F`@>(A7,GQ5(P<+T3_TI1(EM >+M-1""G0#2`.-I5P1BWD\1C0L=[*D@)DQ!`JWHXCX/SS?/0Y<``OD,;FG2A/OG >+M-55E72CY5;H.+0>F-`X[U.S"HC`-7^DAL,^*!$QDWL6G[<BER1+#N"C#%(5% >+M*+HGHTEZ]D(710_G#M8>VZFY@H<EF^\=5EJ\WF"L/>F'<D.,F7Y&DZ3;BZS$ >+M2ZLF#U/$.DE'L777`\M($IH8@NA]QH+(HE)]K.](KIRY_.$->B4:/$.V[<T2 >+MCBS^2?9A(]\8*=(7`O^Q#_S`U@8]">*08&8!N!A*/RCE<AW>'`.^29ZPS_,B >+MC.CG$IR,Y.NT4Z"O5+)EW*G^:<I3++*5G]WC?O>.JG]<)L.RUI=91(N`<W:\ >+MQLG3=&$4RG/LCN<XWQ1`3`0WR%`%F;(`@^*DA4</'7SD31=7;8I<//=C,!<\ >+M'1.LV1ZLN9<NTKG!M;[6#EY9+(@3)),)>0=ASTS[F;0\8E1-0*,!>__+ZQ;7 >+M='A9+Q#)+*F16IT#>37<<`6^^)*;+&*+3K(`8L\(SN9!$25S@E*Y-$N5;HF$ >+M<4G[\&9D"Y^_GF,_/$O?HM#Q=[D;[XNG+VQR)?K?2N?DZNC0#VG?+PV*+QJ` >+MPUKS,!!Q.%MPN/0&)(!UL^(>M=4(9+&*L**B'4'2Y5UV^J7096<`L?P.ZCH< >+M^-$F.:8K>"F%_6L7<36ZZB.1KYJMS`#"-,$AVN4NMQHZJ:.I!4_PN'2@,Q+[ >+M*.:_H_Z&EJ:@C5/SGDU#JT1C'.K`>8Z(JS8&;.1WT"`1P:;*QLKSVZ@-NLV5 >+MZEH$`X<8#SD6=JB"CLMJ['6E?:!H[D-+LE>+=S:_;(JIN;1D]5_(!<8&:T.[ >+MS;_.X_4SV"B\.IL_X>G`+XA<]>YJ'UF>IM;?GONI!2%Y"<B`)N&:C#HC]LB[ >+MM`)0%4I<G?3=Q+W2</M3,,`:);+L'S$5(%GF`#C!3:P;(.SP`-(.+*5_SIU_ >+M[&^[P(UN?5X[0)P0>CY<:-V5WMWM-/@_?F)(Z9^"JK;!-@N_J,FC$[-SA0O8 >+MRHW1_%:K>+WWYQ;4G3JH!?SI`Q&*F?M%V*IN7HO1:V<[5&.6O!2Y-;)/$-,) >+M,7.OWQSU3'NL6GV\I>SP?QR&_`JY`KMVM&!NH,0R#$ID3!2&\TX>(J5<<X"\ >+MJ]16@B1`_65>F884?W>XLK)F8:Q?*V5RX[=3FN*QL0<^[(>R.$.9FD1EJDJT >+MI`>]Q.SMD`S@!,-0S0QE,94W\S[>))NMAR>XMB#2$XN\C61W`#);+>0VB%/6 >+M=R#<L:J!COZ7DL<Z9H8=;A1O+;'=!!5T#T'K7;?3BVUS7P]P@--0Q-UP9]!) >+M9FW5I'_9_9J`0"8\QT$O]L!H_!K/.]8@D-B\0E2NST\N:R'C9]SL<A;T9A'C >+M_*5GKP#K[)H=JH]_](:(-87UDP&=(-AH6]W7.V/5@SEI[SW5ZSD>AH?3@!$? >+M>>1KAA#V"_9K`!7%:?BRAM73<!'&/U0]:=]3TO$K1)'56-P_R+SF2\?,H27: >+M<NR:.&E;S9)E0.B(ISUON(KQ"8^[K#0-2R=LU<Y_]BKY-$&=&5';NTY;$S': >+MCTR?;DL.94(4U/3(*?%R:^6=%:Z#^(,4>K+YO>;WY,YO<%0/>RG8(69,N1AE >+MZ%`G$,)*>O],B7`5ZU$!<9Y]($8R>]??;2/:46(P*8))XT.]"WK[+*`SCP82 >+M--E>*V+C-E7G+$;L$:R?@?/M-E90,ZMX1;<>2GT8><&2(S*L;5!-?B/60N5? >+M(J5D>'@5?+O26<%PWL^'%&K7]OU%C-KQEE_W[;"QRX2:68WG;L'BDZ6X`YM0 >+MDT]&*J$&*["HH?-H./++NA/3P[JD.!S`BKY*Y%?(1C`V0SAF&R+W,W;&*PC4 >+M8CTHF'_R+T8]=0A`*QC1E'!-Q22/!W[-L\XV.?'%-RXXSVUICJB_T>Y_K=B` >+MDC591(@AZ[(.#)OKF,O_IC_3JY7K=<M,W"HN[SA7F,`B>]H)H(6`D8;6)NP7 >+M7RB7PE#M,\&1(PF47^=PP`'6C]Q_&Z/@WJ6P<3&TZ.$)I-H##Z@/&$>)!W^8 >+M&K1B3?5^<,@IX/+A39TXYSNJ5%2:/I0XT`S]9D^\U&K;=2>IKJ?$*/LQ%8.W >+MQ/B.5VDK$D,&X`F]R&L.\E2^,R6'G1GE[B3INCW[]5:N[6+ER(<!2TTF*3=Z >+M)>R1&F;_F4FQ063E4`C!FDDX2`"OK3\`F#2A87&GGJEKCZZ."CGR>X5MII), >+MI,3"D1R0&NASEM:Y=AS;)46#VEQ<:]2ZJ<7-3:.;WI8FR0ZEQACOMCSW+H^/ >+MJ,\QW';-HED;H2R:-(<+_G0Y?B4#.&DDAC+#0H"UM:Y<ONF![$:M`"U!V-K\ >+MW$>#.@K\S*&VR;.W?\#0$WF2L5B0$2#VJ/63`FO8^L_H%POJ?NKQ<N3Z^$-M >+M73L9'7.+?HJ\TL,3=V1KVA4?T-7%K2C:R@S%="M"LZQDEOI=\:`F%Y/!I3JC >+M8\9SV[RQ_#AA7($CP;TB1SVEXS_K_=W7EJ"CV?<"_X#8(OD=L;*3>8`TR(IT >+MJ_$!-'9+8M,F0X*RM++Z/LV&[.X[W.O1@1+?>)PGQK&%,@:;(B/#B=;>7+Y7 >+M/?O+@$I12I<]2CETO4R$TD2(MZ=W[4)`/+6-A!M1-5\L4.X"S:+&HB]2EIUI >+M^=17<X:7XEW14K'?^:6Q<DP!<%IK#@4B0GP(CCJ-@4!*^G!VLL(ZI)Z+(3#U >+MA)GNDY0YY@%S0M5_Q9M0MLHACHUU*%?[**)UB0FIAC0\?*2'=MO^:2C_3!,H >+M7]._:22VU?%[QP-*&)'G<'`E'YDE+%Y*0@I@'B24A-.U1@>Q'%0JB0*:T2U' >+MX?'[FD\\0=#0']FNT7:F]0B\>BW1D<I4&+,4*KMIZF[G%&XKLXM.*Q=I@[/: >+M]=8R#-&B$*@_KPB=:4^2ZZF/.]]XA`0#F?^@&@X$(@C`\9N6.F5&1F&I5(FR >+MKI.^LAC<HGD*0,3&DMUDT3]];4<D;%NI04DX9&.W*(U>"(Y7BL4+)'C^%P>V >+M5VZ!_S$`/,[1Q^_*[+`FE/`^\,TDAN_["!^PY##G/GV?+Z^HL_JF.AMG&YOI >+M0/)V^Q0Q.+:<PYZ8::".G@I)5VI:X$IKLFT_?,B9GE:UL<@LF_L'4)(1%GP2 >+M69?,'!D>U;D01IE.*.%!;H8++E'54\+.Y2XD\Z=/3]]WHD?+CSK$O.H<'NG6 >+MU>6OX)4Y5448:E(QU/NR9#_;UHE^82'4Q:73E5"A@LIO$@-WXUU!G#%X$==A >+M/]<#-%\"<P%^BX),3(8G84,R.I48JT-,NE@;1!P'T\S`A=$5R@"7SW+-%O$+ >+MT<+;,D?I-YN)Q=-EINC8`F1-0JV$[R,?N(%M7/+_^$<1D]:-KP#FGC5_-:VD >+MA`$5#[&H:-")(.-VBY!$8)+JCU\.X'O[%(NC5$D:KX/"F7)-;#ZL0J,4;D=Y >+M6QZQU,M)ZZ>5&19V9_UB&MZ0.Z=S#4K)34(%8WI/NCE;-RMVA!VQ8%M8`E0? >+M=M=<Y8M$FG8@*Z+L;%R/64EO462:2)<$`?5QU%RL%X*J+M,?:XP#._WRV\VY >+MWMY\"D(HJ&/TVOQ_)+'(FE<[E$V0?"E[(HNI5+WM;S6'(VSQ.U^/K@E7?',= >+MC0DJ>"D2'9`$ZY!2O\'G5\2\__PA"8,5W`A=QBEGY:>Z0+S=3^SGHH%M$=0> >+MD)/64@N8.*H<]/5\(]<Z<OUU*OW^!?,SDH4)++.GFPC2"*=3?/`-%%`^-A+: >+MR,356X]_%=G_#WA`V.S8NJ;O(Y`%4Z2@7=FM(T60E:P9%O3V4U]^6(VT/G4_ >+MI!4YP,XA:3/TE\;"(C0IFWR]_:AO"O)Q1JPZ3$HU0=L!(L5SN5TE5=0S&=8# >+M4"<32^'AT)%.OF/Q*G+EJ0&]W`^M`Y?>YD('3W*91<A:5VHVLO4;MDJ8FD[Z >+M&,GL3!U,?,%6"JLQ$\`1R&[/<I^`K-H>L'^.9EOX<J$PO2,_/:NW&E%PE'V* >+M.?#.Y@F%P./%P*>\%UGX$.W9/"P%(`:+",DQN\&]4,L')/OR4P5.+XL7[0YN >+M%8>=`K-'?-*,7^S_!>P;_]X%9_:XD48,%DS$X/@V]`<:I#C(I61Q5P8*VWM1 >+MXUDLEDH:&?UI]KC>N4W`+K?,L*53%X_Z#\VI"7H',+,=C'@C6,WGI1')`E+0 >+MQYPAKI_`,&G"JC&W7A&%1\V7T8`4DE-%_`&KU"K1TOJ/\>*JW7DQ()=,$@5A >+MH%VMT'?,8T!TDDN%CG9*ZS;E5AA5_03]N9_BJ5A<:?RDK-H4"HCZ\K$3=/KO >+M,#'.F)]$,G)#^#6AR<RQ=6G)_;VM51)UL!9B(..:<#Y=3?(T^&:^-)9]4[H< >+M@_OW?/`/7*964TJK[DU.1/2='-LC%Q[JPY-,2?LI"30N9)FPG;U;#926Z("A >+M"1W`Z9P]C!!.^%"=R&MT?Z#"48ZU<3'BN+A1NTF,&/I1V(]D1['FT-"4[WG_ >+MBG]1W(Y^(:0OLZ,@'W)LJ!^#*:C324NXC/X[\T)_.T7N>/U/6U#$PTE.EX<P >+MP3]KB*1^QBG'5^3T&OPAL1O.19?,2Z!=J/_^0:V[H\JW_5)-?XDDYDG%YHMA >+M]?"DJH,VWKNOYOQ<72^SP@J.=<<%5F^.HO1R9V@5;&J-'88;H<-^R]?Z1:$= >+M$)>NV^SK2P:X6=4.6BAKWSF!)@\8HX\G;_TQK#2B2%XO!VO%@I(\^`ZD@]!- >+MD:5/!.Y,[8LK,[5&O##"8`EY4B3^K$B+KP@I5#O8JZ\`S.A)(0\Q([I6IK03 >+M>`*9]KD^6]!_="^PRQ"*E+)75\,[#:R12TSG._$]#:=MZ:Z3@K]:FA,/O$6E >+M_:SL,G:WG"=\5D'8>3XFT36,4#XK.S0A_7VI[1RBX.0XTN]D<-V[I^>,V=@5 >+M\>CWADA5YU6H>KI$'!J-ML<J\_98J*/S')<N4K+REBE339"&7Z6",";8UF(6 >+MQZ8_H&K1"JN<F3^:G`CH*Q45!*GGC>Q'6&J%KM-5\Q[8EJI/%PKWL/`D[&V< >+MD?-`:S:<=F]]32U6@W!B`*UZ.LC!S*C7$-J1GXY@`;*?K`^0NR!NZ^#,X!X; >+M!#N[I)%,:C@8H%ESWD;>AH#/H@$D?[).`P&_;_J-;P<1*1JR%E%3W8F;:'LZ >+M*KH),XW.B_@"63[R(13R4',>(3T'YP.[63[3*N]9WH/"R[Z.9>F3B1(A(E]4 >+M\I3PG:'VDC"$X,#ZY4(),V'T+6OJWY8Z(HU*(B[7[N*^1C1%+4"#TW(=LUR- >+MX`\.H;-KFN)&`(3,>=I%EPN*=(?%J-L?-"F$*&E:FHKG#NEXA%[CQP"D?N-G >+MM9*X^NDF*RY/[IN-VTXLQI7I`*("Z%<+BE2+8@7N7CXYXW_?GU[P@EM=M?\% >+M="5VMKC"Q3@Z/5>RR#>(;Y"&E%W.7&867[8J*F19#KW,=-C,T:X)B"Y>F%P6 >+MP:O*,("JLN2-!!U/,P7&;M_B_-6A5@+HHU%R;6Q7^`+^I\E>$Y"#:S[\N;I0 >+M5<Q=E"D,@:G7:GO-;#-.YLN3<8`R+,O(K9TU"S-YKL2G6Q!71>:S"EYDN()E >+MP"O[%5OO,;N<TE!=15*!@04L;;3>9+9[Y79`<;?VT"G'S@/!K!K\.?^'8SDO >+M>+-`GC2!G`XZ;CZPH>A6<XZ?/3R1=(E3#;&<BOHQ3GUX;B_1O?NGO"<W,/=P >+M5+&NAYR0G00#(]3#8D)/<,2TG^H4U@XIG<B*3C)_(Q96[2@S`)#D#S>PV78- >+MA(489"P\'ZQA60BA^H0`@0J8A:1D;N88RV3X,L^#(!D)8)?\9N<^^YUM3(<G >+M^%2T"JSN5#YA3*V1_\EQ-MJVVY<'#XMB-.<>%K#H0(3\0B'$1Z<S:\,7-"), >+MK4=[TX?Q:CQLB2;;R%`N$2R#G$1,5&-O`C2WR679+&047#RQ")LCK6H.+PFC >+M@G%+2ZDT"PQXX]!LI11+S<#'R&%X?056";),HTMU:909YM=KLCEZ-OX^X)'H >+MB:%IR?YDDQTVR0W_/@GO=R>;M#8/QK(<'\%\2T6@,YQ.K_-`J%F[0ZE3@.H3 >+MV(M7\?@])N/AS%Q<#GL)5]/22,2JHC%OC@R(\[V5EF.>?Z2\R-[_.M[9/IZ# >+ML4PR^B09^@UE>*/KC!H:Q+R-K(BZWLE".1*'L.,#8LM"-0ENG5N71RB['$*5 >+MX@:4+<T]?8#23[\8R&'Q,7JGT&$B5F%S2[7&V.J.U3*""9K94$_WA1/A\Q$A >+M^WK,A\ZK91:Z,9O#(^87O^WJO:_$\'\R6JK2N$&>8O8[_$9MRF/21:TZUCG4 >+MGTR+F%H;R%L4AI_$;49]4=C%+!RAZJ3J:L94N(2MO'9GI$AO<WNQ8>7F)M8` >+MK\$BE<03^[6KB-3GA5PGOD2*A6]UA!8VV[[XBM51$]S[A[531GX-_8FZJG&\ >+MEZS6M/97\IQ=IEABO%G)O>?%O>-NS&WK$<4KQ;&D9T=!!HS(I!X=OU*HZTR8 >+M_B"U`X8DHXHWQA'U-B*8#/F/M5],8-P]V?\#@FYD3O+D2K@H[S40:*FWTBAX >+MN#UDPRP91Y+;Z>"JS>;O^VYS]>3O8LK"9C,8<JT3_"/A9?.8>.:(.@9P4T-. >+MAG])3^0"/$Q&KXW'>6A@RN*!H6#%`%1L.0`D=`$RG0#I(\\<9Q]39A+=Z$[O >+M.GGN*&GK>>^DQ*K`]WMK942O8<3+]$(K%71P&._IJ+=R2Z7LB64_-(:9I`9. >+M]%^<%$+4FUI@C`+>5("`U5>9U5U)J7!_S\NW46[WECT]<OKNAV&-<RT^KVW[ >+MJ9F-KARNL[K15Y`BE>=H+`L)-QF/VH.[^[AX'B-#;@,#_EF0<8/DC`U?V!2# >+MT2=R.%^X9I`!FZ$Q-!JA<K";`(^:A#=DW/H`?5'+_+RFBR^DX<VEV__F#8,8 >+MN2UC-\\;H!^DDL5M"+3[\W&K78DV#$2EQ!;NW/5[_MA`":F%^JR7W<]"5D)0 >+M"NZ!+5!ZM$L3.8Y$@(3O"2Q=P[8B&-(-:[1D1)4.%-!V$OWCGIWZ:7_FAZF_ >+MW:PO,DUV3A2R8&]4_3CJ\-GU[F:2`<YBX)),<Z-IF7.=Z&FW+^$7B#'H2?A? >+M)&1GYUZLY%-5\6+V-&"U7G&*ML<3YN4;N]Q`#`4NU`N0*L]!&!!XGQ$VF*]J >+M.93=E)N)JSNS'8452TZM:NK=_?#ISV/.+N(&=@;_P_%`M!8-LY8;_C-76`$= >+M,!:F/:S>TJH_VWD23"R'+6]3C!K$,+G$F>S[PVPX>>5[_`$[L)-M0@@'LI@: >+ML9/5Z<!KVQ/@031>QI^D<2^>34W#,`<*;.U>PO$)>U6!-M_]X-=Z8.!N`Z:S >+MHH!S[24BG<GV00P1Q#?5*E$9>-B*0%(`CV7,?"R,'GZ&,Z;IEV^Z,Q)(-_,0 >+M8;49;\V,I58__@[T_9YG4.O0,>Q5L!<+BX;1._:!E,BX*,,^L`'EAL&]5=]W >+M[1:ML3*&#T;8.#`Z+RUJ@`9JDD0EN(-QV8?Z'U@5,9_:R8]216>X>6,YS3W6 >+M2Y<>;%]W.`<C@KTQ]'ZS6.69E&!`0NYX33:+_"$E..RS/^PU'_[AQJ7DR11? >+M%I:'VQH)/DW%$5K?UI[6+/9!2X$"IMF3CA5J!)RPC]O7N*""]4_@$M!"A<_A >+M8,N)6-X7DD;)U[8=-B7.RMO@"K8-H+(^Q<N1UX4":A>W#)PE(/\H].&R1U\T >+M)?%2H),)BI=DL!/ATXLE:VH]T34.SVF+;;]4X4DDQ]Z]2EK2(-U/M":NFBG7 >+MSPX:"B"Q*LB_\W#CB:-ODX%2Q/FIQL@0C(HCX;T-CE,?Q32#HW?8!$4':-!? >+M5+T^R;S3A]K['7)LQ91?4*H2?(TJO\PCMOXR66G[9QPG)H`0].@MP%L=LW5T >+M:#?#@[.;"K?6;&U61K`)%?7%I.8Z9&CI&KBM?E;EU3CJ$O]ATVM(A<1+.K;M >+M:"EU!M-@RNF/1-]TC$*W^%OH$3NP@^U<"#6\B)D.0I;O#02J&(NSR_.[$0=Z >+M,B]XWAL;LY+OE)3<^0@`QOM`LZ_?A2;?56>6BB;&N,Q("9*.XRS"UH9D86X8 >+M32F*6)UX&\OFENK*:P33ZV@LN(B+)`R/60?0J<K9B$=5HYI6W(J.K8+2$@IW >+MJ[UDH\0XRA963B#%1!3P/&\GQUI&?J^9("2#T+<1.J?9YBTF=1SNKN#DRND+ >+M4C'GDF(HLA\8"W&&L=\DH!5I2;PB@F:4PC91I<2-$F[EW@:.L$,9\Q>(*SV2 >+MB)(55O1R1<^<BF`351%7*QDPCNRF6ER(P6;%]4&^H(WSMC/4(+2+S%[?D@F4 >+MGL3J9\F7<2`;E$ALYH5-$B9#FR:>MXUT!27NQS"XNT'[Y7\ZBS>#(E0()YHS >+M<;5['@22(ZR!0&?FXJN]LM=UW9"'Z>03=D8A7AWOUSRG*NWI^7=+6D14;G<& >+M'2DR(+6(#%^=HF&?SBF88R3N$I<AE+:R*2U5DU`W9>,F7A#&?ZZ+RDE))MS4 >+MM=;>Z'C[L6`%H/D`[E6<!$`UZPB=HW1H+H\4^<B\F89%O#EBQ'L,YH4]T9GY >+MO[MVG[MPF'1DR]OPI7IK'ZT(HQYJ-_?&.PXYILGA<\Z#JT;3AK$8A2'51'@V >+M;@YC\U_.UV7U]I>?H0V(NND\,[91^\&.1$_6UI<A[H'W!/P@]S9[VZDDA_>( >+M$/]*UYGSOM0]BSH(NM9C@`(@\P:WII7CN!J>"Y1!SB<:A23"#T_X3MX33@WW >+MJ\3J2ZGP;%(0_V=,[<OA1D#J$HU"@3Z=A'F$D\(@'/`F,YNRF5I3*O(P;+R0 >+M?D3HK<T=+2OVH]W@VG"!^G][&-'PR)4^7+M9X)!>U>9]T5(XR=7J&%I;BOS5 >+MB[J_Y0H^=0Q'4%`T3]%<*@GFJMZAB[;Z&?NU&F^R:E,",N7<I+Z2#CYX^4]N >+M&B\KSGZ)U#YZ)^RAP(W.G5V?J<0_4?<O0DR@H`MT]:ZU\Y)RS1M;H!K.62D8 >+M9__AC8%Y#RGSMB$O/L-9Z#1`Q/];V/JWS5.IJ^AZL;6246-RZ%UV-QUX4^$( >+M2R/ZO+QJO?K]RW]%[D,&]XH\B).GN*B2E+Q0"26QNE$Z]W(5S#(L!)^Z9P2C >+M$AN4#"J'@BY\:[W&`Y<C+#@\LOZ1`)Q,ZT_F:_10<&47N>3E!W7:@\^[4_#` >+M#C,SRRUATI*0?X,H\@>B4!R%&.1S]YNVX,'080+)J(Y97V(S'N[>@;.V5._/ >+M(>E0M"=)NL]$!9S_[L^H+`PSJ\U1NN$%ZXOY*0_&DG>SHG>OEIZK$41.A<$# >+MZCJQ'$OG8JV<=$HX$N@TD;+$XCHF->`T,W-DK[8PI\0US'>N)1\-+3=[P;YA >+M`C_YG=[6%G^>IXW`F)!/`'=NDGW@H*9*H$JN4$]?#5N1)^CL5+I/KA9;L?1F >+M?KFK<@V>K/^$I]S%R)!,]:.\7<P,#BQQ;#;#BG+")A7U([9:MUMLQ/<,<'QQ >+MY=-8YS7*'M1Q7+-H*$LW'DXHQE/L@P>J8/$F.VJB>R/V08#`WY(/MMO!3=%% >+MXV:O.X>TN_]VRQF?)1WW!/IKAB>%[B0UK.X\4-.?G^$C.?\([+39D,.!#GX] >+MY"9G!T+N#<85G(,"I-4&7D+R-B!)1NJJO1LAMR-9/^YO9R#_PH#=H[TIXLUQ >+ME(J!'\3$[[T4T0%9A9+Z'6GEARUJ-6VTJ;AG*AJ2TWN>=0'"*T/_!KF?Q*V/ >+M>M,28#1RYI>P+EV:*`=R2MIPD=T'X?'?B"/Z,?:VGMIO!<"/ZPX7IOUN21&D >+M>ZQE<]NZ5C'8UR&GXSE%=<@5SPYL@]S:6@P7?4M-4&@69@`B!='!Y%8?]PP; >+M>I67B\6_TU>NH1D<U\RT5J0NC3OCCA+;(V@"KCGM`G*W_SV9?OG,YA-\V"(; >+M@(];E7I-+'%6X@J5M[N_HX"GMU-H;ZPY!..7GX_=X/6A#+I=A7V2D+5;61X- >+M\=GB>[4@_.JCYN:+](!/G'H^<>(9]Y)[^#T#]`#S[$G_SW$!.0?F-ZN\[T$! >+M*G8(9G+@+V[WQ4=%'>J\DD"MC.,*WHF6F`*.#('V;HU``&K+(JN-!!.`%8,\ >+M@S[DU%7/:M56$PLIM68BU8O#QV5Y@Y;$5='IYUEC+=&?;A[3.NRMO^+,8-GR >+M+O?\51EO4(+!,>S<7'F,EID.0SOZ>-A<K>L5R(9_09>,'@!4#`3^4$]7"E?9 >+M?K4!B(M*A3/TN[L;HG)?IX2/]Y^IX%*U6A>Y94TQ;[EZ4]<UK/+W67@P,2MX >+M13"9-']:1:])[,'RLKN+"L:.$I$KF@!`W_PDT:)XL<3$<CTT_9A2V*4LM1IE >+MMC[5O3,%8V=O>`9N26@O`$W?I"6GIO8*;040Z(-E0/ZME_;%'K,O9=B.\W!O >+M<AI`]5-,G%UEW!<A,0=0JS>-',*,6,)4/0AV`Q)P621J;8W)NR:1ZXDE]#Z$ >+M'(W*:YT+8)]82GR_$:Y-.X=-5(9#91+F4R5TDPW,;8($_BA3*U1]C$6<0?K9 >+MZ!RI/OXXEUT.H;\=5C@<7_3'%(,B"#.AA0\_H@OH<I!+:UMHA%QG;CM!#8"+ >+M$\@1YT8F<9BU3/^H50&I-JYKG7XIKQC_&0Y%A_3@>\O/T)RN2O/&>E?F4)[V >+M@`5/7HL"^[`S"LU4?)ZS]L%,F6)Z#X\V)@I[&*&P]<?7T"BQJ;&\7/31JCH# >+M$P]"9)0.T\EWGGV*1%#18YUG)J:R4>/?;/"^1![,C7.*#1Q!#XK\YQ1K3E]] >+M#@X`H)O&IY)^)4^R1R^:O^"R$[?89ZR[OH8,YT\'C/5)_%'<LD41;W10N05O >+M='?GA1UBQDF+8QCS//L0J!RHY+<3JH@B64"PIY#_\-B\_9B6?]^U32DB$X6N >+MB,+&F?#C_`>HW9P(Q8/6>&>CD'Z0D!:+QQ\#^ZF['_0>8;_JD&87DF,+QSPA >+MS?GL-^&[6ZKOP&'WA'WMVP87/F*;<=JAGBJ\-X[Z88O.:AECP$CWB^$=5VBW >+M,M>WA_WPW(A(4SBI'\URS_]VJZ[,FJ^_&J7;BMZ.<EQ<)]B[GBVYS[XI26#N >+M<)G]7?,=XI]+G&YE-XX=_1GYC*$1$%'2YC2Y%5ES10CBD.I%T:7N2)G)DI(4 >+M14@EUTHW!E$^R`C2N/H>EJ)2(*7X#M\%.^)^8`+=N/J$IM;ZF>4W-:!";I/1 >+M_-*4;O'H8>]G;C&-WK_BLAI5Y-_Z:N^H@6TV&T(XX48,&P"2;Y"*4<*OR#SS >+M2]040>,?[OOL'%4IZP_W/WQ7>&G:,$SRJIL':[S0&:V&J9X`63A`^);.-CZ- >+MUT4Z%631N4P,2OD67?0#X)P\FYR/)QS$%64G2U@E+LPTUP3W:!V$R(QCS+5M >+MDB#YF++AX-IQ#6Z\;6FYJVZ'?&"S3B[&D=,:(Q'4:$9U?;?#2?,\\FE>O$<R >+MPA[KDF>&\\K/;OOYU>\21[<1UURA(1]"2@'TGS^,-*4B0D^7M,G_U$P47]BH >+ME[IU&^:+%I.>\'KOYR>P_%DJ?O'0>K&AQ(EZ#"P8;?\(@4X0#JOJ^0D5IJS/ >+M0M@@CM$.%>RCW4F&FF@]+R@6A)QIACHUF5&&!"5SM-1&:&KO?SEX\#N>0)HJ >+M`KG@FM7?1Q_<T=V-`7&(>=[?UIUY'03*2YEM:]>[7=3RPRW>3R$-;N_23>X1 >+MF(T>)^JEC=<LBW0=S6Z;2,'ESQVHI&:Z\^R32$R/\!4L@9`%_]P4NY5J3D1? >+M1X?[$:KC<Y:[>@Y]UP!5'9\J0`%GN="MAV``8>0-F1X7]^(0?15/=-G/(50\ >+MR-+Q+]GH_-O.IRE"+VQG&<(MT878W(Y0*[4L>61KC&88?V1UFYC6"^8-6K6V >+MYEB;@B_7FL9.7+U0>0@[V4-)0FX,YT:N,,2A4"-8ZL_Y++W`'9W/C&"8#0/) >+MMG-G0LQ`5:@EFWS_3(-,TBRBRL"$;F$T2J=,@H1_PJ(K79H(%0F*IIB<(">) >+M-DH/[TL``:)KCI.Q[IHRBA8'..I*4Q=Z_EEK]'-3N_('J5*F&B>]%1U,9D&_ >+M^\T1'U5"`Z#U/[<5+(AHJI4H\1^Z&UCY%C;2NY4S1.K'P<B3\RWES;7G_<L+ >+MN3X3G!+F9$(D6UPV6JSK1O-P]I(C;)#=)X1%!P,)QB.<2\(B"QF*JHL/'0NQ >+M'F'8M''VMKFHRFE<"9]*%=5+J]X`G4,W)/&23(KCM!`P?0X_)_*OL/IE7O;V >+M%4Z+Q]+3C%6Z'H7*&E8?%080`V@P&;5[8'6_1+H9G'J/)Y2T(&'5/?G,FL%) >+MU%9Q,9L8,JK+Q+$:"\$CN+-OP^AT,./)MQ_CV*36-G:E__*C3_A&J,9\!0)? >+MN)$?*Q-9P#3?P9.499;:%@NR90<[3_69AMU21T`<IE=^$%40!H9)#8_NG^<J >+M^G3J.46-]F>D@Z-D,;2[0;EKB*A/`;6\NC(<!W+@G&8RV*K3`ROT5OJB_!QP >+M'P]0#C+&T6DW@NEV&UD^NI_10"8PR9[BG7`C5$N"+:WL&Q#(V:^RM1QW?_#` >+MO.:U4<KO7J5,U!KR-+#'YQU:*H1$IN25[WKL%KCC$(,/H^.(\F8.MNAE8J"G >+M"!%H+,;(GG*CT=,_F6?V"RZ".WCXAM/$;FC)0+R$+;6PT2^D"`U0;<&*!?&> >+MV+7!DD7E@Y(-^$:C;`#`$_;H+5C1B+P+(#5!^I7>?E^N?_&S?S;`71ZHS"G] >+MAZWC8E.O<R?6%KSXQNTSC!K,_QX+KS]4=5$);$[_N1TZ3QFW);5SB7Y\R\62 >+M!YA#PM$_0O)267.I>`6)XEY$+!_OT*Y*(75V:"_05,G<3E==]*I;,9+T+/?K >+MT9<TO/ZY5LJ`'AN0CS+!D2-9Q"\OV9FN0K0G`(OWE+\\SS@6QQS>33;GW;5S >+M+2&]Y:K4':)=.3'<J8TD$S3^V7`P(8T"YCQ.(@E\#Q&04S"O^]]@IN]`&P$U >+MCV#D@I=!H!&B381H2=N&G2P]JLJX;)G03D=!6!R?\?P\+ZT8-YAD]!9[7C81 >+MQ+I!IE',$JCS@NMQ\D5\[@A#=R$YF4[VN'N\GP&YVG8I(<QKLK861QHZHGNX >+M+>C]UDVYF*XMYXW(!N%SB5OSMY0.;[15-385,G)PESEL@996?+AU*?;Z/>+@ >+MQ%WM'RD=#WNW'3[OK,3_X!RDSI)ZVQO]5AR_:Y]>]1;=TL@SB&I'2-&(4G"H >+M"0F1ORZM>:2R!(3CIU67#L/J6G#@F[U`JBZ)T%0DDMEF.#\W\,)!C-5<Y'\' >+MSHF[Z-^1M9-U1VM5CQ:F>T?$JQ2DFUQPO[T':GW'?/I<D07SI3129QXVSC/< >+M7.R:VS#KGP\!Y.#537"^HQ@X<!E@\8455:2.>CS6V"Z)O3T'Q]7QW/1M[H'; >+MO\9VB_F\U\=WUXG,OJQ5)A+^(Y0;^6%F1-U?V#@IK]]WD:@!.'H9I1L[&R7& >+M`ZW$?()J57$W+2[]'SW!?)M?^-M/>HPEZ/X[8=R,IEA*CW^AI)+-N?&$"N_; >+M0\"$N&34$/=<EOJO.Z5UMJQ?K#$H;\#EJ'NNN7DD9A8N?SG#TFSDLDW11$D' >+MGSLMDCN8\2=Z/M($21\R9=7B@6U)8^TMARS59N1`$/8S17YUXG?5`<FV"[;> >+M$_K14:Z:*B[Z3H]L_-Y]:TH3,`LD)PL<6Y0?[ML`DN8$C^B/K!+ZZ.6L5.PN >+M1[%`*[."3B3FK2W9N`KY';R_"12O&`])SAF)3I2B=#GM.V':R$W\Q*S_=#$C >+M\`'ZD="?.,^L;EP`':=$-/)SDB,O<$@^M>A%DK5)U>4L(B%CB.)*4E%4OTJ< >+M+4-?NM+2'\MV4.%:"JBGT8-ZLP+])-3DT;NQ;@O=-0KA3=Y"WZP_<!D][@W0 >+MD7_\-UN#M\.-<,RGX_0P\9FO00;;1AT_VT^2E)/+!]IE4+JPP?"TRZF3&E*> >+M&?Y^T@SYR@0P`SSNNOY6]>\9?7E.H^-2PB0+\PJ^Q=XLX*+<A?T[_EOD8]66 >+M1-O$?$8^MH[3)QCHZ##X9=PW.R.0J"KBA#!G&M-#7&0%N6W/;C>]"O?Y]P6- >+MZ^<PC3#/-U)B``SN4<-:-00M^;$Z/R"QH7_?.NV*:\#)P['1+B)%O80X=H$V >+MR(I(R#$YIC[D4Q0:Z\5HAU?^.3XVX=/3R+[J4)'%9\&<06M.NVFT5#G4V.3/ >+MW>*41'7'GS+LQ.]'RA+=I9D,OK(*9J%5'J+EZ/"/Q:#&:"Z=%#5KP]FHE^VQ >+M_G4;5ZU80!<`B`F&F^S=QT`2XM/H#3GWLJBLM@.>_H^N;J7QT%I,:`.CY9X% >+M,2&<V^=70;#&:^?#\%_?/4BOE=V_$H#%>LLV(QSHS:8\]Y*R5I0/D`)!6>MJ >+M+O=*W@EG*@OTK`FL5&*2J4Q%S]\.S;P\([GQ11%KCO0!Z\CM=O74X5#*LF_^ >+M7)'G_,!J63GXQ^DR-1U$FY[B.\W:06,\);ZY^;=?YQ<A$R*.IH7,'(WO]0[" >+MY%-<GBF,I$:4BK[V2**V--3#!'CT9J^<O5'LOU8B1*,">`(^J=P_.4I^Z[=0 >+M7B$64C*KJ:3>6=&?>4&<"5HPV0O.<#INA8QE\^-S9(\7;YB5MS0JCR**++R7 >+MDM");A`=8LHW->J8;M!RX5.J3]L*JOP.LGUHX0___(=ERH=,<4,(Z[_,F-;9 >+M`5ES$%B<PSI+ZB\;-M7C"!/W;FCDFHJ798.23+`(G_EFJ8ANB@)S]K;.$:0: >+M2#W(15_HGC;7[N7$8Y`7V4C*L0[,;6CZ2X*$>TO4EVP@U\?W[\]>U_](F[$. >+M;9@9-?Z:^P+"V_+'.PAT(/SCL;U&09NK)W21Z!75.5:$=)HLSIP(;-%&4;78 >+M5JTE\M7&`=F_*X88';OAWJ5UJM&:SR>RB_1L;]P=Y:HG>1%S).)0L\R)!B,N >+M9.69U=%&#]B*54&A:-EQE+K%BF,AH^M,O<],T;-MP:G?OGUQ<@M&"MKBQOO7 >+M\N./!+1&K0C<M.$L/T92N['H="5=ST\!WJ/ZH6;3?NI(`0<:?SLQ%NG@$#%Q >+MDDIJ\]!67$,%)HH0J2&:)*FQ]YDH,&$D^G6NG11S^%F\/\1.OE_+9[TVCKT7 >+M[JM7.1WP]._*F6U&;(.6J=5VT>):HB3ZEN!_5%C_ZDV]OZCE_4+O_>/DH]<D >+M,>+3[V)5+DM7:.C"Q3Y\K=P*";LQ+,HG;,%/;^/T7KBJD$A@^_MO%8)7J/9J >+MQ_]4G?U_/C/F:#RZD__E`03JF&X$$RD9<1>CG5Y$$D&Y(B%.'(@5BRK--\JT >+MIMS6]%A\F9[?<N`>+G;1!@.?HD$V8MLG8-[V2!@\V$XHA+3@%S@BQ?R3LSU8 >+MKO:5@5$GJ`MO4KY&;&,Z@2LC,(._,#C$CFM]XY]2JG_9W%7EIV/?_B`8L!#] >+MD?,")K@.WR'T2[+3&:(/5W*"!A5Q<L455N67!*Z\]!",'P7_Y5H'SXCNU-G5 >+MB/["&W),H/HC?9=U*LK:ITS5/@G+1W:JK<\)SAN-H3OX#;8]B7C<*?>9"M[? >+M#.[;>/W!(HJ:X))WW.#V,7+_Z*#9UUCY2/S$G:WNO!%Y<BLI=C0"[E8A^E^I >+M2T+4KB\Z+JM"_4:47*EJ:42=0V:5G3P`Y)$%Y]F\7R6P"MC&A-0B+T%.K;\! >+MS4UD.VF:5_UC(+!C2H"-1FLP$!62EU^N+/@<%,`:N7C[NIGU(B\261B9#PZQ >+M9>7^.I8GX-FD&[7%QLLP#2ZGUB?NCIP79KS<G9OX/9I.78':)69FYW+K,M:E >+M`V=F$=AR@FV<4B]J]*=<S#+,_&&6C>YKO%E$&HYR0.G3%!5?/3FT$P</@=1Q >+MAL*^S>$8`=HI9_4)P^/>-9=?GIT1"@%`C<[Z7<1/B^T=8"_L4QA%\&=0=(^: >+M0[U<_0%<<HC:%!T;I!;DC(FU37.MYOHAA$"\2P<ER7N^9BFCD5+D2\`(+]CG >+M[U%MO'.E9]7J9&T:_^25_9&5Q5ATG!0(YNB_8%6#*<*E8\!'N/Z6Y07:;[)& >+MHC9$"9=R28T)BBMSE3.,>QC[:])])VXJ>&F1J9W$ELSD,_MHGAO&O_W1'Z/\ >+MJXJ/]J5&_7]5NVW70%1P%ICT_4D02-&DN!-X@PB1;2G[VFG1/C]7PH^(^FG] >+M'<RN<)6?+_G(*;Q0*QR&;M_T.(6'*3#M_IBT==%S`QV_+ZAD0+[P:JVB'.$) >+MEWF_T)208TZP5QC9ZJKYI,%2X>J)-L`<;#/8CT=OTFV&=O%(-?I>+QIN]0K` >+MQYL.[.1M8/R23(>RZD?%B<+N<B%ZQO<AU#=?P\?,AF13`LAT!?N[G;_0D;D- >+M$BZ-S?FLX7L*@0-6P92?*&X*C76PYVG`0YEHUL"725^#@OZHM!Z*D4:)1Q!. >+M&M69FZ<=L[E*YAT73&J2;]6BD\)&TD$KS&H'F2WE$<T6JG&!EP((U""BAR)O >+MTKV^2\Y.?Q[_.+$<W^KXCPYY<PA#_PL13%ODE`_??Z:^16PKU.B"N!V/9'EY >+MY%/^@%#HG"^K`DU;*;3>-5^\8[WZ%DM-^J=>W)V\HKP?F#ZC.%<'DEV53=N- >+M_77-\FV:,"JF![MR'8^>5D8?_A51TD^4T*[FD7M5P0FA<[Z.>'>4C[3\B7@4 >+M49W255L;9:7;K:WX69U`;/8#Q_.`0?_^AU%LP=BQ82!.;#X="H!8HW(N*GCE >+M+BG!+.)/8<OPS/@=1`\:"K4"]6*7,QS*#D7!&8TJ[?5?UH<#+-KA.GX91VCA >+M^#D[(!Q"2&R(<F-D((#&+.L-%.CO?&,]Z8V1[YJSV:$*5,&>;J/S\/=0^@9C >+M-?C/].AXM3S$S6(RE3.A:4A?=+VAK!IL$:Z^UDI_0P%O-M5Q0HTL5=QL&T&@ >+MQ4%3FYR77'(UHY"@X#?2M\7ETC/W_-I."CSB:),K5F.GBWK!Y.GLY/C]!.(6 >+M4+[7+^\_MMVN3*@%Z*:-6P`]#C!-RHT_(Y[*A?XI;-C(>L_@8_3!V4X=:;T4 >+M'&7D,#4+D9.?&1-686"JF0S+U)B7PU02SV<S;[;G?.\M4/?18M_>K6'1@SY5 >+M&70@`J@8+#3+<S@;(>?4_LNI5]O5X,I@3C1JLYY3"5*L9O6/5>=IP<)DO]\= >+M+&R\BG3QF,VKCO60$*X<YNX!=0EBCOE'4=@D3N?<([`1`UWT@Z2IH:OR?;B/ >+MFS/8V,B9N;SYV&X1A]1T3T9O?P'?13YGJ0<19OAJMHFD$B``_Q]ID+L?I.&- >+MMOM_([,^I3X(`ITCZU!I;MFVI=RC6O8X"DK".I'*Y8Z\XH;26,A.'QR.:HOY >+ME>MJVKP1X[/J<I9GQNRWY=$S0A=)Z=GNL!D21I016%-"QK*P\(C5%_"$=#Y3 >+M.\%PM398$[-9)-IG"/D'/X=8>'(D9/+)_/4_7R1Q%.2=7-#'6IL:14E(9Y12 >+MK(L-IN45Q9F2.?1L\".HW@Z73L;@5<$FY^]5>3"@F%QJ.<T-_15"WQ7J&2X3 >+MGU^FJXD\"W^6;BA^C`E%RKD+CQ81'PY^TR3#Z^(,<9.DH;`A$&CAC)*X$;@A >+M/8\$GWRR7-@6YO`!'2S"JZ82]"6F?/?/EBA1W3W*R87Z!;.].GKW[=S=GQU! >+MT<`F(I>%_A-^8!/K&(@XW-AN`W,X!"*.:H58A+;#.RQ%118Y;)1:*;4:]Y([ >+M6O\E[3P]ON]&#"02$"@/Q_!!._.7_5HZ)9L>$%$J^VFI9FQ,_PLY$2=WW+]H >+M]S<\*N$`FP^I#EGY*8-R=#[$&XJ@-]L9VOG8FL[LE?`^D^IV9`)!/=F9C;K& >+M(VD9BF>,71'E78<$&<63X[Y\UJFO-:3@J-'/.MDNW^NN\_CY:;/+QQ]4CL!) >+MZT+4`':X92HZ;L',C9ZX3S=H<KJD[-R=;%LF#C`<#LQM%20V9_03K_C3`EMQ >+MK55:I2JWQL@K/"A(^AH=:EK!IE]W>(,5_YXRURFFZUJ[+?'*XZY'7/!R51_= >+M&G7M_GK_W\(9Q&'F37[(']\@_"X@B9SP3C8ZKY7&?G#@,+M5A;7>)??C=8&* >+M_>\:2B</`:MXTF/TS^\;5.99.<^0^.P/NVF7A`].5`F?DRV3VA!U9M<>1[>' >+M_-]6$X8$Y.]$R]@V?Z_;=CTD$M^,@AKKT/"E2O')R;VT&:]RTV<\ZHG?PA_J >+MZLW"3N'LYA[XK`>/L7K!3/&3H"+Q`KU?_9%$\7/6M%1X<XOI"`D3>I:P)='" >+MJ;69@XD+!<^;;/&FW*R&^LRKV&LXIDE(R%/H$>0&)<20=]NXR\',#]CZ4H+( >+MZ1.-@]L/H0GO&Z7A'6!%S(QL_<U$T%HUTU(M-O!L(B/JN=\K8VE57V$48!^S >+MT1\KEA,C`+W_MT(N-J791>@0I'`\4C2_/$C$:Q6]C('N!Z;<='UA&T"<N&DW >+M.*)FWD9[<0S?.YDL:0W(TGOLO8<YO:'.]S^>TN_5;+?W61LFPROGAK;Z"0E: >+M:KA*,3$HO?[7U]3S=+@6):;#PE^T@08^1SX(<T1VU[IQ<>/OM(,N&9^XY]8_ >+M+9Y(PJ./86`_S)Z0.Q!V#CT%!$LQ3(*@H2K*)X?V+-#MJAG\X>1M'8^%8K@T >+M._3S3F%J:-I<B2:J/(M[];R/KXP^LP@)-D*=14B?3`AUVJQQ4PJ&?*JK=`NB >+MG.UI-7-J"6:DA\9%/SN6!=,2U1\L9D!&?WA43URX:(S9C9CU,FIW9TL4_Z1) >+MP(*FON!_(IH%_;_QB$EQ'`!X?(+2F%\8*<;2CTJ1F`?GVU14-9I)_:`DOR`$ >+MJ6>B./35M+B`N`"21_AI2PQ(*G92:?96Q<C=8MV0#_7/@==SNH$0)()8F!\6 >+MGMQ$7,T,=]8"/M\.9US]]+;6NJ5_X5A-1&[(.F'TUS'+%W,[A^Q6O./U(E"M >+M9*2"63O(Z2#VGQBFLXSK;&2[<S#TA;*U@QTO8.A/WN/)<\D0$I00X!'&HZ;] >+M^*DE50>5%;)EX\X>DJ<NLM4!Y"HNY^O/KCR$@[`K75HYE'HSC:8R6[_M!<BZ >+MN@I7.GYYXE-B\`J*"Y2A.[3"=$AX$$CNHKCAH%P\C1[KW<C"P"@<1ME4NGCB >+M?'V>O:`'MM--_"]%S0'+/A@%`J&3L`>MSG-'I3-W#I;N5-\TMDD1C'_7>'+T >+MM^8H`2]G4L6$:PY?J8-I04S(<`.0,82BV"5=;+:*8.*'4]X_8:D(A4C#2CV# >+MN9@*BUD^!T]X[&(#V^K@+&TD"&O:@LLE95,L'9TRAFO%DF91KW3.K&SCG0ZG >+M+XKGD`GB#X>)N=3*%:]:T+3JQT04*Z@9+O\9N+LUFMV%S&KE8>"^S+J0'CC^ >+M)OC3(Z^1(/B8G4K#![>S14$JI3,82Z&Y?+^$*V<:US:JM;ZF2>[!V>$JT3@$ >+M5IN#D*G@=$KI>$%HMVB#V:_P;;Y%BR-0$VT`/N_.P8\X!%PVSI,ZFOP"@3J' >+MD?U;5X2+1A-N6K,\695,!#WOB7Q=49E/J9"5NZ$7]Y,^FQ&SIH?O%RJ=AY$C >+M@_5#/V`$RW4>J_VJ79NE433GWB6Z5.,=JH!K85I[O]WW2>Q84!++A1:=R8I= >+MR`%YB*M_'32_(!EPWV6K,O+T]7F^Q.DWY[+V\]W3<DGZ)!*X0Q<9P6_!_FDS >+M%%ZGQV"N(XYD$[)F]8"E8T:9<VV>L"BF1K'K9A^;VO;"9%G7HI&?P@;C@#=P >+MZ"9M8HHOL".#O?9Z1M.%YB(^521\TD_*/M-V=9_(*WG/?2^<PSHS\;RM-2$( >+M;K?]K\)RL%2\#KYX'P0J7V;7\J!JD"M"O3=DXL?4ALUB[\D:9Q0<:?Y>ZU>W >+M*#;![XJ=OU&L7Z11@7%-.+0GH6I14>;0R/8U[\F1JX_-/_2AP(MCGQX;XW=W >+M0-Q@%%IO[:TN2:/+UVO6D\[7-?YC,OS)Y_F;FR^$;SDBY6U[C$LV(P>"@L>E >+M_ZG@F+/N1Z-;?&KKV2<-@.S$?)_9L4G%CLB)(JX[9)!%8/OL'9PWXPIS8?(8 >+MKMO<$+-.'@SV!4`CYHYXH]]A(DG/6?U4!NXO:>6^C'.!"D[:$U5=OI#VRK2F >+M`=BMMPPS0H6NUJ(R0PEI!H'&!W%TZISR62[A_?!]SDUH6LNE;ITSAJDSY7]7 >+M];?Z$VN06+HL-D/`/40$`M&)J;32YB<'H=LNZ3Q$2OBN13+NH"HQ;&('3!Q_ >+M@N<MW\N_$F>+@VV"L<^#$8?%1$]N=XY&&M6/055YJU-S]9=0W/U'7#A7@&AV >+M/=G<'QW.A022.=-^U3$)I-[!Z'<S*_M:R.3XI@25[Z?X3K=A6;UQ#3T;@`]L >+MFX5U%&Q6R.4P'F[A?H>\'_#?E^#Y6L<0:F2*YO/L%=;051I,#=Z!F,@0NN)L >+MXI6,I"POLD".'&M7V;LG]Q+.;B#'RT7H,T=O^U'_S6#!U9_!1[3`-INU_^`Z >+MB)+[5B1M$00:9-S9+$I341E@I4RO9LPBH*#[P3W@\1N,M8)PX&!N%:I9BGO9 >+MG7;5PC*927KNPUD;"ALWA@W?`@]PB$F8UEMS;$;R!'2E?L@MUEAH98`C/)Q1 >+M4S]S&$U3%^N6'3CV]-YU\=UV3IZ6%\YF@;+:.O4U8QS8!E<#8TGU1*8C$AJ# >+M?_]S"A3-FDC*-/)7;2^O;DW-"A61?$5+%1E!5P#;6ZSSCIHLV\U4!8.9(_V, >+M&^QD9F;4G6)HI-3BXSO?R<'KL$&X-`1:0?:9)^X^MGG('0X6'-?U69'Y\'A3 >+MMJ\DRJ=7V+/!&#H=M""]E8GB7'^>!ZAOX/,:@&GVN%-`&^%@8Q3J9NA_@`K6 >+MD1$9/&CDHFUA(G2)$3#H8LADVLL:H!;_[C`RI(\Z'NO19H9ZV><]:LR4J\V= >+M+%%2.&4S5%JYFI=HS;<@#9)Y+;`$SH,'V22:)2MB*>J\=,VM=&2_2L.SBMVD >+MK530/M1UY(QU@7GSU1?]WC._#\-.AXZDA$VA.M9V14AN/'B6F1/7$I$L;G3J >+M"<5I+9-\?-::2];ATN5SB1S.$O9YEO,H!FAX(.,KWSDCPGP!($FV2R2`/QR. >+MFI7[/T^7/"4H+QA_2,[I)]B',-+1UFI'5TI0&D]$6W\"^U)1DJ14P]AUS-/+ >+MC:E:GR]*G\GFF+ZJ(K^FCAG^I]F'@;`0.LNV,9/?(`&NE"K@D?2@_/C2*Q2Z >+MK%5#WU4;Q/$:(CJ2Y?RMQ.DR]R#73J'^.2PZ).RI;#,&S9T0N!2RWV/E3KRD >+MA8\YJ0S/_!]I9JB9"1SI[9FY-E.1'%EMU!/`TQ5OK6DSQ7A2!,=`*T^J[/3Q >+MSN?SSN<]!+0?-PNWTE7-\"%L_W9>H+UK`2JWT7_JU<5M$8,)L?*@XU?/;92] >+MP(Z00D<H12+).XM9$1J[5X>T2&'O-.!,PRE-N@H!G&HG+_"H`5OS;C,7O%+& >+MBKQ:H1V']%9O]!+OQM6O)%NC!7U'FT*]3Y^3-[CJNV/1OASGHC/T2^3LCP$Y >+M:H3M$-7A6T!UT_^20$+(H4!$T<21JV]0FL_F/KB>N:)V[$8*S!_QI44KWIG/ >+M($T45523THFZ%Z�&:69PVPHP%PI%I@O`^:(L;]FZR66`3.H=G7DVU3_RD7 >+M7+!@.+>$X4M@87@%?+^L@([/&YPP]U&X3_7[2C6GH<^/7'`&PJ".CO)<8X2H >+M(/XA9J[SL#Z)\'O\XPCEAX<;C=SG?RK:Z"MO<JT\X5P0B.?29_)!]?()]Q/Z >+MY&MS<)8\+7T_81`:K7;V>==_'QZK&RF,K\'(^_GT3=LK2JH^"X\?&U,%ATM1 >+M+>7+AVSZX+8,F5F/M=$T&%/2K`B:*,V:\WR2F9$^Z*68='5-,GGC7A9;VGOY >+M*'#^%0"SY.T@@A;"@0_1;;X&@9;-4HK<<YWIT%/X;7%.=HY;4X<\OC5*59B, >+M;<Y^IFC'/:ZV``Y$0W$W0J&4T?[VY,-_I8L<#W)L+"^M[!$8?@835YLLV.GE >+MK/6.LO7!&3)M]W\N"W?UG<-'E.ABKC)_:.T"0VPE1$(>P49ZQ/W09JO3W\@S >+M1$V%HY]1)3TM([2#;"(R@Q`$_VJ.AXKV-P5#'[;3(E"MOTFS,0VQ!D;NC"4S >+M\NWYRX(>U*M$OQ":3#MT<,VJ8%Q)4.'8<3QR3T-IO49#$N#E>NZ:4;8:^2#X >+M@LY;5R0O;8?\H,85]W*%/]4NJ8_(_M^-@OB;\6\@T(7<O+I*BU55%C@5"G(* >+M&56SZ=-F;C$@_I--$''O!B!TMK)64]&(4WQ*ZGA(>]7LIWJ;IV=L'?"BM->% >+MF)KA_I+0OWB`R+V)`X6GKK:;7!WOZ).ZZ;J$3S$?.+3+?>+SD(`?0;]\F8?3 >+MP:!HA.XR`?;XF5I+577)=Z)&"N9--,^EN362.F5TR<,>#TY)'37QP10GBB"? >+M_$#!H%WV2'M^:JV:*7P@E>P;\"+;Y+T"'2E_M0$P@H0EA`B-IY9QZK&GWAA$ >+M3M%)?)&6J>)D1@P#(S1RBFM_=7_XV]M%]G.K\Q^"X"_P1G<H'L0AYEJ]-3MA >+MWGL0EWV$E&1C&N>P%"P4B3P!*E6EJM(A=[P+<\E]*-8GZZ[M2T>'I./"B%[% >+MVL^D_!^K?P4I:+UK:Z6,G4;OG9361$C&$-WA`DEOR5-7:KPG<U5,M66`_G"- >+MB`S\DQ03S1(O%L$/K\RDX&]P\O_NJ"*^U8Q!<QTTP?>[11V'N\'\A[S'$E/( >+M:5U[?,VSR`\$Q/G4R!'H.,PC%I()G(C4IV`_#O)L?<;#A,I5T-2$+\^SLR\N >+M:4BF1L01C1'CE]L6IXY-SGCWJ/%Z^27\\WC_5%0SEN(M%!/T7??`\FZ<CWLM >+M=3)$N"3E:;92OG1.E0Y=Y8UX(S35WA[285#_+`]0X*8.^#]%ON%"P',Z&IIG >+MY7>0@"8X3QM[I8Z%VXKA!0T,W+&IX;@>5PO;+7'5O6BX<8E2S2IGG?.K6:]R >+M_Q1UUJ/+5"IOD#I#RTCQ&\,%#^L'IX[\L5=B)!0'AIRT[\@5FTLH\PS$23\D >+M=`1VY2P`3`)VX`&*@/EL8\F[;K=O#3+>(E-`1Q0@HH]P5,,KBLK(=432[.BG >+M*2P1/[*7\R5A*6Z889WTQXNW:K]0+&V@:9M!57."(5"U<IQV64YS:O?R\L8D >+M.B$W?T2Y!P'\J2:K9+R[]P]UQ%%B?)B\P:&*Q!4F<GJ['3O@CE92%NF2&J3` >+MS#Z*NV41_V-/+-BR&NDZYHC(<@*?O56&US`O4ZC_/^3EY(4%9T&U-XI;^!L@ >+MVQ?%,EC&FG=+_#"%A3YDU&.W-,=U9O?D+J1TM3SWT+H,VNCX1RW*;C7MRNB' >+ME/`\^??5,H@0EIA46`]9@<G-NM0S#<PX#OCPU^Q"6F?V2JL4>I((>Z!D3@<P >+MTP^V';_O::''#/`UUN,W$$C@Y\8F\DQ5R\!7C?DT[X88"-_+E@&=Q'$Y%3%* >+MY)7=AW:X=Y0<@S,N!WF@(_=)M;^<(*+NM"S#:QL7EZ2"!3.'6<X@9]@&>#_? >+MN=C%">?-;@2E&>T@BI1J*'N/H>KK4V>D8#P.HR@/\[5!2P)UV9I02J><!ULS >+MG5;[%VU3$W.0,=[!U!8Y."C/S!,+_I/#_Z?*RV9:/>ZF%002BS>!/3=Q2^XW >+M'+>BLL>J-J5PLCL3`$3!5/F,(WMM8F1:C=+'8IQ!::!K0Z&+BM3#3_")A3VN >+MODQLU56^DK5"8X7BMVI"H,JJO+KD0`6BL@R00`$FVJ^KK+G[YN`(,(H%\_0H >+M'?92?M^T-!M1/#M[!IO!`(G`K:9UP">YSP\%>.3D\GU0K?-.'7<,!O])"'*0 >+MN,,W[(MNE3^U\Y;M@`,3JVV/7!R9U?5JHT;T1X<#_3[]C5JNR&PX),/B8:-G >+M99-2M&1-X/<;':3'-$C=,JR9NO4I\&VG>L^,"M;J"6*NP$RB%+')0N$*"+T? >+M3/[>*;4E_3ICE"@(<Q40G)#X/[@LA`-=KT0/NP4"';Z2FG`OM%]X2]6LW!@Q >+MK^><F_3I+EWI?<,D9@L90Z4VCT:W"HQ.Q!1)E;;JMYY*0VB9"`D)AT^OB,LJ >+MI]V#2^YM'F9^JK7A8)&GA0F#PQ"X0`&GKV>#\X\N9M@[S7O?[7N]>)$&&1,L >+MO8(N4.5_8;0VI\BL$!?%P;*@[S'EWT#!F_7H_))-$-N,)#B;8Q8>M>]W>3\P >+MJQR%VQ<L]@:/L/F8\#=&;&0Q]A9.<*&\]7Y;3>/OAYIX^'H8PU,+RT+.\0Y# >+MMX.B8_L)+08W':':R_Q7#/TQ9\D<1"?,@ATQTB18VRU%UM6$"U05)FI>Z6A, >+MVP@QM7OF\4<LGV.KVX7:)\8]I@#8K#6'`!$A.^H4,5#^(R8\)KRX]0C>'AWP >+M=`2X1$I=[OMU#0_W4]B!%6SEL1?H#NV<)X.:;9=?$%6"2DW=I7H?IT7LSJHG >+M'#64]1!)A,I)?#,2L'][JG&R=O-N+*L0\<UQFCU_BK;>I<+-]JXQ(/6._>67 >+M^$XR>1?D'ESP1-M>PFPPPNMZ%4017E]+>3<6!1_8')6T_!>]$?,+]NF42NCD >+MUS20>-7FD;BX1K>5BC,<?6Z(LU;G!XY[-)[1@.6B-_$'[X3;.+__@@T\I9(% >+M]-#)CV<U@C?OI.^A+JV'3X4559LK+!^USNKNK!\3FCA]J[BC!*NYBV[.A\M& >+MK3U4++WS2F-!1U0`&XN6$"`JA)$V)$H_*.12#*,L+<LN0V\D)(I<E\0H8+U] >+MR>'["&71-6YM:WB0Y!C)F&0YT'L>7/\FB!+[H3W]8+'FB^TH[;='`PE7C@B; >+M!O;=R_:88'/9!DW![B)+JQJV`S$15/\:1N"9F!))0""E,YMI[<146<V6*``_ >+M+/3)+(^4K1!.\1$YM-T*C)6^J$3[!QSI`LL<%P5D%;GH&^RN73K=_67(!=Y2 >+M(9[_SP3H#4E_B+A8WDJR@AB1?N3HN]8`CMMU*?YXY#M2_!<Q]H0NJ)A0I)@3 >+M.9SF\!VV;\R9Q0QIHU9NV(,,;'^B,33X:;B\*7.Q@O2@!\,+\5;[1PL3#09/ >+M;XE_=\TV?DQ%!(RM!@T=@-*\6>0A(&HH`F;)CSV0%#]U\,PU([U=KV7*KG6V >+ML;G5W[,<T%+OX'9H9)%@))`447XU.VT%>2$N$\GU?EG4"9.B]<>"J.50E9O= >+M/2.1V`XYJO!?S@JP&FU:-:F;;,%)Z-4'ITG2',%DC*FF8<T?&'8$A8F!:=/_ >+M[JG\.)+KHM`A<,&92T.3-ADK"5=<CIT:/-;'7ZX8JP:@+M-7/JDN/291X:X( >+MR>M_$X&Q$9W$4283L5KJY:TE%NCNF&`K_5XHJ-5?6'U.PY#@_F*/W4!F-P^W >+M-.2?IA;_R6WB4J]',`#Q:C%P.XDAI@HFF$7'L-HCYTC`7+P>T@(TB!!T/",% >+M@26!K5@L97\H&A@(M;<0B+^_KYO\O7KX3V?231CAA!H)+K\T@P3<,M*8KU$E >+M>ZPJB*JE^56%$PV#3?:*;F]EG21C[)"@)L8XZ*^$I\!#Y><L@6:.,]^2UT". >+MP_'),.DBP@Q/J3?UWPI*;^0$M9I!`6$$8=Z8_P81D5GEWM8.46TF8KT3&P4@ >+M!GW6P;)9UT4^`Y/Y/*,'?X.EX0I2/SUN%SV#8UI>@G.^[%>Q5_I:A_T9>VVL >+MVFE[+@6L0%5ON,3Z68!#^7$/EQ/TP.;I:LG['=]`B@90@C(W-W]'(5Z',AWO >+MGP6Z-4T#!SO@V=0/PHL<)/'<)-^%!6(WMI5(>!@^K)JPC&[U><EEZECF:O/L >+MB$X]K4OGS]0L>QS[-M.0,3"$]:-C_H6+O$L`5N=TH_[SI\7I"4:P(%!-%F0C >+M80/]WD5R/+1EHFG1RE;`"W!B'18>MK/0V?6IY2HJ$OZX.QH+'NL7?4MRO1P- >+M10'\=MR?$2XOZ(/&?R2\.R:TI,@U]`2G8'#/FM@RAD#`:1B]VCSUA3\(VFC; >+M`GH?US/7F(NP`P)9YOV1R4XE`"R*)X?-$U`<]8%L[K1[CR*[Q@W14S)+[\TG >+M\,F_3=0$3X=6GR@GXMTQV#3)#RNC+/@!&W2\Y<W$$#3OL)X@E9;>7_(]6,P= >+M3"EJA7^5$KL?)UL'%+?0P"*GF)-0Q*BX!%/)PSR_]`TG(->P]22B"P+[""'D >+M[/!BBZ_A]E=38=N`]".+A.>-H:Y`\;5>CJ!=O!@]S4-_7Y`^(P-8670,`Q&% >+MC:QJQJ;[0#:,.I]T1P3:-S/)>IYVL5$,4/('1^W197II&E:H[*@^'HTP?FD: >+M(E9PY/S,VF]H719JNCUFDVC-Z):$;2P2^(MB&M9BH75N^8+A$.2&^*G/[K;J >+M;_X9*E.^9+%_C@KD-<D!&1+T[8;%Z%81[[O"^7\;'6*6?5"WVP'C4>5E5K<: >+MO#1D@.>KE)@?20(#.K9,+]*9Z)QHG^F]7C3(+"JW,X--A2[BA!J1--4GC)V8 >+MFN\L.4',WD*'O^426H-3Q-`G@0(I3EWD]2"1@Y@#WS#-Q=38R(;2=BFO-%>] >+M)F.Y[5O'SEY@KZHJ58Z3XC*S0O%(@G46HPPX>2^T.5JU`YH\1VAH,!L#UDP* >+M+E3_,%R'LW-60G7,)4=S2B$=20NMUN*Q7)A=(57'WWR8?[""&UVWG(A#BCC, >+MI1?M_SEC];1TP7M?VR53/:JV)$5_L2FH\3?#@.\U079+[Y60>[\=!R+R\!1Q >+MS,DNE9`@F\GHJF/TI$++\))**R:HFW.-]3XBXQ^4=GW'33TJ*9WXF)+7\')E >+MQ\-"O]J"/A*M,B1YC\4>\)IRCWU7$[!&9TMDP:W3/O_1,4Q+UZF!1T/SLTQI >+M!-HB).(+SU/\)'-/@MKV7L%,[O6[&XV+Y%6\I1WKD"/NRF,JFRTH4WB,_<(& >+M:!:^X%5JY'&2J!SZ3MKE:]%LL8-]8X,EI5P-3$0K7-#\5L$@Y'1^R_I*\H(A >+M^VLT'(?BAL/YM%BOCG32F)-4J=V6I*YLC4&N);Z"#^V"]2?HUS4K3A4+SLV@ >+MH'?*W_XFBUHZ$SK:2>?&M`7S8$M78Z0Q!FGOALDPW#CE6K>BY'_C1)M%[DA- >+M`A]F'J':WLB9/E=O:(&M=#IV.)%!-7W7[:FOH`!6S.3F6_T526F3"$QX/UA_ >+MR<:F!]-2K9N9.\#%5P+B86M+)\=$(4P4)Q)G'_X)Q@E.XA?DD5\RP6`1?@1[ >+M?*+IUK(JL>C'&.4*QZQ,#QS4RCPJ661I9FS:>>!<'X`<X&]@!A\<-"@KY!45 >+MB;C_GA&`^(9>*ZCSQN?@U&-;I=NO7+="AD!66]_@>S7=T_`/BIZY0A?]4UQ/ >+M=AF'?'D_A%>U[NBR9!P359PM7]]%IV!)D_6HU5,SXMT9K\I7LCH%9I@9==]J >+MY3&G(5DXKT^R<R'^=(N76*K%A(N(]W3N<W9VV#_!;\GO=Z5XA!\F%X(Z*=MM >+M/ZU:8EYX8@6&AC1CP5L"V#YJNV486/]@TR-5_S8E[/6UWI/"0&&?L5.JPF@" >+ME!;])T'I_<!FY#)1ONQ<`=Z'\)QO"A)P*3E/[MYK!`@CLU43]BV`>ZP#6*TW >+MZS#""==*ORE,&'X%[7';#J,>*ZWE4V_$-1D-(/.?9!92,TB73PB`!>.?!H"- >+M>)(0CAELXDY?!"$Z-^37T4!SE94"6=*8#QH-=WP&>M?<<V]^V-@`ZX:JN0Z& >+M&1KY>44`Y7BC#ZB0YA<8S8&ES692D\1(N>+5$J47H0/>V\F8.!D/G_WC_URR >+MTAL8[&/`(-M!%]*\!MP27C;!"T\VF-W#V??8FH`1O"+)^YK@@/HHEQYE'E5' >+M-V[Q%0[/SA8'XK^=_6FML\A@V:ESOW[$.ADH_\J#0"]<7D?B+'ZSE*U6K>.U >+M?8G+$32;<+H+GI674"./:K(F^:O2]VS3?!6>2/R3MO>5<.5P#IBU4-W$FZ-: >+M=(9J>*W-`OFC1O7#]I$[]LXM3CL;MJPM[DE18&1J.+IM]U.OQ?$^+A9,BC41 >+M=<NUAC.G0E]HN6+M7PEX>I$.<9,0F7R^RX]'!H#56O,V$!&B"2F\E>T?Z+>L >+M2#E4K)T:712`QY5U2:0>,C:,Z&KGBTQP=P;X[FQ9XA#=!4_$/@$KCF><R:4? >+MKM]%?.B,7/5]N%;6BHM<GI5S8TL=)?N#`LKLY0(5L^2MI)C+SH5(MI#<Q=*1 >+M_+LH36@#JU4R2,;L6F@>?C^J)[4K-UN:5T#YLY_ABWW.28YGH`1_;TK;S6N! >+MKE#K5E#Q\!IX%I\(U5<E%-)SB(6KT:>[2S(9]GBT^3+7`67P%/;Y+.:$FQ,? >+M`J5_<,]:\^;JZLM&7`"!I(%5[$YY3=G=Y=J.RJT4;OD7Y@<+E%`AE@!`5R\. >+M[Z/Z]8WO_(KSZ==/)5VN^GA(R38EQB(%FU=S7^]TU=F?+HN2O6HM!)$8$&JU >+M&(:,9(3:9G4X&94K3XM@;,V<Z#UC)(+@]:CX+>[,**AT?]JV5<C=(A"1E_=% >+MBAP"GEB[00:!_ULRSZ+G0APRQ'%8E]\#\?#.RAY"MZ@6H+);-?!X^G)J6AX8 >+M["8*.8>PU:AO5>YFI1!DM-A#JY#]9K#_N,\6J_0+=`\]$)T=[@KL+6\=MU@4 >+M.QG/M_A$P,+2F8EIW/GEQDZ&;9/J]KZ_$'=8""D]AZ4_)(UFQHS=1#R&!$>I >+M_G/1]7?^],/+_=[:_C`_8Z&TA`%S8M`2H9/AX5!\<E0*<I"EMW<4+ER\9E6O >+M<CQA=4!^YK:B=L(%3OIX!;UXHB?T)PY0_H#G/!6-,B[@N>;/AYG,A]F?K>Y3 >+M+,98O*/.C']Z4*C?1K,7;99>AY=;.E_#.N8,#<F5"L#:QX17TT$C?O6CJ_/E >+M@7!@]HX(0]40P\6(='_4/O6I2TB+>VI(HD\``U(-5,U+F2&.M5JM?#(S_<IR >+M9+INN^_I)">7C99M\SZ.38(R%GN$_>P.%O!#:+%%`M>?=[C#-/%_.T'33V"- >+M<,2)!H9:,UY!`BU;R7*YVLZ]83(5$429![!9W.T$,N]0(9\,@IJD7;I(W]OQ >+M3)[(J(R-(\+0"X`%)"$%.-3$0(#-"@>#ZNY\W(YGPD09/.65",_7^GB1!>7$ >+M$69<Z?H_MH7WB5;EL9T(\\#$`[TF\T-4P`MM=AN[#N8H@0&QV\H=P(.@4W30 >+MC7Y+AZ_]KRXGU'3-(4H[EX5R7^=A-JWVI8L407=U(;2\Q[V$=X[1H&Z9!8]V >+MY=\HD\L!<5A]O!7ZJKJ.?TV_MZ>^N_G=D9(I&!2H$>$=N!7VGY=\WN`2[TV+ >+ML^SK94C@>+&1#V"XZ";<<AL,%B:T6F;N(IQE3Z'6DXT,$<.(5H=6%J>ZU0HL >+M8[9*X^LY6/WBELWAA*/TG6;LUH:'F[B5H-1;^$ZQ+_"K`/JFLG`LW%3=2#Y& >+M)WK4YI)<`LX(,:L-E\*[(TXG@6\"'*O_B1"]:?M09D3$$1*]U];J=Y"!5AM) >+MP]RZD529>O4R!+J$("=;.]71'EKI%XO0I2W#1D3JL.G<)Z<NP22#Z`.18`MG >+MV(-3N`Y7J31IGK'/\,S\\GPWDX7>\/O0+TXJ(KM&9W+)$R&[%=VD[D"I(%`B >+MP"N=$!\`QB'1"_7#`PC+2!Y4<_=<0OO+[SA1!6W^YYA%R?C-M`G_JT;`]EYH >+M?:A8,3M8JE;!NBW)8,NVG<2IP-`"&REY4]CT89K-*&W7SQ#!0&7C9?`)LN/3 >+M?G`>='_T*#CT#LW>+6N0J.I"F=[JY$\+X<2+;^OJ/U\@FX4'YW>YKI]=)7\4 >+ME0,BTR[N-]_SS)N`U6?P=]>U938O$921[Q6'+P_^*S`[V.4ZM6.H#DI?-%/M >+M!\*TE#Y7B^*'3.\)N.[EE^(*2-`2LYQ6&MYU44;:"'F;%CDMK<Y><`I$:^]\ >+M(F'+!76[`:03&?^-[,;_:D1=?!GYOT$*'6,O+-')6WR(PX%0U(_*D#RBT\7D >+MM-^'N-^70JTRLF"DN2ASZ<;8%X3X,+J-HS09I;+8^H&8Y6HXJTHA-1S`SK$I >+MWKJ3`&?3(!-O(0PB/UZ')E=)3<Q$22P,]??41T1`26K6^]N!;O^@S0Y8HHVK >+MEX1F\,W*N=YI.4P@F>N(H//=XECVJ]QIJ`!3<D0G%8X+P3U?IZ&BL_W\`<L_ >+M)IU<1(?&/=^;`B(Z.OM;L!9?U0O!4A.2?V/EU*%=.0Z`S2#N<^HUY]+<A]:J >+M-J:IA\0F[^RQY9H=SR!CWLG;VG@!NH-"L4@T*)5R7?+P%8$+M7<=^D^LPX;M >+MZS\`+3:E\C71?+99>E;-&3_F6^/SHY`?OP`LF&#@"D/!:%"1EA")$HDTN;9U >+M":UIY:'!W'`D`-4>G+V*_3]9P>SO_1'\S\H!QZ[U@P8.Y:]OT!/'P:58<_") >+M2^S;(((]\$9W!E[$(6;$U=:EUB]0`2E8V94Q%62KU!(RKV-#(0D*;[OO%8/_ >+MK9`PF.G>A2>T7V)*%N(`=18%,[<XY,5`-@,>0>+X'NPF2<-53.+P=(B,`OL0 >+M3U6'UX'L<31V$IS)$>2RB`#=`S)D)#1Y/B^E==XYMD9Q>C0K`NX$HW-QD>ST >+M_46/5,^OZ'3AS52JP>PBCI!R7E;4T6ISZ.AH(><&V'>WQ=T>0]=8MHZ9!R9* >+M1U;U6=N85#X9-"1$K9==V^G2OIOKD>$4W04<L(5AR)8(Q_P[Z\0'\]-,R,W[ >+M<:R&M:51+YO^O[,BG8GZJ9IW>*053G>>M6+CG*0IW5^37E)?3LRC=J+G&;`F >+MJ^UD(J$LW8/>0#-6]4J0F7W_&!OAQ(KP?E`[NA9)*VQ\<C0\T]8!.G;U<U]` >+MLU<$J,G+`#S1'>I_6\9K;WZ&KH,$IL!8VNO7Y;O=(@A1+2.G40G2*9T(>$'B >+M<?V=#:LM,DI/0]'B!JU(/"V0YDORW/?JCMTE(]UTDNH&C-JDEUYS[.'6X-:6 >+M_4ZW&=:4Q#H8?>DPT%X*$X1P;5@5"9V8!#2Q&*POH7O>]X2M--0/4%.W/R#A >+MWPEO<];D*0M@55PE%](#FI/(O$2Q<PAB?)Z-Y8A"]S/UV%A'(OUA8`3+-;=( >+M?Q/-!7-"WEK@1.`6L$W50=GMO/L?7@@6)84/XYR8EN/S"IV5V]]%6$G+OTX/ >+MWJ0A@25_F;M[1_2W>EFVW@SNW"V)8^V(N`GA>[!7YF,W*MAJAX?'GHBX^&&6 >+MU$F=26#-2/:8=HL%]5K/30HRAZC1P1U;K;.&TLVR,93-?H<`"OF9>ZX7EL]X >+MI:/,4"7.%H-LOY[>_XOV:<>"L,.-C,;_0"I)XF32&4TIBE..)P-A".C6>%1. >+MUW^O438M(_V-CNUA9I`3MSWE[T]"21U_*5*53M:-U[[.=*OA-]<.J3/=;*D: >+M_ZJ.S=7A04F@<AN!4(+"_'VM*K9]#!;F9G@ZOS_P%_MSL*R3/V:VSG._"LR> >+MGX>?<X34YD>BX3B:S/$P\$1BH\M^--,$:Q[\+8<3XK;'K.!7F/'*R-&QM+D[ >+M-.D9A91L7ADH>!_`B`++4"C5VZ"#32W(EJ/T:QR%LFSGFZ2[WIX)].<*)PU7 >+MA/5QJC[SH3(;%RUSO8.0?[BTS<`CH]?:3S\().O$=3GVJWU`(:[+_6S)30^K >+M+IV=.WA2T]-,MZG)F)3#^.GT5H@T2[B(7D<9_*:9?QR+?OA0M0</A)<U%?!X >+M$[?S7/"_PGGT8&;$TC*^ZI+_O.)/`M74_AE*AM$DLC-61_@-.0\N&"S)32O> >+M'$2-RX%.BP$*/1-2$3#)/6]:]'FU'[)Y%Q)@'V"B8TZTJD.B#,Y)DC!)\>1P >+M:P,-(1Q3^CYNW<_6O;@K>1>X,G=L\7VG?&XDU##ZL;(82032OI9`X[C.O+^8 >+MW1MCS/&B]JVOB4.>X$BH<#"RCD12#"-<B@1_/A;[*8.MB.'"4Q;(#AS"TBP8 >+MZN?8[WDJJ;NAA:KWS=\UKT"L-M*2'BJZP5W4S4QZSC%K+D&JYH7$B&EZ=ZV) >+MFJ]&YVH7""^V*KI>-*:]*KQ!VXNCYG0*VQW]97H.?QN(Z-5"+/59J2>_E#A= >+M3()D=H13*:1LVV*W51^9X]?$N275CE,'<0M)GXAPT07'AAQGQE6C2Q-I$6%= >+MIVRFHQ$^`L'_P0MNKK0!$8<'6F=-,4"@@F<AH4R3&W47*8%U(E%4FN"$-JN4 >+M'MWXW[]A?RM?N&KS<[]SMY=6Q4L;.($WLCD/PW1!>;FQ&P+Q407#OA$WASWF >+MB0@TQ.Q7,["DN\-#6`=GB%[B8&3D-/G,#G.N>[CV>%\0-,VXO*;]9WJ(2X%* >+M]AGW/R\$+7GF,X)25+^`5N!Q&H6?Y5Z1Z$`GDIE]MR>RL#6_DW^X/'U<7U3' >+M8NNEJ^L4M*1`,PMTGD*#[-FBK(3H$[<\=B_81.G8E:I7"HH7-3`O>-3IM5D3 >+MPG_==$+&4(SG1`XO,7<$0=!Z(9X?/8?R\4VS#5\QI3UMGFY'=A^6+6J_4+/M >+MJ+-KX!5TR0?*5%'#@7#0X(H08*JZHZ-T!+^+Q,PFV]E75EQGS@M),Q+[I,SO >+M#=>@U$2:!2"._Y<N:OG?JJV1-O5W[!TH<<Y3&463^G0+H"ZA0-3KZ!B>++=H >+MVO*O8/8#"O@R\Z^Z)6?#_2<5%=+Z6K8EEMNI[1)U8>8!NFXV.^.VQ.6#C'9X >+MM,2D$S[GD*7EYXV"8^WUWB)!JKT@A!2B"2;2!1#*XH^Y3"'>2*Z)P(_T)5<? >+MMO,\G@!5Q):)T"CXD[0\*Z]`A`6^>!S_['LI`"39;YWE3CVBFQ<^0.)N,5XY >+M_VM$?6&,F0?:>F\*4Z)2Q(9P!`S#I*J&<JT#`(V)TKK#4+?R'T.4MA/1`2<I >+M05HRY!^QE=97Z$CWHB,]_HKQBS>*79FEG^/KJA2''`>T6"ATON?I7YJJ+3M" >+MNFXS&:7O=RNIM9@/&@FXKE$5G_R+O$:3Z=F1^ALHX!.&*$:+N/-:;M751NZ! >+M;X;I?=;J`J8IN;H`\*YE>;![H9&,:6I_11#8,0W`9BVYC!D6$H*<F[$7Q+-2 >+M@0RVY*[&A?.CWIPQ$67^N:/Z-`"IT1V5,;E;T@*I:GF($0D8H`P4*=G01'Q) >+MWV/'A,]BN\K.F0?W5&&\)-E<V*%MI6WWB(W'(9#Z]YAB"6RK\ZYVJ[I-:RS% >+MS<Q7?>8/"T<W]_LV2O:%7[[]Z"N%#J,ZY%.7@EJATO/3*FG]8"=4P!^A!3.7 >+M8&4\63T\TBT)UY@6B2O1I<L.(:%(I"[E(%[>.];<X)X6[RZ&*W,E]?C]$+ZX >+MJ,E(-\6#)&WQFXW_!$ST=NLZ.ULYB+DE4:=2)!Y55($862F,B],Q^;NAO@;C >+M^64^VH^W(#Z-W\WF\Q[X=33T/"OY_[3WCD^6-%^T\&E[&M/6G+9M6].V;=NV >+M;=NVW=.<MFU,3]L^=Y[?&_%^N__!K4\5&14[(RHR=ZVU:Z]</@];U/*L*6## >+M4?D?YMW\O[Y?8A`18:ZE<RW"PPP'*DN:?5==VRK8%DR`>?JYNB@-7JPG6PR[ >+M5F'5(WR2&U(;>&.>NYG^7R-)W!`CBC1Y;0?P$M3?V3!';MG45DZ''N<@B%^I >+M0''K<7&+!7]$%?I@*:68/NL1"SZ*RGC,A=ABD@;5,`&I@8!%BN+7*("333YH >+M8C*O'X%V]0N/<YI66P`]`CHZQ[:%[#B&N9MN"5[\'8H=%&G[,4SD,@J10[T# >+MJNF,SO62[N#CA,UAL`"9KTHS,28_K4;:;)0L:=!'1<-E3`4,O73WO)U:2STC >+M1!U.(J)8#41B;Z^"1ZB=N8(M5<6\)$`&V[BFOOPRAET!DT(>NSS^\IODF-T1 >+M^_&@EN;S[+9EB^NX^]NX">J^6Y(5!W&63X93(:K9[M`(;>*;#3]T/QFO.QG! >+MQU9UH2=64)_JB#3_X>!PRW$,HV+U3X:[A'L[JE_QEKU3"4FU-EAZYWN;7UNR >+MV"UL^OZ*;DX2=-#>WYLBEBG^V(K8R"6C-29+UXR"P]&B!1UH^)[=>Z)=]O_' >+M;:+^(?`84Z[0T(703Y#]EHAT,KM?C9E-_;:>-RP7I(PDK6;\?(R?UE'NAFRQ >+MRCH_(?>%`;V)R-P!CKU`4P;%V)FUW6SC>X4[_&G;S\_":IB/6`=K\GQ/XN_. >+M(0<L'KX7V?WZR+V[;0W;;K)FM&Y9Z)^Z"W^(;Q]Z1?E$A`:8_P#0?<7[P#L\ >+M/][@9B$=B)`@39`T`;PQW;]TU)U="!,!I`B\?*@1587:<=]\?`2[`BK`@+'Y >+ME(=6<R+J.H0LKAET]M1_"+`.'/A3<F"DM+&^5QT.$.-:8&.N[\==Q=VGYN3= >+MTRA-"NPJ%AK9"3MG\6++^+JZ4]*BF$A>P=<@G8F?9?_4.J!CR'8/T;@CMFGN >+ML:S\?3?5>[%INJ7C%3W('3O:`\T9>=M$/%<>(7T<4[/XVX)4C6U/4<UN4KW3 >+M?8DB$YOH+?85.J!FC%/,2URM\DV`+5'@_Z?BPOAK")^@>ION9@C:(\6IN.&K >+MA[6\#@?#H"2-M"/&#QAAOV/GS3WQDE8((*>01Z&@AY):G/:#GFS9@@SS7$Y, >+MH$GQ8ISHF9/Y;EL]XELZ*.C4L2/6_=9V^^SK->.'OC7Z!'?%466)I6&`SSL) >+M/?T\<\GM:`1Q+^S-,MTN_X&FVRD"Z5_S(%3*/"X16]R7C2$R7B4X(._SKZ(` >+MTS8#YC#EBFV*:</X^_'96R`T3(4N_N,&ZU]X8@P]R5L_3U9$H,.8BT%!O4@, >+MTAST8.&1NF.2:!6[8UG4MLO/9H4U59_D2`6_/V<VKXE0^#\M(E9W)`,&]=MT >+M=DV."4C3<Y]K]\WZYM5#6O#CHDBG+G)5V7'GMO5NH&G+,20P-'FO'0"P'EN% >+MY?(_OS>J?<ZD>T:6';5^0:<,JV;2N%R!(=9`75B8I5*.LH(P@`+_0#A=-](_ >+M$-X4!+D60/`$RN^0GF?7.U@5G11G+N![1`&N:B1::+$^L@?AL]/>R9MS'*VQ >+M1I`':12@8=N[%3/C$';JT2UI7[5("#'+M+3:B*)?4LM#-JPED09O7E)84V?7 >+M6>=<KXXY]8^:[KK]NA/.K.8@F>7(W,OC]P^%+$?-J(?B!H:U86O:[S:E6Y"= >+M/0L/@V$S'2T@$E&+HV./,59=OVIW]Z,D#H"G7$2&8<XG&>GRGW;X_!9%AIZF >+MQK7J@>*EN8RM8**TQ4;E%4%Y'_=+11QGJJ2`;7,XG^$$'H,O,Y,RHW\-OH'_ >+M-))&^Q5O^C'\.$N)IN4]"^G%*?!Y$%_5MPQ?WKVE<A-F''O,FRA.SU#N2%"\ >+MY6"G,BO.UQN_.Z/=(NZJ&G">;L\L!Z<IX_V#])3_J,4ETI@O9=PFI>HEU@-L >+MGF(7FYOQKC\/.`QU;!O]1P",LSMM&]80".WITI[Z!M+78H>#J[R$LV@_'B(^ >+M!E>B-V%FV'3>#LZI?,JM,4[XJ/./#M:UX@!_M<"Y%"%2G5%&<O[^$)!#7<SX >+M#%:8$9>_"G?O`2R'A>*2>:(2$)ZD,JM)4F?@]U;RB[/OR#`D??[Q(R$E_.68 >+M1KCF)W8W>EZ._?.UQ@K4)KWS;.)6'*&4LD7KM6R5;U.<P3:L)HH25XB*W:"L >+M_*'DCWRF,>T*)@_L`A&5]0W%F1:4ZL<_H@\7F9<</X+HB'\T8DTR"K-1!G_' >+MNQE9XNZ%-==1C7Z..:`V$<=GX*MW(+.AS-+(^T@P.#[2S4B,:6IL5L0"IWK; >+MEVI#^`R>]UQK$RC.*@>YJ+]%SY_C`+T+6V6S,N-0)/(H][N2W&L35R':V=A9 >+M,X'POLE1RC=E&GCN2<\.)T(UQ#?4^^]/]S3_E8<AB&!'`(Y\+Z!=*U$#MPV< >+M>5]\=LWO!Q,9*">Z&_F1AZ3CV>-1'(CRJ2KE9<@<)Y%$:)[@N(H745-NN9`K >+M(MA.=V4A=-C2D$R%]`85[R;00?:L;F=V%UY&[C-J5C0)3'/<C65RGV"%W:,F >+M101$UD*YRXPG/:0M)O&FIK4`7OXB+C-L(@&O51<I:Y1I>&G9(6]%4L%F5CC; >+M2?1HKW==OO>RRJ6VFF9<"7HKRM3F!!B@WD@L3E),1?+*A-55=;><9]>RG20= >+M&(_TT+?XZ[DU)1(R<N$5)=JOXF3%T"/T$2KF0*.6[`LCM(W5\P9##'XSBAI, >+M;7C/\_6`2&7X&:T#W$=>'4</4#KE'9(I^I$Q-'M1A`X:@F/,+2J,YJG*Z6T< >+M"78G*TE6ODF"Y3X:A"S%1W2.E<43IG<R:C>.WXO1=(Q3M3;((^_?]G;]3Q&@ >+M,,C]"1)PF]'B_O9FVD0F_;0W)>.C&4B([ZX/,;*WF'!V,KAHE[2U?+FAZXB" >+MG*#X>25W.,-&2?X<*6F'S&CX`]\%Q=F+;>U;G+5#<^X_;$8GZ.\]KUP=L;.N >+M]@D&P'=:9EHG_/G)\FB".ZL*.#=>B:GAY"TY7E/2P&?0@63RZ$4I?"]1!<(O >+M;11*,!>S)?^6TY+N-Z<L<];$<.=]:;WR"2&(^HL_+(X;J&.TC:[%JG!3$C,M >+M4_.M((J\&7`F+BB'.LB?YY&*+EV!"T;*'TB2/C5]9?'7+#]T4:54=1T%!NL6 >+M6X%="#=\HIP-*)=$WF*UQR<T7T1+@8$0JL97@:AK\K57DWPM\JA_,;W)VN=; >+M[U0<5OL8]XK04:<$\N$)Z#6T'I%,N&E^['`P(M=>F5RJKQ5[/[E6?-,&+/Q_ >+MYI.*\+"%GZ#:F"23UF1A+@?<=`(AK452.9M^\P0[V36880[=YF4UK&Z:A!C, >+M6A>"N?*!&[*CU*Z`0;'QMX'V,,#;4'Z#9'%[6-5N!@,3Q_%"(=*[@P7?>8"C >+MO#8D^8^&;*$AZ*OBFETB<-$]LQ&Y5PU1:[R4,OLZ*'UN"M:E`)A$L8N1-M^A >+MP'0,I146YI^?7;H_^<YS%HJ>`2G=-HN*TM5-?F:5FA*%Q]TV?G0=8:B$0E>, >+MV(E&JM#]YDO"94AQ\%)V#Y#GD(TUQ=H>3K&1HKRQ=LF#^VW?5M"0B0P)R<O; >+MY4H<3=(BH9<EU,$'];21//LV\3P@(7>NAQR(RM)S@PMS\XM[Q8;YAG&\W*Q_ >+M^CKPDH/YS:+]_3:U9VTE!=`GQDLK^^%8+;##NC5'==/$=NN/^K?&://)66#U >+M]?3U/[4P&1-BD*##PM)[?ELI/[PD"HNLOU-@##>N@:9;??2#\A@6<14*L;C* >+MQM6@G`<N`"JV&\H,>=O-M!K)8NHXT*KIP(?_FW4E56#"M;.U/'6"M%0FRVJN >+MP)T:?#<\;W0E$N@/U#8@5%3?Y]G$+%=4M\0VZ(=#",ID74K+#VQ,1]-#[J!B >+ML$M/$CTT52L523H6KBGI()SE,?[?3B'VO^)%6_H0NW^M\?<)O@\E+/XX&HYK >+MQC$SD]/DDQ0LI%E%GH;"L15;UE14J91:1$FYT9P*6(8AT1"/X.*9VMOHM@M* >+M3BI'@.TG&6_ZSLLA;:`X%E*MVR531/9=G/#D&!V?QU&PRSW#X9:)R^/H()GR >+M3W-2!V?BSFF6SW]RV%24,$.-9*6SQ-#05!!(`'JC3*KA@A<_CA!">>RDSGQ5 >+MR>2/1[$#@OX#AY4F_].]>2,600J.RVFV%D-12HB6*=3=)$R76=GW,?G7X"@' >+MLPPAW^`&2>;FW5J$G1E6:#I42&#X=PB4(5%<:7F47YY[2:F.H::^R"%1_$QK >+MH03)6TN9@@&;^B?*&5N9#:&>2#-U#>0#^I##<VVH7B7TO;R^70)VE2<M[>9- >+MG0V_S@(_D4<BD%*U?*+"Q;OE?F'"&;+RLL0V363\F:^*6>'!,YI">IIRR*A_ >+M:;I37^<39U98&'*3&HF?F+)F7=41:_\%I70CP8^0+XN`X9_X#H.H?HT]?\!G >+MM7N1:VK\Z/N=H;JL);Y6,*;VF@J.F8N`:C<=BJ9@NN)R2N!_.W"&#,80&[HH >+M,AD3;JWI&'(+I!<A)K8Q8F+S++)<XQ589S66?]MC%N`C8-E."WKF=^W;!_3# >+MX+&*&[+8:;[+)A<YZR79//FU#VXSSMS&)-`21/>?X-OQ_N(I9UPB=#$Q1D]: >+MNM@+Y\'_/G3+V'3GM"_(##9$!3]?5T'!8)RF]YZH4JT=5$?]].E1*>OQ>1(! >+MQ-F)S*^7",Q*2;\31EU)\HW=I5`%@!=!-K[6QV=.$04'7,5AA@KQVDC9*G8/ >+M./BBL[;!8URBZ4NT(+PDF6PA]AO6NX]6V:7S#1V)6BCO\G6B,7ZV6VR\E0P) >+MJM<,D#1]#>-)/K9P&W\BMUG\L840D3UX%4*_VY^Q[=.14(LX.S:A_X-D:7B5 >+M4YJS@_X%^6\9.?Y;1A8Y:JD:&IF=8,\"&!#"Z.5,G@SD4F38*+V"RFQQQN^^ >+M?=#CGUU7*RJH98Z"6:-V)"@P.RVNG6_R^?Q.]3SKU"R<2DXO,3W[ZP=%<)^B >+MY\Q?XC88,69IQI)3L@^>"+CJE-C0X[!P':1G"K(NP@[U)9%X4^/9*%>$+4YP >+M'$(+8-6HSVF/>37HE]GXHH^)#SY<C6B&[^I-YH%="FY$?(*2;]&B4J%0X;AZ >+M?.^B'@C!P6H".,7!S'C2#G7J1`!Z;7%R!R8.:0@8+N'YQ'L+>$L2Q)_<:D0N >+M*&0H@TERCJ6T9V7\72UYKR8-(0GZM!!9/7$7?"OW>&8'[+"=,XR43+C![NW" >+M]^A$54,]EH?%@2M@K8&,8:!TBA4KQ)ND+'.:3(YN-\QYG&48Q=8+"E4OV:_[ >+MGG^O32L)!=J04N'/2K0G6OW19+8'S/7^J"/T*^2$]$!;G)V.B\&RK(A(TO.K >+MER!A>\.%_N$UR_1WX,E'A$])LN35\X@M:,MO8F)3S6OT`9UFP:@NX^O)*#K8 >+M0(1-R"&"L`XJB?VR'/^:+%6!;Y;84WS@/B`-%S@O)D7+OYG/'5QOEEE>H5$? >+M<C*/#:MVJT+Y#^\&5>G,J'/G?9/<UK&;T_*U+1PN^?(YH[DU[?=E!85-9QAF >+MGH6)IRHDI](,_ZW;`QI<K\@8BWS*Z9)U"UK4)5>7>)?%"9?86`AM!&4J[9>) >+M_50G>-R'^=W[51>O!B@F$U^.ZU*BS3,5#+)NQER;$W4NN3SBGG2V(S2H^,W" >+M@N82^K*HC@%*>`GJXQ7QV4#@Z_*C%6+$DR?TQ@X=-9ELSEC+0RF*9/IR%=3[ >+MAR?(N>!'&-&G10%PE?&C4ISH,!=BTKI0F=0OFU*R5B-%6!$$2HI.-J>;H%ZD >+MA-WKL9/)U5RZ37>YUE[4\I-D90Z.:ZNOJ^ESOWTSMLJQ8#L4G+R?Y0-?:DJX >+MBN^(A/E<EE^ZFXP`KU(`B?([2RO*DEQZ?=9AO+2G0B6DU5`P^.;6[0$`00:3 >+M,MBI9TWFT;WH=.(I8/Z`%-H\$.+H3T\D-EZA$T4N/>$?DZ[M^M3'3;,6G?>X >+MFO.,O]SY9<(&0QV_`Y4R3[%@B9-#Q^C\N>F,P#35:B"S2:L'R2=W8D;=,77N >+M=-KH_4ML"(CO6<.R]@GL^D!)H2GK8&:AW]9PYR]5[^*#;N6P-!^8>ZE*N2U2 >+M#ULW(W`+4;7-`B(YZDU0,/VUGBB9\SEJL=.V=POVGQW"=1//N((#,)Q+`+<Z >+M,R>2Y01EQ*,50PI+G*)L_*/^4./2_P!&VR]#%&B*&?151XYO3R#_`WZ;RZCF >+M9>FBY:>]48.4H)=!3#:&+%[YG2;@@=)M8JI_ADLSM1Y16BA]*J2#U#M-7_JK >+M5H<W.LR-)(Q_?/AI`V6?E(?5-A:]A_@QK%*=OC9\<?UA`C[%VIB[#:R71IR` >+MC>K8B!HD%62>V+'>PHUP"Z0P$;>R>2\*5<,G[+8CYI.HJ2]L\ES&H&@<N7O3 >+MOHO;[?O"V.VYZN&QRFT3J@I5AJP+A=H!A!1T<]'R@!`,7WMN&UU$@T+IO`Z4 >+M:(")\QUC<3A%O9V@7VA2W!CR%M:4.RZ0P9J(ECYZ8C`Y9D.F\A?8[U%7K6CM >+M3+H8]^R0%^KAJ_Z=_N-J+<W0K*"FG0_CJIPA:)97W3:@=]EXE*"M9$W0=&SI >+M7:-E#\&Y'FH"?,34\=Z(%J^'^'6GX+S'/2/BH@3XW3^ZH+ZH3(0(Z:[]$\(H >+M!D9>[Q_8G4XOQZ9,65FW^X%2/#HB$N]0D&EJ+F#F=P),_RZ80V715ZHUH:T+ >+M4T5:'X>(<H^EGFP_VYBB_-N:.!(G-E>/(WPQY%F#U48WW!XW0<Z\66MQ1"F' >+M<KJ6^J,KV2T`2Y072;+''#+16FL5%9$4")SV<<Y-*L-68E*4=Y?>[$[`C$J& >+M44Z?]\(J_4O+PL<":'E"YG]ZMB4DY/'S\Z3VJCB/M;#"-7ULJKA+[+E48T4Z >+M7!A/YB`P8$HXY4EX()00/(A^LLE%6+6=ZEE(H@@P+DH0L!CM#J9M_.N6^D:! >+M=ME6]F:C^S-I4#69>JX)<TX2H9\Z+]R%DZI1(J"@J,+_SM*$OUX\?Q.COX;M >+MP])B^6*XY[5")GGFMP;=KK+K"#N&E!*0<0,V$5VYM[E=Q+/P9V)5-7T?$PEL >+MH\3:GPHH25%/<<SJNY#H'YE#&/X)4\*'FR#`'=5_G&P3B`BY*A]3+3D-\C>F >+M8;/20L=?S&W4'2]46B8FHM=AC%D?N_@=#WCMN6C,_ML"^>E18E;(07`H@`TF >+M8K/6LIT`>M&?A(H5&]X5<??M[L$$W2HE$0O85)3(M5KP[Q?TC>E>7R"DS&?F >+MO/D"=^=MH)D%</WTJG-G"VNNG:JC0S!\\H19B1-K<8G37KGJJ,9VT'O4&\(Q >+M@!F5E-`0MD+7B@Z"<,SY:-B]<03VQC13]1\REA)MKO5;XF-7;!XU$DOI'.ND >+MS;X+]Z03E`HV*UA9L`4D@I-E^X)0C,*+%63RC_2RJ\T7WU",NH?3\%0%63:J >+M:WX[;10QLPR*1H:/"9OXAW@2D-,7RD*G2E/*=>F9O,IG[U'&<`-6'ESP0H\S >+MQIUE-EK/<RYC)^RKDBSE]RV/X-)&%,[QB2R:*2`:>H*,W#235I7KUR*,<C7> >+M.#AT.7Z/Z'#,^ZBDM3\VKCV$'_Z7"VS&A+"A3QS0%.)!H`7^%)1Z<S0EK<J% >+M.DRJ`S@4X(]&/I9^<!DP&7D,\K@P,(R,WRS'A#LO6C!2FJZ7P3:OV1+@N,@A >+M,"+(C,+ELPLT-4&RS>GD7:Y0Y<HWE5PHZO,<5^7C(ZPWF-EBQ5I73;;(8HXK >+MPO%OZ7HAKWZ!3BI%&O)-)O12B\3+Z@!D]S,?%Z1DG=_;PLZ0?-PSQGN=HLC4 >+MFENH.9*8:Z[@4GBU?DI/Q>5@0>=HT3CCD_F9E[1FO#*K&=77=L'$>#3LX_UT >+M-9FF`NY_D'A/UI6KM\8<5*P=X#ICN(B_S?6A;<IB9(D62:%,8]VW9O8(?M,Q >+MW(/3_H=&B;-##7$CN#\/%48[/0HNS\1C^J*NH=903'Y[QMKU(KI6%GZ?\([I >+M0QEG.ZEZ:P-E0`^UR[-&L>EM4V-%S]$HT_D(1$5]\[`K9=49(_X\_5];Y)KK >+M/WB$1'=Y./`%4BZ_%3;G@7+U2J>X9'7$(ZY<Y&P$]2N>/7#2)&)7O%(7E!`) >+MK9DMBC$35,IG)_AZO;$X\[*<BS#*.GA/3@I"$A*'!Y-._0J6!-+%5>@7VTO` >+M8E-*O527H?)H>3^M[@02OW+FBQ97M(DTT)++.W1H?5963F85EMM>YO)[%_+2 >+M;TX,F=RR1,32FT-T;2XLFNS[1M1TT=!W\&+S%1>4VK`.AQTE;I<8*GHJF)BJ >+MU2%I^6IXQB%73I]!?@M-E\[A%E0QOJ6^[V)M;G9^^&1D/F[Q'',N.L#\,JUJ >+M=<B&/%,'Y*5(@M_5\^P\#XHJ:N+R![)[@]9K;RQ^9(?DOY^_#9D[:-`K9>\W >+M2K(U+PRRDT3<I^$:5-=&I"Z08H]G,N#Q/YHE:WW.]2D]6YT91XYU0).G^W4; >+MW#+/$*>%RT(0FX\`I88@GMNQ/8V".LV>MOI/77;^*QU.(04SHN"LKDF]@T"9 >+MTMFX"JTTL!Y>?V18DAWI.T=L2#7?7U@$L;>GOC:^8<(H//CQI+.*;;.RADN) >+M8H5)[R'&3"J7IZ_/%,>7UH2GO%"%KOM'L'FL//Y-)!`E\47B6(X3)?6^3X6, >+M'ISEKP]7A0TX*L1><^:S#CG!EQ_=,TB2+V]9ATO*8`\=KR@3ZW</K>W/F;T: >+MAKI2QC/'BE6H6=1'I19.CWF"Y3+[T4ZD')6LN$Z8NHJV=+]Z&Y'<G+.D)G3N >+MX3[:S+YB#R)4+YMB3''F`FH+5&//'P\1F>G0"*O4)HN`!9H_F]6J-8$<56*[ >+M"[\(]HM^SC9DI'1'(MR+E!UO,=!%Z)`ZGD=C=K]].IX,C_)]TP#K1DI\?D"U >+M6WDGW(P%@@7@[^H*,9KFHB.+X=9%MMY6F0!$<\'VI`<YU+[9S/)Q%W_FR?9] >+M+_L8!O7X_<.EO]V^AP52GM/)%:I<@OS-?J#`CU[EX.#!D);\A$6*'Y=RX)W2 >+M7?"WAA);#A-#(+F<:^D48KR%&(T[][0,9K\DC.&T5M]1N*M@((<,B6"SW8F( >+M+/6*MM\K18E?GU%-Q(&J>[FVY6CLF5J3[,*P]BX*5<I'R3`KNY">)YZH(#76 >+MPJ[-N_N;E7O$7Z=7%&SE>DLV)Q*4ZMK+;*FN8;LW;*'7%T7J5]CJN]BR'$?% >+M,CQ$Y#J2G_OW82NY"!P#3#V<\1)F@*SX15B&T;B1P[EW.GS[<P_&0E$B0G:9 >+M0N@;Z<9Z2(W!_N\"FG9:I5$"I?'\^7H*+J;CI8@FJ0-4N[X/N]&^WN],T$H\ >+MO/?'^NV=,L,R*V=(Q",YX39!6)9I+7>4V0=_#[4/QG)-BAV22C*V:C9I":>Y >+MMO&_/86&$'"K\QCK:B;&B%^B-^3'9;?^]M;N.<>W7%OH;Y?^CR9IN:&'&1H< >+MEB!3&Y!]@6C4O0M(R7A8['YV$CE&=!14H:T9CQUFQH./9,7B0HP$`-\O!TM& >+MD_Q[BZ#@W87Y,-5IK4>RJ:MU,BGI8]MX:9\E"M`I*?(@"382D$XU)!\32IU= >+MZ4C9+UBG=?S(#&ZO;.-DOBUY3KJ0G;VG@4)X>W920YWP<UR7#E\_(PF#;B,) >+M2_)F/+Q3-`]HXBJU39H38KLB/.AHXO%;/S5SQAKN',C<6VFK:M?.M,NLX679 >+M+J`MIF-2=CKAT2#SI(9X+R;#=DK,S=_5D&-.,%WQ@9X&-T82V*0_S%)(X,HE >+MGHZD)`71>7Z6_1P+25B,$3Y*LND:9=2YF0)P#6D`FI,^SE>0)JP6^;9"2JP^ >+MCU:H\9]"SNT6:_L0SIA(*+&!`O>UW0?)$4-W"Q2-<J!GSPOK_C/?B8GPD5CH >+M187H.$".>XJ,?MH"W<5F2^_?2"DP:_IWTD[M=WK!K_\J&FYX(84:PI+0*J&? >+M('VWY*ZD8^9-J3]M?3)9U*+Z%2IHIUL^<2#HA,&GO2DJ2:,N)3!NP$*3R]'P >+MK[PP_#@K>[M#D<M3)/^CZ0Z/4EQTW8QQN+]MCY*D<.9.NCX#3'V:%TI,MWNJ >+M1A#;+D86Y^-?>7^)8+;)"O692Y.YMDHV/"I_8EVG'RS">$\AF9^84;?#B![< >+MGQPVA;;4$#'4%\H0J?S\+*FF[OZ)K3`*!,.S!=L8,/V3KB*G(+0'!BC=$D51 >+M#54$%Z_<75!Y&MWP^C-65[OJ+->+0I[P`Y/4G:/&I[B`D^_OVS+E@9*OL7#Z >+MJVL2#9_?U.$VU,XMKZ9>GA7"!0S18J#8-MR*,7>\F9X$28",6$MZC)BTTZX6 >+MA4&O?%O;4Z:\NG]CVW0QN+RUX3*T]9XP5*#!$X4SO+E&K"I`TU#(8WX:39#; >+M.[NXX`K@2?R+\+UNBNE!=@8B//7VS`W?HN-0Y/QWP#6RVZX\UE07J-&S_S_S >+M)RV2D$`#HQBI^D=.R@<0:)!?I_!'%C8/BU0=X4,A,@:DONA<S/KZ^O;K=T$[ >+MVZ(F+T>ET+]_-FDGMB9'MV;S2]E>$E[HK]>EML4'DE<N%I,`2=.M&G@M:#2, >+M%W=PYF$1Y.ENX[@*MZ[332`T2?Y8?=MC+I%%\@%QM#Y9HG:-NO>76ZV/MS;9 >+MF*EC=_[.@V#I<JZC5ZZR5[*2Q5]89;R64XSLS8I@W,C48Y*00LL_!J3.Z,;1 >+M9>N.@JM3>W6;W,^XOA0=]A#ICD^ZKPPIX,*?]A8=?U\\_JUSC#C<]Z/^DWK1 >+MS&*AB@S+`]O(/ZK$+%))99\]EGW[#L!DLUOC0M';3WZQP)"#`A#GP`1O0ZS" >+M>I_M$LJTRE@HT[#I5'-Q?/*C;>,Z[UZY+>:I>,HDQ1,$9_9C%WE&-7,)Z+B@ >+MX4/">8Z3>$@^4)@V0Z*T7:]!"'XK#HN+/[T:;*B!""'=V12SED_M_F@G[CG/ >+M6M/5OO='USEXP0QHL5ZWQ88,FMH(:,0MCZSZ`#$\+8A""[N[-5JK<JE8D9;D >+MW#7PO6<8A@N`08XB&$#_[JF]%K?UQB\_[)[!W7C0GK\@\A4%VT6W3LON2@/N >+M89NN._"?2/*I"G1O-=$L6HX3_51#28C1>909X#&_7X62+$B:"M]FZO^6Z.O* >+MB7P$5QPZ9OX8G\>G(B@JE3IZYP9W_)"X<IPUZ90]Z?.D9.>(,+BEL^ZS9-`A >+MW)@)!:QAV'><TO\I@4P.,CM"U:()&^2S;;$N=R7S"3??BRS*5GT6I()7C/;> >+M6T,_-";HK\8'"@D&W/@%!?#W:/I%/'C0*F))`X@S18S@TH[,=WU:Z\79T*#P >+M)^9=P#B/0/F#.FQ!ZK<)>^O6,+64OCHQPFH77#LU+F]Y1"8X&\@BW-\Z,W'C >+M8-(Q\`\I`2EZ]+)G7)A>\NJ7/`#$`/#/<<8'Z^,W5P/;HK>V;/V:$R'(-ML7 >+M`8!A:W@5CVO-[Q\$X\%/0ZS[^?7V8!;=;5O0AD"+F-C"PB@MJN=^DPUR:#>> >+M9G;HXVJ!8_#Q/=_9WU^=T:;B2I;%Q`L9]`S?!DJ,:CEF4TZ]D211$X<MBD!! >+M@8A;`Z1MTG-/<+B-8Y\.N8S>+_PP-`7>8E[`X3VGF&JZ.5Z\2%Y#4G>6)+D\ >+MO#X!R]WS>]V#NST_5.K:=Z30CID?AV]^TJ]>V6FOSEL6^!7:"MD=35Y9ST2J >+M\]Q$K+I1%Z9%/BA&!^G.KX6Y5+E[VZG<TF'UQ,(6#S?FO@F`U=PMD]'!3)CP >+MH/D3PD;=$.A23AS):"`G/T\(TNPR1@+)(AU&3HKMEBL<Y0(*5YK0!UK*XD9% >+M;ZT.CH]$[D&(9.#[GX6:E<9SA@@7DID)`06):&CP[5P=,OT+'OAN[GR@F=4J >+M?%W(-H22L<'@0HOAD0<>A7NFF>BW$A7&!"Y=NF6C#55)C59;ZZ3?3E7-<K`W >+MN1)Z\U/=`SN#--R,I@PC3?Z^?O\R^,\DO####$J&I/222]#N^FU,;2F@E=.6 >+M(==RIG.-&3((X<4\(&5^G@?*L_R\Q*NO"ADSHYA1A!<\Q5[X)IE`<FB?CV=> >+M>?;7D3P2=DOXRMF*?,Z85'8^4_FZM,XS5UQU[$QYUP,^$#6(E%IRR!#8?YCP >+M;=C&?P&!ZBR,QM`U5T1^LUL`+.$OG(/-#WKZ>"XPSO69(CO^!3O'L@YR[J'@ >+M1I0-SK9R]8"(L7[`Z$?D*7?1<8=]&8LT9=L:A+3S7I[CS?P$>;08)]B3P:]T >+M+]D?G2S6U?[]C)*;B#+;Q*WITAJJ];&Q^*G3ZWI$S+I\>50R0F?]3DA`VJ8P >+M`DQ<]^B.;4%W`+X\(XQR)SQB<5<Q$FJIEOX?"(W:]K^_@EJ6RI2N;WIGNP*Z >+M71;E:LQ.MZ]/&H7M:^RI1Y]+`X:#5^"`O6$H"+JNUBJO<E>ETKLNL[,HU>\? >+M975"#SPVT-BVL;_JXR;]XXN>=__KMYF/&P8BD@AJ._9:KGZ"_'<@T6>^S;EU >+ME4MYU[XI):+PR%ZTETB,[:V;;D^TO$LXEBK<)GAC,X'#2^;=N@RJ*ZIYB:O> >+MY'EU5YN_JPZ62U/BR">X46,$B008OT#.)8`7/)LMMLP`5\F#/=D%8;[NM4E" >+M2USWJ<SQ?;=R6Q:7>F&W2CSA^&L%I#_,@GC!7\?Z($6_RSI):EOD'8HW3#)1 >+M:E,\"JH7>W\)EEPH--KR`Q<\*,BHX1:'M&Q,&,&45"??"\(LH`R#MM#UF,:G >+M+9A6O`1IE:>.!1GP1;M4]'YL&CHQ"6&K2\+3O/Y96Y#%P?\6VJ8TE[AGX63T >+M!TP^SW$Q$4\EKJA6Q^GC8$W&+HJ9^G2]=7Q#TM.^]F>^.^[JTXYNZ62E%DN9 >+M]6,\UXXQQ_<1;0VZ*T.6YWI9&MAN]>\&J>E"==6X6*E]=%[?*%:P2G/\F>B0 >+ME%0Q8@2DNK*`J3Z6=CV4,5%<[/[\R43^X`UNKK+PP8P*/[7^5AZ"0(4S<^1S >+MFTC`';Y7`_.,O@IT!"GV']GQR+#>.=$CBKXKU'J3EAY<V.NJK17G90-*3;6L >+M:I*!XM:.G;_%!WIV0FVV6#,;G)I*O)U3Q@&%_`B"$-<>WSF`\A9!'N&WS??% >+MD:+3^PI(\`D_;0S4:!@U@^,T8\B:!>+OH2\3&5UZ\V1/,N4H9_O,ZJ_%!=GA >+M^W:TV#FI4MP;9O14F"^QX?0Q[7<!O`E,OGD%5P$,'=,=6".04Y"<R#)R)="& >+M2SWXND:;`E+/'`3E+#7=Q<95EI2\0/2<M6]"<9!L:"14,3*R;1U";)="XQ&S >+M0+1\]\%N3:XUV/L'[K4:"?>O0?J*J0*$:?N0O9RVWTA!<W3YDV<3^[\DV#!R >+MUW]=%1NW]$!!1'(1,M;"SORIS<(%V<>ZM[`^E7'!R`^;SQ2^(:O:&X!J%\90 >+MV`N-TQG'E?N=/N$'-I;KV!&'!3<C<^7!O4'IM"D)HG&'VU1VBW8Q3&O(BYCP >+MH<2:W&+NS\9!#[[^OG"R5ZRR9O@2BZZY<`#3K6K%=0`Y7%UVQ^*[O(V.$1EJ >+MNTX,4E%2;E^]2!D*"Y-9T7BSO=4\V7!.SF_J@:A-+HS[*9MT;:?+@,7*)N)B >+MKF7"9<A\$6F:H)HTR%^BOZBD%3#>%0*$UX1A:="RN$O>^3>-CX?19S5=%L30 >+M+JNKU>.<`R>7'_.$1O8$K46FZ2;+-V35FNTDOP_&TE'B?B,2\?$K"#J";BAS >+MCL6CI8'E.J:0IM=RE?"9^>C/1LH]@"MM=?K2\6+5T^S.1C6XZ62&$X2)X"OB >+MCOZ^%(JA$>MK66MU]7ZEDJY^I#!W2>@3/<QOBN2TGKU`ZLF('Q]]7ZQ,=5RZ >+M"`7>[Q!OUKF_YZI-O!UYF^^<J]_:8J,,X1H:N$@=?33P"F"TE^?[H:6G4$\; >+M*5L:_V6]Y*<:,?OJF_4T)9+E+Y4D#R;)T[X<9HB-./6S)Z:M>_)=P*1PPB<B >+MYT]Z#AL-(G3WC6UTI&TNZ'H5@7GV/A[!J;NJWO.]8.I1>+&$G#6.O#T*K$V) >+M.?O!]#OF8RK1#:)T$?TJ;/N&1OT>&CD?O52)$6YPC=O^Y+DKEF\CXE-$O9KX >+M?#S)^ZDOA&4;DC'C+SX^%X.O3C((1!@3<*9!6G5U&.0$+BCQ+JG9YRI0L*CZ >+M>8"GFZ;O^;`X8<!30:NZ7F;^T/>*A9/6^3?*E!49+HS)]7.2\S"9+=I5BT\C >+MF]H0?)$1W!TW^^+MG`6KA]GKI2MINV'E'I'KU:#=F=[1[\LV0R]NGU9N'ZV, >+M5K#L*J7A&<O$X*X!*C1^C6K&W=VF-BZ4$.]BG`8YX;A%O.6"LX`?%P3Q(GKL >+M6E>:#!%7_I7LI>'BP1W>HL'S)KZX07T!%F1PRB->[4A&7AM%!*?U>?O+Z%_8 >+MI-@TQPK:7,OB>JM@46?I%M=B&P;4+G?]B9O_,_L@@#'$EA1N-UWG`8&B?2LJ >+M@9&K+(TB7"K>&G$J55M)3&UCA/Z0XTVT,"*GUYH*E2^9;'"YY+YT/K=^XNF< >+M&*"?9U)`Q"G&F5$3:F0#R57!-D6!Z-,_*H]$(2[*UP_CPUE-[C;`Q+KZ;K.2 >+M],2_!?-YL1*5`\'F^K)`&8W34DG$7/*'E`&U.J^`^_M&R\F"L%SV=7<0G$@D >+MN3%5[^Q8-IFQ?[4&<V:CYD\^*O+%AP12PJ3)5D02K-!D;*LN)(7G$;'`;8V) >+M>4D$9&HVEM+F&0G]4P`1%7FMRV]?..#-:R[YK7%UZL09,IZXM+)Q#`[UROBE >+M])[;FSVM!)!3$A^HY.9L]*/!ZGENMZ6L:&:?C1<,[1-904S4\P5?NH$KFWTA >+M;CW9S+\@"I$`C)TWZ!G;]SDX-)D?[<T]ST#4T"$`$JMS<Y#('I#T/!?3F::J >+M`W+^A!?<6+\$P@XK>.0R>X`DED5SNI;SOA!9P_#JB4)"7.FV_[C'@8<\,6B5 >+M<=&92DW1DJE1W1'-;*09W!]"5%#7[,NDB#F`I>>?U>52(\86J%)EELJCH22D >+M'HIJ:`\V+9I?3&)KIMU8E!/#'4=1>NV)XCV/SCO#Q%7TO@S:Y8&7:Y?FD,:P >+MWC?7,3QRC7-(;D[S\-#^MN@8M8M:>#`MXJJC",8S*%SJ3L6^LZ'C,W`<_595 >+MP!L7V&1OHLG7C<0C+2X?PA0F/_QI(&YK0ZU?\J4M*-0V?\J"E%H_:T]CF2*; >+MOF25%ENVF0.#E!&W"6,SB#;*->'9!=%ZK#F2K:5E5%325<^V39\D-"!25\,= >+MZ&9WI$4-L6[978R<0*DMH:E<C61_/%"S6%[TGO%M/UH`/*3HL!TAIG=:@11E >+MPSS17[JV'5"3._V?=B%$ENKMR_Y\T)%VD=V,XU/H86"09]&PP!)M[=.).OA& >+M>&HSC0T]_QG_),P\CXJ]9F;C6#?,M9)HD^N[815T.+R#4<D3&I<L^[*V%_H# >+M4HZ70;8O6'_D'M)"Y[#9JHF-2Z?T=EYAN=]C>M3M5$&6,K22Q?/>G59RJDI: >+M*FLM=BN^"W/)5B,Y,X1@7\\RGX;+[X*]/]5+B;J"\K]O?AG(X*=U7'DT]WDV >+M2FFXS<-0TL]O6)MLT]1=,HPT+JTA\Z6:10A7ZQ)\)QI>J&D.5QCJP0@/2Q6A >+M.I^C<RU;4A!*D<*OM"5T,7Z<!N`H("%3XVM-,"\C],$__`@%JL/$*YN)3/!D >+MC%LP:LH"%"<`U@>3=E>7FIK\5/WEME$P_!L%9I\&Y9^/J^/_=0WX01EB0Q]( >+M<^P:7(,RFN89G--9<T6$%-8$@HJA%EE73]SU(4QVGSG8B"A]1)\-`P.6M'JY >+M`"KO2ZWL%INC?==*DY/=LA=GP_3X=HI=UM02O@/.\X/@B@&6F%5:Z6F*FZD4 >+MXYFRUM$S>7U<*89@,M<$>6LD'MP5>[C.&C6"O'`QLB8)UMF5/G8=:2C&#.7Y >+M=KN3!K?^\Y.'^,'=KQD?<8H+<*0=IW-?@WTBMN1U'5M9G>$[^1XTT:.2T/S) >+M.I>Z+WQDG!*$:`I5+!>FKLZF!+>&5:I)F,"02N)WGPVHB>886D<8R]^`/_0J >+M)D@#/O0NGDT[(4+F3/%HQ<_F6GO'/N22\"V5%3W6Z3Y733)3A(F[$"-_=<R^ >+M,94@M\L&*"-Z;Q/2))JF>S00O#_?H_VCM-)!*"&&"B/VU_Y*8(6;+:8N/ZXN >+M?I\[`!JIT!>.,(&;;7Q@(RWN\W,EK:%>+B/*"T%"BZGN)EKO47%1-6$8,61# >+M['R+'[IMNA>VCLK8D*TCPF>WE(T,H7$ZGA*Q]=P+YW1^<$9F%)T\CYL0&V`2 >+MYV`X=0"X[\!]*&"[.84Y^R^_/+YWJ*9E1(F&2!;*:#-3VK\9)B%K6M&A42-4 >+M7FA$5A;/(N$PGAWSMRV8JIF]K.A'$4!(]>4":U36'ZU)225TEA;CM/&03W(< >+M9&X=4JZI%20,0_V`D-?(Q%MQM!P)&-;G.V:P,P<3IS]Y&.UL=^9)CI^%J5MQ >+M&M:Q[TTD?#B"D-@OT`$PKHLP@B/Z42Y+P"]*SBU[Z'L^DP)"/$*8*+(`\&E& >+M+O-10[11@5D1P$*=*9PP2ICFP#((I#E?V"![[KW:>S&(@TQ8@*8%)(T'#*9= >+MY54V[E'Y*5<[,*"J083O1'^_5")X0WT9I5,_^[*T2D-L66L:%/[UA?Y>T(=/ >+M2O<F"*F['=6$@O5^R^7*4(T.[2U/1FV=_E1"T``V\M>C4^YCP=<L@8?A)'PF >+MUB9)O([K6`VQIQBC9J1)2&F")&R0>&2=NR%YD.E7)I0/_5[NR2CC.1X.#,Q? >+M&LEQS`A&H"PD;$#J%/I)#R1"`6,5+M@W6=>4O+N$\QE%UF,=656+<#>H\=3" >+M33EHSO:&/.=L^ZA$Y9C@-&J[/NX]_H282;@@<9V5YU\;6:=S4^C9\CESG7=- >+M4X('.$>H^-[.=D&N3?23'`'C\`EF!C:,IDTPP5$P2S&&D*E<8.A(8^B`Q?[H >+MAW9`CJYN?#`C(LGG@1T(U&\WEY:SW:(ME$V^#1%T"45T/L(:^8D*9+GS2-[Z >+M,+AX^Q-N)I7_O=*G<9S0NE=,#MH[4A*.QTA?RTD0OP9Y6I)&Y0G2<ZZ+6KNE >+M5<K:,/+U8+`OJ"3I"&9,JRAZS]#E):$]%W(*ZS(VD4L/J8KE/=5:UL@*@Y'X >+MZ,U^%92\DR6<038YC:]!RJ:FU;D'Y@+#U_6#%>Z!/WSA'%B&%!JZT/D&A5Y^ >+M5S\?9!`&NX"HL*T'EF";+..L.`,)A@LK$MK,N54(6V;:A%A5KUMYHT/5H?>G >+M^6=!.107CJB\B,4%M9UVZXQ7,]HIW]&S(+`:DG;=9*>)]^B*,^*W'%/C'_X_ >+M0$=GX'N2F)R]ET\)<M6R>YD+(!B&!6NV!\:2GR-!H]HZ,*=I7);]!K1+YO_? >+M/Y;_]*4Q+7]'0?YTOC6YN9BPN`52(@<!G*U1R4L9+XYC0'SPV8F5_#C'PB;< >+M$L8$B%`AXE`=_H"@`*$39WMU'ZKY<GPM6D4C3=(35C)227@L+C`9L0>K'\%( >+M)[K#HJJT@FC"!#&AK<]?<$"80RGM?P/T)VWLC<W.ZM`U<5;$WUV/9Y^J"*7W >+M8+^%*2@-/XI1%@YY3?3:,$>T7ZGR(8"_^XLIWQD#0A!EZB;F/U@+\TNU(`!@ >+MHG/L*/#CJ_@.#<J`SX!2B4.O!1XV8Q]2)QSFZ9BWE-R.ZYH?JW&(?.^=$"$8 >+MD,LL=)D30OV64#]T*7*Z5(/?,F5D[1:R,WQ?J8F@@2*UA:<H4*%7J%H*:O!] >+MQMYB`3<L(;Y?IV^P@AO+CXRP0X*:;$T@D+9N&4:7'M5X&F?S1:#$=P'.NMK5 >+MOU2"7E95GPNF/U6HI<QG7(,2&F&P$V2V=&DK#R.R5[>+97YW';P<A6*6W<R) >+MO7?9N<=V`]#PLL(5#$]=6&0QAT-%VH."3.*<W=X^;&LLTEW"[!;[PRVP5CFD >+M%;EP':H^8V3``V"_^ZF=T-DZ".!D`#&!6%!2EZE7Y5)Y8"4?-]2-LBCR-SAP >+MC%W7"O6;8ZQ2+4DY)^!J#P19Q:9G&^K(12\J@?Y\IB7&RT]?.BAGI@Z\V4W= >+M>RB+#'D#0*\]J`[V`DAY<E6+.Q(:.1W`(2O[V=8EGB"O$'(?(B,@DB7BF!`0 >+M\5@#^,WT!97PG]Q[_ELP$.70(6H3!*K&@6__VQB]A7:0UIOY4D"*N[%@/=:I >+ML7E"A"E.<"S&..]:<%7#BD3HJ9@0T+I5/9'W2$>--CP!$].1=J/A)+.8%<H_ >+M^*L$1T4>D_<7;-2B'^5XE&+;WXQB7I)4K^[9=^92:H?Z22/_37()WAX2XEW1 >+M0V4L$X/)["JRM>>?T1Q+#<6T>ZAJ:2<[L?0^"00YQ8$ZWX=PK&5]GLJ!U!V= >+MOT)S9AON%HO(1:.];#$)NC[^\(S1(MM[<QZ)=\NPP_A`UI`C<ES1K@E*LJQ\ >+M"QR:%*N9#1E.93,9$>)&/7/VF-V4C_*-#O+:PVF!$-,!>2=]H06TTJR!H4`6 >+MMITTO8$8'N=<,B?P6K9:;,HHD+D5%#P9*Z@C6ME)?@+9V:-NLO:\0TRLL`AE >+M90@EQ2AC+*&05H,I'H*;M%XS^A(#J<&2D.J'<E86*WJQ@$@HS.VO9^3^M&;; >+ML7D0VXC^8V_^M02)!`78O1<TA1GKJURV&?Y2=C@!V)VG_#GT_%Y/HN`_$I.* >+M"'*KU@F@NO)^3ICMD_'&N4>HXT?S7:+_5SD&^_>9O;+Z`.T>G0FYV!4/^!@` >+MO9B8;MGHT,]6R`6%8>L#AX>/5M1+40$P:E.3)3J-(5DRV24CHJI$=_!6VQ1[ >+M$<PO,?-=115<)%GFMB7NI:JRD,^F>NSW%Z2%F$ZQMPG^A'Y/0%E,E<D<;J:J >+MUP32MQ2T<9GTDU^N<>0NT?>\"$&@B.5::6_:2BSN-)!RV15P;XL<-_,/@D(K >+ME`"L6)4UOF#U5JT')(.]8Y<OR4QH)QATF73O)C7+Q(/T&(5_F_)_-FCA0BC0 >+M6JS23Z#^"61&&([9-D3T=)OH-P.C&-(EPF,O=QP@T^C5<+!SZ'B[YCA.D]MX >+MIIVD32A<[EW=L83`8)H,?S"/=`;7=6G76)O&[&R3$(?6PI8*A8D6E1Z8L/9< >+MC7'9#W9-*7WSA$76L5O,8,Z&SYW!GT1K>"T-JNC2@BJ.(S=MB@3D[5J;R#[? >+MDG:$UDS[JLZ)%/BT2Y/4-VH?%63/8?;=%#;;^S'K-`B=X-DMEUYV=1.IW;5Z >+MD'^/,53DH-UZ#<QF]@<JT2'>5Z_)=6DW#$Y$TH(Y^Y6F?+4)>/S/W$CP7U*Q >+M(K;K>`7ICR.C-`&WP=/4![9-Y)>#L18#Y7C^T((5M=;QO>G,$J&:<1ZA%A=( >+MDE)>:LO691*_GQU3*K2X.?8@GHKM_G(K5Z+.6<6!!>Y?ZD10$CF1--=%:URU >+MK>M>Q>7Q.<;3F`R+?N`@+H[N.&3LB]*HAUD8F^-DL89Q9QU]@,D%=_-!UHP& >+MSP0;ZZJK"B/K&H&SE])<DYRD5M<64_\>9$)=Q:IK)OW+Z#_\)8`9;DZ/U;1B >+MU*(>4!YY\8P'2=XN!09[+-7!DX.*G<%JM2-A8'`T-XIM6/M9S0KZES@Q#AD1 >+MAP;FP(2`ME\@4;.T*MAT9R8I"`)J8K'U\2'#?-\7/W#2D#E,<7.TUN/EVJ/< >+M4R^6I1Z9,(7&RM%+F_TA*AB$$DE%!/)+GY85QGBFE:.QOM,16G@(KZ5FX#&T >+M9_>SMM-,;]M[6LM*YT<V\S2;#_3-N1WE7&927G,NN8S`!9YHOM;EG4?9F\0) >+M49RP4==SOO4B&/IR1#4:4DS2"*/_?G:YF2X'&MUV;*_5;U=L^1BE+(1IB0O< >+MH7IH-M5WC%:B1<<,N&^"LE2.Q$=.&@;(1O5[-/B0J)#SQ0%&D4QW"`F_>>W_ >+M9\@$*X0-:UQ$Z-9Y]MY/Q-&$[[H"9@E?(ZXN3TA6V);[Y1,.?9"3[.Z%;&TK >+M,T-UJ$@PKJ0E"J/L+\]9@!]/SF?6S_>H'Q(F+G_7QD!.<K&O-7IC:`_'AXYD >+ME'OB^2<\3T1"`^_HBF6*LSL'G&H9`8IUV62VKL`#K%$\Y04C:35E;YZ'\R!, >+M,&3&12Q>Q2S^<"^FR;\$^FHHQ7!WN7ZP/H@8.!V[!6$P=X*(+*%OW?JS6A?Q >+MV3F6%E,7^\81TPBAT@)(!'G8&XZ9_>7YWU&W4%(`$48')[7P#U!LGV"W5$7+ >+M(A6;JY,#BHV&YBUL0HI2-<D:<2;OMR\P`V`,PPV[79$7,X'C<H/IJ7/]#OPB >+M5ANP_@'E5-`[*&D5\SO+*;:QXH0TY>/\UV[I+.@HHNW])MO.??PH\H-84/PY >+M@]EVS')J:I:+1"[L#7LF?:K:,X#5L'IB&PQ-V]L5!E5)+UX#.JF4_P(<UAQ: >+MZ'KK`UH_XN54P.8[?,M;L+YJC(4X*C(D).1`](?@-,>#%0[I&".\.-@7/L(4 >+M<#SS3.`.%K.T6`,`-L(\QX^!B?DE?]5P1HD-U0+];X@5%[+8`'WOO]L7$,A" >+MV@P]!EP'``P0MTY09(2_`00`<*>!_ST!!@!CS1(2'Z0<@`"`6[`&QP0I!L`` >+M(.<LH'&@B@'(`-B">43F?[,2`E`$BW%,_H7A_2\,R_B_F3P`@H!8L_\7\/\2 >+M$!OPG9<;3MBHP!/P[Y(2DQ.M$S8(^C]02P,$"@``````(7)D,;SN+#Z8#``` >+MF`P``"0`%0!M;WIA<'!S+V5X=&5N<VEO;G,O86-T:6]N8G5T=&]N<RYP;F=5 >+M5`D``RZ`BD%4><A!57@$`.@#9`")4$Y'#0H:"@````U)2$12````/P```"H( >+M!@````1$@_<````&8DM'1````````/E#NW\````)<$A9<P``"Q,```L3`0": >+MG!@````'=$E-10?4"P,6*BT2`27Y```,)4E$051XVNV8>5R4Y[7'OS/SSLO` >+M;`RH#"`"`B*+2P37&$PB4J^*&L4M-BIM7*K6QB6QQH_6+;=-C&D3KS>-B4DJ >+M)M'4)L;0M'6+B%LTU9"*`BHJ`B*R.\@^3__(X[U>"PQH_'QR[_7\]W[>><\\ >+MY_S.><[Y_>#_L>G^C\?G`UB`6L!Y]TM-<U^HJFH#!AD,AM38V%@,!@,.AX.R >+MLC+.G#F#JJI#@*OU]?67?L"!6V>M>S^W(.]T9=KGG[WKN';Y59F$EDU5U4&` >+M`,1+:Q>*BM(L455Y7925YHMC1_>(\>,2Q.WWJJJ.;.>!7@2.`>XM)?Y[,JW) >+M'KKVV.4:\?3FKYV@O0286T5>5=4X#P^/M-V[-B$$_&W/(4Z=RN;2Y0*L%G>> >+M&AN/KV\G=#HM6JV6J<\L0575KNVH@!4;7GUMS>(EBSX%G@&J'U#P@?/?.YHS >+M?7A_M6^0#>JJU@$OW8V\]LZ'L+"PM/2TG?CY!1(<',F0N$?I[.^/E\V&ZJ8G >+MY_P5ZNL;Z-#!AL5J8MO6]=37U^>Z.$@7Q>K_;>>(6!$>T6.-?_0@LB_D/=4E >+M("`-,$H`S$`R,%E6Q?V8TGG`N.V/10>HZW>?AKJJ8N!WS96\<N=#9F8F';U] >+M,)D[X:2!1_H,(#JJ-Q45)9257Z>DI!2;S1-5-5!554%FYGE7!PD"_OS\;[9$ >+M)B4FT,FBP>&HQ60R</#0X9BNP8$IL@*2ADY_\9WB&^7\XXLW5P$O`_7W$KG> >+MZO]$TO19_3W,)KY8%@.P'*ALR[?BE9>?%Y6EWXJ&VNNBKKI4U-:4B=J:$E%] >+MLU"4%&>+W(LGQ9:W7Q8__4F2F#QIQ.W^;];<C)X?CUSP.U%0)<2GA[/%]@.9 >+M8L?!L^+/7U\5QZ\TB)F+5C4!SP$>P!]_M?6(".XQ2`"/`6IS/L=]D(,EN$^+ >+MJ/<?\]-K>[/*Q8B%;PC``7BW^..[GM<>/YZQXGI1!='1T0R+[X]><:.NH9'R >+M2MB_+Y6BH@*JJAQ<OIQ/86$QP-J6G-N#(\;,FS&9C;M.DYE?A4:K0U6T--85 >+M</C#9$HR]VT`_@HT`3/V;OE5TJCD7[)QT>A7@!$MH/\BD`@,N?N]T1ZV:.+/ >+M7[1?OUE#VHZW`-X#RML:_,J_G\I<D7>UF*RL2WQU(@.#0:&AT8E.4T?QC3*N >+MY!62>S$?G:)!K^@`5K88O+=%+7<:V?_E(4Z^]UP]T!3WS`KW\R?V.$NROWH- >+M.`J<`+H`AOH:![%#$P&"`6MS!T__];S)N1E'>W2.&E!:>_6;<-5H*JRO=@`8 >+M`H("5_4-\V?Y;U.H+CK?`&QN;KZW:)&1(>+]]S>)Q,3'1;]^O45D9#?1JU>D >+ML%K-PFAT%YZ>9A$7-T#$QD:)T-!`T9JO(?$CQ>L'R@5:?0.P`7C'ZA,L@%>` >+M7@/CGJSJ%A$M@+Y`^NLI?Q&;C]\20!$0TH);OS%O9SIS2AI%T)!I3:K1-`10 >+M,5C.G+S6).;NS!&VX+X"^!PPM#H/_V7V:33H%86Y/UO`HX/ZLW3I?(;%#^21 >+M1[HS;=HX(B*Z$A45CM'HCE;;^JC.OU%!K=8`SH8*8`>07GG]T@O`D8"NW=./ >+MINTWCQ\_GIX]>Y]X[Y/]@V,&#"8K-]\5/H6?S8QZ?>?)7*:]L%)K[S5B'Y`U >+MX86-475U=1Q+_XK*HG-.X"U7EV:SP1O</>@:$HJ?OYV^L8/IT-&.W<>/R,AH >+M;#8+5JL)F\V"3J=M]937KEPH$->^0?9T)?`1\'98=.^4;9_M,Y?7P;S%*]G] >+MY2EB^PW@^+E\SIPXA$2^M:I:_,:R.4[%;"%QWE)E_B_7!"]+3N2-]#R*O]J- >+ML\:1)Y<I9[N"OS,)BDZ+FT$E-*0+>E6'V6Q"I].AT;1M.;M5<7W]YDVO.A>\ >+M>=C'TS_D(T`/;)J_^FUSG<[*_I,72#^=Q>'3Y_CPP%EV?KZ?`V\M<@+_[F(! >+M<E9<.3OIBX]V8K7[$SPJF=T7'5S-N41)Y@$!I+1EO"G_,NN$("/C6Z*B>N(4 >+MS4\R(00.QRV$<!G_'W(/_ZGS+D?YDH9J1Q#@!<Q<.#4A?."TU3%6_PB:&NO1 >+MJ^XTUI1S>L<J9V--52J0`52UYKBNXOJN"WO>_X>;S;^'9V@H2I.3PD/;J;M9 >+M6@=L`QK;'7QC8Q-'CAS'T]-&1D8FB8EC_^N=P_%=,@L*BLC/+Z:AH<&5_PI@ >+M>=XW!S;*65X-U#MKRX<<V;P@9<*O__;4WC<74%%T\88LT=7`(>"J2Q("C247 >+M3XR_G/;AN2CO7^@J'55<24]!]OKE>Z*T-V_>^CHOK^#I??L.XFDUH]'>XN+% >+M/+*S+P).LK,O4E!03&;F>:JK:X<T-35=<?$?3<`MF8A;\KD12+U54?*CLORS >+M?DV-#6.`_Y2(%P$U+GK^MI4YBG+.UI:7)ET]\B=-37EA!3`#*+NO!5E5U4FJ >+MJ@I`6*U6H=?K[X?-M61&X!.@VWTP/:U6U0Z3HZU/:_?8#\TT,FCK_1Q:JVKY >+MWQ3T0WMH#P7,!RI@:N08=;8U>!O0&<@'+@%;Y/C9+6]HY!)2^P,.W`KTP.*U >+MGKJ:"T#IW8M/<S?D0&`N<!X8&A:$*H089[/0!/1S=V<L$"?I9F@[#_2HW+F5 >+M!RU@`E$$CXZCJFR#)%4NJ>UCP)+@`%X"_"P6=@.3-!KR@1F>5CX&(GTZ\7N@ >+MNYS[GNTXU`H@1LYV_0-%W;_?9X`-Q2"D\&%P]=&L`#^6`$9_7^8`7=ST[`>F >+MJ2HYP,B.WKP+!/K[\]H="6A5P`1FX&XM!F9C"UDG5]V],@$:*5DE`U'?@X"I >+MQ6)/!<((BO\26-B:E/4_.`N@>IF8`&#OR'3`+<#.8L#7SY?7`?_.?JP"`CTM >+M?"X%PM8$S-GX]ML&&/#I.050Z1`U62)QNP*2@42\PW.`P2WI=VU3,$WQP&.$ >+MC]X`+`:>;>L"M-S+QG9`V\5.DA!B@K<GXX00"_TZ,`G0V>W,!7H8C:0!8UT@ >+M/P:_/D>^T[1ZKP0ZXQNS%NA(\+#YP)-2P-0#?P2B,7@6RFII/@'=)[HB:F,) >+M&?&RU/D<[:FD-<`XHX%4(#(TF'F`&AC`7,#3;&8K\+C)R`'@:45'H>RGYLU@ >+MS0,Z$#9R&S"8J(D'@8&$C_D2F"/E+&_`#="C53.EI'6LQ1[M/G$JD-1"<F() >+M?#(%",/=LQKX4;O67JV6&T"R7N'O0(+!C50@WF)B+S!6K^<\\)Q.1SGP<Q?N >+M?DS4A'7`:*`.6$JGZ-,R\/5`N!R9!L`.S*#/LR_):@AJP><$C/:I<B+YH2C_ >+MC;J[)1OPH6/D*6`9T*.]73/;PX,W@`DZ'1>`V3H=5X`E&@UUP!*]GG-`LDY' >+M4>MJ@7L&T`6-M@&(!]Z1%]`K@`^*>A*8+=&>ABWT/P!?26MM+0F80!R!"0N` >+MZ2A*'*!#;S@#>!$V.A68+UF>TKZ53T<^$.[AP6K@28N%C<`3;FYD`0FJR@4@ >+MP<V-;.!G+MS-)&;.)F`1T`_H"3P/=$-GR!5"+$2G;@>>Q1:X'C`1/>4CB7Q( >+M*WY_"SQ"<,+'DK_G`L,)'[T:&(M>;0#"[H7IS7)WYS>`T6AD*V`V&OD`&&,T >+ML@68Z.'!+F"\HE#8>B;=<N4X+)*]K0(&%+<LP(9WX#A`0X?>4P$W0H=O`H8! >+MW[C8'S28.EP#>M!E<"HPG$Y]E@&#,=L+)?+>[9X4BD(^$.+AP2P@QFQF)A!J >+M,)`.1+B[<QJ(\_#@E"S9UJP?ML`\H`^J\;"\U3\`P@A.>![PQ;?/.B"`T.$I >+MP"AT^GH@4N[EK5DW.D5F`+T(&;$5Z$5@W"E966ONE=_/,AC8`9B,1OX`>'AY >+M\1J0:#*Q$9@@D9^BT[E`_COTAF+R*9)H!`!Z=(83P"BZCS\,/$Y$TB'@"12W >+M6F"BO`A=]:L"3,9WP-=`'"&C#P+3)0?QNJ<=05&X!DPQ&'@7&&6U,N<.Y'M+ >+MY!-EX'/;HHA)DM%=SEQ%5L`GP*,HQIOR$BR2JV_4'9N?*PL#9A`4?Q3X-[ES >+M)-S/DA0*-`#+]'HR@1B3B4^!*48C>X`9\O9?+KE`F_8NR2"U=\A7>DSVOP)+ >+M@:%`1\"_'8'?MO'`3W"SE`%+@,#O@QQ,E+-22*>-,F!Q#VRNM:1\(LOT7G=Z >+M#5J&`9.D@/D@V>+W+F`JLBWN_=!:'@J8#ZT=]D\E!`IV=825/@````!)14Y$ >+MKD)@@E!+`P0*```````A<F0Q5;"^EF@!``!H`0``)0`5`&UO>F%P<',O97AT >+M96YS:6]N<R]E>'1E;G-I;VY!8F]U="YP;F=55`D``RZ`BD%4><A!57@$`.@# >+M9`")4$Y'#0H:"@````U)2$12````$````!`(!@```!_S_V$````&8DM'1`#_ >+M`/\`_Z"]IY,````)<$A9<P``"Q,```L3`0":G!@````'=$E-10?4"!<0`1W> >+M_BZ6````]4E$051XVMV3O4X"012%O]VX,%N8#$%90M2)DO`&EOY4%H;P%"1; >+MZ`/X>@O$QL[6BD!E82!!,I/5O3:K[`:,AI+3W9OSG3NY-P.[K],SM3W<[=7O >+M`3EL5-K;\"$@;\M+`>0WDU\L=&VOVH];#SFP?)U?X/L>3\_G+N_);;=^EWOI >+MQRV\8L#1<97IQ,G,7FV<YFQ&I(?`BBN]8#IQ&*,Z6B5K\/OBDT@/"0+O9ZO& >+MJ'(`P'AL7P"LS4K]Q]$\!4A3<07O>L"WE/+Y2`6M$D2@W0F#/Y=8U&@P6QSL >+M#V@V*]>U,$$RR?Y]OQ.CX@VGDT84W.S@7_D"5WY*+%4V<Y$`````245.1*Y" >+M8()02P,$"@``````(7)D,8SV_O0?`@``'P(``"<`%0!M;WIA<'!S+V5X=&5N >+M<VEO;G,O97AT96YS:6]N3W!T:6]N<RYP;F=55`D``RZ`BD%4><A!57@$`.@# >+M9`")4$Y'#0H:"@````U)2$12````$````!`(!@```!_S_V$````&8DM'1`#_ >+M`/\`_Z"]IY,````)<$A9<P``"Q,```L3`0":G!@````'=$E-10?4"!<0`0)3 >+M]B-C```!K$E$051XVJV13TC3<1C&/T8T"`.A:9>&EU!V:1O!:(<N'9*"4$:W >+M#AXE*+"\>%`"$81P!P\6@@2"LD,1##U9%P^5BC2=[==*I_@'G$XZ!7,9/EU^ >+M[Y"Y%D;O\?U^WN=]WN\#_[FN``*N56$B+A.I]*CYV1E5`2*`$HG$KLM4+.7S >+M.1,Y5_Z6R61.++@,R./QE*#BP8%!3=8,A4(#;N^$.Z46%P[ML5`H:&W%,?". >+MRSP&%`P&!RM9K@6TG$H>;FUN:'UM]6CEVY>C\;%1`?+Y?'&_WR]7Y(]UWMVX >+M;DY22XMJ:VLMB?Q+I/O`N]LMM^R<"\"9OPT9K'`X+$"S'S_HX8,.ZU^L.MS9 >+M-ZRDDU7/4%R`&IL#`'+2:3T;Z#>1ADI.U#LXJJ2357=L7$]')M78'-#QF/?S >+M>WK2^<A$O#9X%E!L9(*;-ZXS,?6>.N\EYF:FV?BZ9,PV4..M;U#Z\S+%G[\8 >+M?OXB[Y[S'4!))ZO>H;CZ7T[K;GN7;:DM<^FQ=*+1J(`><_#ZS=OY>[NY'#N? >+M%I@<B^'>^:-,H`C47`T$[;32/]P'7AU+H.DT6?\&,Q3,!2&AP]<`````245. >+M1*Y"8()02P,$"@``````(7)D,2Y[!,Z@#0``H`T``"4`%0!M;WIA<'!S+V5X >+M=&5N<VEO;G,O86-T:6]N8G5T=&]N<VDN<&YG550)``,N@(I!5'G(055X!`#H >+M`V0`B5!.1PT*&@H````-24A$4@```#\````J"`8````$1(/W````!'-"250( >+M"`@(?`ADB```#5=)1$%4>)SM66M45%>R+O%$19SHJ%&QA?@F+@2CQC@Q:IPD >+M!J-&<W'K&!TT/I:C1@1?J*A3.2)-:`5I:+`!4:11Y/TH6X6012(114!CZUV1 >+M$!F0BY&7KZ`L8[#F!S1##'0#SHQ9,_?71Y_39Y_ZOJ]V5>T&$!$``/Y;\;D' >+M\)LB+DG2[V59GF5I:<F'#Q_F\>/'<T1$!-O:VC(BLB1)4V59'O);(&`&^R.B >+M-0!(;1)`DJ1)B,@`P%E961QS-)3KZNKXV-%(+BTMY3?>&,?&^[(LSVIG0)X` >+M<`X1+0&@T[^8>,\3)T[4C)L\K5BE4NT$@&[FB$]5*I7LX^W!UZ]?9R%F<E14 >+M%"L4`SDT-)1=_NS,!04%O,%]!5^Z=,DH0'LR8-?9LV<9`)(0T>I?2-Q"I5)Y >+M[?0[S!D9&4\`X&^(^+N6OM_TAT:CX:!`)5=557'$P4`N+"SDZ>].X_#P<!XU >+M:C@G)27Q)VN7\+5KUWCG3M<F`<P$8NOM[6WH.V@H!P4%\=9/?;FZNIK[]NV; >+MWRA`I\;`EB'B0@"P_"<(\++3HG6/;MZ\R2!U8T3T,NL\`/#=NW<Y[G@T/WSX >+MD'5187SGSAW6!/IP<7$Q;]^VEK___GOV_6P'7[MVC<6\]XU;H+5`!B/B_RY< >+MO8-OW[[-D<=3^.[=NWSD>`K?OGV[>08LBX^/KQ\Z[MUZ1-P%`%V>@;@T8+CC >+M.8/!P%,7N#(B5@!`G[;L>?YXJ>#:VEI.3CS*CQX]XL2$&/[IIY\X/C:*?_SQ >+M1PX+"^"\O#Q^]]W)'!L;:]+Y/7OVQ/UA]E)^^/`A[_Q,PT5%1;S-.Y!OW+C! >+M_@?C^>3)D_4`X(Z(W0$@/C\_GP>\/)(1<4I'!7BA>Z_IGW_^^9/U7L'LX^/# >+M`+`2$25SQ`$`=L?$Q/"'<V9P04$!'XK8SW?OWN6(@P'\PP\_\/+EB_CTZ=,\ >+MP^DM/GSX,`]2#&!$W-U:(/UM1SPJ*ROCA>Z?<69F)D]Q^2MG967QU,7;.3`P >+MD`%`A8BO`$!71+0:9>_(V=G9#`U%\?<=<%XZ<N3(#QN]0S@A(8$!H!81^YAZ >+M[A<77GJI#VNU6GYM_*N<EI;&<SZ8P2=.G.#9L][FV-A8MK,;QBJ5BGOW[LE^ >+M?GZF4AXB(B)XJY^.X^/C&0`>(>)#QVG.K%:KZP%@+R)^"`#W$;$7``P(#0UE >+MCX`X1L1;T+!E?K7N5)>MGO[^_N=:R@R52N7QD>NG;#`8N'MO:T;$(`"P:!-Q >+M`("@H"!V<UO#T='1/&)$0Y$:/-B&E4HE=^W:A95*)=O;V[%6JV5KZWXFB]WH >+M,>.YL+"0H9/%8T3T`X"#OKZ^1L?'O&+O<#\H*(@!8`(B9O]EPTXN+BYF`+B% >+MB,-:B<]P*"J&]^[=^R,`#&QVOYO-\%$/2TI*>,P?_X<1\2<`<#"7,;^X8&,S >+MD+_YYAM&].23)T^RN_MJ/G7J%(\>/9+3TM+8SFXHIZ6EL;W]"%:KU2:=#PX. >+MYE5[=(R(50#P.B(N!8`MB#BW;W_%_2=/GK!8L)!#0D+8?;O,E965/'_C?J/S >+MPUI9=V!&1L:3?6''.2PLK%[JVO4M1.P"4M>KY>7E/&.Y)_O[^S,`$")V:S-Q >+M@(9VMVW;)JZJJN)ERQ9Q144%+UGR)XZ+B^-5JY:R3J?C>?-F\[%CQWC0H`$F >+MG>_:_<7_:VR'MQ#1KC%5>PVT'7S_YLV;').8R@\>/.!#1Y/YSIT[O&I'`!,1 >+M`\`WB#C41.#[SYT[Q\ZK=[%6JWT,`,6IJ:GLZ7>(8V-CV:)+UWI$G&TJY5L4 >+MP-9V(%^]>I6U6@V?/7N6P\*"^<J5*SQMVB2^>/$B3YC@R!D9&3QQXAAN3%E3 >+M1<AMX*C7ZW-R<KA'[WX7L:&M'348#.RM.<K%Q<6\=8^:O_ON._[(W8<3$Q.Y >+M<Y=N]8BX`!I&T];6M7CI9;OZO+P\GN'BSJFIJ2SOTW)F9B8/&#Z&$?%O8**] >+MF71^X<)Y7%E9R<N7+^;JZFK>NM65$Q(2V,UM-4='1_.\>;,Y,C*2%0K3S@-` >+M+T3<VV^(/2N5RML`8(.(W2U>Z)Z?F)C(;RS<SJ=/G^8W%^W@4Z=.\0N6/>H1 >+M,14`[+!A!&XU<*52*49/G<.YN;F\:(,WY^;F\I@92]C;V_L)`.S&5MJ;20$4 >+MBOX<&1G)*U8LX<3$1-9J`YN</W_^/$^8X,@)"0FL4`S@@(``<\Y#8ZK;`L`K >+MB-@;&@X95@"0],477W"/7OT8$2NA86NL`0![;.C[YF9_:?_^_8:Q[_V9,S(R >+M>,K"C1P6%L8`4(>((]M-'`!`EN59DB2Q+,OLX#"*SYX]R_/G?\"1D9$\:]8[ >+M'!H:RH,'VS`VGN[,O:`17T#$+O"//=@)$:T&#'/,]_+R8@!X!Q'M`4"!_QAY >+MV[+N"*U6^_/$#U=S2DH*0\/`%0#M&)!:O"%)TI]D668`8*52R9T[=V;L^&FN >+M-;2"AA%W)#3,])W:NXZ%A84X<.!`?:_^MHR(=P#@Y6<B_F_$3HU[NR<B6G1P >+M'8M.G3M-1T0"@''M7>=Y"_#/0K-M[3^5>(?QN0?P_\1_*P+(LMQ#DB1K;V]O >+M<G1T%#J=CNSM[85&HR$`$+(LCY8DR:J#+WSQ60+>LGFSP(;BUF[,S\\G<\1' >+M&1_X:.$\<?_^?8J).2IJ:VO)U]=;'#MVK&E!29*L.T"`GE$`2DQ*$M75U00` >+MPF`PD.RVKE6\<N4*^6M"Q:U;MXQQM^R\+,NCK:RL1%%1$<GR=I&>GDZOONHH >+MU&HU#1\V1&1E9=$G:U>*_/Q\<EN_VBA`6S)`811LD\<6\8P"B'OW[I'K%L\F >+M1\^=.T<>2Q?_"L^?/T^[UJP2ER]?IK=GS#%^OV7G;6QL1'EY.05K_$5-30WM >+MVN4ADI.3R<YNI`@/#Z<_3ILBSI\_3YZ>&\75JU=IO>M??K5@"V@#`**FIH94 >+M^_U$45$1[?22C<]U[8CS!\(/B\N7+Q,`B(L7+Q(`B/KZ>DI-3?T5/G[\F%:M >+MWRR2DY--.X^(="A"*^KJZNC8,9VX=^\>180?$.7EY>2U>T=#*GVZ75R_?IUV >+M>&X2IT^?;G'!IYTJ*"B@96M7"[U>3T[.<T5*2HKQ.9,_,;6R97ZQE]6JS2(O >+M+X\`0%165E)(2$@35E14T/'CQ\6%"Q?HS;>=3#L/`.+++[\D7528>/3H$<7' >+M'6_$&%%75T=11PZ*JJHJ6KMFI4A*2J))DR:VQ7G:Y+E-1$5%$0"(D)`08^`= >+M^8^/N'7K%H5IO$1%106%:;Q$65D9J54;15Y>'O6PZB)^_OEGBHN+$[6UM10= >+M'2WJZNIHQ5IWD9B8:-;YQ1-?'R_T>CVM^V2UJ*ZNIHB#!T1U=34%!.P7V=G9 >+M-&?.3)&2DD(.HT>)P,!`@H93F,F`<W-SF[^X)>).C==[FA-2K=HH2DM+*<!W >+MHR@I*:'`O5M$:6DI^7_F)BY=ND0`($I+2\G7UU>4EI:VRWGP\_.C8<.&"IU. >+M1TY.TX5>KZ>9,YT$$=&;;TX486%AU+/GBV+OWKW4MV\?<RD/B$C39[[?_,4V >+M9E+:E`"BI*2$`GS=14E)29,0:M5&<>/&#?+W62]R<G((`)J<?_#@09N=AT&# >+M!HJ"@@(:/_Y5H=5J:=`@A0@.#B9+2TNQ9\\>LK*R%`</'J2A0P>+@(``<RD/ >+MT%#43-4&8]47-34UYFH(N8CQ(B,CHT6,B8DA`!!E966D\E.+LK(RVO;7W6UW >+M/B@HB#9L<!6%A87TP>R9HJ"@@.;,>5]$1$30>^^](T)#0\G):;J(B(@@:^O^ >+M;7&^N0!#GKK>LUE`Y.0\UUP-$41$SC,=FO!IXA<N7*`5:]U%;FXN+5NSONES >+MFYRWL5&(*U>NT($#&G'FS!G2!*G%5U]]19,GOR%R<G)H[%A'D9Z>3A,FC#7N >+M^0Y-:D;BH>'A`A')<<)K0J_7FW4>GJKVS8F7EY=3='2TJ*RL)%=75Q$9&4F+ >+M79:VW7F-1D,>'IM%5545+5OF(JJKJVG+9C>1D)!`KJYKA4ZG(V?GN2(Z.IH4 >+M"NNV.O\T6AJ)&]N?7J\GQPFOM:E[-._S1N(:C8;LQTX4%145Y.OK*XJ*BJB? >+MS1!QXL0)<MODT7;G,S,S*21$([*SLTFK#1$&@X'>>FMR4RU(3T\G!X=10JU6 >+M=]3YGM#8!9R<YXJHJ*CFQ,U-?J*FIH96NV]MRH#R\G)ZQ6&<T.OU357>V]M; >+M!`0$D-,'SL)@,+3->;5:30Z.]N+KK[^F:=.FBLK*RB;G5Z[\6.AT.IHZ=;)0 >+MJ]74O_]+'77>6/6;MT$"@-^UI7O,G;>@:;`I+R^GR,A(H=5J:9;S`E%:6DH^ >+M/C[BVV^_I;Z#!@N]7D^;/+:VS7E)DJQE629)DL2A0X?HXX\7B8R,#')TM!=I >+M:6DT;-@0$1P<W'2ZZR#Q7PC0GN?6K?M$("*]/=U))"<GD[N[NR@N+J:5*U>* >+MG)P<<G%Q$7J]GN;/GR_"P\-I[.N3Q)DS9\AZ\'#SSAM1EN4IDB0)1*3NW;L+ >+M69:?]31G2H!V/6<40*%0"']__U:/L7WZ]!'[]NUK^MQX'&[=^?\F?.X!/&]\ >+M[@$\+_P[,&&\W^`-#%,`````245.1*Y"8()02P,$"@``````07)D,0`````` >+M`````````!``%0!M;WIA<'!S+W!L=6=I;G,O550)``-I@(I!"F7-055X!`#H >+M`V0`4$L#!!0````(`$%R9#$>*.&KM@```),!```I`!4`;6]Z87!P<R]P;'5G >+M:6YS+W!L=6=I;DEN<W1A;&QE<E=I>F%R9"YC<W-55`D``VF`BD%4><A!57@$ >+M`.@#9`"=D+$.@C`0AO<^11-668Q3&27&@4U>H-`3&DJON99(-+Z[0'%!X^!V >+M]_WWW35-C*[!>CBB#5);H!U/G!D:;0OM`W\PSM,>[ZET#B1)6X/@9DHJ'+,I >+MZR5-HX+OW<@/;D$5D@**R*/1*GOOB$D:T*4U&B0O>-D20'YII<+;VN22N@BV >+M(NFF#1OU/#$S\[4OYOJ[7F$(V/_O&[ANK_]X>"7KKB$<K(J.B+M.&LSR(Q^P >+MA#%D[,G8"U!+`P04````"``A<F0QX#TKN3\!```$`P``%``5`&UO>F%P<',O >+M8V]N=&5N=',N<F1F550)``,N@(I!5'G(055X!`#H`V0`I5+1;L(@%'WO5]SA >+M,T5=]F"C^&*6['5+?,>*RJ3`@*ZZKQ^4:KO$Q2PC(6E[[SGWG-,[7YXJ"9_< >+M.J'5`DWR,5K2;/ZZ>B["A5!4+CXMT,%[4Q#2-$W>/.;:[LED-IN1\91,I]AN >+M=]B=E6<GK-P(97`YB:`\6%WQ'QR5_A)2LI8HH$EJ&2&:!?#\`6.0PGE@4H(_ >+M<#"L/+(]=[#A0NW!U<9(P;>P.8>R</#.+&!,(S9J?^,?P#:Z]@M46U5TPPIW >+M%*JP6GM$6XEMKQ1@N=.U+?F-[E(RYT1)8C*DY2?=@%YI)PZ$VFE;,1^B'(I9 >+M<5=:8=K/OXD:CNFTI42*BW/:A7K7WX#J"D;T^DO^YCD6F#$N>6_QO?_T>D-G >+MZAGX[K-:IU6#ESZK_!]A7?7U*]>?3EG$K/L-?XI>LB0Q7)I]`U!+`P0*```` >+M```A<F0Q````````````````$``5`&UO>F%P<',O<')O9FEL92]55`D``RZ` >+MBD$+9<U!57@$`.@#9`!02P,$%`````@`(7)D,6/?(+.U`P``[P<``"0`%0!M >+M;WIA<'!S+W!R;V9I;&4O<')O9FEL95-E;&5C=&EO;BYC<W-55`D``RZ`BD%4 >+M><A!57@$`.@#9`"-55%3XT8,?L^OT.1>@`DV,'VX23O,A4!IYG*!(=`KCVM; >+ML?=8[[J[ZYBT<__]I+43DI";-B]9>Z5/TJ=/<GP")_R#JYO;R0RFD_'-;'X# >+M5].[\>?VI@<G\"=:)XT>PI?[*9Q'Y_$M_5]$9_&T/9R3$=L]%@BIT1ZU=V`6 >+MX`OI8"$5@K`(KDZ^8>K!&[I`^&+^D4H)N*\3)5.8RA2UPW4LAJ-(<,2F_>ZR >+M?_PKK$P-I5B!-AYJLG^+@:\I5AZDIAS*2DFA4X1&^H*Q&*9#B>"YPS")%V0N >+MR*%:M0EOK$!X]BN\KX9QW#1-5+8)1\;F,1$1=T7/S<(W7%\FG;<RJ3UF4.L, >+M[0X<9;EM8"BLAOYH#I-Y'Q+AI!LPVM?)XQ]W3X_P=?3P,)H]/L/=[S":/</G >+MR>QZ`$C5$"Z^5A8=46Q!<J6813!'W(['6`O3IN`J3.6".%9"Y[7($7*S1*NE >+MSL'*O*!F"9V!DJ7TPA/Y[BU_QEGSMM7E._*36B@8FRS4IK'9=/2OIRDUV:@7 >+MZ;=])EIZ22[7N$1E*L+O&-\'8X<KU-]$2<V9EY@E:'/X+7'=\5-JEB*+-/I+ >+M-KTWMDTZM2B8VV058-_'XRZ-J=6A:#@:'\/%V=DO:WF\LX]@I!0\M`P]H$.[ >+M)*:[BL:D\]!,8X_<\;![.U*>B"42"6(U"+"'!X+EER`K>%LLY%RR(4-UO>;7 >+MM[,GN$6-EK([/"YPP6)05+[M1H8FLW\\H+?K\AAD2JHAB__"HKG;0YNV<(Q% >+M/6D*F1:0"M=*KK)F*5UH0==17@N=^,**8.)%14I-14+%2^T\BHS1@H/A<4M( >+MDQ%,%F'"&^D*7A1"*=.$.3?APL*R2W*'3:/5BM'>,[E#XVY6@Z!ZWB.;0(9M >+M'3T',(KZ\Y`'0H6MQKA29U2I;]T9*J,!#!`DS0P5>AZ]/>H"`2$EBY42:>"V >+M#`LLF%*BU"=&8YN0Z;:[Q;]K:=_4OU?LAMG,A))#%KC6QGX:1`T!IK*2I-R@ >+MU?]!QAILPX?0M%0U[E!S*+5N=MH/T<WL^M!G"$[B7J_WB=8=33O45AWUT\*: >+M$FDYY\HD0L7N1>KN'*7.T<>"'+0HT57,9O#YR3I_P54I2),VSJEM+X@T_3$S >+MC)%T$:LK>JU50/Q`7''-#BYI8SHO/37IWQZ$AU/G5PI/94E+=KB7)<6C$7!M >+MFAW(^E_2DHARN>`(WWN]Q+Q^*(4F$-HOGKMR">TI1**U>-K(S!=#^(AE\-@S >+M9ZM*9!G)[-2;:@CGK=T/4$L#!!0````(`"%R9#$I[9OR2@```$P````?`!4` >+M;6]Z87!P<R]P<F]F:6QE+W!R;V9I;&5I8V]N+F=I9E54"0`#+H"*051YR$%5 >+M>`0`Z`-D`'/W=+.P3!1@$&!H8`"!____*_YD815A8&30`?%!,@Q,RCW]*]DV >+MW+KE?/&L<GZ:V+<-JH+?`V_N"+FZ>%'<Z6VJ:L<_F(HR6`,`4$L#!!0````( >+M`!QR9#&QZQI<T1D``"L:```+`!4`<')E=FEE=RYP;F=55`D``R>`BD%4><A! >+M57@$`.@#9`"55V54%$#7ID$I5Y!N6%"Z>UDIR:4EI%LD7+J7[E*0+@E!I+MA >+MD>Y8A*5!A*6[\^7]_?WYWIESYYES?SSGW'MG[CP3I:&F0/B<ZCD:&AJADJ*< >+MUA.V/1D,#^=IS;'S)7T"'`L5!3FTQ__.[^W%24^>9U!%`U<T-'R2_QHZ6D86 >+MQ9,3UTT)(H\[C4=.S/!*!:[W1$G9I"0GK>,UOY_MZZ73N]0/1NTY56`IXB6^ >+MIN#6#*+"-@KU*9>O)O^A8UC>J+>[7WX^?U%>_KZTX8._?>E,?J7CG_E?']__ >+M\BKY(*>9][PB'P?#0C$P-#3TRZUU;2LJZS(A/<E!&,72VHR+.I5$#6X:H4;\ >+MQD<^V\`$,)^'R>1IO";]'Z!W-7]_G(<\T#<HB89H:2W"]OW)I9A)4E!ID&4@ >+M"!X"0PK*C3^P0B.Z\\YA5X?+%9=]QVB-KJK@-&9)QR)T!?&]W.]6"[9=WD$B >+M/Y".W,_@@S`O3[S@+]N)14+'1F7]SF.L#'M5]UK`1_)$5XL>HB]8BP)4&)6E >+M9]HL`U^=;C$+WJJ;),,*ILI$Z9HFUB:*84T!7^A--VL"9E_S.B>O*KR)0$\5 >+MW0L(ZR*_6PG*16_FNPWXH4K5"XN@WPE<#T0!N`0-@X8#^Q5DK]X356[%;*D$ >+M"KRS1#[MKV3X5L7\T+0"^8@BJ.Y?1(OST.J_WI]T?BM0!;A2;TO.1;/"-,4N >+M0H/`V>`X8'U_O$L*.:2EW;FL/<8AY86L+,_X$`:1PAU$?K'S.1)=IQ<`:R3J >+M9J%DJQ9S@=!/V3)!!:$,1SE+U=.YERFSOD&4<$:XE5F;I`XN*9/XE]A)JRF_ >+M_MX<"2"#.&<'CA&1'^TD;*'\!R/:RGEW`QT3%^U5>1VM/U]$(Y8<?5<T5O>] >+M1);OCA..DR?R$;1:271KFGI(06U##.6#8O,V1D#W\.$*<(E(.G,5DT?_59U5 >+MO%6-5'MU](N^/0&+J>;B,P,NQ`9;)-VGV^Z6C+$<G<9=/4RV5K]%MB''#K_+ >+M:;KE`#TTV!;YJR--Q^X`PDDQS8EA;P6T2MQ5*+BN*=(_;J"))CT,2NW5#V2C >+M<L'(M_4$0AUHBM6__,Y>.[S),WXM+Z!/0]"&PTD'OU1+HO^>8R:J.Y2S(%0P >+M%_ZH1&/1F!X],)GE]1.W6L$5@_<S5J0Q9DK_FXN/PD3.&O1TBM4JVK]>77K< >+MYARM[O'4FC9.^6'JDS'G%`2>*AB`MD/I0NL(O4SGC[8C&_9E`R5QNP[1/896 >+M**<>$H"O=S&J62&2!"G,:S;74I/Z1$6ZG/U89OF=K5'"O[`Z\?4YF/,,=!>Y >+M4TS=.*^);F$3W>W#A8[-"KH6G=%7;\,S$487*\1&*!UI0C@2*7H<(Q[B?Z>U >+MRJ/F4;=R[WT\Q8TH?ODQZ=4UZ+YI9>6%>R.366O;YUI)82)]=I5]JPA[6_YH >+M[$=AJ)8#!NYWLDE7\N&KM%,W2C$U/R*:_8B;-'M=#)5P@R.$\07X<(9J/:+/ >+M',^VI$RC\]72!P$TFU$!$$T%+AT^GFW=,$V\.LVHL%\/,.AQPP46'0*M,1Z[ >+M=R]#%D2/K?5Q$8#Q8K\HUQ?V$%<2%R))S&*&'^KN)\,K8T\M)=LB?-ND@AVO >+M:+EOQW'(<%=S:P9,=\E95V!Q#CFC*8;A(\@3(S7U>7IL^OC3-B7N6^I[#5`P >+MP@L[/VPH2C64!`G4(@#"7>'T]QH=N7A&F!U,U-3QTF[BU^'#&)20"FQ*$#*( >+MF0S<AGLGAN[[Z".'FIN[#4(BMCF[N%.2-5:@X7:"SV""$BWW+R9OJ6-/[_C@ >+M)$$'S#'OJ(G/)R8T"-MB/_K`(,\Z)$:Y;_MQWUV9N8$I8%="^;+[/G(5]%'K >+MF(]SK\>63@-/:8CJA^^;8:)+/(MDNNQ=GL5CUH_Z#+8O<G>IWZ[I7:\Y=0XT >+M"P`.R"[7EPF\IU^KC5M"QR)3KLVOH7'Q5)#@E?GNZJ"/]IZ[7T=H"XTZ#80Q >+M33@XW*.F#9E"[IV)T'!;]AYUYHZ.J[$OA?^:XJPR1,P$_<,Z6#FH>?P6>.K? >+M1[3:ZJA6I6/O.A<`QU/F65$D6/]9@G>3)X3VF<'/(<LE21TC7Z\29RWE*!G+ >+MU5;$&8*]3`POC50K+(%CR)U^D&QPR&BSR5QAM$T!#8#=F^](4N^=7*MH`"^` >+M?9BPR`%B=V$-J0FI-\X:NS6/T6B2CB*M.'()-ZI`+ULZ9X`D7N,\QXWSX11= >+M_.A70U/'N?=O?=]>)>YA7`Q.?6JK0Q![-'LT#S_DT^5XTD-MWT[CUP!H0:E# >+M3=3*4AYS8%HDW8L?'\)'1`6?V')PA1G>_240?$QAHME:!K7^M4,UU*ZW.7'E >+MDPR5U)42P,47C>.UM\4'+`Z.!*<UHM/NN5(*S9\CMJ@0[/[.8TP=.7_4`;V^ >+M;9<5?=Y6222OX.][9K?_D.?>G<,IVPG<6Q.O%LY1!+(?TN%"SEDW8B#?+I@S >+M-@^S2_%5=RE1!%>/8K&`%=&)37!C)^WDQ=(.=$3.R\\$2_6R&[,'96\2U0J. >+MT_YKBDFSDCFZ3WYQ7PV/`&7-L(^6;'1_T^5A#L?2%:-9?KU^HD)@+G'W,P<D >+MRL`>XOJ#RPC;;\LS?E'N4(*,#^X7O5A/@G=UN];'P&%;6TB8&;,%^?,B9-Q3 >+M"9WTTAGM1M5.'"*C$\L!&&TRO&OWA!+*BP.'$UQ_.9C?P(E[_^_3]I`@+/.[ >+M"FO-^%(R1/1K$28N0U$E=<)6/<&J5#"L,.D=BN7].._O""DB\I`-%=>G,EQN >+M'Q`[)EC,`J3('&6O'DR_6E3*J?ZK^QQ:E`0"JX".B7WT"/)6':.WQ#/Z[93C >+M\8[R21\THHT+7&N*XV+W##`ZN!X[%!]MT+6#Z?_=IC+0E/M8'O*V^=;13RJ: >+MQ*IH\]."@A/TO%*'5A(F_7406*LC/U\R$R/C3G6&E/`>3TMJ>G[*-,W-2"`/ >+M)EUYYSM-X7,D`L_XMBS9?_,4RL_?Y*[NW?(3KZW.<.YO#T8^>S_LG&LW&L79 >+M$G_3&,$O%7;4Y;P.[<&K(@C-'6-/A?91FWKHDRE86UWCD?]C2C>G83IL1+]\ >+MWTSBO?Q]E;+P=EYJ-6)HY4)7X?*K/%4V=QV]A,X'Q-89X^<$=J$LW4S]6.@8 >+MNVSL\XQHZ#2[BY>-1'8WQGZ4U&43<B`&@/EJ)W"\$`*"L-8E16D"<T%J'>-? >+M^2M,@=4E>X(&Z3DT)&/L$5XGC)LSC0BA6*@&=0(49K^OX,=X**0`.U(Z64)L >+M93$,,X,#GS4E&$+^>8>8E!&G$#["IG47QF_]6<#1QMS/+'Q%=!%BY0ID2_VY >+MPOTLRE%W*TJDE)J7QG'0_ONW#^!A8%8#1S70]:::'V6O?.1O:/G;@//Q<+_` >+M&W,MPSYI<?PJ>L.Q1X=9[@_7S/#*&^[9,Y3W;38A^(6<NJI/G>R;R5E*;X2E >+M%.F643I+>:K/H-0<AC7_V4'55^GX2J1/PJ1*MF75E.WTW!&F_-E6;C]%DP'4 >+MT/)E^1OEK7*042I/[S)KS`TVORW-FU?(KNC*KR=M]R9'A%-60QAD@XE`^?G, >+MPXOUCK@3$UPFLGUVV3))O`/7C<*!(8,7?!DH5>]1CYN9NSGNT<3FJ4TNRL#H >+M9;/>647OY2KDD6Q4&$5DNZ'N.]3@\_<(M$7?9%+/<-+L-_M>C>YI'9PDI\S7 >+M74B$8];;%585'_444MRA1,L1O(3*KT>2_X/H^R@'.1&X0:@KQ.:?,!8-52&F >+M90C*B(9'"XEW%=Z0@LP9PR^NPQD$C@=LK3%2/U6!V.3Q7UGYE'7W^Y9ED7*5 >+M1;EK57Y!%?)ZG;Z0[^P4FG+%ZX7W_@"YRPM;*"=,,."]E27H4,<>RQ)3,_5X >+MB)VND[_&Y77NXQQ1Q.JNB4S3Z/CQ1:B5Z@I5<;&*@FS6PQ&1U=5?8>'#+GA) >+M0H[S@E,(Q%R='2+R3XIP['C]18'M)_Y+`I&&.@%A$&6/&RP.D]/'<,]RJKVL >+MR7L9F30F=:#H1YE.,>I>IY?RTLX>Z*`?"DFJ0C?'G"?T:F?J"5F8GVF@\L/G >+M@[:`\QN7.^Z,I.;:L^U-`*<\HSF@S.EI'4%(04='SM^_?P%O?/S3Y%)')M0` >+M%F#7[Y`XRI/EHKJDZT(KGO(NWLBY^CZFHKP)FK_2N[+Z;?"TJ,'YUO$LP8/" >+M4W4#Q40;,U@#D:,GH$.16HKX2I+*Q+B[($0!MY*H^-_-U7W;V3HKR[&4Q448 >+MK#?`?(.HKRAZD,3%Q26-W_HYHE@=E>4ZQB@AD;FX:/0NW[N`N!JYSQ301OI= >+M6&Y<GFS#"6,//[7(2O6UU.XLQS5BF/[4R5SLD"REP+ZJNBDZ?/-[YE8GVWJ7 >+M7)E,-HVMN%?@M"#QN*3/'9)G]'A<X7.)?.5=K!4QBW?D2PDO(=H$HI:99MJL >+M(E=[Z1O&$KJ<5%;-7$>?A`K72=?2="E_\>;FYBS?@V8K:^NOJ:G]^XTK8U%L >+M.8H>'A>1).U2WRP>4?/C>X_]1)J]%;)'>J"JYSU8.9B,-_9]]%X#IA7MMMAZ >+M/*#H.>\YVOPI0<*$BF,#;UHNQSS]R5VX=NK*K?C*W;5+H$P/UL_V*).DX_/1 >+MW'%:SQ/`Z::YT+Y\*3=P$%,B@U"J-&$5T5405!%3#L)H-21T>RLKBQ`L*MSV >+M"_@P]"P2N':;A:-79C3\;S!I<'S<]N'N^M_F)K_=%`L1Z$P#+<=GYTT\Z$+_ >+M-F`WAL6+D'?6B9V98B?M8$+-KQBRBZK-.AC\G8[KLFS,<V'SJ:?;;94XIO** >+MMIAKY)#5+:%B[7R+Q=L]FF/'>V>4Z3:]@9)O<QPLGKP>GS56`O:AZ&$IU;;R >+M\E$N_D9I>0;VOQQXL[7,4I;AXD9K4J*4?U0E<,V`PEJNX/\HP.E&>!%NMK`' >+M9,F%$5J7B!DOG_5@^OW[81?PK=DO5Y#7LH_@#@;6,W9_56L[SLK&%C&8Q*:M >+MH3'A//9'SW04F]P(7JB4]"YVJUT6>#$%(M37[9<@OX!"<"P^-<NE>E3[<`<+ >+MD8T.%FS,O&J#[J;_N?^IPRWI-<9$-CJ*N6I*K8RL42G[9AFSO#LY*1A7,X[O >+MC9JD?JOZ*B<Z+52(0+5M+2O,]_'B$-(&XT%C0W\LW+V+J=X^.S_M%&1D]I[J >+MPFIL5Z_1ZZYA<._2XF[:D$93-H5]^VT-!G(H6<X&XXM=9'$,C(\7N]A(2>3< >+M@F4DI'85OVFS`G^`C.8?',W$HLI+K2'9XLE`E13>@`>_(K7LH1R0[^O7K[^W >+MM-Q.WX@LN9$`@<"VXS[J;\G)!MW&7\^)PI">[T42]T[-#,C&.VI?52JP6:1Y >+MN1T?<'7Q[D9[G$X(%<]#?(3X`7^-TV5QO:S]^?(BYQA;/GZB^J!TXBWF*"VU >+MV!(\"PNP<Z\JJ>#)#SBA)C<>WVMSH(.=:^]DAAB[>!J36_`LW:$_>O\5?H$X >+MJ!\<_5+.#$&S&S11:]YDU%UZ#(D(%-DV>@9LD'_SK.GZ7[.`724RR"G(/,@< >+M(TZ(E@TBL6\A`TB"+#34KBZ0)^7F$K_=/=CW$NAS%TPTA$O;B<,)X;4@OX]+ >+M/3E/MX9$79(1(_F;G+1TT!)3B%V&\<.\D>>2.XW;A+3D!=+R6VHJ<>E6>PC7 >+M1;EU?2&+MQTQM7Y*F/F[2(ILP-_SK5!F'(EACX76*6>3O>]Z[!="ZZ<^+8LK >+M-9R<PS*S[FTUT1X[F@B*R^'^ZP5U]9BQ[85U_[$L2MRCAY3G3['JD`?T^`Y_ >+M/A3U./ALDF^%P%GV/=%K0%*_0-@<RH^(.RA/KD\*L:J+(3O<C&+A!6"9<2]Z >+M1"W_E%WE:Y;!`A(^3D%!_L:.KAC/^S0@N!,WL#O%9)X/P0'/2:7/.ZZ-H]B7 >+MIB1G4NOS%NJ['2@E[C=VKK<92>M:\ER!B'(^7X&*CF0(V0^,C%B-9@A=^4G- >+ME!ET_^V-:37V6_&_K';;UC+QW1>*CHF)@)R%,'HYNG0=;X)S8-&.&_5>(/$\ >+M:&'!@(AJ*?/E'T'"X9HC;]`6W>?.6YP/L@!^-T*$(%^YVL*'67>WN'AB1J&Y >+M_LD(VH$.:CK4A@1/E3S]I;AV!"0=[L\A/#&O81ESSV0F<-0U5DZ=W6/R"KAC >+M\^]N*]SN:\9>#%GS*,4U8-XF.R5Y3XF?,"32+H^YQ\F`##$E5)=`CPJ3<$]9 >+M/FKE7BOSV=#\--.AJ+)!E''YS?*#FX-C^*!H[D$Y<>9Q3R-VE?^MQYCH.L$G >+M>_O!D9&]XV#KX13G:4V%K[FYXSU1)'.-G^F'4[ABVHL;P'C+;7NVGB>+K8:3 >+MY\N[LBVL+SOR/MEV8C_.]&G)=,UL)12C`C-8:\FS%29WV$I)O)U$+<RH`$]G >+M$C/0\$4MG@A:V>TMC_0(]HI5C'_WC')\3KH]_@.OV7GWXXU<9&7M50(,QFYQ >+M<!T_QHC/"XFD0&,E$Z=3Z;8,WIP\*O0PS>Q*^BION4TV_^D7+Z0T9G57AM5< >+MX."7BANR[.3$A5]`8++N0--F%F$SEC7X.PQ?XD)$4/!,PE\A?U6(83_E-,$^ >+MNWU+DE6-)_+VM]DWKGF]>4.JCXZ1CU*^*L_??+AG<:O@>T5^2)HBP%?:C6'` >+MT>M4:2RD_5".^6O&D=WV;Y/.[6(YVGA'>_(W%IYZB/1.!BU7"?(@H)3U8UT$ >+M1(NIJ*Z;BR0!>RTN]-=&2IZEA`5*CKO]\T,[OIA/,TE1)U4V:'F-G(!C& >+MF<&LV\13SF;8X+#],:[$Y\PDPS/YR,8<D%JNO^2LIJNKFVJ?D9EY.6RCI,*J >+MX_&4R3E#K0%%H/(>OA+4'^F^"[;ZC20"S`[MAM2$E73'>KO+/L.-5>\NL/<S >+M,1G>I!7R:W(D3N)'5'/&U&<.V?UTKRO,V&ZQ@A2^^=V0;;T1JKK&_8+_>U,7 >+M7'S'D//ZN#*-UUPF8M3D^H0Y.]^T*JVMMK(W,UU63M?#?AX2S"KX#JE&KRO5 >+MR%&"1E<94?2;^-F[%N%?HYDBQ!"$N'+0V=D9X.M!B/F4G%4PK4;=S>#.G-OF >+M&5=]<MVT6.:0B:G6(ST-$<#!PX2"V7K$2Z1:)!'Y?-&V_7S"?=S/=D.!-D53 >+M)T9+X\'IOC^C7)4B4]G2/A+:P^"@+T>09/9:QM4P\JFOU#4H()N=A6K"6#^L >+M5I>_,U_=_'TQG6PJS,EIW%UE9CK!)%#O"JJ*3J7+\]O(Q1,1(>'C*N($E`9] >+MR,#5OC1/(RL'),U[)"TYDL$=63K.1N@_/_7KTH#C&%.W?\XI1:<]"A9\W]QW >+M9ZH=YOAG*LFEA&MM1O.?9%SK0<LP;+DJG_"O?](+6LD_#=X(+4,ELUYZG]8+ >+MJ'CJ#]5"@YK^K$]=8F"VI]#8JF=9D,I)F#K<+2Z4IR@RZ.P/MF#]R7S=Z/ZK >+M??!,K9D-=TO%^NE'9)&+J,4$G;#7>8A6]+#]S\K7FTN=#QBK&#T[H4Z[F3Z! >+ML8NDY6?'`JAX8CU23S>OY'!M,;?MR\%CRFG8%=EH:\/:\%#7V_5`RPZEDYZ0 >+M*[\-R]`01\'W>C6M?[ZW+/T;S,XKVGF!.]SRCJGYKAS.55]?_Z1_-&OOI!L> >+M=X'"@O70\R'/_-L/XOKUGY*77%P!1R*XY?H%8A&-D,POI%H*:KG"4@M23I4! >+MI*U3691_Q))>4]80@I>Z=&ZG@;:549\B$E*I5L_^$!N=)Q[V)QRU2YC\W:96 >+M7XG3;ZT'*+8^[&&7K[2N`W\#,!.XL3Z+)%`5A5E3U0GMU?<^<%HH9>7,./`' >+MF5E/W%3:@KG]CR6PM9_-O@?8?;:L6<8)TIO#K-/Y9F%`UK6CG%CC\M/KD/#W >+ME'%324MB2M5@CG!,.83U#R/W5[LO6^S_*M$:L3#0-3^1^ZOR<I&4:B*W2O4J >+M#SRZ%.C=OX7+<Z>O_R1O*]BZM_70*0O6$BWG`SC-HL^3J.)IFV@SAQ7TSFAG >+M_!KV>>G+!'!BF)$&;=3[<AL`+Y<8P'7"U]5J?C=]B,L<[P5\K`59BJF./^[9 >+M,^%4&9?OJQZV5Y`6G=KA!7SQ34:G'S677+5!^ROIK@,ZJI_QU_H^R%@#LP&, >+MAN;!?WQY557<-`S(N,R3\GU"PB-[,WV9>3`J!ZM8V1N(T=C9V46E.,)N1G/A >+M/92%RDEND_GR2]S(-F_75/OL#$F%5J7U3\L#_MA3#G9N+SP"WHV*-B_N:`+[ >+M)FM@DWK5"BL"\AU)CG(B`URAT"$J?)V`W4U49*ALF\ML<_7E%?WU&I)+DNNL >+MH^$7.85`7W<I.#.Y`7I0YL<$(0RELI=@'JNQBI*)0,90,^M@<PD2IJ2&87#A >+MQ&R?11W&7>,%Y"Y8D>R]A0(LMH<*C*6"-;F\V";I61^%+_(4]V-$"<53,\HL >+MS7!LD)9*CFQU7Q9'MBZS77KT?J&R'F1-6M8Y`RVMM\E24,+#576];Z1\T11; >+M]-;S:HM8LOT_J;VD*[?7M(WI*.O]WM;+,%I<7=O[=P.TANHF2Y6KQP">/)RB >+MLZKGM*T-9?(PTQ`E)69%F[_[N6@H;2S+Y>Y[.:DS*R/K2$+?:=A3F;(4"A"> >+M,WX_%I](JRKA)9Y+_MER%/_17+1':CH;K0&O3S%/4"FICRH85:1$#1Z!$[4C >+M?%[G9"LW>-?(_P0JGZUA<<1=;/W266W:8\FYVRDL'&D3C'/(?5=J7MTZ*B=; >+ML%3U$]^PS92Z9(7ZK\PJE[B_STO_``Y6SW@1<GJG)<+=D'V:(6;7M($7H%D. >+MD9"'!-2>^J`PR=IOLU2'>[Z5O9>LK];ZH+[18V754ES8W_D<ZG$A#1@BZ+M6 >+M@R]W+*-\\E1^N`K_)JG3?3#=T>+;'PQ?J<0&<PJ=FOMM/C$T/';J+2^HS-J) >+M,]5@17TOVJ98SM_`IQCOUJQY\__[$S\,/6+"UM'>!+>.WJ,]#25Y-;D*&;/@ >+M_P!02P$"%P,*``````"`<Y4Q````````````````"``-`````````!``[4$` >+M````8G)O=W-E<B]55`4``S]YR$%5>```4$L!`A<#"@``````E1)K,0`````` >+M``````````T`#0`````````0`.U!.P```&)R;W=S97(O<')E9B]55`4``\H2 >+MDT%5>```4$L!`A<#%`````@`E1)K,=_]B'*-!@``>Q,``!4`#0```````0`` >+M`("!>P```&)R;W=S97(O<')E9B]P<F5F+F-S<U54!0`#RA*3055X``!02P$" >+M%P,4````"`!4@F0Q(N^V6&<C``#*(P``&``-````````````@(%0!P``8G)O >+M=W-E<B]P<F5F+T]P=&EO;G,N<&YG550%``.PG(I!57@``%!+`0(7`Q0````( >+M`")R9#'@^Q%V7@<``&D)```4``T```````````"`@0(K``!B<F]W<V5R+U1H >+M<F]B8F5R+F=I9E54!0`#+X"*055X``!02P$"%P,*```````B<F0QV)#%O5<" >+M``!7`@``%``-````````````@(&G,@``8G)O=W-E<B]4:')O8F)E<BYP;F=5 >+M5`4``R^`BD%5>```4$L!`A<#"@``````(G)D,9[\J5?`!@``P`8```X`#0`` >+M`````````("!134``&)R;W=S97(O1V\N<&YG550%``,O@(I!57@``%!+`0(7 >+M`Q0````(`")R9#'B>DX+X@```)H!```4``T```````$```"`@48\``!B<F]W >+M<V5R+W!A9V5);F9O+F-S<U54!0`#+X"*055X``!02P$"%P,*```````B<F0Q >+MM1I"&0P#```,`P``%0`-````````````I(%O/0``8G)O=W-E<B]H:6=H;&EG >+M:'0N<&YG550%``,O@(I!57@``%!+`0(7`Q0````(`$R8DS&B#*7VS$@!`,-( >+M`0`6``T```````````"`@<-```!B<F]W<V5R+U1O;VQB87(N>&-F+F=Z550% >+M``./%L9!57@``%!+`0(7`PH``````")R9#%=R2MYD`$``)`!```9``T````` >+M``````"`@=B)`0!B<F]W<V5R+T-L;W-E+71A8BUO;&0N<&YG550%``,O@(I! >+M57@``%!+`0(7`PH``````(=>93%CD$/_L`$``+`!```:``T```````````"D >+M@;2+`0!B<F]W<V5R+W!A9V4M;&EV96UA<FMS+G!N9U54!0`#O:^+055X``!0 >+M2P$"%P,*``````#+F9,Q0SR)N%<^``!7/@``'``-````````````@(&QC0$` >+M8G)O=W-E<B]4;V]L8F%R+7-M86QL+GAC9BYG>E54!0`#7AG&055X``!02P$" >+M%P,4````"``B<F0Q3B05*SP```!#````&``-````````````@(%7S`$`8G)O >+M=W-E<B]S96%R8V@M87)R;W<N9VEF550%``,O@(I!57@``%!+`0(7`Q0````( >+M`-B9DS'_8=-R524``'LE```9``T```````````"`@=[,`0!B<F]W<V5R+U1O >+M;VQB87(M<VUA;&PN<&YG550%``-W&<9!57@``%!+`0(7`PH``````#M@93&< >+M*,]+=@<``'8'```9``T```````````"V@7_R`0!B<F]W<V5R+VQI=F5M87)K >+M+6ET96TN<&YG550%``,"LHM!57@``%!+`0(7`PH``````")R9#$13AS9W`(` >+M`-P"```7``T```````````"`@4'Z`0!B<F]W<V5R+W!A9V4M=&AE;65S+G!N >+M9U54!0`#+X"*055X``!02P$"%P,*```````B<F0Q!]%04_X!``#^`0``%@`- >+M````````````@(%G_0$`8G)O=W-E<B]396%R8V@M8F%R+G!N9U54!0`#+X"* >+M055X``!02P$"%P,*```````B<F0QK:[IVT$"``!!`@``$@`-```````````` >+M@(&N_P$`8G)O=W-E<B]396-U<F4N<&YG550%``,O@(I!57@``%!+`0(7`PH` >+M`````")R9#'&^^M<'0(``!T"```;``T```````````"`@30"`@!B<F]W<V5R >+M+U-E8W5R:71Y+6)R;VME;BYP;F=55`4``R^`BD%5>```4$L!`A<#"@`````` >+M(G)D,76TG0EX`0``>`$``!``#0```````````("!GP0"`&)R;W=S97(O26YF >+M;RYP;F=55`4``R^`BD%5>```4$L!`A<#%`````@`(G)D,3A*:OF,#P``;1(` >+M`!L`#0```````````*2!6@8"`&)R;W=S97(O5&AR;V)B97(M;65D:75M+F=I >+M9E54!0`#+X"*055X``!02P$"%P,*```````B<F0QXDZ/=((#``""`P``&P`- >+M````````````I($T%@(`8G)O=W-E<B]4:')O8F)E<BUM961I=6TN<&YG550% >+M``,O@(I!57@``%!+`0(7`PH``````")R9#%$]5ILP`8``,`&```4``T````` >+M``````"`@00:`@!B<F]W<V5R+T=O+7-M86QL+G!N9U54!0`#+X"*055X``!0 >+M2P$"%P,*``````!*7V4Q$;;]<MT$``#=!```&@`-````````````I($+(0(` >+M8G)O=W-E<B]L:79E;6%R:RUI=&5M:2YP;F=55`4``RRQBT%5>```4$L!`A<# >+M%`````@`(G)D,?>)VO="!0``"P<``!\`#0```````````*2!-28"`&)R;W=S >+M97(O5&AR;V)B97(M<VUA;&PM9&%R:RYG:6955`4``R^`BD%5>```4$L!`A<# >+M%`````@`R9B3,;2(J*@E;```OFX``!,`#0```````````("!R2L"`&)R;W=S >+M97(O5&]O;&)A<BYP;F=55`4``WD7QD%5>```4$L!`A<#%`````@`(G)D,07) >+MPTJA`0``;P,``!<`#0```````0```("!-)@"`&)R;W=S97(O86)O=71$:6%L >+M;V<N8W-S550%``,O@(I!57@``%!+`0(7`Q0````(`")R9#%0OOIR>P4``$4' >+M```:``T```````````"`@1^:`@!B<F]W<V5R+U1H<F]B8F5R+7-M86QL+F=I >+M9E54!0`#+X"*055X``!02P$"%P,*```````B<F0Q\_<8)+\!``"_`0``&@`- >+M````````````@('GGP(`8G)O=W-E<B]4:')O8F)E<BUS;6%L;"YP;F=55`4` >+M`R^`BD%5>```4$L!`A<#"@``````#IR3,0```````````````!(`#0`````` >+M```0`.U!\Z$"`&)R;W=S97(O8F]O:VUA<FMS+U54!0`#FQW&055X``!02P$" >+M%P,4````"`!`<F0Q.39WZST"```T"0``)@`-```````!````@($XH@(`8G)O >+M=W-E<B]B;V]K;6%R:W,O8F]O:VUA<FMS36%N86=E<BYC<W-55`4``VB`BD%5 >+M>```4$L!`A<#%`````@`)YR3,2O,06Y4'@``@AX``"<`#0```````````("! >+MSJ0"`&)R;W=S97(O8F]O:VUA<FMS+T)O;VMM87)K<RUT;V]L8F%R+G!N9U54 >+M!0`#R1W&055X``!02P$"%P,4````"``B<F0Q_.S?N<$```!I`0``(0`-```` >+M```!````@(%\PP(`8G)O=W-E<B]B;V]K;6%R:W,O861D0F]O:VUA<FLN8W-S >+M550%``,O@(I!57@``%!+`0(7`Q0````(`")R9#'EL0&'K@```&,!```5``T` >+M``````$```"D@9'$`@!B<F]W<V5R+W-E87)C:&)A<BYC<W-55`4``R^`BD%5 >+M>```4$L!`A<#%`````@`(G)D,0!.1KQ8`0``-P,``!0`#0```````0```("! >+MA\4"`&)R;W=S97(O8V]N=&5N=',N<F1F550%``,O@(I!57@``%!+`0(7`Q0` >+M```(`+&:DS&Z"LRH;Q@``-&%```3``T```````$```"`@2;'`@!B<F]W<V5R >+M+V)R;W=S97(N8W-S550%``,-&\9!57@``%!+`0(7`Q0````(`")R9#%F#U]P >+MV`$``'($```3``T```````$```"`@=O?`@!B<F]W<V5R+V)R;W=S97(N>&UL >+M550%``,O@(I!57@``%!+`0(7`PH``````!MR9#$````````````````-``T` >+M````````$`#M0?GA`@!C;VUM=6YI8V%T;W(O550%``,F@(I!57@``%!+`0(7 >+M`PH``````!MR9#$````````````````4``T`````````$`#M03GB`@!C;VUM >+M=6YI8V%T;W(O8V]O:VEE+U54!0`#)H"*055X``!02P$"%P,4````"``;<F0Q >+MCNOQSML"``#_`P``)@`-````````````@(&`X@(`8V]M;75N:6-A=&]R+V-O >+M;VMI92]T87-K8F%R+6-O;VMI92YG:6955`4``R:`BD%5>```4$L!`A<#%``` >+M``@`&W)D,<B#)S:2!@``S`8``"4`#0```````````("!M.4"`&-O;6UU;FEC >+M871O<B]C;V]K:64O<W1A='5S+6-O;VMI92YG:6955`4``R:`BD%5>```4$L! >+M`A<#"@``````&W)D,>--XFTI````*0```!T`#0```````0```("!GNP"`&-O >+M;6UU;FEC871O<B]C;VUM=6YI8V%T;W(N8W-S550%``,F@(I!57@``%!+`0(7 >+M`Q0````(`!MR9#%*-T.N;`$``%T#```9``T```````$```"`@1?M`@!C;VUM >+M=6YI8V%T;W(O8V]N=&5N=',N<F1F550%``,F@(I!57@``%!+`0(7`PH````` >+M`!QR9#$````````````````5``T`````````$`#M0<_N`@!C;VUM=6YI8V%T >+M;W(O<')O9FEL92]55`4``R>`BD%5>```4$L!`A<#%`````@`&W)D,7:SD,V, >+M`P``.P<``"``#0```````0```("!%^\"`&-O;6UU;FEC871O<B]P<F]F:6QE >+M+W!R;V9I;&4N8W-S550%``,F@(I!57@``%!+`0(7`Q0````(`!MR9#&98$<[ >+M@@```(<````@``T```````````"`@?;R`@!C;VUM=6YI8V%T;W(O<')O9FEL >+M92]M:6=R871E+F=I9E54!0`#)H"*055X``!02P$"%P,4````"``<<F0Q*>V; >+M\DH```!,````*@`-````````````@('+\P(`8V]M;75N:6-A=&]R+W!R;V9I >+M;&4O<')O9FEL96EC;VXM;&%R9V4N9VEF550%``,G@(I!57@``%!+`0(7`Q0` >+M```(`!QR9#$,TS?7K@```.0````G``T```````$```"`@7+T`@!C;VUM=6YI >+M8V%T;W(O<')O9FEL92]P<F]F:6QE36%N86=E<BYC<W-55`4``R>`BD%5>``` >+M4$L!`A<#%`````@`(G)D,56)HW2E`0``608```P`#0```````0```("!>O4" >+M`&-O;G1E;G1S+G)D9E54!0`#+X"*055X``!02P$"%P,*``````!\<Y4Q```` >+M````````````!P`-`````````!``[4%>]P(`9VQO8F%L+U54!0`#/'G(055X >+M``!02P$"%P,4````"`#P8'$Q%Y)5&C`&``!3%P``#P`-```````!````@(&8 >+M]P(`9VQO8F%L+VUE;G4N8W-S550%``-3A9M!57@``%!+`0(7`PH``````(]H >+M:3$````````````````,``T`````````$`#M00K^`@!G;&]B86PO;65N=2]5 >+M5`4``ZX&D4%5>```4$L!`A<#%`````@`'')D,:=LYC`\````8P```!H`#0`` >+M`````````("!2?X"`&=L;V)A;"]M96YU+VUE;G4M<F%D:6\N9VEF550%``,G >+M@(I!57@``%!+`0(7`PH``````!QR9#%D^=$<&0(``!D"```:``T````````` >+M``"`@=+^`@!G;&]B86PO;65N=2]M96YU+7)A9&EO+G!N9U54!0`#)X"*055X >+M``!02P$"%P,4````"``<<F0Q)CO?<I$```":````(P`-````````````@($X >+M`0,`9VQO8F%L+VUE;G4O365N=2UA<G)O=RUD:7-A8FQE9"YP;F=55`4``R>` >+MBD%5>```4$L!`A<#%`````@`'')D,7RP(BH\````8P```"``#0`````````` >+M`("!'P(#`&=L;V)A;"]M96YU+VUE;G4M<F%D:6\M:&]V97(N9VEF550%``,G >+M@(I!57@``%!+`0(7`PH``````!QR9#&G->:MA0$``(4!```@``T````````` >+M``"`@:X"`P!G;&]B86PO;65N=2]M96YU+7)A9&EO+6AO=F5R+G!N9U54!0`# >+M)X"*055X``!02P$"%P,4````"``<<F0QIVSF,#P```!C````(P`-```````` >+M````@(&&!`,`9VQO8F%L+VUE;G4O;65N=2UR861I;RUD:7-A8FQE9"YG:695 >+M5`4``R>`BD%5>```4$L!`A<#"@``````'')D,:6Q,GZ1`0``D0$``",`#0`` >+M`````````("!&`4#`&=L;V)A;"]M96YU+VUE;G4M<F%D:6\M9&ES86)L960N >+M<&YG550%``,G@(I!57@``%!+`0(7`Q0````(`!QR9#'667E^C````)8````: >+M``T```````````"`@?\&`P!G;&]B86PO;65N=2]-96YU+6%R<F]W+G!N9U54 >+M!0`#)X"*055X``!02P$"%P,4````"``<<F0Q'>4D^(T```"7````(``-```` >+M````````@('8!P,`9VQO8F%L+VUE;G4O365N=2UA<G)O=RUH;W9E<BYP;F=5 >+M5`4``R>`BD%5>```4$L!`A<#%`````@`'')D,8]QYA0T`0``.0$``"D`#0`` >+M`````````("!N`@#`&=L;V)A;"]M96YU+VUE;G4M<F%D:6\M9&ES86)L960M >+M:&]V97(N<&YG550%``,G@(I!57@``%!+`0(7`Q0````(`!QR9#$[(DHW/``` >+M`&8````C``T```````````"`@4@*`P!G;&]B86PO;65N=2]M96YU+6-H96-K >+M+61I<V%B;&5D+F=I9E54!0`#)X"*055X``!02P$"%P,4````"``<<F0QK[(Y >+M#IT```"L````(P`-````````````@(':"@,`9VQO8F%L+VUE;G4O;65N=2UC >+M:&5C:RUD:7-A8FQE9"YP;F=55`4``R>`BD%5>```4$L!`A<#%`````@`'')D >+M,3LB2C<\````9@```!H`#0```````````("!S0L#`&=L;V)A;"]M96YU+VUE >+M;G4M8VAE8VLN9VEF550%``,G@(I!57@``%!+`0(7`Q0````(`!QR9#&&K?0+ >+M'0$``"`!```:``T```````````"`@58,`P!G;&]B86PO;65N=2]M96YU+6-H >+M96-K+G!N9U54!0`#)X"*055X``!02P$"%P,4````"``<<F0QNYF-0RT````Q >+M````&@`-````````````@('`#0,`9VQO8F%L+VUE;G4O;65N=2UA<G)O=RYG >+M:6955`4``R>`BD%5>```4$L!`A<#%`````@`'')D,;BDY@TV````70```",` >+M#0```````````("!.@X#`&=L;V)A;"]M96YU+VUE;G4M87)R;W<M9&ES86)L >+M960N9VEF550%``,G@(I!57@``%!+`0(7`Q0````(`!QR9#'LHLLD`P$```@! >+M```I``T```````````"`@<8.`P!G;&]B86PO;65N=2]M96YU+6-H96-K+61I >+M<V%B;&5D+6AO=F5R+G!N9U54!0`#)X"*055X``!02P$"%P,4````"``<<F0Q >+M,O'-/30````Y````(``-````````````@($E$`,`9VQO8F%L+VUE;G4O;65N >+M=2UC:&5C:RUH;W9E<BYG:6955`4``R>`BD%5>```4$L!`A<#"@``````'')D >+M,77C:_19`0``60$``"``#0```````````("!K!`#`&=L;V)A;"]M96YU+VUE >+M;G4M8VAE8VLM:&]V97(N<&YG550%``,G@(I!57@``%!+`0(7`Q0````(`!QR >+M9#'4N:J%+0```%T````@``T```````````"`@5@2`P!G;&]B86PO;65N=2]M >+M96YU+6%R<F]W+6AO=F5R+F=I9E54!0`#)X"*055X``!02P$"%P,*```````< >+M<F0Q````````````````#``-`````````!``[4'8$@,`9VQO8F%L+W1R964O >+M550%``,H@(I!57@``%!+`0(7`Q0````(`!QR9#$W7AR+J0```+4````;``T` >+M``````````"`@1<3`P!G;&]B86PO=')E92]T=VES='DM;W!E;BYP;F=55`4` >+M`R>`BD%5>```4$L!`A<#%`````@`'')D,</_`AA'````2@```!P`#0`````` >+M`````("!#A0#`&=L;V)A;"]T<F5E+V-O;'5M;G!I8VME<BYG:6955`4``R>` >+MBD%5>```4$L!`A<#%`````@`'')D,;[HM@RP````N@```!L`#0`````````` >+M`("!I!0#`&=L;V)A;"]T<F5E+W1W:7-T>2UC;'-D+G!N9U54!0`#)X"*055X >+M``!02P$"%P,*```````<<F0Q@["Z0#4#```U`P``&``-````````````@(&B >+M%0,`9VQO8F%L+W1R964O<V]R="UA<V,N9VEF550%``,G@(I!57@``%!+`0(7 >+M`Q0````(`!QR9#'AUA_;K````+D````?``T```````````"`@2(9`P!G;&]B >+M86PO=')E92]T=VES='DM8VQS9"UH=G(N<&YG550%``,H@(I!57@``%!+`0(7 >+M`Q0````(`!QR9#'3!(23H````*X````?``T```````````"`@2`:`P!G;&]B >+M86PO=')E92]T=VES='DM;W!E;BUH=G(N<&YG550%``,H@(I!57@``%!+`0(7 >+M`PH``````!QR9#%\%T9A,P,``#,#```8``T```````````"`@1(;`P!G;&]B >+M86PO=')E92]S;W)T+61S8RYG:6955`4``RB`BD%5>```4$L!`A<#%`````@` >+MPUYF,?4EKX-^!P``AQX```\`#0```````0```("!D!X#`&=L;V)A;"]T<F5E >+M+F-S<U54!0`#K@&-055X``!02P$"%P,*```````<<F0Q```````````````` >+M#P`-`````````!``[4%0)@,`9VQO8F%L+V-O;G-O;&4O550%``,H@(I!57@` >+M`%!+`0(7`Q0````(`!QR9#'GN";O+0```#`````E``T```````````"`@9(F >+M`P!G;&]B86PO8V]N<V]L92]C;VYS;VQE+65R<F]R+61A<V@N9VEF550%``,H >+M@(I!57@``%!+`0(7`Q0````(`!QR9#&Y!:W!E@4``%L.```:``T```````$` >+M``"`@1<G`P!G;&]B86PO8V]N<V]L92]C;VYS;VQE+F-S<U54!0`#*("*055X >+M``!02P$"%P,4````"``<<F0Q6,*4FC4````W````)@`-````````````@('Z >+M+`,`9VQO8F%L+V-O;G-O;&4O8V]N<V]L92UE<G)O<BUC87)E="YG:6955`4` >+M`RB`BD%5>```4$L!`A<#%`````@`'')D,8.-S5V5!```T`L``!@`#0`````` >+M`0```("!B"T#`&=L;V)A;"]P<F]G<F5S<VUE=&5R+F-S<U54!0`#*("*055X >+M``!02P$"%P,4````"``<<F0Q$(9MEAD$``#I"@``$``-```````!````@(%H >+M,@,`9VQO8F%L+W)A9&EO+F-S<U54!0`#*("*055X``!02P$"%P,4````"``< >+M<F0Q&0PWEX$"``!'!```&P`-```````!````@('$-@,`9VQO8F%L+V-U<W1O >+M;6EZ951O;VQB87(N8W-S550%``,H@(I!57@``%!+`0(7`Q0````(`&AZ<#$I >+M>F6R?`0``.82```5``T```````$```"`@9,Y`P!G;&]B86PO9F]R;6%T=&EN >+M9RYC<W-55`4``\1@FD%5>```4$L!`A<#%`````@`'')D,1(H5,T.`@``FP,` >+M`!,`#0```````0```("!5SX#`&=L;V)A;"]E>'!A;F1E<BYC<W-55`4``RB` >+MBD%5>```4$L!`A<#%`````@`$FQQ,28F#_H*!0``!Q```!(`#0```````0`` >+M`("!JT`#`&=L;V)A;"]T;V]L8F%R+F-S<U54!0`#1)F;055X``!02P$"%P,4 >+M````"``=<F0Q??6Q**X$``"/"P``$@`-```````!````@('Z10,`9VQO8F%L >+M+W!L=6=I;G,N8W-S550%``,I@(I!57@``%!+`0(7`Q0````(`!(-:S'^S9`U >+M!P4```$0```1``T```````$```"`@>U*`P!G;&]B86PO=&%B8F]X+F-S<U54 >+M!0`#9`F3055X``!02P$"%P,*```````=<F0Q````````````````#0`-```` >+M`````!``[4$X4`,`9VQO8F%L+V%R<F]W+U54!0`#*H"*055X``!02P$"%P,4 >+M````"``=<F0Q.^CLDBH````O````'@`-````````````@(%X4`,`9VQO8F%L >+M+V%R<F]W+V%R<F]W+6QF="UH;W8N9VEF550%``,I@(I!57@``%!+`0(7`Q0` >+M```(`!UR9#&/(6+W*0```"X````>``T```````````"`@?-0`P!G;&]B86PO >+M87)R;W<O87)R;W<M<FET+6AO=BYG:6955`4``RF`BD%5>```4$L!`A<#%``` >+M``@`'7)D,45@"_XT````.````"0`#0```````````("!;5$#`&=L;V)A;"]A >+M<G)O=R]A<G)O=RUR:70M<VAA<G`M96YD+F=I9E54!0`#*8"*055X``!02P$" >+M%P,4````"``=<F0QOU=L>"D````N````&0`-````````````@('X40,`9VQO >+M8F%L+V%R<F]W+V%R<F]W+61N+F=I9E54!0`#*8"*055X``!02P$"%P,4```` >+M"``=<F0Q/:(BS]D```#>````*0`-````````````@(%M4@,`9VQO8F%L+V%R >+M<F]W+V%R<F]W<RUD<F]P9&]W;BUD:7-A8FQE9"YP;F=55`4``RF`BD%5>``` >+M4$L!`A<#%`````@`'7)D,5XT[M8P````-0```"``#0```````````("!HE,# >+M`&=L;V)A;"]A<G)O=R]A<G)O=RUL9G0M<VAA<G`N9VEF550%``,I@(I!57@` >+M`%!+`0(7`Q0````(`!UR9#'R>5X],````#0````?``T```````````"`@254 >+M`P!G;&]B86PO87)R;W<O87)R;W<M=7`M<VAA<G`N9VEF550%``,I@(I!57@` >+M`%!+`0(7`Q0````(`!UR9#$P?]M$+0```"X````=``T```````````"`@:=4 >+M`P!G;&]B86PO87)R;W<O87)R;W<M9&XM9&ES+F=I9E54!0`#*8"*055X``!0 >+M2P$"%P,4````"``=<F0QCR%B]RD````N````&@`-````````````@($D50,` >+M9VQO8F%L+V%R<F]W+V%R<F]W+7)I="YG:6955`4``RF`BD%5>```4$L!`A<# >+M%`````@`'7)D,0B2B%LI````+@```!D`#0```````````("!FE4#`&=L;V)A >+M;"]A<G)O=R]A<G)O=RUU<"YG:6955`4``RF`BD%5>```4$L!`A<#%`````@` >+M'7)D,3OH[)(J````+P```!H`#0```````````("!#U8#`&=L;V)A;"]A<G)O >+M=R]A<G)O=RUL9G0N9VEF550%``,I@(I!57@``%!+`0(7`Q0````(`!UR9#&B >+MP=?O+@```"\````>``T```````````"`@896`P!G;&]B86PO87)R;W<O87)R >+M;W<M;&9T+61I<RYG:6955`4``RF`BD%5>```4$L!`A<#%`````@`'7)D,0`) >+MU<LM````+@```!X`#0```````````("!!5<#`&=L;V)A;"]A<G)O=R]A<G)O >+M=RUR:70M9&ES+F=I9E54!0`#*8"*055X``!02P$"%P,4````"``=<F0Q")*( >+M6RD````N````'0`-````````````@(P,`9VQO8F%L+V%R<F]W+V%R<F]W >+M+75P+6AO=BYG:6955`4``RF`BD%5>```4$L!`A<#%`````@`'7)D,82"10XK >+M````,P```!\`#0```````````("!_%<#`&=L;V)A;"]A<G)O=R]A<G)O=RUD >+M;BUS:&%R<"YG:6955`4``RF`BD%5>```4$L!`A<#%`````@`'7)D,0S8;-FF >+M````J@```!L`#0```````````("!>5@#`&=L;V)A;"]A<G)O=R]A<G)O=RUD >+M;W=N+G!N9U54!0`#*8"*055X``!02P$"%P,4````"``=<F0QA[H_9RT````N >+M````'0`-````````````@(%M60,`9VQO8F%L+V%R<F]W+V%R<F]W+75P+61I >+M<RYG:6955`4``RF`BD%5>```4$L!`A<#%`````@`'7)D,5U-MI3,````U``` >+M`"``#0```````````("!ZED#`&=L;V)A;"]A<G)O=R]A<G)O=W,M9')O<&1O >+M=VXN<&YG550%``,I@(I!57@``%!+`0(7`Q0````(`!UR9#$&E<`?,````#4` >+M```@``T```````````"`@0E;`P!G;&]B86PO87)R;W<O87)R;W<M<FET+7-H >+M87)P+F=I9E54!0`#*H"*055X``!02P$"%P,4````"``=<F0QOU=L>"D````N >+M````'0`-````````````@(&,6P,`9VQO8F%L+V%R<F]W+V%R<F]W+61N+6AO >+M=BYG:6955`4``RJ`BD%5>```4$L!`A<#%`````@`'7)D,3E&.R\T````.``` >+M`"0`#0```````````("!!5P#`&=L;V)A;"]A<G)O=R]A<G)O=RUL9G0M<VAA >+M<G`M96YD+F=I9E54!0`#*H"*055X``!02P$"%P,*``````![F64Q```````` >+M````````#0`-`````````!``[4&07`,`9VQO8F%L+VEC;VYS+U54!0`#R1:, >+M055X``!02P$"%P,*```````@<F0Q````````````````$@`-`````````!`` >+M[4'07`,`9VQO8F%L+VEC;VYS+VUE;G4O550%``,K@(I!57@``%!+`0(7`PH` >+M`````!UR9#$&@)M;[`$``.P!```:``T```````````"`@15=`P!G;&]B86PO >+M:6-O;G,O;65N=2]E9&ET+G!N9U54!0`#*H"*055X``!02P$"%P,4````"``= >+M<F0Q)R"`TX8!``">`0``)``-````````````@(%.7P,`9VQO8F%L+VEC;VYS >+M+VUE;G4O8V]O:VEE+7-E<W-I;VXN<&YG550%``,J@(I!57@``%!+`0(7`PH` >+M`````!UR9#%$]2_D"@,```H#```9``T```````````"`@2MA`P!G;&]B86PO >+M:6-O;G,O;65N=2]D96PN<&YG550%``,J@(I!57@``%!+`0(7`PH``````!UR >+M9#&H$`4Q`0(```$"```:``T```````````"`@8%D`P!G;&]B86PO:6-O;G,O >+M;65N=2]U;F1O+G!N9U54!0`#*H"*055X``!02P$"%P,*```````=<F0Q3D'/ >+M\(H"``"*`@``(@`-````````````I('/9@,`9VQO8F%L+VEC;VYS+VUE;G4O >+M9&5L+61I<V%B;&5D+G!N9U54!0`#*H"*055X``!02P$"%P,*```````=<F0Q >+M>QT62"<"```G`@``'@`-````````````@(&N:0,`9VQO8F%L+VEC;VYS+VUE >+M;G4O;6%X:6UI>F4N<&YG550%``,J@(I!57@``%!+`0(7`PH``````!UR9#$R >+MB+6M\`$``/`!```9``T```````````"`@29L`P!G;&]B86PO:6-O;G,O;65N >+M=2]C=70N<&YG550%``,J@(I!57@``%!+`0(7`PH``````!UR9#'0)07:4P(` >+M`%,"```:``T```````````"`@6)N`P!G;&]B86PO:6-O;G,O;65N=2]S879E >+M+G!N9U54!0`#*H"*055X``!02P$"%P,*```````=<F0QF9!B9",#```C`P`` >+M'@`-````````````@($"<0,`9VQO8F%L+VEC;VYS+VUE;G4O>F]O;5]F:70N >+M<&YG550%``,J@(I!57@``%!+`0(7`PH``````!UR9#'GN`@`,P(``#,"```; >+M``T```````````"`@79T`P!G;&]B86PO:6-O;G,O;65N=2]P87-T92YP;F=5 >+M5`4``RJ`BD%5>```4$L!`A<#"@``````'7)D,67W@[M,`@``3`(``!H`#0`` >+M`````````("!]W8#`&=L;V)A;"]I8V]N<R]M96YU+V9O;G0N<&YG550%``,J >+M@(I!57@``%!+`0(7`PH``````!UR9#'PN]@E_0(``/T"```C``T````````` >+M``"`@9!Y`P!G;&]B86PO:6-O;G,O;65N=2]P<FEN=%]P<F5V:65W+G!N9U54 >+M!0`#*H"*055X``!02P$"%P,*```````=<F0QEDZ&L>\"``#O`@``'0`-```` >+M````````@('C?`,`9VQO8F%L+VEC;VYS+VUE;G4O<V%V95]A<RYP;F=55`4` >+M`RJ`BD%5>```4$L!`A<#"@``````'7)D,1=295Z[`0``NP$``"(`#0`````` >+M`````*2!(H`#`&=L;V)A;"]I8V]N<R]M96YU+V-U="UD:7-A8FQE9"YP;F=5 >+M5`4``RJ`BD%5>```4$L!`A<#"@``````'7)D,<W!3(;P`P``\`,``!L`#0`` >+M`````````("!,H(#`&=L;V)A;"]I8V]N<R]M96YU+V]K+3(R+G!N9U54!0`# >+M*H"*055X``!02P$"%P,4````"``=<F0Q5H@</9\```"M````'``-```````` >+M````@(%PA@,`9VQO8F%L+VEC;VYS+VUE;G4O<F5M;W9E+G!N9U54!0`#*H"* >+M055X``!02P$"%P,*```````=<F0Q.%RIG>H!``#J`0``&@`-```````````` >+M@(%>AP,`9VQO8F%L+VEC;VYS+VUE;G4O=V%I="YP;F=55`4``RJ`BD%5>``` >+M4$L!`A<#"@``````'7)D,8[>GH60`@``D`(``"0`#0```````````("!E8D# >+M`&=L;V)A;"]I8V]N<R]M96YU+W-E87)C:%]R97!L86-E+G!N9U54!0`#*H"* >+M055X``!02P$"%P,*```````=<F0Q"TDF^EP"``!<`@``'``-```````````` >+M@(%\C`,`9VQO8F%L+VEC;VYS+VUE;G4O:6UP;W)T+G!N9U54!0`#*H"*055X >+M``!02P$"%P,4````"``=<F0Q]^QQPUL!``!=`0``&0`-````````````@($G >+MCP,`9VQO8F%L+VEC;VYS+VUE;G4O;F5W+G!N9U54!0`#*H"*055X``!02P$" >+M%P,*```````=<F0QYUW>`F@"``!H`@``)@`-````````````@('.D`,`9VQO >+M8F%L+VEC;VYS+VUE;G4O<')I;G1?<')O<&5R=&EE<RYP;F=55`4``RJ`BD%5 >+M>```4$L!`A<#%`````@`'7)D,0]^-MM2`0``50$``!H`#0```````````("! >+MCY,#`&=L;V)A;"]I8V]N<R]M96YU+V-O<'DN<&YG550%``,J@(I!57@``%!+ >+M`0(7`PH``````!UR9#%PU7@)#P,```\#```C``T```````````"`@2Z5`P!G >+M;&]B86PO:6-O;G,O;65N=2]E9&ET7V)O;VMM87)K+G!N9U54!0`#*H"*055X >+M``!02P$"%P,*```````@<F0Q<^M\!=P"``#<`@``&P`-````````````@(&3 >+MF`,`9VQO8F%L+VEC;VYS+VUE;G4O=&AE;64N<&YG550%``,K@(I!57@``%!+ >+M`0(7`PH``````"!R9#'-?3Y]50$``%4!```9``T```````````"`@;V;`P!G >+M;&]B86PO:6-O;G,O;65N=2]A9&0N<&YG550%``,K@(I!57@``%!+`0(7`PH` >+M`````"!R9#%2<*L&3@,``$X#```8``T```````````"`@5Z=`P!G;&]B86PO >+M:6-O;G,O;65N=2]O:RYP;F=55`4``RN`BD%5>```4$L!`A<#"@``````(')D >+M,7]T6R&&`0``A@$``",`#0```````````*2!]Z`#`&=L;V)A;"]I8V]N<R]M >+M96YU+W5N9&\M9&ES86)L960N<&YG550%``,K@(I!57@``%!+`0(7`PH````` >+M`"!R9#&[/QO('P(``!\"```?``T```````````"`@=.B`P!G;&]B86PO:6-O >+M;G,O;65N=2]L:6=H=&)U;&(N<&YG550%``,K@(I!57@``%!+`0(7`PH````` >+M`"!R9#$8@+"F&`,``!@#```<``T```````````"`@42E`P!G;&]B86PO:6-O >+M;G,O;65N=2]Z;V]M7S$N<&YG550%``,K@(I!57@``%!+`0(7`PH``````"!R >+M9#'P'?2RN0$``+D!```D``T```````````"D@:NH`P!G;&]B86PO:6-O;G,O >+M;65N=2]P87-T92UD:7-A8FQE9"YP;F=55`4``RN`BD%5>```4$L!`A<#"@`` >+M````(')D,9,M%%GW`0``]P$``!H`#0```````````("!NZH#`&=L;V)A;"]I >+M8V]N<R]M96YU+W!R968N<&YG550%``,K@(I!57@``%!+`0(7`PH``````"!R >+M9#$XXSA#00(``$$"```<``T```````````"`@?^L`P!G;&]B86PO:6-O;G,O >+M;65N=2]C;VQO<G,N<&YG550%``,K@(I!57@``%!+`0(7`PH``````"!R9#%* >+M&WN*0`$``$`!```;``T```````````"`@8^O`P!G;&]B86PO:6-O;G,O;65N >+M=2]A8F]U="YP;F=55`4``RN`BD%5>```4$L!`A<#"@``````(')D,4T<EZC` >+M`0``P`$``!H`#0```````````("!';$#`&=L;V)A;"]I8V]N<R]M96YU+V]P >+M96XN<&YG550%``,K@(I!57@``%!+`0(7`PH``````"!R9#'LRHQ3%0,``!4# >+M```>``T```````````"`@2JS`P!G;&]B86PO:6-O;G,O;65N=2]Z;V]M7V]U >+M="YP;F=55`4``RN`BD%5>```4$L!`A<#%`````@`(')D,6G%J3<$`P``"`,` >+M`!P`#0```````````("!D+8#`&=L;V)A;"]I8V]N<R]M96YU+W-C<FEP="YP >+M;F=55`4``RN`BD%5>```4$L!`A<#"@``````(')D,>[79-\'`@``!P(``!D` >+M#0```````````*2!X[D#`&=L;V)A;"]I8V]N<R]M96YU+W5R;"YP;F=55`4` >+M`RN`BD%5>```4$L!`A<#"@``````(')D,1]5<(<.`@``#@(``!P`#0`````` >+M`````("!-KP#`&=L;V)A;"]I8V]N<R]M96YU+W-E87)C:"YP;F=55`4``RN` >+MBD%5>```4$L!`A<#"@``````(')D,?C7KK&(`@``B`(``!T`#0`````````` >+M`("!D[X#`&=L;V)A;"]I8V]N<R]M96YU+VYE=U]T86(N<&YG550%``,K@(I! >+M57@``%!+`0(7`Q0````(`"!R9#$A-WD,<0$``'(!```C``T```````````"D >+M@6O!`P!G;&]B86PO:6-O;G,O;65N=2]C;W!Y+61I<V%B;&5D+G!N9U54!0`# >+M*X"*055X``!02P$"%P,4````"``@<F0QD&]39"D!``!&`0``&P`-```````` >+M````@($RPP,`9VQO8F%L+VEC;VYS+VUE;G4O8VQO<V4N<&YG550%``,K@(I! >+M57@``%!+`0(7`PH``````"!R9#%]VCEC=`,``'0#```;``T```````````"` >+M@:G$`P!G;&]B86PO:6-O;G,O;65N=2]G;&]B92YP;F=55`4``RN`BD%5>``` >+M4$L!`A<#"@``````(')D,40^?SX>`P``'@,``!T`#0```````````("!:\@# >+M`&=L;V)A;"]I8V]N<R]M96YU+WIO;VU?:6XN<&YG550%``,K@(I!57@``%!+ >+M`0(7`PH``````"!R9#$0\7GT(`(``"`"```B``T```````````"`@=G+`P!G >+M;&]B86PO:6-O;G,O;65N=2]A9&1?8F]O:VUA<FLN<&YG550%``,K@(I!57@` >+M`%!+`0(7`PH``````"!R9#'ZA(56)@(``"8"```:``T```````````"`@4[. >+M`P!G;&]B86PO:6-O;G,O;65N=2]I;F9O+G!N9U54!0`#*X"*055X``!02P$" >+M%P,*```````@<F0Q"RZ)2/4!``#U`0``&@`-````````````@('!T`,`9VQO >+M8F%L+VEC;VYS+VUE;G4O97AE8RYP;F=55`4``RN`BD%5>```4$L!`A<#"@`` >+M````(')D,7::VBJ0`0``D`$``",`#0```````````*2!`],#`&=L;V)A;"]I >+M8V]N<R]M96YU+W)E9&\M9&ES86)L960N<&YG550%``,K@(I!57@``%!+`0(7 >+M`Q0````(`"!R9#'BG/1T3P$``&P!```C``T```````````"`@>G4`P!G;&]B >+M86PO:6-O;G,O;65N=2]C;V]K:64M86-C97!T+G!N9U54!0`#*X"*055X``!0 >+M2P$"%P,*```````@<F0QX$#*;_L!``#[`0``&@`-````````````@(&.U@,` >+M9VQO8F%L+VEC;VYS+VUE;G4O97AI="YP;F=55`4``RN`BD%5>```4$L!`A<# >+M"@``````(')D,?S798?Q`0``\0$``!H`#0```````````("!UM@#`&=L;V)A >+M;"]I8V]N<R]M96YU+W)E9&\N<&YG550%``,K@(I!57@``%!+`0(7`PH````` >+M`"!R9#$95MKZX`$``.`!```>``T```````````"`@13;`P!G;&]B86PO:6-O >+M;G,O;65N=2]D;W=N;&]A9"YP;F=55`4``RN`BD%5>```4$L!`A<#"@`````` >+M(')D,</_:YXT`P``-`,``!P`#0```````````("!1=T#`&=L;V)A;"]I8V]N >+M<R]M96YU+V-A;F-E;"YP;F=55`4``RN`BD%5>```4$L!`A<#"@``````(')D >+M,42)*G.I`P``J0,``!H`#0```````````("!R.`#`&=L;V)A;"]I8V]N<R]M >+M96YU+VAE;'`N<&YG550%``,K@(I!57@``%!+`0(7`PH``````"!R9#&4\:H, >+M?1T``'T=```=``T```````````"`@;[D`P!G;&]B86PO:6-O;G,O86QE<G0M >+M97AC;&%M+G!N9U54!0`#+("*055X``!02P$"%P,4````"``@<F0Q"!>@CQ4! >+M```W`0``'0`-````````````@(&+`@0`9VQO8F%L+VEC;VYS+W!G+6QA;F1S >+M8V%P92YG:6955`4``RR`BD%5>```4$L!`A<#%`````@`(')D,>[&S_PY```` >+M/0```!@`#0```````````("!\`,$`&=L;V)A;"]I8V]N<R]297-T;W)E+F=I >+M9E54!0`#+("*055X``!02P$"%P,4````"``@<F0Q^V&O=)0```"7````(P`- >+M````````````@(%T!`0`9VQO8F%L+VEC;VYS+W!G+6QA;F1S8V%P92US;6%L >+M;"YG:6955`4``RR`BD%5>```4$L!`A<#%`````@`(')D,2HS$S0=`0``/@$` >+M`!P`#0```````````("!7@4$`&=L;V)A;"]I8V]N<R]P9RUP;W)T<F%I="YG >+M:6955`4``RR`BD%5>```4$L!`A<#"@``````(')D,?DX%/3U#@``]0X``!D` >+M#0```````````("!R@8$`&=L;V)A;"]I8V]N<R]1=65S=&EO;BYP;F=55`4` >+M`RR`BD%5>```4$L!`A<#"@``````>)EE,2.O"&8-"0``#0D``!P`#0`````` >+M`````("!"Q8$`&=L;V)A;"]I8V]N<R]F;VQD97(M:71E;2YP;F=55`4``\,6 >+MC$%5>```4$L!`A<#%`````@`(')D,0IM)0T[````0P```!T`#0`````````` >+M`("!9Q\$`&=L;V)A;"]I8V]N<R]C;&]S92UB=71T;VXN9VEF550%``,L@(I! >+M57@``%!+`0(7`Q0````(`-:.93&UP_LU&0$``!\!```=``T```````````"D >+M@?(?!`!G;&]B86PO:6-O;G,O8VQO<V4M8G5T=&]N+G!N9U54!0`#LP2,055X >+M``!02P$"%P,4````"``@<F0Q<'E_?3<````[````%@`-````````````@(%; >+M(00`9VQO8F%L+VEC;VYS+T-L;W-E+F=I9E54!0`#+("*055X``!02P$"%P,* >+M```````B<F0QA5!SSXX&``".!@``%0`-````````````I(';(00`9VQO8F%L >+M+VEC;VYS+V9I;F0N<&YG550%``,O@(I!57@``%!+`0(7`PH``````/2<DS'T >+M-A#UKP(``*\"```>``T```````````"V@;$H!`!G;&]B86PO:6-O;G,O4')I >+M;G0M<')E=FEE=RYP;F=55`4``TP?QD%5>```4$L!`A<#"@``````(')D,6Q; >+M]G@["0``.PD``!8`#0```````````("!L2L$`&=L;V)A;"]I8V]N<R]%<G)O >+M<BYP;F=55`4``RR`BD%5>```4$L!`A<#"@``````(G)D,?W<7_.1`@``D0(` >+M`!D`#0```````````*2!-34$`&=L;V)A;"]I8V]N<R]N;W1F;W5N9"YP;F=5 >+M5`4``R^`BD%5>```4$L!`A<#"@``````(')D,7T1X)Z6"0``E@D``!@`#0`` >+M`````````("!$C@$`&=L;V)A;"]I8V]N<R]787)N:6YG+G!N9U54!0`#+("* >+M055X``!02P$"%P,*```````B<F0QJ[<QTF8!``!F`0``%@`-```````````` >+MI('S000`9VQO8F%L+VEC;VYS+V-L;W-E+G!N9U54!0`#+X"*055X``!02P$" >+M%P,*```````B<F0Q38N)5%("``!2`@``%0`-````````````I(&B0P0`9VQO >+M8F%L+VEC;VYS+W=R87`N<&YG550%``,O@(I!57@``%!+`0(7`Q0````(`"!R >+M9#%G$'<8<P```'H````@``T```````````"`@3Q&!`!G;&]B86PO:6-O;G,O >+M=&%B<W1R:7`M8F]T=&]M+G!N9U54!0`#+("*055X``!02P$"%P,4````"``@ >+M<F0QU-V^=C$````U````&0`-````````````@($"1P0`9VQO8F%L+VEC;VYS >+M+TUI;FEM:7IE+F=I9E54!0`#+("*055X``!02P$"%P,*```````@<F0Q```` >+M````````````#0`-`````````!``[4%_1P0`9VQO8F%L+W)A9&EO+U54!0`# >+M+("*055X``!02P$"%P,4````"``@<F0QL4[Z`2H````N````'``-```````` >+M````@(&_1P0`9VQO8F%L+W)A9&EO+W)A9&EO+6-H96-K+F=I9E54!0`#+("* >+M055X``!02P$"%P,4````"``@<F0QJ$KLC2T````N````(``-```````````` >+M@($X2`0`9VQO8F%L+W)A9&EO+W)A9&EO+6-H96-K+61I<RYG:6955`4``RR` >+MBD%5>```4$L!`A<#%`````@`[6IQ,>V#94N'!0``4Q@``!4`#0```````0`` >+M`("!N$@$`&=L;V)A;"]S8W)O;&QB87)S+F-S<U54!0`#'I>;055X``!02P$" >+M%P,4````"`"C>G`QDF\30]4"``"X!0``$P`-```````!````@(&'3@0`9VQO >+M8F%L+V=R;W5P8F]X+F-S<U54!0`#,F&:055X``!02P$"%P,4````"`!O=F4Q >+M9J]OL@<$``#L"```$``-```````!````@(&B400`9VQO8F%L+W!O<'5P+F-S >+M<U54!0`#PMF+055X``!02P$"%P,4````"``@<F0Q57,Z>OP$``#2#P``$@`- >+M```````!````@('L500`9VQO8F%L+VQI<W1B;W@N8W-S550%``,L@(I!57@` >+M`%!+`0(7`Q0````(`"!R9#%NKM\W@`$``%0$```9``T```````$```"`@2U; >+M!`!G;&]B86PO9VQO8F%L0FEN9&EN9W,N>&UL550%``,L@(I!57@``%!+`0(7 >+M`Q0````(`"!R9#'(UUR[7P```*4````9``T```````$```"`@?E<!`!G;&]B >+M86PO<')I;G1086=E4V5T=7`N8W-S550%``,L@(I!57@``%!+`0(7`PH````` >+M`"%R9#$````````````````0``T`````````$`#M0:1=!`!G;&]B86PO8VAE >+M8VMB;W@O550%``,M@(I!57@``%!+`0(7`Q0````(`"%R9#%QEZ`>.0```#P` >+M```B``T```````````"`@>==!`!G;&]B86PO8VAE8VMB;W@O8V)O>"UC:&5C >+M:RUD:7,N9VEF550%``,M@(I!57@``%!+`0(7`Q0````(`"%R9#%/!B[:,P`` >+M`#8````>``T```````````"`@75>!`!G;&]B86PO8VAE8VMB;W@O8V)O>"UC >+M:&5C:RYG:6955`4``RV`BD%5>```4$L!`A<#%`````@`B!)K,?IM%)6=!0`` >+M!A$``!<`#0```````0```("!^5X$`&=L;V)A;"]A=71O8V]M<&QE=&4N8W-S >+M550%``.O$I-!57@``%!+`0(7`Q0````(`"%R9#$54Y!\J``````!```1``T` >+M``````$```"`@>!D!`!G;&]B86PO8V]N9FEG+F-S<U54!0`#+8"*055X``!0 >+M2P$"%P,4````"``A<F0QK*H3XR,"``"$!```%@`-```````!````@(',900` >+M9VQO8F%L+W-P:6YB=71T;VYS+F-S<U54!0`#+8"*055X``!02P$"%P,4```` >+M"`##F64Q,K=I?NP"``"E"@``$@`-```````!````I($X:`0`9VQO8F%L+V9I >+M;F1"87(N8W-S550%``--%XQ!57@``%!+`0(7`PH``````"%R9#$````````` >+M```````.``T`````````$`#M06EK!`!G;&]B86PO86QE<G1S+U54!0`#+8"* >+M055X``!02P$"%P,4````"``A<F0Q?]#ZAW,$``!:"@``%P`-```````!```` >+M@(&J:P0`9VQO8F%L+V%L97)T<R]A;&5R="YC<W-55`4``RV`BD%5>```4$L! >+M`A<#%`````@`(7)D,9FH4R]:!```[`H``!(`#0```````0```("!9W`$`&=L >+M;V)A;"]C;VYS;VQE+F-S<U54!0`#+8"*055X``!02P$"%P,*```````A<F0Q >+M24YFM-,"``#3`@``$P`-````````````I($&=00`9VQO8F%L+W5R;'-H:6YE >+M+G!N9U54!0`#+8"*055X``!02P$"%P,4````"`"%>G`Q6P-B17L%``"6#@`` >+M$0`-```````!````@($?>`0`9VQO8F%L+V1I86QO9RYC<W-55`4``_E@FD%5 >+M>```4$L!`A<#%`````@`(7)D,540NY06!```:PL``!,`#0```````0```("! >+MWGT$`&=L;V)A;"]P<FEN=&EN9RYC<W-55`4``RV`BD%5>```4$L!`A<#%``` >+M``@`0')D,>*V3,T,`0``Y0,``!<`#0```````0```("!.H($`&=L;V)A;"]P >+M<FEN=%!R979I97<N8W-S550%``-H@(I!57@``%!+`0(7`Q0````(`"%R9#'O >+M-AFB?@$``"L#```3``T```````$```"`@9"#!`!G;&]B86PO;&EN:U1R964N >+M8W-S550%``,M@(I!57@``%!+`0(7`Q0````(`'!B9C'+1()V904``&(4```1 >+M``T```````$```"`@52%!`!G;&]B86PO8G5T=&]N+F-S<U54!0`#I`>-055X >+M``!02P$"%P,*```````A<F0Q````````````````#P`-`````````!``[4'] >+MB@0`9VQO8F%L+W1O;VQB87(O550%``,M@(I!57@``%!+`0(7`Q0````(`"%R >+M9#%&]C35L0```+P````:``T```````````"`@3^+!`!G;&]B86PO=&]O;&)A >+M<B],:6=H=&5N+G!N9U54!0`#+8"*055X``!02P$"%P,4````"``A<F0Q-LL$ >+M%8T```"A````&0`-````````````@($]C`0`9VQO8F%L+W1O;VQB87(O1&%R >+M:V5N+G!N9U54!0`#+8"*055X``!02P$"%P,4````"``A<F0Q\#]\Z34````X >+M````&@`-````````````@($6C00`9VQO8F%L+W1O;VQB87(O8VAE=G)O;BYG >+M:6955`4``RV`BD%5>```4$L!`A<#%`````@`(7)D,<PJ'XV9`P``N`H``!8` >+M#0```````0```("!F(T$`&=L;V)A;"]C;VQO<G!I8VME<BYC<W-55`4``RV` >+MBD%5>```4$L!`A<#%`````@`(7)D,?<[6'_G`P``$PH``!,`#0```````0`` >+M`("!>I$$`&=L;V)A;"]C:&5C:V)O>"YC<W-55`4``RV`BD%5>```4$L!`A<# >+M%`````@`V@N(,>7#(>/U"```\QL``!$`#0```````0```("!IY4$`&=L;V)A >+M;"]G;&]B86PN8W-S550%``.<G[9!57@``%!+`0(7`PH``````/!=9C'3+MH= >+M?0D``'T)```5``T```````````"`@>">!`!G;&]B86PO1FEL97!I8VME<BYP >+M;F=55`4``R,`C4%5>```4$L!`A<#%`````@`(7)D,2P2#<$$`0``U`0``!`` >+M#0```````0```("!I:@$`&=L;V)A;"]A<G)O=RYC<W-55`4``RZ`BD%5>``` >+M4$L!`A<#%`````@`(7)D,4J,DT@U`0``I`(``!$`#0```````0```("![*D$ >+M`&=L;V)A;"]W:7IA<F0N8W-S550%``,N@(I!57@``%!+`0(7`Q0````(`"%R >+M9#&MIJ;='`,``+@&```3``T```````$```"`@66K!`!G;&]B86PO<W!L:71T >+M97(N8W-S550%``,N@(I!57@``%!+`0(7`Q0````(`"%R9#&S2Y`%LP4``'`6 >+M```3``T```````$```"`@<>N!`!G;&]B86PO;65N=6QI<W0N8W-S550%``,N >+M@(I!57@``%!+`0(7`Q0````(`,D!B#'?'4XFW04``/X6```8``T```````$` >+M``"`@<"T!`!G;&]B86PO=&]O;&)A<F)U='1O;BYC<W-55`4``ZJ-MD%5>``` >+M4$L!`A<#%`````@`(7)D,<J@A?-C`@``;08``!$`#0```````0```("!Z+H$ >+M`&=L;V)A;"]A;'1T86(N>&UL550%``,N@(I!57@``%!+`0(7`Q0````(`'," >+MB#%O:6(`\P,``,$)```2``T```````$```"`@8^]!`!G;&]B86PO=&5X=&)O >+M>"YC<W-55`4``^F.MD%5>```4$L!`A<#%`````@`(7)D,3QL2=X]`0``00,` >+M`!0`#0```````0```("!Q\$$`&=L;V)A;"]S8W)O;&QB;W@N8W-S550%``,N >+M@(I!57@``%!+`0(7`PH``````"%R9#$````````````````1``T````````` >+M$`#M04O#!`!G;&]B86PO<V-R;VQL8F%R+U54!0`#+H"*055X``!02P$"%P,4 >+M````"``A<F0Q3*GPWI$```"8````'P`-````````````I(&/PP0`9VQO8F%L >+M+W-C<F]L;&)A<B]G<FEP<&EE<RUH+G!N9U54!0`#+H"*055X``!02P$"%P,4 >+M````"``A<F0Q\?G?>(L```"4````'P`-````````````I(%RQ`0`9VQO8F%L >+M+W-C<F]L;&)A<B]G<FEP<&EE<RUV+G!N9U54!0`#+H"*055X``!02P$"%P,4 >+M````"``A<F0Q:1<M0RL````L````&P`-````````````@(%/Q00`9VQO8F%L >+M+W-C<F]L;&)A<B]S;&ED97(N9VEF550%``,N@(I!57@``%!+`0(7`Q0````( >+M`"%R9#',*C+ZFP```*(````=``T```````````"D@<C%!`!G;&]B86PO<V-R >+M;VQL8F%R+V=R:7!P:65S+G!N9U54!0`#+H"*055X``!02P$"%P,4````"`"7 >+M!FLQ^TJ]G)T$``">"P``%0`-```````!````@(&SQ@0`9VQO8F%L+V9I;&5P >+M:6-K97(N8W-S550%``,N_I)!57@``%!+`0(7`Q0````(`"%R9#%0R5BN;P$` >+M`&0#```3``T```````$```"`@9C+!`!G;&]B86PO8V]N=&5N=',N<F1F550% >+M``,N@(I!57@``%!+`0(7`Q0````(`-IS9#'(!5/S]`$``$$$```2``T````` >+M``$```"`@4W-!`!G;&]B86PO8G)O=W-E<BYC<W-55`4``VR#BD%5>```4$L! >+M`A<#"@``````&W)D,0````````````````4`#0`````````0`.U!AL\$`&AE >+M;'`O550%``,F@(I!57@``%!+`0(7`Q0````(`!MR9#'/HTXA9`8``',)```* >+M``T```````````"D@;[/!`!H96QP+VXN<&YG550%``,F@(I!57@``%!+`0(7 >+M`Q0````(`!MR9#$K5>O@@0<``)H2```7``T```````$```"D@5_6!`!H96QP >+M+VAE;'!&:6QE3&%Y;W5T+F-S<U54!0`#)H"*055X``!02P$"%P,*```````; >+M<F0QC'[<TFP$``!L!```#@`-````````````I($JW@0`:&5L<"]P<F5F<RYP >+M;F=55`4``R:`BD%5>```4$L!`A<#"@``````&W)D,2SE=5?H`0``Z`$``!`` >+M#0```````````*2!U^($`&AE;'`O5V5B;&EN:RYP;F=55`4``R:`BD%5>``` >+M4$L!`A<#%`````@`&W)D,>JA?&MP`@``_`8``!``#0```````0```*2!`N4$ >+M`&AE;'`O<VED96)A<BYC<W-55`4``R:`BD%5>```4$L!`A<#"@``````&W)D >+M,;'QN+@-`@``#0(``!``#0```````````*2!M><$`&AE;'`O<VED96)A<BYP >+M;F=55`4``R:`BD%5>```4$L!`A<#%`````@`&W)D,3]'O8GV````Y`$``!@` >+M#0```````0```*2!!>H$`&AE;'`O<VED96)A<D)I;F1I;F=S+GAM;%54!0`# >+M)H"*055X``!02P$"%P,*```````;<F0Q0!X6K3($```R!```$0`-```````` >+M````I(%&ZP0`:&5L<"]Z;V]M7V]U="YP;F=55`4``R:`BD%5>```4$L!`A<# >+M"@``````&W)D,;NIH:=H!```:`0```\`#0```````````*2!O.\$`&AE;'`O >+M<V5A<F-H+G!N9U54!0`#)H"*055X``!02P$"%P,4````"``;<F0Q?(@;8MX` >+M``!"`0``#``-````````````I(%F]`0`:&5L<"]B8V<N<&YG550%``,F@(I! >+M57@``%!+`0(7`PH``````!MR9#&TIKQL2P0``$L$```0``T```````````"D >+M@8/U!`!H96QP+WIO;VU?:6XN<&YG550%``,F@(I!57@``%!+`0(7`Q0````( >+M`!MR9#';K)HG]````%\"```1``T```````$```"D@1'Z!`!H96QP+V-O;G1E >+M;G1S+G)D9E54!0`#)H"*055X``!02P$"%P,4````"``;<F0QLGX3R?0&``#F >+M&@``#0`-```````!````I(%)^P0`:&5L<"]H96QP+F-S<U54!0`#)H"*055X >+M``!02P$"%P,*```````<<F0QL5),/T4"``!%`@``"``-````````````@(%] >+M`@4`:6-O;BYP;F=55`4``R>`BD%5>```4$L!`A<#%`````@`CG.5,8@X,/U; >+M`@``T@0```L`#0```````0```("!_00%`&EN<W1A;&PN<F1F550%``-;><A! >+M57@``%!+`0(7`PH``````$%R9#$````````````````(``T`````````$`#M >+M098'!0!M;WIA<'!S+U54!0`#:8"*055X``!02P$"%P,*``````"#!6LQ```` >+M````````````#0`-`````````!``[4'1!P4`;6]Z87!P<R]P<F5F+U54!0`# >+M)OR2055X``!02P$"%P,4````"``A<F0Q><2L<UT```!@````%``-```````` >+M````@($1"`4`;6]Z87!P<R]P<F5F+V1O="YG:6955`4``RZ`BD%5>```4$L! >+M`A<#%`````@`(7)D,7E;@.)3!@``G`\``!8`#0```````0```("!M0@%`&UO >+M>F%P<',O<')E9B]P<F5F+F-S<WY55`4``RZ`BD%5>```4$L!`A<#%`````@` >+M@P5K,4B`FM%8!@``A@\``!4`#0```````0```("!40\%`&UO>F%P<',O<')E >+M9B]P<F5F+F-S<U54!0`#)OR2055X``!02P$"%P,4````"``A<F0Q"4+]T+@` >+M``#,````%@`-````````````@('Q%04`;6]Z87!P<R]P<F5F+V-H96-K+F=I >+M9E54!0`#+H"*055X``!02P$"%P,*``````!]<Y4Q````````````````$@`- >+M`````````!``[4'R%@4`;6]Z87!P<R]D;W=N;&]A9',O550%``,^><A!57@` >+M`%!+`0(7`PH``````"%R9#'XU@?,T@D``-()```I``T```````````"`@3<7 >+M!0!M;WIA<'!S+V1O=VYL;V%D<R]B86-K9W)O=6YD+6=R861I96YT+G!N9U54 >+M!0`#+H"*055X``!02P$"%P,*```````A<F0Q:Q'+SSX"```^`@``)0`-```` >+M````````@(%E(04`;6]Z87!P<R]D;W=N;&]A9',O9&]W;FQO861#;&5A;G5P >+M+G!N9U54!0`#+H"*055X``!02P$"%P,4````"`!VF&4QX1P/]?X```"Q`0`` >+M*``-```````!````@('[(P4`;6]Z87!P<R]D;W=N;&]A9',O=6YK;F]W;D-O >+M;G1E;G14>7!E+F-S<U54!0`#X!2,055X``!02P$"%P,*```````A<F0Q[BM[ >+MQ#HP```Z,```(0`-````````````@(%4)04`;6]Z87!P<R]D;W=N;&]A9',O >+M9&]W;FQO861S0D<N<&YG550%``,N@(I!57@``%!+`0(7`PH``````"%R9#$4 >+M=V>@3@(``$X"```M``T```````````"`@>)5!0!M;WIA<'!S+V1O=VYL;V%D >+M<R]D;W=N;&]A9$-L96%N=7!$:7-A8FQE9"YP;F=55`4``RZ`BD%5>```4$L! >+M`A<#"@``````(7)D,<[QB5W$!```Q`0``"(`#0```````````("!D%@%`&UO >+M>F%P<',O9&]W;FQO861S+V1O=VYL;V%D26-O;BYP;F=55`4``RZ`BD%5>``` >+M4$L!`A<#%`````@`4G.5,='ZO/P!!```EA,``!\`#0```````0```("!J5T% >+M`&UO>F%P<',O9&]W;FQO861S+V1O=VYL;V%D<RYC<W-55`4``^QXR$%5>``` >+M4$L!`A<#%`````@`07)D,1U]N$7Q````Z0$``!\`#0```````0```("!_&$% >+M`&UO>F%P<',O9&]W;FQO861S+V1O=VYL;V%D<RYX;6Q55`4``VF`BD%5>``` >+M4$L!`A<#%`````@`(7)D,5NGG`E^````AP```"<`#0```````````("!/V,% >+M`&UO>F%P<',O9&]W;FQO861S+V)A8VMG<F]U;F0M<W1R:7!E+G!N9U54!0`# >+M+H"*055X``!02P$"%P,*```````A<F0Q^^[I%1\"```?`@``)0`-```````` >+M````@($79`4`;6]Z87!P<R]D;W=N;&]A9',O9&]W;FQO861/<'1I;VYS+G!N >+M9U54!0`#+H"*055X``!02P$"%P,4````"``A<F0Q]8"%3U<#``!""@``(P`- >+M```````!````@(&.9@4`;6]Z87!P<R]D;W=N;&]A9',O9&]W;FQO861S+F-S >+M<RYO;&155`4``RZ`BD%5>```4$L!`A<#%`````@`(7)D,8.\)]NG````40,` >+M`!\`#0```````````("!.VH%`&UO>F%P<',O9&]W;FQO861S+W9I97=&861E >+M<BYP;F=55`4``RZ`BD%5>```4$L!`A<#%`````@`(7)D,;F."S]J`0``-08` >+M`"8`#0```````````("!-&L%`&UO>F%P<',O9&]W;FQO861S+V1O=VYL;V%D >+M4V5L96-T960N<&YG550%``,N@(I!57@``%!+`0(7`PH``````"%R9#$````` >+M```````````2``T`````````$`#M0?=L!0!M;WIA<'!S+WAP:6YS=&%L;"]5 >+M5`4``RZ`BD%5>```4$L!`A<#"@``````(7)D,:FZR1I$!P``1`<``"H`#0`` >+M`````````("!/&T%`&UO>F%P<',O>'!I;G-T86QL+WAP:6YS=&%L;$ET96U' >+M96YE<FEC+G!N9U54!0`#+H"*055X``!02P$"%P,4````"``A<F0Q?'59V&X! >+M``!.`P``)@`-```````!````@('==`4`;6]Z87!P<R]X<&EN<W1A;&PO>'!I >+M;G-T86QL0V]N9FER;2YC<W-55`4``RZ`BD%5>```4$L!`A<#"@``````07)D >+M,0````````````````\`#0`````````0`.U!I'8%`&UO>F%P<',O<VAA<F5D >+M+U54!0`#:8"*055X``!02P$"%P,4````"``A<F0QN8X+/VH!```U!@``'P`- >+M````````````@('F=@4`;6]Z87!P<R]S:&%R960O:71E;5-E;&5C=&5D+G!N >+M9U54!0`#+H"*055X``!02P$"%P,4````"`!!<F0QHYH_E+H```#_````&P`- >+M```````!````@(&B>`4`;6]Z87!P<R]S:&%R960O<FEC:'9I97<N8W-S550% >+M``-I@(I!57@``%!+`0(7`Q0````(`$%R9#&7%#7(#`$``#T"```;``T````` >+M``$```"`@:IY!0!M;WIA<'!S+W-H87)E9"]R:6-H=FEE=RYX;6Q55`4``VF` >+MBD%5>```4$L!`A<#%`````@`(7)D,1X%URNG````40,``!P`#0`````````` >+M`("!!'L%`&UO>F%P<',O<VAA<F5D+VET96U&861E<BYP;F=55`4``RZ`BD%5 >+M>```4$L!`A<#%`````@`(7)D,8.\)]NG````40,``!P`#0```````````("! >+M^GL%`&UO>F%P<',O<VAA<F5D+W9I97=&861E<BYP;F=55`4``RZ`BD%5>``` >+M4$L!`A<#"@``````(7)D,0````````````````\`#0`````````0`.U!\'P% >+M`&UO>F%P<',O=7!D871E+U54!0`#+H"*055X``!02P$"%P,4````"``A<F0Q >+MH%KR5FP```!W````&@`-````````````@($R?04`;6]Z87!P<R]U<&1A=&4O >+M=V%R;FEN9RYG:6955`4``RZ`BD%5>```4$L!`A<#%`````@`(7)D,99T'I5E >+M#0``D0T``!D`#0```````````("!ZWT%`&UO>F%P<',O=7!D871E+VEC;VXS >+M,BYP;F=55`4``RZ`BD%5>```4$L!`A<#%`````@`(7)D,2S0"6\]`@``]@4` >+M`!D`#0```````0```("!G(L%`&UO>F%P<',O=7!D871E+W5P9&%T92YC<W-5 >+M5`4``RZ`BD%5>```4$L!`A<#"@``````(7)D,:-7`.C=`0``W0$``!D`#0`` >+M`````````("!)8X%`&UO>F%P<',O=7!D871E+W5P9&%T92YP;F=55`4``RZ` >+MBD%5>```4$L!`A<#"@``````(7)D,<V3)QW0!0``T`4``"$`#0`````````` >+M`("!3I`%`&UO>F%P<',O=7!D871E+V5X=&5N<VEO;F%L97)T+G!N9U54!0`# >+M+H"*055X``!02P$"%P,*``````!]<Y4Q````````````````$P`-```````` >+M`!``[4%RE@4`;6]Z87!P<R]E>'1E;G-I;VYS+U54!0`#/GG(055X``!02P$" >+M%P,*```````A<F0QWHMC!,X!``#.`0``,``-````````````I(&XE@4`;6]Z >+M87!P<R]E>'1E;G-I;VYS+V5X=&5N<VEO;D]P=&EO;G,M9&ES86)L960N<&YG >+M550%``,N@(I!57@``%!+`0(7`PH``````"%R9#'$`F6T50@``%4(```C``T` >+M``````````"`@>F8!0!M;WIA<'!S+V5X=&5N<VEO;G,O=&AE;65'96YE<FEC >+M+G!N9U54!0`#+H"*055X``!02P$"%P,4````"``A<F0QSQ<KPL#<``"1W0`` >+M*@`-````````````@(&4H04`;6]Z87!P<R]E>'1E;G-I;VYS+W9I97=7871E >+M<FUA<FM4:&5M97,N<&YG550%``,N@(I!57@``%!+`0(7`Q0````(`"%R9#'> >+MOQ1E.````$`````B``T```````````"`@;%^!@!M;WIA<'!S+V5X=&5N<VEO >+M;G,O<&QA8V5H;VQD97(N9VEF550%``,N@(I!57@``%!+`0(7`PH``````"%R >+M9#&CC=CT4`(``%`"```D``T```````````"`@3Y_!@!M;WIA<'!S+V5X=&5N >+M<VEO;G,O97AT96YS:6]N2&]M92YP;F=55`4``RZ`BD%5>```4$L!`A<#%``` >+M``@`(7)D,7=.</I8`0``%P,``!P`#0```````0```("!Y8$&`&UO>F%P<',O >+M97AT96YS:6]N<R]A8F]U="YC<W-55`4``RZ`BD%5>```4$L!`A<#%`````@` >+M^IEE,?!&[44%!```UP\``"$`#0```````0```("!C(,&`&UO>F%P<',O97AT >+M96YS:6]N<R]E>'1E;G-I;VYS+F-S<U54!0`#N!>,055X``!02P$"%P,4```` >+M"``A<F0QTYGVB4F\``!GO0``+@`-````````````@('EAP8`;6]Z87!P<R]E >+M>'1E;G-I;VYS+W9I97=7871E<FUA<FM%>'1E;G-I;VYS+G!N9U54!0`#+H"* >+M055X``!02P$"%P,*```````A<F0QO.XL/I@,``"8#```)``-```````````` >+M@(&/1`<`;6]Z87!P<R]E>'1E;G-I;VYS+V%C=&EO;F)U='1O;G,N<&YG550% >+M``,N@(I!57@``%!+`0(7`PH``````"%R9#%5L+Z6:`$``&@!```E``T````` >+M``````"`@7Y1!P!M;WIA<'!S+V5X=&5N<VEO;G,O97AT96YS:6]N06)O=70N >+M<&YG550%``,N@(I!57@``%!+`0(7`PH``````"%R9#&,]O[T'P(``!\"```G >+M``T```````````"`@3Y3!P!M;WIA<'!S+V5X=&5N<VEO;G,O97AT96YS:6]N >+M3W!T:6]N<RYP;F=55`4``RZ`BD%5>```4$L!`A<#"@``````(7)D,2Y[!,Z@ >+M#0``H`T``"4`#0```````````*2!MU4'`&UO>F%P<',O97AT96YS:6]N<R]A >+M8W1I;VYB=71T;VYS:2YP;F=55`4``RZ`BD%5>```4$L!`A<#"@``````07)D >+M,0```````````````!``#0`````````0`.U!KV,'`&UO>F%P<',O<&QU9VEN >+M<R]55`4``VF`BD%5>```4$L!`A<#%`````@`07)D,1XHX:NV````DP$``"D` >+M#0```````0```*2!\F,'`&UO>F%P<',O<&QU9VEN<R]P;'5G:6Y);G-T86QL >+M97)7:7IA<F0N8W-S550%``-I@(I!57@``%!+`0(7`Q0````(`"%R9#'@/2NY >+M/P$```0#```4``T```````$```"`@01E!P!M;WIA<'!S+V-O;G1E;G1S+G)D >+M9E54!0`#+H"*055X``!02P$"%P,*```````A<F0Q````````````````$``- >+M`````````!``[4&*9@<`;6]Z87!P<R]P<F]F:6QE+U54!0`#+H"*055X``!0 >+M2P$"%P,4````"``A<F0Q8]\@L[4#``#O!P``)``-```````!````@('-9@<` >+M;6]Z87!P<R]P<F]F:6QE+W!R;V9I;&5396QE8W1I;VXN8W-S550%``,N@(I! >+M57@``%!+`0(7`Q0````(`"%R9#$I[9OR2@```$P````?``T```````````"` >+M@=EJ!P!M;WIA<'!S+W!R;V9I;&4O<')O9FEL96EC;VXN9VEF550%``,N@(I! >+M57@``%!+`0(7`Q0````(`!QR9#&QZQI<T1D``"L:```+``T```````````"D >+M@75K!P!P<F5V:65W+G!N9U54!0`#)X"*055X``!02P4&`````#8!-@'#9@`` >+&A(4'```` >+` >+end >--- debian/update-mozilla-firefox-chrome >+++ debian/update-mozilla-firefox-chrome >@@ -0,0 +1,139 @@ >+#!/bin/sh >+ >+set -e >+ >+umask 022 >+ >+echo -n "Updating mozilla-firefox chrome registry..." >+ >+if [ "$1" = "-v" ]; then >+ VERBOSE=1 >+ echo >+fi >+ >+unset MOZILLA_FIVE_HOME || : >+MOZILLA_FIVE_HOME=/usr/lib/mozilla-firefox >+export MOZILLA_FIVE_HOME >+ >+# PATH >+PATH=/usr/lib/mozilla-firefox:$PATH >+export PATH >+ >+# added /usr/lib : don't load your local library >+LD_LIBRARY_PATH=/usr/lib/mozilla-firefox${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} >+export LD_LIBRARY_PATH >+ >+# fake home to capture .firefox >+HOME=`mktemp -d /tmp/mozilla-firefox-pkg.XXXXXX` >+export HOME >+ >+/sbin/ldconfig >+ >+VARDIR=/var/lib/mozilla-firefox >+LIBDIR=/usr/lib/mozilla-firefox >+EXTDIR=${VARDIR}/extensions.d >+ >+# cleaning VARDIR >+rm -fr ${VARDIR}/chrome ${VARDIR}/components ${VARDIR}/extensions/* >+ >+# cleaning LIBDIR >+rm -rf ${LIBDIR}/chrome/overlayinfo >+rm -f ${LIBDIR}/chrome/*.rdf >+rm -f ${LIBDIR}/components/*.dat >+rm -f ${LIBDIR}/components.ini >+rm -f ${LIBDIR}/defaults.ini >+ >+# create VARDIR >+install -d ${VARDIR}/chrome/overlayinfo >+install -d ${VARDIR}/components >+ >+# create symlinks to LIBDIR >+ln -sf ${VARDIR}/chrome/overlayinfo ${LIBDIR}/chrome/overlayinfo >+ln -sf ${VARDIR}/extensions/installed-extensions.txt \ >+ ${LIBDIR}/extensions >+ >+# purge installed-extensions-processed.txt >+rm -f ${LIBDIR}/extensions/installed-extensions-processed.txt >+ >+# reinitialize Extensions.rdf >+rm -f ${LIBDIR}/extensions/Extensions.rdf >+cat <<EOF > ${LIBDIR}/extensions/Extensions.rdf >+<?xml version="1.0"?> >+ >+<RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#" >+ xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> >+ >+ <Seq about="urn:mozilla:extension:root"/> >+ <Seq about="urn:mozilla:theme:root"/> >+ >+</RDF> >+EOF >+ >+# gen installed-extensions.txt >+TMPFILE=`tempfile` >+for f in `echo ${EXTDIR}/* | sort`; do >+ while read line; do >+ EXTUID=`echo ${line} | cut -f 2 -d ,` >+ EXTUIDDIR=${LIBDIR}/extensions/${EXTUID} >+ if [ -e ${EXTUIDDIR} ]; then >+ if [ -e ${EXTUIDDIR}/install.rdf ]; then >+ if grep ${EXTUID} ${EXTUIDDIR}/install.rdf 2>&1 > /dev/null; then >+ echo $line >> ${TMPFILE} >+ elif [ "${VERBOSE}" ]; then >+ echo "W: ${f}: ${EXTUIDDIR}/install.rdf doesn't contain the UID." >& 2 >+ fi >+ elif [ "${VERBOSE}" ]; then >+ echo "W: ${f}: ${EXTUIDDIR}/install.rdf doesn't exist." >&2 >+ fi >+ elif [ "${VERBOSE}" ]; then >+ echo "W: ${f}: ${EXTUIDDIR} doesn't exist." >&2 >+ fi >+ done < $f >+done >+ >+mv ${TMPFILE} ${VARDIR}/extensions/installed-extensions.txt >+chmod 0644 ${VARDIR}/extensions/installed-extensions.txt >+ >+if [ "$VERBOSE" ]; then >+ for f in `find ${LIBDIR}/extensions/ -name '{*}' -maxdepth 1`; do >+ if ! grep `basename $f` ${VARDIR}/extensions/installed-extensions.txt 2>&1 > /dev/null; then >+ echo "W: `basename $f` not in ${VARDIR}/extensions/installed-extensions.txt" >&2 >+ fi >+ done >+fi >+ >+# gen >+firefox-bin -register >/dev/null 2>&1 || echo "E: Registration process existed with status: $?" >&2 >+ >+if [ -e ${LIBDIR}/extensions/installed-extensions.txt ]; then >+ echo "E: ${LIBDIR}/extensions/installed-extensions.txt still present. Registration might have gone wrong." >&2 >+fi >+ >+# move and link >+for file in ${LIBDIR}/components/*.dat; do >+ if [ -f "${file}" ]; then >+ mv ${file} ${VARDIR}/components/ >+ ln -fs ${VARDIR}/components/`basename "${file}"` ${LIBDIR}/components/ >+ fi >+done >+ >+for file in ${LIBDIR}/chrome/*.rdf; do >+ if [ -f "${file}" ]; then >+ mv ${file} ${VARDIR}/chrome/ >+ ln -fs ${VARDIR}/chrome/`basename "${file}"` ${LIBDIR}/chrome/ >+ fi >+done >+ >+mv ${LIBDIR}/defaults.ini ${VARDIR}/ >+ln -fs ${VARDIR}/defaults.ini ${LIBDIR}/ >+ >+mv ${LIBDIR}/components.ini ${VARDIR}/ >+ln -fs ${VARDIR}/components.ini ${LIBDIR}/ >+ >+mv ${LIBDIR}/extensions/Extensions.rdf ${VARDIR}/extensions/ >+ln -fs ${VARDIR}/extensions/Extensions.rdf ${LIBDIR}/extensions/ >+ >+rm -fr ${HOME} >+ >+# done >+echo done. >--- debian/mozilla-firefox-gnome-support.postinst >+++ debian/mozilla-firefox-gnome-support.postinst >@@ -0,0 +1,7 @@ >+#!/bin/sh -e >+ >+if [ "$1" = "configure" ] ; then >+ update-mozilla-firefox-chrome >+fi >+ >+#DEBHELPER# >--- debian/mozilla-firefox.postinst >+++ debian/mozilla-firefox.postinst >@@ -0,0 +1,22 @@ >+#!/bin/sh -e >+ >+if [ "$1" = "configure" -o "$1" = "abort-upgrade" ] ; then >+ update-alternatives --install /usr/bin/x-www-browser \ >+ x-www-browser /usr/bin/mozilla-firefox 84 \ >+ --slave /usr/share/man/man1/x-www-browser.1.gz \ >+ x-www-browser.1.gz /usr/share/man/man1/mozilla-firefox.1.gz >+ update-alternatives --install /usr/bin/mozilla mozilla \ >+ /usr/bin/mozilla-firefox 0 \ >+ --slave /usr/share/man/man1/mozilla.1.gz mozilla.1.gz \ >+ /usr/share/man/man1/mozilla-firefox.1.gz >+fi >+ >+if [ "$1" = "configure" ] ; then >+ update-mozilla-firefox-chrome >+fi >+ >+if [ -x /usr/sbin/update-desktop-database ]; then >+ /usr/sbin/update-desktop-database >+fi >+ >+#DEBHELPER# >--- debian/mozilla-firefox-dev.dirs >+++ debian/mozilla-firefox-dev.dirs >@@ -0,0 +1,4 @@ >+usr/lib/pkgconfig >+usr/share/idl >+usr/include >+usr/bin >--- debian/mozilla-firefox.xpm >+++ debian/mozilla-firefox.xpm >@@ -0,0 +1,1144 @@ >+/* XPM */ >+static char * mozicon50_xpm[] = { >+"48 48 1093 2", >+" c None", >+". c #2099CF", >+"+ c #2CA7D9", >+"@ c #33AEDD", >+"# c #34B2E1", >+"$ c #35B8E5", >+"% c #2FBAE8", >+"& c #26B5E4", >+"* c #199FD6", >+"= c #177DB8", >+"- c #2C8FC4", >+"; c #43A0CE", >+"> c #55ADD6", >+", c #5CB5DD", >+"' c #61C4E8", >+") c #63CBED", >+"! c #64CFF1", >+"~ c #63D1F2", >+"{ c #5ECCEF", >+"] c #57C3E9", >+"^ c #4EB8E1", >+"/ c #3CABD9", >+"( c #2A9ED1", >+"_ c #1991C9", >+": c #0F7CBA", >+"< c #166EAC", >+"[ c #3387BC", >+"} c #4797C6", >+"| c #51A0CC", >+"1 c #56A7D2", >+"2 c #5BAED7", >+"3 c #60B6DD", >+"4 c #67CDEE", >+"5 c #69D3F2", >+"6 c #6BD4F4", >+"7 c #69D3F4", >+"8 c #63CDEF", >+"9 c #5AC0E6", >+"0 c #51B6DF", >+"a c #49ACD8", >+"b c #42A2D1", >+"c c #3898CA", >+"d c #298CC2", >+"e c #167EB9", >+"f c #0B5A9C", >+"g c #2674AE", >+"h c #3D87BA", >+"i c #4590C0", >+"j c #4B97C6", >+"k c #519FCB", >+"l c #58A6D1", >+"m c #5DADD5", >+"n c #62B3DA", >+"o c #69C3E6", >+"p c #6ED4F2", >+"q c #6FD6F4", >+"r c #6ED5F4", >+"s c #6AD3F2", >+"t c #5FC3E7", >+"u c #53B2DC", >+"v c #4BA8D5", >+"w c #439FCE", >+"x c #3B95C7", >+"y c #338BC0", >+"z c #2B82B9", >+"A c #1D76B1", >+"B c #0C69A9", >+"C c #10599A", >+"D c #2D71AA", >+"E c #377CB2", >+"F c #3D84B8", >+"G c #458DBE", >+"H c #4B95C4", >+"I c #529CC9", >+"J c #59A4CF", >+"K c #5FABD4", >+"L c #65B1D8", >+"M c #6BC2E4", >+"N c #71D5F3", >+"O c #73D6F3", >+"P c #72D5F3", >+"Q c #6DD1F0", >+"R c #5FBBE2", >+"S c #54ADD8", >+"T c #4CA4D2", >+"U c #439ACB", >+"V c #3B91C4", >+"W c #3487BD", >+"X c #2D7EB7", >+"Y c #2675AF", >+"Z c #1E6CA9", >+"` c #0F5FA0", >+" . c #055296", >+".. c #115394", >+"+. c #2767A2", >+"@. c #2F70A9", >+"#. c #3679AF", >+"$. c #3C81B5", >+"%. c #448ABC", >+"&. c #4A92C2", >+"*. c #519AC7", >+"=. c #58A2CD", >+"-. c #5FA9D2", >+";. c #65B0D7", >+">. c #6EC8E9", >+",. c #74D4F2", >+"'. c #76D6F3", >+"). c #75D6F3", >+"!. c #71D3F1", >+"~. c #62BCE1", >+"{. c #54A9D5", >+"]. c #4C9FCE", >+"^. c #4396C8", >+"/. c #3B8CC1", >+"(. c #3483BA", >+"_. c #2C7AB3", >+":. c #2670AC", >+"<. c #1F68A6", >+"[. c #195F9F", >+"}. c #0D5497", >+"|. c #04488D", >+"1. c #0F4A8D", >+"2. c #1F5A98", >+"3. c #2663A0", >+"4. c #2D6DA6", >+"5. c #3475AD", >+"6. c #3B7EB3", >+"7. c #4287B9", >+"8. c #4990C1", >+"9. c #51A4CF", >+"0. c #569FCA", >+"a. c #5DA6CF", >+"b. c #66B5DB", >+"c. c #6FD1F0", >+"d. c #75D4F1", >+"e. c #79D5F2", >+"f. c #75D3F1", >+"g. c #63BBE0", >+"h. c #54A4D1", >+"i. c #4B9BCB", >+"j. c #4391C4", >+"k. c #3B88BD", >+"l. c #337FB6", >+"m. c #2C76B0", >+"n. c #266CA9", >+"o. c #1F64A3", >+"p. c #1A5B9C", >+"q. c #145396", >+"r. c #0A498E", >+"s. c #034C8F", >+"t. c #085293", >+"u. c #164D8E", >+"v. c #1D5695", >+"w. c #24609C", >+"x. c #2A69A3", >+"y. c #3271AA", >+"z. c #387AAF", >+"A. c #429FCC", >+"B. c #4CBFE4", >+"C. c #52C4E8", >+"D. c #57AFD7", >+"E. c #5DB3DA", >+"F. c #65C5E7", >+"G. c #6DD0EE", >+"H. c #72D2EF", >+"I. c #78D4F0", >+"J. c #7BD5F1", >+"K. c #76D2EF", >+"L. c #6AC5E6", >+"M. c #55A5D1", >+"N. c #4A95C6", >+"O. c #428CC0", >+"P. c #3A83B9", >+"Q. c #337AB3", >+"R. c #2C71AD", >+"S. c #2568A6", >+"T. c #1F5F9F", >+"U. c #1D65A3", >+"V. c #269ACA", >+"W. c #1C84BA", >+"X. c #0D7DB5", >+"Y. c #0298CC", >+"Z. c #0296CA", >+"`. c #0C5998", >+" + c #14498A", >+".+ c #1B609C", >+"++ c #2498C8", >+"@+ c #2977AF", >+"#+ c #2F75AC", >+"$+ c #3575AC", >+"%+ c #40ABD5", >+"&+ c #49BFE4", >+"*+ c #50C3E7", >+"=+ c #56C5E8", >+"-+ c #5DC8EA", >+";+ c #63CBEB", >+">+ c #69CEED", >+",+ c #6ED0EE", >+"'+ c #73D2EF", >+")+ c #77D3EF", >+"!+ c #72CEEC", >+"~+ c #5AA7D1", >+"{+ c #4F99C9", >+"]+ c #4891C3", >+"^+ c #4087BC", >+"/+ c #387EB5", >+"(+ c #3277B1", >+"_+ c #2B70AB", >+":+ c #2463A2", >+"<+ c #1E5B9C", >+"[+ c #185395", >+"}+ c #165496", >+"|+ c #10498D", >+"1+ c #105F9E", >+"2+ c #0A9ECF", >+"3+ c #0088C0", >+"4+ c #038DC3", >+"5+ c #0A4A8C", >+"6+ c #114E8E", >+"7+ c #1989BD", >+"8+ c #22AAD7", >+"9+ c #28A2D0", >+"0+ c #2C71A9", >+"a+ c #3380B5", >+"b+ c #3EB9E1", >+"c+ c #45BDE3", >+"d+ c #4CC0E5", >+"e+ c #53C3E7", >+"f+ c #59C6E8", >+"g+ c #5EC9EA", >+"h+ c #64CBEB", >+"i+ c #69CDEC", >+"j+ c #6ECFED", >+"k+ c #70D0ED", >+"l+ c #64BDE1", >+"m+ c #55A6D1", >+"n+ c #3D82B8", >+"o+ c #3D8BBE", >+"p+ c #49AFD8", >+"q+ c #378DBF", >+"r+ c #225F9E", >+"s+ c #1D5698", >+"t+ c #174E92", >+"u+ c #12468B", >+"v+ c #0E3F85", >+"w+ c #115F9D", >+"x+ c #15A2D1", >+"y+ c #0395C9", >+"z+ c #0088C1", >+"A+ c #0190C6", >+"B+ c #079ACC", >+"C+ c #0FA0D0", >+"D+ c #169ECF", >+"E+ c #1D99CC", >+"F+ c #25AAD7", >+"G+ c #2BA0CE", >+"H+ c #32AED8", >+"I+ c #3AB7DF", >+"J+ c #41BBE1", >+"K+ c #47BEE3", >+"L+ c #4EC1E5", >+"M+ c #53C4E7", >+"N+ c #5FC8E9", >+"O+ c #63CAEA", >+"P+ c #67CBEB", >+"Q+ c #69CBEA", >+"R+ c #62BCE0", >+"S+ c #5AAFD7", >+"T+ c #478DBF", >+"U+ c #4084B9", >+"V+ c #3A7CB4", >+"W+ c #3E8CBF", >+"X+ c #4DBADF", >+"Y+ c #3383B8", >+"Z+ c #215B9B", >+"`+ c #1B5295", >+" @ c #164A8E", >+".@ c #114288", >+"+@ c #0D3A82", >+"@@ c #0E4C8E", >+"#@ c #1380B7", >+"$@ c #0D96C9", >+"%@ c #0089C1", >+"&@ c #007BB8", >+"*@ c #0085BE", >+"=@ c #008CC4", >+"-@ c #0496C9", >+";@ c #0B9DCF", >+">@ c #1168AB", >+",@ c #174F99", >+"'@ c #21AAD7", >+")@ c #28AED9", >+"!@ c #2FB1DB", >+"~@ c #36B5DE", >+"{@ c #3CB8E0", >+"]@ c #42BBE2", >+"^@ c #49BEE4", >+"/@ c #54C3E6", >+"(@ c #59C5E7", >+"_@ c #5DC7E8", >+":@ c #5FC5E7", >+"<@ c #53A9D3", >+"[@ c #4B96C6", >+"}@ c #478FC2", >+"|@ c #4186BB", >+"1@ c #3C7FB5", >+"2@ c #3676AF", >+"3@ c #306EA9", >+"4@ c #3889BD", >+"5@ c #44AFD8", >+"6@ c #2F84B9", >+"7@ c #194D91", >+"8@ c #15458A", >+"9@ c #144D90", >+"0@ c #0C367E", >+"a@ c #0C4086", >+"b@ c #1797C8", >+"c@ c #1295C8", >+"d@ c #0487C0", >+"e@ c #0079B6", >+"f@ c #0081BC", >+"g@ c #0E9ACC", >+"h@ c #1597CA", >+"i@ c #1CA7D5", >+"j@ c #23ABD8", >+"k@ c #2AAFDA", >+"l@ c #31B2DC", >+"m@ c #37B5DE", >+"n@ c #3DB8E0", >+"o@ c #43BBE2", >+"p@ c #49BEE3", >+"q@ c #4EC0E4", >+"r@ c #53C2E5", >+"s@ c #57C4E6", >+"t@ c #4EAAD4", >+"u@ c #4696C5", >+"v@ c #438FC0", >+"w@ c #4088BC", >+"x@ c #3C80B6", >+"y@ c #3778B1", >+"z@ c #3270AB", >+"A@ c #2C68A5", >+"B@ c #3D9AC8", >+"C@ c #46BADF", >+"D@ c #3DB0D8", >+"E@ c #287CB2", >+"F@ c #164D90", >+"G@ c #299ECC", >+"H@ c #1B79B0", >+"I@ c #1A8CBF", >+"J@ c #199BCC", >+"K@ c #1392C6", >+"L@ c #0A86BE", >+"M@ c #0079B7", >+"N@ c #006AAC", >+"O@ c #0074B3", >+"P@ c #007CB9", >+"Q@ c #0083BE", >+"R@ c #008BC2", >+"S@ c #0393C8", >+"T@ c #099CCD", >+"U@ c #10A1D1", >+"V@ c #17A4D3", >+"W@ c #1EA8D6", >+"X@ c #25ABD8", >+"Y@ c #2BAFDA", >+"Z@ c #37B5DD", >+"`@ c #3DB8DF", >+" # c #42BAE1", >+".# c #48BCE2", >+"+# c #4CBEE3", >+"@# c #50C0E4", >+"## c #48A8D3", >+"$# c #3F8EC0", >+"%# c #3C87BC", >+"&# c #3A81B7", >+"*# c #3679B1", >+"=# c #3171AC", >+"-# c #2D6AA6", >+";# c #2862A0", >+"># c #40A5D1", >+",# c #43B8DE", >+"'# c #3DB5DC", >+")# c #38B1DA", >+"!# c #2D9ECC", >+"~# c #2B9FCE", >+"{# c #246AAA", >+"]# c #1F96C7", >+"^# c #1996C9", >+"/# c #138DC3", >+"(# c #0E84BC", >+"_# c #0175B4", >+":# c #0068AC", >+"<# c #0070B1", >+"[# c #0077B5", >+"}# c #007FBA", >+"|# c #0086BF", >+"1# c #018DC4", >+"2# c #0596C9", >+"3# c #0B9DCE", >+"4# c #12A1D1", >+"5# c #1897C8", >+"6# c #1E96C7", >+"7# c #25A0CE", >+"8# c #2B90C2", >+"9# c #31A4D0", >+"0# c #37B4DD", >+"a# c #3CB7DF", >+"b# c #41B9E0", >+"c# c #45BBE0", >+"d# c #49BCE1", >+"e# c #4BBBE0", >+"f# c #419FCC", >+"g# c #3C91C2", >+"h# c #337AB1", >+"i# c #3072AC", >+"j# c #2C6BA7", >+"k# c #2864A1", >+"l# c #255F9E", >+"m# c #3FAAD4", >+"n# c #40B6DC", >+"o# c #3AB3DB", >+"p# c #35B0D8", >+"q# c #2F86BD", >+"r# c #29599F", >+"s# c #237DB7", >+"t# c #1E99CA", >+"u# c #1892C5", >+"v# c #1389C0", >+"w# c #0E7FBA", >+"x# c #0473B2", >+"y# c #0065AA", >+"z# c #0064A9", >+"A# c #006BAD", >+"B# c #0072B2", >+"C# c #0080BC", >+"D# c #0082BC", >+"E# c #028DC4", >+"F# c #0796C9", >+"G# c #0D88BD", >+"H# c #1372AB", >+"I# c #1982B8", >+"J# c #1F79B0", >+"K# c #247BB1", >+"L# c #2A86B9", >+"M# c #31B1DA", >+"N# c #36B3DC", >+"O# c #3AB5DD", >+"P# c #3FB7DE", >+"Q# c #42B9DF", >+"R# c #45BAE0", >+"S# c #48BBE0", >+"T# c #47B6DD", >+"U# c #3689BC", >+"V# c #2D72AB", >+"W# c #2C73AC", >+"X# c #2F7DB3", >+"Y# c #399BC9", >+"Z# c #3FB4DB", >+"`# c #3CB3DA", >+" $ c #37B0D9", >+".$ c #32AED7", >+"+$ c #2CA8D3", >+"@$ c #277EB8", >+"#$ c #229CCC", >+"$$ c #1D95C8", >+"%$ c #188DC2", >+"&$ c #1384BD", >+"*$ c #0D7AB6", >+"=$ c #066FB0", >+"-$ c #0057A0", >+";$ c #005FA5", >+">$ c #0066AA", >+",$ c #006DAF", >+"'$ c #006EAC", >+")$ c #004C8E", >+"!$ c #005595", >+"~$ c #025999", >+"{$ c #085D9B", >+"]$ c #0D64A0", >+"^$ c #1369A4", >+"/$ c #196EA7", >+"($ c #1E73AA", >+"_$ c #2376AD", >+":$ c #2AA0CE", >+"<$ c #2FAFD9", >+"[$ c #34B1DB", >+"}$ c #38B3DC", >+"|$ c #3BB5DC", >+"1$ c #3EB6DD", >+"2$ c #40B7DD", >+"3$ c #42B7DD", >+"4$ c #43B7DE", >+"5$ c #43B7DD", >+"6$ c #40B5DC", >+"7$ c #3DB4DB", >+"8$ c #3AB2DA", >+"9$ c #33AED6", >+"0$ c #2EABD5", >+"a$ c #29A5D2", >+"b$ c #259ECD", >+"c$ c #2094C6", >+"d$ c #1C8DC2", >+"e$ c #1787BE", >+"f$ c #127EB9", >+"g$ c #0D75B3", >+"h$ c #076AAC", >+"i$ c #005FA6", >+"j$ c #00539D", >+"k$ c #005AA2", >+"l$ c #0060A6", >+"m$ c #0068AB", >+"n$ c #0063A5", >+"o$ c #004487", >+"p$ c #004386", >+"q$ c #004789", >+"r$ c #004B8D", >+"s$ c #045192", >+"t$ c #095997", >+"u$ c #0E5F9C", >+"v$ c #1365A0", >+"w$ c #1869A4", >+"x$ c #1D6EA7", >+"y$ c #2274AB", >+"z$ c #28A6D2", >+"A$ c #2DAED8", >+"B$ c #31AFD9", >+"C$ c #34B1DA", >+"D$ c #37B2DB", >+"E$ c #39B3DB", >+"F$ c #3BB4DB", >+"G$ c #3CB4DB", >+"H$ c #3BB3DA", >+"I$ c #38B1D9", >+"J$ c #35AFD8", >+"K$ c #32ADD6", >+"L$ c #2EAAD4", >+"M$ c #2BA5D1", >+"N$ c #2795C5", >+"O$ c #2374AA", >+"P$ c #1E5691", >+"Q$ c #1A4C89", >+"R$ c #156AA5", >+"S$ c #1078B5", >+"T$ c #0B6FAF", >+"U$ c #0665A9", >+"V$ c #004A97", >+"W$ c #004D9A", >+"X$ c #00509A", >+"Y$ c #00579F", >+"Z$ c #0062A7", >+"`$ c #00468A", >+" % c #00387C", >+".% c #003C7F", >+"+% c #004083", >+"@% c #044D8E", >+"#% c #095493", >+"$% c #0E5A98", >+"%% c #13609C", >+"&% c #18659F", >+"*% c #1C6BA4", >+"=% c #219FCD", >+"-% c #25AAD5", >+";% c #29ABD6", >+">% c #2DADD7", >+",% c #30AED8", >+"'% c #32AFD8", >+")% c #34B0D8", >+"!% c #34AED7", >+"~% c #30ABD4", >+"{% c #2DA8D2", >+"]% c #2BA3CF", >+"^% c #289DCC", >+"/% c #2494C5", >+"(% c #20659E", >+"_% c #1C4684", >+":% c #183D7C", >+"<% c #133B7A", >+"[% c #0F5695", >+"}% c #0A5FA1", >+"|% c #055FA5", >+"1% c #00559F", >+"2% c #004D99", >+"3% c #004896", >+"4% c #002E74", >+"5% c #003C82", >+"6% c #004E94", >+"7% c #003377", >+"8% c #003175", >+"9% c #003578", >+"0% c #003B7F", >+"a% c #003F82", >+"b% c #014285", >+"c% c #044889", >+"d% c #094E8E", >+"e% c #0D5493", >+"f% c #125997", >+"g% c #167FB4", >+"h% c #1A96C7", >+"i% c #1EA5D2", >+"j% c #22A7D3", >+"k% c #25A9D4", >+"l% c #28AAD5", >+"m% c #2AAAD5", >+"n% c #2CABD6", >+"o% c #2DACD6", >+"p% c #2EACD5", >+"q% c #2DA9D3", >+"r% c #2CA6D1", >+"s% c #299FCD", >+"t% c #279ACA", >+"u% c #2495C7", >+"v% c #218FC3", >+"w% c #1D86BC", >+"x% c #1A4683", >+"y% c #163574", >+"z% c #112C6C", >+"A% c #0D2464", >+"B% c #082D6F", >+"C% c #044E94", >+"D% c #004F9A", >+"E% c #004292", >+"F% c #00347D", >+"G% c #002266", >+"H% c #002669", >+"I% c #00286C", >+"J% c #002B6F", >+"K% c #002E72", >+"L% c #003478", >+"M% c #00377B", >+"N% c #003A7E", >+"O% c #013D80", >+"P% c #044285", >+"Q% c #084889", >+"R% c #0D4D8D", >+"S% c #115492", >+"T% c #15609B", >+"U% c #189ACB", >+"V% c #1CA0CF", >+"W% c #1FA2CF", >+"X% c #21A3D1", >+"Y% c #24A4D1", >+"Z% c #25A5D1", >+"`% c #27A4D1", >+" & c #28A4D1", >+".& c #28A0CE", >+"+& c #289ECC", >+"@& c #2596C8", >+"#& c #2392C5", >+"$& c #208DC2", >+"%& c #1D87BD", >+"&& c #1A75AE", >+"*& c #173978", >+"=& c #132E6D", >+"-& c #0F2565", >+";& c #0B1D5D", >+">& c #071555", >+",& c #021151", >+"'& c #001F61", >+")& c #00276D", >+"!& c #003D8E", >+"~& c #003B89", >+"{& c #001E62", >+"]& c #002063", >+"^& c #002569", >+"/& c #002D72", >+"(& c #003074", >+"_& c #003579", >+":& c #033C7F", >+"<& c #074183", >+"[& c #0B4787", >+"}& c #0F5392", >+"|& c #1391C5", >+"1& c #1695C8", >+"2& c #1998CA", >+"3& c #1C99CA", >+"4& c #1E9ACB", >+"5& c #209BCB", >+"6& c #219BCB", >+"7& c #229ACA", >+"8& c #2399C9", >+"9& c #2397C8", >+"0& c #2394C6", >+"a& c #2291C4", >+"b& c #1E89C0", >+"c& c #1C84BC", >+"d& c #1A5B97", >+"e& c #174C89", >+"f& c #142D6C", >+"g& c #102665", >+"h& c #0C1E5D", >+"i& c #081756", >+"j& c #040F4F", >+"k& c #000847", >+"l& c #000541", >+"m& c #00033D", >+"n& c #00368A", >+"o& c #00256E", >+"p& c #00185A", >+"q& c #001A5D", >+"r& c #001D60", >+"s& c #001F63", >+"t& c #002568", >+"u& c #00276B", >+"v& c #00296D", >+"w& c #002B70", >+"x& c #003276", >+"y& c #023579", >+"z& c #063A7D", >+"A& c #0A5997", >+"B& c #0D87BF", >+"C& c #108AC1", >+"D& c #138CC3", >+"E& c #168EC4", >+"F& c #188FC4", >+"G& c #1A90C4", >+"H& c #1C90C4", >+"I& c #1D8FC4", >+"J& c #1D8EC3", >+"K& c #1D8CC2", >+"L& c #1D8AC0", >+"M& c #1C87BE", >+"N& c #1B83BC", >+"O& c #1A7FB9", >+"P& c #1864A0", >+"Q& c #164987", >+"R& c #132C6A", >+"S& c #102564", >+"T& c #0D1E5D", >+"U& c #091756", >+"V& c #06104E", >+"W& c #020947", >+"X& c #000441", >+"Y& c #00023C", >+"Z& c #000038", >+"`& c #003086", >+" * c #001A5E", >+".* c #001354", >+"+* c #001658", >+"@* c #001D5F", >+"#* c #001F62", >+"$* c #002164", >+"%* c #002367", >+"&* c #002D71", >+"** c #014C8E", >+"=* c #0474B2", >+"-* c #077CB9", >+";* c #0B80BA", >+">* c #0E82BB", >+",* c #1083BC", >+"'* c #1285BD", >+")* c #1485BE", >+"!* c #1686BD", >+"~* c #1785BD", >+"{* c #1884BC", >+"]* c #1882BB", >+"^* c #1880B9", >+"/* c #187DB7", >+"(* c #177AB6", >+"_* c #1571AF", >+":* c #143676", >+"<* c #122968", >+"[* c #0F2362", >+"}* c #0D1D5C", >+"|* c #0A1755", >+"1* c #030A47", >+"2* c #000239", >+"3* c #002A82", >+"4* c #00175D", >+"5* c #00104F", >+"6* c #001252", >+"7* c #001454", >+"8* c #001657", >+"9* c #00195C", >+"0* c #001C5E", >+"a* c #001D61", >+"b* c #002165", >+"c* c #002366", >+"d* c #002468", >+"e* c #006CAE", >+"f* c #006FB0", >+"g* c #0271B1", >+"h* c #0574B3", >+"i* c #0877B4", >+"j* c #0B78B5", >+"k* c #0F7AB6", >+"l* c #107AB7", >+"m* c #127AB6", >+"n* c #1279B5", >+"o* c #1377B4", >+"p* c #1375B3", >+"q* c #1372B1", >+"r* c #126FAF", >+"s* c #115797", >+"t* c #0F2766", >+"u* c #0D2160", >+"v* c #0B1B5A", >+"w* c #091554", >+"x* c #06104D", >+"y* c #030A46", >+"z* c #000540", >+"A* c #000036", >+"B* c #00237E", >+"C* c #002980", >+"D* c #002372", >+"E* c #001A60", >+"F* c #001659", >+"G* c #001358", >+"H* c #001A5F", >+"I* c #002064", >+"J* c #001B5E", >+"K* c #005397", >+"L* c #0065A9", >+"M* c #0067AB", >+"N* c #0069AC", >+"O* c #026AAD", >+"P* c #046CAE", >+"Q* c #0768AB", >+"R* c #0965A9", >+"S* c #0A6EAF", >+"T* c #0C6EAE", >+"U* c #0D6DAE", >+"V* c #0D6CAD", >+"W* c #0D6AAB", >+"X* c #0D67AA", >+"Y* c #0D64A7", >+"Z* c #0C498C", >+"`* c #0A1E5E", >+" = c #091856", >+".= c #071350", >+"+= c #050D4B", >+"@= c #020844", >+"#= c #00043F", >+"$= c #00023B", >+"%= c #000037", >+"&= c #000035", >+"*= c #000034", >+"== c #001A77", >+"-= c #00237D", >+";= c #002881", >+">= c #002D84", >+",= c #00287F", >+"'= c #000B6C", >+")= c #00388A", >+"!= c #003785", >+"~= c #001556", >+"{= c #001759", >+"]= c #00195B", >+"^= c #001C5F", >+"/= c #001C60", >+"(= c #004B91", >+"_= c #004287", >+":= c #00569C", >+"<= c #0061A7", >+"[= c #023187", >+"}= c #033388", >+"|= c #0563A7", >+"1= c #0662A7", >+"2= c #0762A7", >+"3= c #0860A6", >+"4= c #085EA4", >+"5= c #085CA3", >+"6= c #084388", >+"7= c #071B5B", >+"8= c #061453", >+"9= c #04104D", >+"0= c #030B48", >+"a= c #010742", >+"b= c #00033E", >+"c= c #00013A", >+"d= c #000033", >+"e= c #000032", >+"f= c #001C79", >+"g= c #00217C", >+"h= c #002780", >+"i= c #002B83", >+"j= c #003589", >+"k= c #001D63", >+"l= c #000F4F", >+"m= c #000F4E", >+"n= c #001050", >+"o= c #001152", >+"p= c #001353", >+"q= c #001455", >+"r= c #002F74", >+"s= c #00529A", >+"t= c #0058A1", >+"u= c #00529D", >+"v= c #0156A0", >+"w= c #02569F", >+"x= c #02549E", >+"y= c #03529D", >+"z= c #034F9A", >+"A= c #032062", >+"B= c #020F4E", >+"C= c #010C49", >+"D= c #000845", >+"E= c #00033C", >+"F= c #000138", >+"G= c #000135", >+"H= c #001474", >+"I= c #001F7B", >+"J= c #00247E", >+"K= c #002D83", >+"L= c #001051", >+"M= c #000A46", >+"N= c #000B48", >+"O= c #000C4A", >+"P= c #000D4B", >+"Q= c #000E4D", >+"R= c #001151", >+"S= c #001253", >+"T= c #00377E", >+"U= c #004E9A", >+"V= c #004C98", >+"W= c #00408C", >+"X= c #000946", >+"Y= c #00053F", >+"Z= c #000137", >+"`= c #000031", >+" - c #000030", >+".- c #001373", >+"+- c #001876", >+"@- c #001D79", >+"#- c #00267F", >+"$- c #000D4D", >+"%- c #000741", >+"&- c #000843", >+"*- c #000945", >+"=- c #000A47", >+"-- c #000B49", >+";- c #000D4C", >+">- c #002F77", >+",- c #00327A", >+"'- c #002267", >+")- c #002166", >+"!- c #00256A", >+"~- c #003D89", >+"{- c #004393", >+"]- c #003F90", >+"^- c #003C8D", >+"/- c #003382", >+"(- c #003587", >+"_- c #002069", >+":- c #00033A", >+"<- c #000136", >+"[- c #00002F", >+"}- c #000C6E", >+"|- c #001171", >+"1- c #001574", >+"2- c #001E7A", >+"3- c #00196A", >+"4- c #00053E", >+"5- c #000640", >+"6- c #000742", >+"7- c #00185B", >+"8- c #003787", >+"9- c #00398C", >+"0- c #00378B", >+"a- c #003388", >+"b- c #002779", >+"c- c #00063F", >+"d- c #00002D", >+"e- c #00096C", >+"f- c #000D6F", >+"g- c #001271", >+"h- c #001675", >+"i- c #001872", >+"j- c #000338", >+"k- c #00043A", >+"l- c #00043B", >+"m- c #00053D", >+"n- c #000844", >+"o- c #000944", >+"p- c #002573", >+"q- c #002E85", >+"r- c #002C83", >+"s- c #001E71", >+"t- c #00002E", >+"u- c #00002C", >+"v- c #000266", >+"w- c #00066A", >+"x- c #000A6D", >+"y- c #000E70", >+"z- c #000C58", >+"A- c #000643", >+"B- c #000337", >+"C- c #000236", >+"D- c #000339", >+"E- c #00053C", >+"F- c #00063E", >+"G- c #00073F", >+"H- c #00145A", >+"I- c #001C78", >+"J- c #000743", >+"K- c #00002A", >+"L- c #00005F", >+"M- c #000267", >+"N- c #000A6C", >+"O- c #000952", >+"P- c #000131", >+"Q- c #000132", >+"R- c #000133", >+"S- c #000134", >+"T- c #000235", >+"U- c #00196E", >+"V- c #001D7A", >+"W- c #001B78", >+"X- c #001977", >+"Y- c #001775", >+"Z- c #001473", >+"`- c #000E66", >+" ; c #00002B", >+".; c #000029", >+"+; c #000053", >+"@; c #00005E", >+"#; c #000265", >+"$; c #000464", >+"%; c #000130", >+"&; c #001160", >+"*; c #001164", >+"=; c #001674", >+"-; c #001272", >+";; c #001071", >+">; c #000E6F", >+",; c #000B6E", >+"'; c #00086C", >+"); c #00045F", >+"!; c #000152", >+"~; c #000046", >+"{; c #000051", >+"]; c #00005A", >+"^; c #00012F", >+"/; c #000542", >+"(; c #00106E", >+"_; c #001070", >+":; c #000F70", >+"<; c #00086B", >+"[; c #000367", >+"}; c #000163", >+"|; c #00005B", >+"1; c #000052", >+"2; c #000047", >+"3; c #000041", >+"4; c #000028", >+"5; c #000021", >+"6; c #000025", >+"7; c #00003E", >+"8; c #00003A", >+"9; c #00075A", >+"0; c #00076B", >+"a; c #000569", >+"b; c #000368", >+"c; c #000162", >+"d; c #00005C", >+"e; c #000054", >+"f; c #00004C", >+"g; c #000042", >+"h; c #000039", >+"i; c #000026", >+"j; c #000023", >+"k; c #000017", >+"l; c #00001C", >+"m; c #00004D", >+"n; c #000055", >+"o; c #000027", >+"p; c #00003D", >+"q; c #000058", >+"r; c #00004E", >+"s; c #000048", >+"t; c #000019", >+"u; c #000012", >+"v; c #00001D", >+"w; c #00001F", >+"x; c #000044", >+"y; c #000008", >+"z; c #000018", >+"A; c #000024", >+"B; c #000015", >+"C; c #000022", >+"D; c #00000F", >+"E; c #000004", >+"F; c #000007", >+"G; c #000009", >+"H; c #00000C", >+"I; c #00000D", >+"J; c #00000E", >+"K; c #00000A", >+"L; c #000003", >+"M; c #000000", >+"N; c #000001", >+"O; c #000005", >+"P; c #00000B", >+" ", >+" ", >+" . + @ # $ % & * ", >+" = - ; > , ' ) ! ~ { ] ^ / ( _ : ", >+" < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ", >+" f g h i j k l m n o p q r s t u v w x y z A B ", >+" C D E F G H I J K L M N O P Q R S T U V W X Y Z ` . ", >+" ..+.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|. ", >+" 1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s. ", >+" t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y. ", >+" Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+ ", >+" 3+4+5+6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+k+k+l+m+]+n+o+p+q+r+s+t+u+v+w+x+y+ ", >+" z+A+B+C+D+E+F+G+H+I+J+K+L+M+f+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@@@#@$@%@ ", >+" &@*@=@-@;@>@,@'@)@!@~@{@]@^@L+/@(@_@:@<@[@}@|@1@2@3@4@5@6@7@8@9@0@a@b@c@d@ ", >+" e@f@z+A+B+g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@A@B@C@D@E@F@G@H@I@J@K@L@M@ ", >+" N@O@P@Q@R@S@T@U@V@W@X@Y@l@Z@`@ #.#+#@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#/#(#_# ", >+" :#<#[#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#y# ", >+" z#A#B#M@C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$z# ", >+" -$;$>$,$O@'$)$!$~${$]$^$/$($_$:$<$[$}$|$1$2$3$4$5$3$6$7$8$ $9$0$a$b$c$d$e$f$g$h$i$ ", >+" j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$G$H$8$I$J$K$L$M$N$O$P$Q$R$S$T$U$k$V$ ", >+" W$X$Y$Z$`$ %.%+%p$q$@%#%$%%%&%*%=%-%;%>%,%'%)%p#p#J$!%K$~%{%]%^%/%(%_%:%<%[%}%|%1%2% ", >+" 3%4%5%6%7%8%9% %0%a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%0$q%r%]%s%t%u%v%w%x%y%z%A%B%C%D%3% ", >+" E%F%G%H%I%J%K%8%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%`% &9+.&+&V.@&#&$&%&&&*&=&-&;&>&,&'&)& ", >+" !&~&{&]&G%^&I%J%/&(&7%_& %:&<&[&}&|&1&2&3&4&5&6&7&8&9&0&a&$&b&c&d&e&f&g&h&i&j&k&l&m& ", >+" n&o&p&q&r&s&G%t&u&v&w&K%(&x&y&z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z& ", >+" `& *.*+*p&q&@*#*$*%*^&u&v&J%&***=*-*;*>*,*'*)*!*~*{*]*^*/*(*_*:*<*[*}*|*V&1*l&Y&Z&2* ", >+" 3*4*5*6*7*8*p&9*0*a*s&b*c*d*v&e*f*g*h*i*j**$k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*Y&Z&A*z* ", >+" B*C*D*E*F*G*H*I*+*p&9*J*r&{&x&K*L*M*N*O*P*Q*R*S*T*U*V*W*X*Y*Z*`* =.=+=@=#=$=%=&=*= ", >+" ==-=;=>=,='=)=!=J*.*~=+*{=]=^=/=(=_=:=l$<=[=}=|=1=2=3=4=5=6=7=8=9=0=a=b=c=%=&=d=e= ", >+" f=g=h=i=3*j=k=l=m=n=o=p=q=~=8*r=^=b*s=t=j$u=-$v=w=x=y=z=A=B=C=D=z*E=F=A*&=d=e=G= ", >+" H===I=J=;=K=L=M=N=O=P=Q=l=n=R=6*S=.*T=D%D%D%U=2%V=V$3%W=J*L=X=Y=$=Z=&=*=e=`= - ", >+" .-+-@-g=#-$-%-&-*-M==---O=P=;-Q=m=>-,-'-)-!-~-{-E%]-^-/-(-_-:-<-*=d=e=`=[-[- ", >+" }-|-1-==2-3-4-4-5-%-6-&-*-X==-=-N=q&;-O=O=O=7-8-9-0-j=a-`&b-c-d=e=`= -[-d-$= ", >+" e-f-g-h-i-4-j-k-l-m-4-c-5-%-6-6-&-&-n-o-o-*-M=p-q-r-3*h=s-X=`= -[-t-u-u- ", >+" v-w-x-y-g-z-A-B-C-j-D-:-l-l-E-m-4-F-F-c-c-c-G-H-#-J=g=I=I-J-t-t-d-u-K- ", >+" L-M-w-N-f-O-P-Q-R-S-T-C-C-B-j-D-D-:-k-l-k-D=U-V-W-X-Y-Z-`-[- ; ;.;u- ", >+" +;@;#;$; ;u-d-t-[- -%;P-Q-R-R-S-B-z*&;*;Y-=;H=-;;;>;,;';);!;%=d- ", >+" ~;{;];u-.;K- ; ;u-d-d-d-t-t-^;/;(;_;;;:;f-}-x-<;w-[;};|;1;2; ", >+" A*%=3;4;5;6;u-7;8;u-K- ; ; ; ;^;9;<;0;w-a;b;v-c;d;e;f;g;h; ", >+" i;j;k;l;d=m;1;n;d= ;i;o;o;o;o;p;@;d;q;+;r;s;3;h;`=K- ", >+" t;u;k;o;e=Z&%=5;*=l;v;v;v;w; ;x;3;p;Z&d=d-i;w; ", >+" y;u;z;v;5;A;A;B;u;u;u;j; ;.;i;C;v;z;u;D; ", >+" E;E;F;G;H;I;I;I;H;D;J;H;K;F;E;K; ", >+" y;L;M;M;N;N;M;N;O;P; ", >+" ", >+" ", >+" ", >+" "}; >--- debian/mozilla-firefox.1 >+++ debian/mozilla-firefox.1 >@@ -0,0 +1,142 @@ >+.TH MOZILLA\-FIREFOX 1 "November 4, 2004" mozilla\-firefox "Linux User's Manual" >+.SH NAME >+mozilla\-firefox - a Web browser for X11 derived from the Mozilla browser >+ >+.SH SYNOPSIS >+.B mozilla\-firefox >+[\fIOPTIONS\fR] [\fIURL\fR] >+ >+.B /usr/lib/mozilla\-firefox/firefox\-bin >+[\fIOPTIONS\fR] [\fIURL\fR] >+ >+.SH DESCRIPTION >+\fBMozilla Firefox\fR is an open-source web browser, designed for >+standards compliance, performance and portability. >+ >+.SH USAGE >+\fBmozilla\-firefox\fR is a simple shell script that will set up the >+environment for the actual executable, \fBfirefox\-bin\fR. >+ >+.SH OPTIONS >+A summary of the options supported by \fBmozilla\-firefox\fR is included below. >+ >+.SS "GTK options" >+\fB\-\-gdk\-debug=\fR\fIFLAGS\fR >+Gdk debugging flags to set >+.TP >+\fB\-\-gdk\-no\-debug=\fR\fIFLAGS\fR >+Gdk debugging flags to unset >+.TP >+\fB\-\-gtk\-debug=\fR\fIFLAGS\fR >+Gtk+ debugging flags to set >+.TP >+\fB\-\-gtk\-no\-debug=\fR\fIFLAGS\fR >+Gtk+ debugging flags to unset >+.TP >+\fB\-\-gtk\-module=\fR\fIMODULE\fR >+Load an additional Gtk module >+ >+.SS "X11 options" >+.TP >+.BI \-\-display= DISPLAY >+X display to use >+.TP >+.B \-\-sync >+Make X calls synchronous >+.TP >+.B \-\-no\-xshm >+Don't use X shared memory extension >+.TP >+.BI \-\-xim\-preedit= STYLE >+.TP >+.BI \-\-xim\-status= STYLE >+.TP >+.B \-\-g\-fatal\-warnings >+Make all warnings fatal >+ >+.SS "Mozilla options" >+.TP >+\fB\-height\fR \fIvalue\fR >+Set height of startup window to \fIvalue\fR pixels. >+.TP >+.B \-h, \-help >+Show summary of options. >+.TP >+.B \-installer >+Start with Mozilla 4.x migration window. >+.TP >+\fB\-width\fR \fIvalue\fR >+Set width of startup window to \fIvalue\fR pixels. >+.TP >+.B \-v, \-version >+Print Mozilla Firefox version. >+.TP >+\fB\-CreateProfile\fR \fIprofile\fR >+Create \fIprofile\fR. >+.TP >+\fB\-P\fR \fIprofile\fR >+Start with \fIprofile\fR. >+.TP >+.B \-ProfileManager >+Start with profile manager. >+.TP >+\fB\-UILocale\fR \fIlocale\fR >+Start with \fIlocale\fR resources as User Interface locale. By default, it is >+guessed from environment and available locales for Mozilla Firefox. >+.TP >+\fB\-ContentLocale\fR \fIlocale\fR >+Start with \fIlocale\fR resources as content locale. By default, it is >+guessed from environment and available locales for Mozilla Firefox. >+.TP >+\fB\-remote\fR \fIcommand\fR >+Execute \fIcommand\fR in an already running Mozilla Firefox process. >+For more info, see: \fIhttp://www.mozilla.org/unix/remote.html\fR >+.TP >+.B \-jsconsole >+Start with Javascript Console >+.TP >+\fB\-chrome\fR \fIurl\fR >+Load the specified chrome. >+.TP >+.B \-safe\-mode >+Starts Mozilla Firefox in safe mode, that is disabling all extensions and >+showing a bit more debugging messages. >+ >+.SS "Debugger options" >+.TP >+.B \-g, \-debug >+Starts Mozilla Firefox through a debugger (gdb by default). >+.TP >+\fB\-\-debugger\fR \fIprogram\fR >+Use \fIprogram\fR as a debugger for Mozilla Firefox. Implies \fB\-debug\fR. >+ >+.SH ENVIRONMENT >+\fIFIREFOX_DSP\fR - configures the /dev/dsp wrapper to use. Accepted values >+are "auto" (default), "arts", "esd" or "none". >+ >+.SH FILES >+\fI/usr/bin/mozilla\-firefox\fR - shell script wrapping >+\fBfirefox\-bin\fR >+.br >+ >+\fI/usr/lib/mozilla/firefox\-bin\fR - \fBmozilla\-firefox\fR >+executable >+.br >+ >+\fI/etc/mozilla\-firefox/mozilla\-firefoxrc\fR - file containing environment >+variables to be passed to Mozilla Firefox. >+.br >+ >+\fI${HOME}/.mozilla/firefox/rc\fR - file containing environment variables to >+be passed to Mozilla Firefox. Overrides \fI/etc/mozilla\-firefox/mozilla\-firefoxrc\fR >+ >+.SH BUGS >+To report a bug, please visit \fIhttp://bugzilla.mozilla.org/\fR >+ >+.SH "SEE ALSO" >+.BR mozilla(1) >+ >+.SH AUTHORS >+.TP >+.B The Mozilla Organization >+.I http://www.mozilla.org/about.html >--- debian/README.Debian >+++ debian/README.Debian >@@ -0,0 +1,107 @@ >+README for Debian >+================= >+ >+*** Please submit non packaging issue (e.g. feature requests) bugs to >+the Debian BTS and the upstream bugzilla >+(http://bugzilla.mozilla.org/buglist.cgi?product=Firefox) and put a >+reference to the bugzilla bug in the Debian bug report, to ease bug >+triage for the maintainer. Thank you. *** >+ >+Firefox is still in heavy development, and it does not fully support >+upgrading from one release to another. Moving your .mozilla/firefox >+directory out of the way should be your first course of action before >+filing a bug report. Please see #202130 for an excellent analysis. You >+may also want to try removing ~/.mozilla/firefox/default/*/XUL.mfasl. >+ >+Firefox requires the loopback interface (lo) to be up and unfiltered >+to accept keyboard input and function correctly. Please make sure this >+is the case before filing any bugs. >+ >+Application Update >+------------------ >+ >+From version 1.0-2 onwards, the automatic application update has been >+completely disabled at the source code level, since it makes no sense >+in the context of Debian. >+ >+Automatic extensions update has also been disabled, but you can still >+enable it by either modifying the /etc/mozilla-firefox/pref/firefox.js >+file, in the user profile prefs.js, in about:config, or in the >+advanced preferences panel. You can also, while not re-enabling >+automatic updates, request extensions updates in the extensions >+manager dialog or in the advanced preferences panel >+ >+Extensions >+---------- >+ >+From Firefox 0.9, "old" extensions are disabled at first run (i.e. >+when no profile was found). By old extensions, Firefox means extensions >+not following the new extensions guidelines described at: >+http://www.bengoodger.com/software/mb/extensions/packaging/extensions.html >+But even the ones following these guidelines can be considered old if the >+contents.rdf file in their chrome gives the attribute chrome:extension = >+"true" in the package information. >+ >+For packaged extensions, that will lead to a lock case where you can't >+enable the extension back, due to an Extensions Manager bug. In such case, >+edit the chrome/chrome.rdf file in your user profile (usually >+~/.mozilla/firefox/default.*/chrome/chrome.rdf) and remove the >+c:disabled="true" attributes from the extensions you want to enable back. >+ >+Note that the mentioned Extensions Manager bug will prevent you to disable >+packaged extensions for you profile from Firefox GUI. You need to edit the >+chrome/chrome.rdf file in the opposite way, i.e. adding a c:disabled="true" >+attribute to the corresponding rdf:Description element. >+ >+Sound >+----- >+ >+By default, firefox detects and runs the correct dsp wrapper for esd >+or arts. If this is not the desired behaviour, edit >+/etc/mozilla-firefox/mozilla-firefoxrc or ~/.mozilla-firefoxrc and set >+the FIREFOX_DSP variable to: >+ >+"auto": The default, auto-detection. >+ >+"esddsp": Use esd. >+ >+"artsdsp": Use arts. >+ >+"none": Don't use any sound wrapper. >+ >+ >+using Java. (You should use plugin which compiled with gcc-3.2) >+---------- >+ >+Grab a binary Java distribution from http://java.sun.com/. Install the >+java-package package and do a make-jpkg on the file. >+ >+Buttons >+------- >+ >+Some people have complained that the button order in dialogs is >+non-intuitive (ie, they don't like it). To reverse the order, add the >+following to your chrome/userChrome.css file, under the >+~/.mozilla/firefox directory: >+ >+.dialog-button-box { -moz-box-direction: reverse; -moz-box-pack: right; } >+.dialog-button-box spacer { display: none ! important; } >+ >+Emacs keybindings >+----------------- >+ >+Versions of Firfox before 1.0 supported Emacs style keybindings in >+text entry boxes. Version 1.0 now merely follows the GTK keybindings >+settings. To enable Emacs keybindings in GTK, follow the instructions >+at http://kb.mozillazine.org/Emacs_Keybindings_(Firefox). >+ >+IDN Resolving >+------------- >+ >+To enable IDN domain names, go to the about:config page and change >+network.enableIDN to true. There is a however some very bad spoofing >+that this option opens up. See >+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=293975. Enable at >+your own risk. >+ >+ -- Eric Dorland <eric@debian.org>, Tue Mar 1 02:00:11 2005 >--- debian/mozilla-firefox-small.xpm >+++ debian/mozilla-firefox-small.xpm >@@ -0,0 +1,156 @@ >+/* XPM */ >+static char * mozicon16_xpm[] = { >+"16 16 137 2", >+" c None", >+". c #388BBF", >+"+ c #59ADD6", >+"@ c #68CEEF", >+"# c #62CCEE", >+"$ c #45AAD7", >+"% c #3578AF", >+"& c #4A93C3", >+"* c #5EA9D2", >+"= c #72D1EF", >+"- c #6DCCEC", >+"; c #4B9FCE", >+"> c #3483BA", >+", c #1E67A5", >+"' c #1B6BA5", >+") c #2F7AB0", >+"! c #48B9E0", >+"~ c #5CC2E5", >+"{ c #6ED0EE", >+"] c #6FC9E9", >+"^ c #4994C5", >+"/ c #3783B9", >+"( c #1E5D9D", >+"_ c #1463A1", >+": c #028DC4", >+"< c #128DC3", >+"[ c #27ABD7", >+"} c #3CB8E0", >+"| c #4EC0E5", >+"1 c #5BC3E6", >+"2 c #50A2CE", >+"3 c #3B7EB5", >+"4 c #3C93C4", >+"5 c #2164A1", >+"6 c #145A9A", >+"7 c #0E8FC4", >+"8 c #007EBA", >+"9 c #0694C8", >+"0 c #1896C7", >+"a c #2B99C9", >+"b c #3CB7DE", >+"c c #48B9DF", >+"d c #3E95C5", >+"e c #2E71AB", >+"f c #399DCA", >+"g c #34A9D4", >+"h c #2387BE", >+"i c #1388C0", >+"j c #0059A1", >+"k c #005C9E", >+"l c #00498B", >+"m c #095897", >+"n c #1869A3", >+"o c #289CCA", >+"p c #34B1DA", >+"q c #3BB3DB", >+"r c #3BB3DA", >+"s c #35AFD7", >+"t c #2BA2CF", >+"u c #1E6AA2", >+"v c #106AA7", >+"w c #0258A0", >+"x c #00357F", >+"y c #002D71", >+"z c #003175", >+"A c #013A7E", >+"B c #084889", >+"C c #1577AF", >+"D c #1FA1CF", >+"E c #26A3D1", >+"F c #28A2CF", >+"G c #269ACA", >+"H c #2088BE", >+"I c #174784", >+"J c #0B1F5F", >+"K c #012568", >+"L c #00206A", >+"M c #00185A", >+"N c #001F62", >+"O c #002569", >+"P c #002C70", >+"Q c #0567A7", >+"R c #0D81BB", >+"S c #1485BD", >+"T c #1883BC", >+"U c #177DB7", >+"V c #144A88", >+"W c #0C1D5C", >+"X c #030B47", >+"Y c #00023B", >+"Z c #00207A", >+"` c #002072", >+" . c #00236B", >+".. c #001556", >+"+. c #001B5E", >+"@. c #003D81", >+"#. c #01599E", >+"$. c #04559E", >+"%. c #0761A6", >+"&. c #085499", >+"*. c #061958", >+"=. c #020843", >+"-. c #000137", >+";. c #001C79", >+">. c #00155D", >+",. c #000945", >+"'. c #000B49", >+"). c #000E4C", >+"!. c #002367", >+"~. c #002A6F", >+"{. c #003E8B", >+"]. c #003787", >+"^. c #00175C", >+"/. c #000035", >+"(. c #000030", >+"_. c #000E67", >+":. c #00043B", >+"<. c #000339", >+"[. c #00043C", >+"}. c #00053E", >+"|. c #00063F", >+"1. c #000E4F", >+"2. c #00247E", >+"3. c #00166A", >+"4. c #00002E", >+"5. c #00014F", >+"6. c #000029", >+"7. c #00012F", >+"8. c #000953", >+"9. c #000E6E", >+"0. c #000A6C", >+"a. c #000563", >+"b. c #00002F", >+"c. c #00001D", >+"d. c #000025", >+"e. c #000040", >+"f. c #000033", >+" ", >+" . + @ # $ ", >+" % & * = - ; > , ", >+" ' ) ! ~ { ] ^ / ( _ ", >+" : < [ } | 1 2 3 4 5 6 7 ", >+" 8 9 0 a b c d e f g h i ", >+" j k l m n o p q r s t u v w ", >+" x y z A B C D E F G H I J K ", >+" L M N O P Q R S T U V W X Y ", >+" Z ` ...+.@.#.$.%.&.*.=.-. ", >+" ;.>.,.'.).!.~.{.].^./.(. ", >+" _.:.<.[.}.|.1.2.3.4. ", >+" 5.6.(.4.7.8.9.0.a. ", >+" b.b.c.d.e.f. ", >+" ", >+" "}; >--- debian/mozilla-firefox-dev.install >+++ debian/mozilla-firefox-dev.install >@@ -0,0 +1,4 @@ >+debian/tmp/usr/lib/pkgconfig/*.pc usr/lib/pkgconfig >+debian/tmp/usr/share/idl/mozilla-firefox usr/share/idl >+debian/tmp/usr/include/mozilla-firefox usr/include >+debian/tmp/usr/bin/firefox-config usr/bin >--- debian/compat >+++ debian/compat >@@ -0,0 +1 @@ >+4 >--- debian/mozilla-firefox.manpages >+++ debian/mozilla-firefox.manpages >@@ -0,0 +1,2 @@ >+debian/mozilla-firefox.1 >+debian/update-mozilla-firefox-chrome.8 >--- debian/firefox.js >+++ debian/firefox.js >@@ -0,0 +1,18 @@ >+// This is the Debian specific preferences file for Mozilla Firefox >+// You can make any change in here, it is the purpose of this file. >+// You can, with this file and all files present in the >+// /etc/mozilla-firefox/pref directory, override any preference that is >+// present in /usr/lib/mozilla-firefox/defaults/pref directory. >+// While your changes will be kept on upgrade if you modify files in >+// /etc/mozilla-firefox/pref, please note that they won't be kept if you >+// do them in /usr/lib/mozilla-firefox/defaults/pref. >+ >+pref("extensions.update.enabled", true); >+pref("extensions.update.autoUpdateEnabled", false); >+pref("extensions.update.autoUpdate", false); >+ >+// Use LANG environment variable to choose locale >+pref("intl.locale.matchOS", true); >+ >+// Disable default browser checking. >+pref("browser.shell.checkDefaultBrowser", false); >--- debian/debsearch.src >+++ debian/debsearch.src >@@ -0,0 +1,26 @@ >+# Mozilla Firebird plugin file >+# >+# Debian package lookup >+# by Fergus McKenzie-Kay copying code >+# by Spencer Wysinger <http://wysinger.com/> >+# >+# Last updated: August 12, 2003 >+ >+<search >+ name="Deb Search" >+ description="Perform a search for Debian packages" >+ action="http://packages.debian.org/cgi-bin/search_packages.pl" >+ searchForm="http://packages.debian.org/" >+ queryEncoding="utf-8" >+ queryCharset="utf-8" >+ method="GET" >+> >+ >+<input name="searchon" value="names"> >+<input name="subword" value="1"> >+<input name="version" value="all"> >+<input name="release" value="all"> >+<input name="keywords" user=""> >+<input name="sourceid" value="mozilla-search"> >+ >+</search> >--- debian/mozilla-firefox.prerm >+++ debian/mozilla-firefox.prerm >@@ -0,0 +1,22 @@ >+#!/bin/sh -e >+ >+if [ "$1" = "remove" -o "$1" = "deconfigure" ] ; then >+ update-alternatives --remove x-www-browser /usr/bin/mozilla-firefox >+ update-alternatives --remove mozilla /usr/bin/mozilla-firefox >+fi >+ >+if [ "$1" = "remove" ]; then >+ rm -rf /var/lib/mozilla-firefox/chrome/overlayinfo >+ rm -f /var/lib/mozilla-firefox/chrome/chrome.rdf >+ rm -f /var/lib/mozilla-firefox/defaults.ini >+ rm -f /var/lib/mozilla-firefox/components.ini >+ rm -f /var/lib/mozilla-firefox/components/xpti.dat >+ rm -f /var/lib/mozilla-firefox/components/compreg.dat >+ rm -f /var/lib/mozilla-firefox/extensions/installed-extensions.txt >+ rm -f /var/lib/mozilla-firefox/extensions/Extensions.rdf >+ if [ -d /var/lib/mozilla-firefox/ ]; then >+ find /var/lib/mozilla-firefox/ -type d -depth -empty -exec rmdir {} \; >+ fi >+fi >+ >+#DEBHELPER# >--- debian/mozilla-firefox-gnome-support.install >+++ debian/mozilla-firefox-gnome-support.install >@@ -0,0 +1 @@ >+debian/tmp/usr/lib/mozilla-firefox/components/*gnome* usr/lib/mozilla-firefox/components >--- debian/mozilla-firefox.menu >+++ debian/mozilla-firefox.menu >@@ -0,0 +1,4 @@ >+?package(mozilla-firefox):needs="x11" section="Apps/Net" \ >+ title="Mozilla Firefox" \ >+ icon="/usr/share/pixmaps/mozilla-firefox.xpm" \ >+ command="firefox" hints="Web Browsers" >--- debian/mozilla-firefox.NEWS >+++ debian/mozilla-firefox.NEWS >@@ -0,0 +1,22 @@ >+mozilla-firefox (1.0-1) unstable; urgency=medium >+ >+ A heavily patched extension manager has been introduced this >+ release by Mike Hommey. It is designed to work around the >+ deficiencies in the upstream's current offering. Unfortunately, the >+ registration process for extension and locale packages has now >+ changed in an incompatible way. The packages will install >+ correctly but won't actually be registered with >+ Firefox. Maintainers are aware of the issue and are working on new >+ packages that will work with this new mechanism. Please do not >+ file bugs on this issue. >+ >+ -- Eric Dorland <eric@debian.org>, Wed, 10 Nov 2004 00:16:15 -0500 >+ >+mozilla-firefox (0.8-1) unstable; urgency=low >+ >+ The mozilla-firefox package no longer uses the ~/.phoenix >+ directory for it's configuration, but the ~/.firefox directory. To >+ migrate your config, just execute "mv ~/.phoenix ~/.firefox" which >+ should work in most cases. >+ >+ -- Eric Dorland <eric@debian.org>, Fri Feb 20 00:01:54 2004 >--- debian/mozilla-firefox-gnome-support.postrm >+++ debian/mozilla-firefox-gnome-support.postrm >@@ -0,0 +1,11 @@ >+#!/bin/sh -e >+ >+case "$1" in >+ abort-install|purge|remove) >+ update-mozilla-firefox-chrome || true >+ ;; >+ *) >+ ;; >+esac >+ >+#DEBHELPER# >--- debian/mozilla-firefox-dom-inspector.postinst >+++ debian/mozilla-firefox-dom-inspector.postinst >@@ -0,0 +1,7 @@ >+#!/bin/sh -e >+ >+if [ "$1" = "configure" ] ; then >+ update-mozilla-firefox-chrome >+fi >+ >+#DEBHELPER# >--- debian/mozilla-firefox-dom-inspector.postrm >+++ debian/mozilla-firefox-dom-inspector.postrm >@@ -0,0 +1,11 @@ >+#!/bin/sh -e >+ >+case "$1" in >+ abort-install|purge|remove) >+ update-mozilla-firefox-chrome || true >+ ;; >+ *) >+ ;; >+esac >+ >+#DEBHELPER# >--- debian/copyright >+++ debian/copyright >@@ -0,0 +1,576 @@ >+This package was debianized by Eric Dorland <eric@debian.org> on >+Thu, 05 Jun 2003 01:01:22 -0400 >+ >+It was downloaded from http://www.mozilla.org/projects/firebird >+ >+Upstream Authors: Mozilla Project >+ >+Copyright: >+ >+ MOZILLA PUBLIC LICENSE >+ Version 1.1 >+ >+ --------------- >+ >+1. Definitions. >+ >+ 1.0.1. "Commercial Use" means distribution or otherwise making the >+ Covered Code available to a third party. >+ >+ 1.1. "Contributor" means each entity that creates or contributes to >+ the creation of Modifications. >+ >+ 1.2. "Contributor Version" means the combination of the Original >+ Code, prior Modifications used by a Contributor, and the Modifications >+ made by that particular Contributor. >+ >+ 1.3. "Covered Code" means the Original Code or Modifications or the >+ combination of the Original Code and Modifications, in each case >+ including portions thereof. >+ >+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally >+ accepted in the software development community for the electronic >+ transfer of data. >+ >+ 1.5. "Executable" means Covered Code in any form other than Source >+ Code. >+ >+ 1.6. "Initial Developer" means the individual or entity identified >+ as the Initial Developer in the Source Code notice required by Exhibit >+ A. >+ >+ 1.7. "Larger Work" means a work which combines Covered Code or >+ portions thereof with code not governed by the terms of this License. >+ >+ 1.8. "License" means this document. >+ >+ 1.8.1. "Licensable" means having the right to grant, to the maximum >+ extent possible, whether at the time of the initial grant or >+ subsequently acquired, any and all of the rights conveyed herein. >+ >+ 1.9. "Modifications" means any addition to or deletion from the >+ substance or structure of either the Original Code or any previous >+ Modifications. When Covered Code is released as a series of files, a >+ Modification is: >+ A. Any addition to or deletion from the contents of a file >+ containing Original Code or previous Modifications. >+ >+ B. Any new file that contains any part of the Original Code or >+ previous Modifications. >+ >+ 1.10. "Original Code" means Source Code of computer software code >+ which is described in the Source Code notice required by Exhibit A as >+ Original Code, and which, at the time of its release under this >+ License is not already Covered Code governed by this License. >+ >+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or >+ hereafter acquired, including without limitation, method, process, >+ and apparatus claims, in any patent Licensable by grantor. >+ >+ 1.11. "Source Code" means the preferred form of the Covered Code for >+ making modifications to it, including all modules it contains, plus >+ any associated interface definition files, scripts used to control >+ compilation and installation of an Executable, or source code >+ differential comparisons against either the Original Code or another >+ well known, available Covered Code of the Contributor's choice. The >+ Source Code can be in a compressed or archival form, provided the >+ appropriate decompression or de-archiving software is widely available >+ for no charge. >+ >+ 1.12. "You" (or "Your") means an individual or a legal entity >+ exercising rights under, and complying with all of the terms of, this >+ License or a future version of this License issued under Section 6.1. >+ For legal entities, "You" includes any entity which controls, is >+ controlled by, or is under common control with You. For purposes of >+ this definition, "control" means (a) the power, direct or indirect, >+ to cause the direction or management of such entity, whether by >+ contract or otherwise, or (b) ownership of more than fifty percent >+ (50%) of the outstanding shares or beneficial ownership of such >+ entity. >+ >+2. Source Code License. >+ >+ 2.1. The Initial Developer Grant. >+ The Initial Developer hereby grants You a world-wide, royalty-free, >+ non-exclusive license, subject to third party intellectual property >+ claims: >+ (a) under intellectual property rights (other than patent or >+ trademark) Licensable by Initial Developer to use, reproduce, >+ modify, display, perform, sublicense and distribute the Original >+ Code (or portions thereof) with or without Modifications, and/or >+ as part of a Larger Work; and >+ >+ (b) under Patents Claims infringed by the making, using or >+ selling of Original Code, to make, have made, use, practice, >+ sell, and offer for sale, and/or otherwise dispose of the >+ Original Code (or portions thereof). >+ >+ (c) the licenses granted in this Section 2.1(a) and (b) are >+ effective on the date Initial Developer first distributes >+ Original Code under the terms of this License. >+ >+ (d) Notwithstanding Section 2.1(b) above, no patent license is >+ granted: 1) for code that You delete from the Original Code; 2) >+ separate from the Original Code; or 3) for infringements caused >+ by: i) the modification of the Original Code or ii) the >+ combination of the Original Code with other software or devices. >+ >+ 2.2. Contributor Grant. >+ Subject to third party intellectual property claims, each Contributor >+ hereby grants You a world-wide, royalty-free, non-exclusive license >+ >+ (a) under intellectual property rights (other than patent or >+ trademark) Licensable by Contributor, to use, reproduce, modify, >+ display, perform, sublicense and distribute the Modifications >+ created by such Contributor (or portions thereof) either on an >+ unmodified basis, with other Modifications, as Covered Code >+ and/or as part of a Larger Work; and >+ >+ (b) under Patent Claims infringed by the making, using, or >+ selling of Modifications made by that Contributor either alone >+ and/or in combination with its Contributor Version (or portions >+ of such combination), to make, use, sell, offer for sale, have >+ made, and/or otherwise dispose of: 1) Modifications made by that >+ Contributor (or portions thereof); and 2) the combination of >+ Modifications made by that Contributor with its Contributor >+ Version (or portions of such combination). >+ >+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are >+ effective on the date Contributor first makes Commercial Use of >+ the Covered Code. >+ >+ (d) Notwithstanding Section 2.2(b) above, no patent license is >+ granted: 1) for any code that Contributor has deleted from the >+ Contributor Version; 2) separate from the Contributor Version; >+ 3) for infringements caused by: i) third party modifications of >+ Contributor Version or ii) the combination of Modifications made >+ by that Contributor with other software (except as part of the >+ Contributor Version) or other devices; or 4) under Patent Claims >+ infringed by Covered Code in the absence of Modifications made by >+ that Contributor. >+ >+3. Distribution Obligations. >+ >+ 3.1. Application of License. >+ The Modifications which You create or to which You contribute are >+ governed by the terms of this License, including without limitation >+ Section 2.2. The Source Code version of Covered Code may be >+ distributed only under the terms of this License or a future version >+ of this License released under Section 6.1, and You must include a >+ copy of this License with every copy of the Source Code You >+ distribute. You may not offer or impose any terms on any Source Code >+ version that alters or restricts the applicable version of this >+ License or the recipients' rights hereunder. However, You may include >+ an additional document offering the additional rights described in >+ Section 3.5. >+ >+ 3.2. Availability of Source Code. >+ Any Modification which You create or to which You contribute must be >+ made available in Source Code form under the terms of this License >+ either on the same media as an Executable version or via an accepted >+ Electronic Distribution Mechanism to anyone to whom you made an >+ Executable version available; and if made available via Electronic >+ Distribution Mechanism, must remain available for at least twelve (12) >+ months after the date it initially became available, or at least six >+ (6) months after a subsequent version of that particular Modification >+ has been made available to such recipients. You are responsible for >+ ensuring that the Source Code version remains available even if the >+ Electronic Distribution Mechanism is maintained by a third party. >+ >+ 3.3. Description of Modifications. >+ You must cause all Covered Code to which You contribute to contain a >+ file documenting the changes You made to create that Covered Code and >+ the date of any change. You must include a prominent statement that >+ the Modification is derived, directly or indirectly, from Original >+ Code provided by the Initial Developer and including the name of the >+ Initial Developer in (a) the Source Code, and (b) in any notice in an >+ Executable version or related documentation in which You describe the >+ origin or ownership of the Covered Code. >+ >+ 3.4. Intellectual Property Matters >+ (a) Third Party Claims. >+ If Contributor has knowledge that a license under a third party's >+ intellectual property rights is required to exercise the rights >+ granted by such Contributor under Sections 2.1 or 2.2, >+ Contributor must include a text file with the Source Code >+ distribution titled "LEGAL" which describes the claim and the >+ party making the claim in sufficient detail that a recipient will >+ know whom to contact. If Contributor obtains such knowledge after >+ the Modification is made available as described in Section 3.2, >+ Contributor shall promptly modify the LEGAL file in all copies >+ Contributor makes available thereafter and shall take other steps >+ (such as notifying appropriate mailing lists or newsgroups) >+ reasonably calculated to inform those who received the Covered >+ Code that new knowledge has been obtained. >+ >+ (b) Contributor APIs. >+ If Contributor's Modifications include an application programming >+ interface and Contributor has knowledge of patent licenses which >+ are reasonably necessary to implement that API, Contributor must >+ also include this information in the LEGAL file. >+ >+ (c) Representations. >+ Contributor represents that, except as disclosed pursuant to >+ Section 3.4(a) above, Contributor believes that Contributor's >+ Modifications are Contributor's original creation(s) and/or >+ Contributor has sufficient rights to grant the rights conveyed by >+ this License. >+ >+ 3.5. Required Notices. >+ You must duplicate the notice in Exhibit A in each file of the Source >+ Code. If it is not possible to put such notice in a particular Source >+ Code file due to its structure, then You must include such notice in a >+ location (such as a relevant directory) where a user would be likely >+ to look for such a notice. If You created one or more Modification(s) >+ You may add your name as a Contributor to the notice described in >+ Exhibit A. You must also duplicate this License in any documentation >+ for the Source Code where You describe recipients' rights or ownership >+ rights relating to Covered Code. You may choose to offer, and to >+ charge a fee for, warranty, support, indemnity or liability >+ obligations to one or more recipients of Covered Code. However, You >+ may do so only on Your own behalf, and not on behalf of the Initial >+ Developer or any Contributor. You must make it absolutely clear than >+ any such warranty, support, indemnity or liability obligation is >+ offered by You alone, and You hereby agree to indemnify the Initial >+ Developer and every Contributor for any liability incurred by the >+ Initial Developer or such Contributor as a result of warranty, >+ support, indemnity or liability terms You offer. >+ >+ 3.6. Distribution of Executable Versions. >+ You may distribute Covered Code in Executable form only if the >+ requirements of Section 3.1-3.5 have been met for that Covered Code, >+ and if You include a notice stating that the Source Code version of >+ the Covered Code is available under the terms of this License, >+ including a description of how and where You have fulfilled the >+ obligations of Section 3.2. The notice must be conspicuously included >+ in any notice in an Executable version, related documentation or >+ collateral in which You describe recipients' rights relating to the >+ Covered Code. You may distribute the Executable version of Covered >+ Code or ownership rights under a license of Your choice, which may >+ contain terms different from this License, provided that You are in >+ compliance with the terms of this License and that the license for the >+ Executable version does not attempt to limit or alter the recipient's >+ rights in the Source Code version from the rights set forth in this >+ License. If You distribute the Executable version under a different >+ license You must make it absolutely clear that any terms which differ >+ from this License are offered by You alone, not by the Initial >+ Developer or any Contributor. You hereby agree to indemnify the >+ Initial Developer and every Contributor for any liability incurred by >+ the Initial Developer or such Contributor as a result of any such >+ terms You offer. >+ >+ 3.7. Larger Works. >+ You may create a Larger Work by combining Covered Code with other code >+ not governed by the terms of this License and distribute the Larger >+ Work as a single product. In such a case, You must make sure the >+ requirements of this License are fulfilled for the Covered Code. >+ >+4. Inability to Comply Due to Statute or Regulation. >+ >+ If it is impossible for You to comply with any of the terms of this >+ License with respect to some or all of the Covered Code due to >+ statute, judicial order, or regulation then You must: (a) comply with >+ the terms of this License to the maximum extent possible; and (b) >+ describe the limitations and the code they affect. Such description >+ must be included in the LEGAL file described in Section 3.4 and must >+ be included with all distributions of the Source Code. Except to the >+ extent prohibited by statute or regulation, such description must be >+ sufficiently detailed for a recipient of ordinary skill to be able to >+ understand it. >+ >+5. Application of this License. >+ >+ This License applies to code to which the Initial Developer has >+ attached the notice in Exhibit A and to related Covered Code. >+ >+6. Versions of the License. >+ >+ 6.1. New Versions. >+ Netscape Communications Corporation ("Netscape") may publish revised >+ and/or new versions of the License from time to time. Each version >+ will be given a distinguishing version number. >+ >+ 6.2. Effect of New Versions. >+ Once Covered Code has been published under a particular version of the >+ License, You may always continue to use it under the terms of that >+ version. You may also choose to use such Covered Code under the terms >+ of any subsequent version of the License published by Netscape. No one >+ other than Netscape has the right to modify the terms applicable to >+ Covered Code created under this License. >+ >+ 6.3. Derivative Works. >+ If You create or use a modified version of this License (which you may >+ only do in order to apply it to code which is not already Covered Code >+ governed by this License), You must (a) rename Your license so that >+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", >+ "MPL", "NPL" or any confusingly similar phrase do not appear in your >+ license (except to note that your license differs from this License) >+ and (b) otherwise make it clear that Your version of the license >+ contains terms which differ from the Mozilla Public License and >+ Netscape Public License. (Filling in the name of the Initial >+ Developer, Original Code or Contributor in the notice described in >+ Exhibit A shall not of themselves be deemed to be modifications of >+ this License.) >+ >+7. DISCLAIMER OF WARRANTY. >+ >+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, >+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, >+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF >+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. >+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE >+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, >+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE >+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER >+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF >+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. >+ >+8. TERMINATION. >+ >+ 8.1. This License and the rights granted hereunder will terminate >+ automatically if You fail to comply with terms herein and fail to cure >+ such breach within 30 days of becoming aware of the breach. All >+ sublicenses to the Covered Code which are properly granted shall >+ survive any termination of this License. Provisions which, by their >+ nature, must remain in effect beyond the termination of this License >+ shall survive. >+ >+ 8.2. If You initiate litigation by asserting a patent infringement >+ claim (excluding declatory judgment actions) against Initial Developer >+ or a Contributor (the Initial Developer or Contributor against whom >+ You file such action is referred to as "Participant") alleging that: >+ >+ (a) such Participant's Contributor Version directly or indirectly >+ infringes any patent, then any and all rights granted by such >+ Participant to You under Sections 2.1 and/or 2.2 of this License >+ shall, upon 60 days notice from Participant terminate prospectively, >+ unless if within 60 days after receipt of notice You either: (i) >+ agree in writing to pay Participant a mutually agreeable reasonable >+ royalty for Your past and future use of Modifications made by such >+ Participant, or (ii) withdraw Your litigation claim with respect to >+ the Contributor Version against such Participant. If within 60 days >+ of notice, a reasonable royalty and payment arrangement are not >+ mutually agreed upon in writing by the parties or the litigation claim >+ is not withdrawn, the rights granted by Participant to You under >+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of >+ the 60 day notice period specified above. >+ >+ (b) any software, hardware, or device, other than such Participant's >+ Contributor Version, directly or indirectly infringes any patent, then >+ any rights granted to You by such Participant under Sections 2.1(b) >+ and 2.2(b) are revoked effective as of the date You first made, used, >+ sold, distributed, or had made, Modifications made by that >+ Participant. >+ >+ 8.3. If You assert a patent infringement claim against Participant >+ alleging that such Participant's Contributor Version directly or >+ indirectly infringes any patent where such claim is resolved (such as >+ by license or settlement) prior to the initiation of patent >+ infringement litigation, then the reasonable value of the licenses >+ granted by such Participant under Sections 2.1 or 2.2 shall be taken >+ into account in determining the amount or value of any payment or >+ license. >+ >+ 8.4. In the event of termination under Sections 8.1 or 8.2 above, >+ all end user license agreements (excluding distributors and resellers) >+ which have been validly granted by You or any distributor hereunder >+ prior to termination shall survive termination. >+ >+9. LIMITATION OF LIABILITY. >+ >+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT >+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL >+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, >+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR >+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY >+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, >+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER >+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN >+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF >+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY >+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW >+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE >+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO >+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. >+ >+10. U.S. GOVERNMENT END USERS. >+ >+ The Covered Code is a "commercial item," as that term is defined in >+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer >+ software" and "commercial computer software documentation," as such >+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 >+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), >+ all U.S. Government End Users acquire Covered Code with only those >+ rights set forth herein. >+ >+11. MISCELLANEOUS. >+ >+ This License represents the complete agreement concerning subject >+ matter hereof. If any provision of this License is held to be >+ unenforceable, such provision shall be reformed only to the extent >+ necessary to make it enforceable. This License shall be governed by >+ California law provisions (except to the extent applicable law, if >+ any, provides otherwise), excluding its conflict-of-law provisions. >+ With respect to disputes in which at least one party is a citizen of, >+ or an entity chartered or registered to do business in the United >+ States of America, any litigation relating to this License shall be >+ subject to the jurisdiction of the Federal Courts of the Northern >+ District of California, with venue lying in Santa Clara County, >+ California, with the losing party responsible for costs, including >+ without limitation, court costs and reasonable attorneys' fees and >+ expenses. The application of the United Nations Convention on >+ Contracts for the International Sale of Goods is expressly excluded. >+ Any law or regulation which provides that the language of a contract >+ shall be construed against the drafter shall not apply to this >+ License. >+ >+12. RESPONSIBILITY FOR CLAIMS. >+ >+ As between Initial Developer and the Contributors, each party is >+ responsible for claims and damages arising, directly or indirectly, >+ out of its utilization of rights under this License and You agree to >+ work with Initial Developer and Contributors to distribute such >+ responsibility on an equitable basis. Nothing herein is intended or >+ shall be deemed to constitute any admission of liability. >+ >+13. MULTIPLE-LICENSED CODE. >+ >+ Initial Developer may designate portions of the Covered Code as >+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial >+ Developer permits you to utilize portions of the Covered Code under >+ Your choice of the NPL or the alternative licenses, if any, specified >+ by the Initial Developer in the file described in Exhibit A. >+ >+EXHIBIT A -Mozilla Public License. >+ >+ ``The contents of this file are subject to the Mozilla Public License >+ Version 1.1 (the "License"); you may not use this file except in >+ compliance with the License. You may obtain a copy of the License at >+ http://www.mozilla.org/MPL/ >+ >+ Software distributed under the License is distributed on an "AS IS" >+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the >+ License for the specific language governing rights and limitations >+ under the License. >+ >+ The Original Code is ______________________________________. >+ >+ The Initial Developer of the Original Code is ________________________. >+ Portions created by ______________________ are Copyright (C) ______ >+ _______________________. All Rights Reserved. >+ >+ Contributor(s): ______________________________________. >+ >+ Alternatively, the contents of this file may be used under the terms >+ of the _____ license (the "[___] License"), in which case the >+ provisions of [______] License are applicable instead of those >+ above. If you wish to allow use of your version of this file only >+ under the terms of the [____] License and not to allow others to use >+ your version of this file under the MPL, indicate your decision by >+ deleting the provisions above and replace them with the notice and >+ other provisions required by the [___] License. If you do not delete >+ the provisions above, a recipient may use your version of this file >+ under either the MPL or the [___] License." >+ >+ [NOTE: The text of this Exhibit A may differ slightly from the text of >+ the notices in the Source Code files of the Original Code. You should >+ use the text of this Exhibit A rather than the text found in the >+ Original Code Source Code for Your Modifications.] >+ >+ ---------------------------------------------------------------------- >+ >+ AMENDMENTS >+ >+ The Netscape Public License Version 1.1 ("NPL") consists of the >+ Mozilla Public License Version 1.1 with the following Amendments, >+ including Exhibit A-Netscape Public License. Files identified with >+ "Exhibit A-Netscape Public License" are governed by the Netscape >+ Public License Version 1.1. >+ >+ Additional Terms applicable to the Netscape Public License. >+ I. Effect. >+ These additional terms described in this Netscape Public >+ License -- Amendments shall apply to the Mozilla Communicator >+ client code and to all Covered Code under this License. >+ >+ II. "Netscape's Branded Code" means Covered Code that Netscape >+ distributes and/or permits others to distribute under one or more >+ trademark(s) which are controlled by Netscape but which are not >+ licensed for use under this License. >+ >+ III. Netscape and logo. >+ This License does not grant any rights to use the trademarks >+ "Netscape", the "Netscape N and horizon" logo or the "Netscape >+ lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", >+ "Smart Browsing" even if such marks are included in the Original >+ Code or Modifications. >+ >+ IV. Inability to Comply Due to Contractual Obligation. >+ Prior to licensing the Original Code under this License, Netscape >+ has licensed third party code for use in Netscape's Branded Code. >+ To the extent that Netscape is limited contractually from making >+ such third party code available under this License, Netscape may >+ choose to reintegrate such code into Covered Code without being >+ required to distribute such code in Source Code form, even if >+ such code would otherwise be considered "Modifications" under >+ this License. >+ >+ V. Use of Modifications and Covered Code by Initial Developer. >+ V.1. In General. >+ The obligations of Section 3 apply to Netscape, except to >+ the extent specified in this Amendment, Section V.2 and V.3. >+ >+ V.2. Other Products. >+ Netscape may include Covered Code in products other than the >+ Netscape's Branded Code which are released by Netscape >+ during the two (2) years following the release date of the >+ Original Code, without such additional products becoming >+ subject to the terms of this License, and may license such >+ additional products on different terms from those contained >+ in this License. >+ >+ V.3. Alternative Licensing. >+ Netscape may license the Source Code of Netscape's Branded >+ Code, including Modifications incorporated therein, without >+ such Netscape Branded Code becoming subject to the terms of >+ this License, and may license such Netscape Branded Code on >+ different terms from those contained in this License. >+ >+ VI. Litigation. >+ Notwithstanding the limitations of Section 11 above, the >+ provisions regarding litigation in Section 11(a), (b) and (c) of >+ the License shall apply to all disputes relating to this License. >+ >+ EXHIBIT A-Netscape Public License. >+ >+ "The contents of this file are subject to the Netscape Public >+ License Version 1.1 (the "License"); you may not use this file >+ except in compliance with the License. You may obtain a copy of >+ the License at http://www.mozilla.org/NPL/ >+ >+ Software distributed under the License is distributed on an "AS >+ IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or >+ implied. See the License for the specific language governing >+ rights and limitations under the License. >+ >+ The Original Code is Mozilla Communicator client code, released >+ March 31, 1998. >+ >+ The Initial Developer of the Original Code is Netscape >+ Communications Corporation. Portions created by Netscape are >+ Copyright (C) 1998-1999 Netscape Communications Corporation. All >+ Rights Reserved. >+ >+ Contributor(s): ______________________________________. >+ >+ Alternatively, the contents of this file may be used under the >+ terms of the _____ license (the "[___] License"), in which case >+ the provisions of [______] License are applicable instead of >+ those above. If you wish to allow use of your version of this >+ file only under the terms of the [____] License and not to allow >+ others to use your version of this file under the NPL, indicate >+ your decision by deleting the provisions above and replace them >+ with the notice and other provisions required by the [___] >+ License. If you do not delete the provisions above, a recipient >+ may use your version of this file under either the NPL or the >+ [___] License." >--- debian/mozilla-firefox.mime >+++ debian/mozilla-firefox.mime >@@ -0,0 +1,5 @@ >+text/html; /usr/bin/mozilla-firefox %s; description=HTML Text; test=test -n "$DISPLAY"; nametemplate=%s.html; priority=5 >+text/xml; /usr/bin/mozilla-firefox %s; description=XML Text; test=test -n "$DISPLAY"; nametemplate=%s.xml; priority=5 >+image/png; /usr/bin/mozilla-firefox %s; description=PNG Image; test=test -n "$DISPLAY"; nametemplate=%s.png; priority=2 >+image/jpeg; /usr/bin/mozilla-firefox %s; description=JPEG Image; test=test -n "$DISPLAY"; nametemplate=%s.jpeg; priority=2 >+image/gif; /usr/bin/mozilla-firefox %s; description=GIF Image; test=test -n "$DISPLAY"; nametemplate=%s.gif; priority=2 >--- debian/control >+++ debian/control >@@ -0,0 +1,43 @@ >+Source: mozilla-firefox >+Section: web >+Priority: optional >+Maintainer: Eric Dorland <eric@debian.org> >+Uploaders: Mike Hommey <mh@glandium.org> >+Build-Depends: debhelper (>= 4.0), libx11-dev, libxp-dev, libxt-dev, libgtk2.0-dev, zlib1g-dev, liborbit2-dev, libidl-dev (>= 0.8.0), zip, libxft2-dev, libpng12-dev, libmng-dev, libjpeg62-dev, libxrender-dev, libkrb5-dev, libgnome2-dev, libgconf2-dev, libgnomevfs2-dev, patch, sharutils, m4, gcc-3.4 [amd64], g++-3.4 [amd64], libgnomeui-dev, libxinerama-dev >+Standards-Version: 3.6.1 >+ >+Package: mozilla-firefox >+Architecture: any >+Depends: fontconfig, psmisc, debianutils (>= 1.16), ${shlibs:Depends} >+Suggests: mozilla-firefox-gnome-support (= ${Source-Version}), latex-xft-fonts, xprt-xprintorg >+Provides: www-browser >+Description: lightweight web browser based on Mozilla >+ Firefox is a redesign of the Mozilla browser component, similar to >+ Galeon, K-Meleon and Camino, but written using the XUL user interface >+ language and designed to be lightweight and cross-platform. >+ . >+ This browser was previously known as Firebird and Phoenix. >+ >+Package: mozilla-firefox-dom-inspector >+Architecture: any >+Depends: ${shlibs:Depends}, mozilla-firefox (= ${Source-Version}) >+Description: tool for inspecting the DOM of pages in Mozilla Firefox >+ This is a tool that allows you to inspect the DOM for web pages in >+ Mozilla Firefox. This is of great use to people who are doing >+ Mozilla chrome development or web page development. >+ >+Package: mozilla-firefox-gnome-support >+Architecture: any >+Depends: ${shlibs:Depends}, mozilla-firefox (= ${Source-Version}) >+Description: Support for Gnome in Mozilla Firefox >+ This is an extension to Mozilla Firefox that allows it to use >+ protocol handlers from Gnome-VFS, such as smb or sftp, and other >+ Gnome integration features. >+ >+Package: mozilla-firefox-dev >+Architecture: any >+Section: devel >+Depends: mozilla-firefox (= ${Source-Version}), libxt-dev, ${shlibs:Depends} >+Description: Development files for Mozilla Firefox >+ This package contains the development headers, idl files and static libraries >+ needed to develop applications using Mozilla Firefox. >--- debian/mozilla-firefox-xremote-client >+++ debian/mozilla-firefox-xremote-client >@@ -0,0 +1,21 @@ >+#!/bin/sh >+ >+## >+## Set MOZILLA_FIVE_HOME >+## >+MOZILLA_FIVE_HOME="/usr/lib/mozilla-firefox" >+ >+export MOZILLA_FIVE_HOME >+ >+## >+## Set LD_LIBRARY_PATH >+## >+if [ "$LD_LIBRARY_PATH" ] >+then >+ LD_LIBRARY_PATH=/usr/lib/mozilla-firefox:/usr/lib/mozilla-firefox/plugins:/usr/lib/mozilla/plugins:/usr/lib:$LD_LIBRARY_PATH >+else >+ LD_LIBRARY_PATH=/usr/lib/mozilla-firefox:/usr/lib/mozilla-firefox/plugins:/usr/lib/mozilla/plugins:/usr/lib >+fi >+ export LD_LIBRARY_PATH >+ >+/usr/lib/mozilla-firefox/firefox-bin -a firefox -remote "$1" >--- debian/theme/Uninstall >+++ debian/theme/Uninstall >@@ -0,0 +1,4 @@ >+register global skin classic/1.0 >+register global skin classic/1.0 >+register global skin classic/1.0 >+register global skin classic/1.0 >--- debian/theme/00classic >+++ debian/theme/00classic >@@ -0,0 +1 @@ >+theme,{972ce4c6-7e08-4474-a285-3208198ce6fd} >--- debian/inspector/install.rdf >+++ debian/inspector/install.rdf >@@ -0,0 +1,36 @@ >+<?xml version="1.0"?> >+ >+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" >+ xmlns:em="http://www.mozilla.org/2004/em-rdf#"> >+ >+ <Description about="urn:mozilla:install-manifest"> >+ <em:id>{641d8d09-7dda-4850-8228-ac0ab65e2ac9}</em:id> >+ <em:version>1.0</em:version> >+ >+ <!-- Target Application this extension can install into, >+ with minimum and maximum supported versions. --> >+ <em:targetApplication> >+ <Description> >+ <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> >+ <em:minVersion>1.0</em:minVersion> >+ <em:maxVersion>1.0</em:maxVersion> >+ </Description> >+ </em:targetApplication> >+ >+ <!-- Front End MetaData --> >+ <em:name>DOM Inspector</em:name> >+ <em:description>A powerful tool for viewing and manipulating documents.</em:description> >+ <em:creator>Joe Hewitt</em:creator> >+ >+ <!-- Packages, Skins and Locales that this extension registers --> >+ <em:file> >+ <Description about="urn:mozilla:extension:file:inspector.jar"> >+ <em:package>content/inspector/</em:package> >+ <em:locale>locale/en-US/inspector/</em:locale> >+ <em:skin>skin/classic/inspector/</em:skin> >+ <em:skin>skin/modern/inspector/</em:skin> >+ </Description> >+ </em:file> >+ </Description> >+ >+</RDF> >--- debian/inspector/00dom-inspector >+++ debian/inspector/00dom-inspector >@@ -0,0 +1 @@ >+extension,{641d8d09-7dda-4850-8228-ac0ab65e2ac9} >--- debian/inspector/Uninstall >+++ debian/inspector/Uninstall >@@ -0,0 +1,4 @@ >+register global package inspector >+register global skin classic/1.0 >+register global skin modern/1.0 >+register global locale en-US >--- debian/ubuntu-patches/2668-crash >+++ debian/ubuntu-patches/2668-crash >@@ -0,0 +1,37 @@ >+Index: content/base/src/nsDOMAttribute.cpp >+=================================================================== >+RCS file: /cvsroot/mozilla/content/base/src/nsDOMAttribute.cpp,v >+retrieving revision 1.48 >+diff -u -p -r1.48 nsDOMAttribute.cpp >+--- content/base/src/nsDOMAttribute.cpp 25 Jun 2004 12:25:57 -0000 1.48 >++++ content/base/src/nsDOMAttribute.cpp 10 Aug 2004 10:07:52 -0000 >+@@ -338,18 +338,23 @@ nsDOMAttribute::CloneNode(PRBool aDeep, >+ NS_IMETHODIMP >+ nsDOMAttribute::GetOwnerDocument(nsIDOMDocument** aOwnerDocument) >+ { >+- nsresult result = NS_OK; >++ *aOwnerDocument = nsnull; >++ >++ nsresult rv = NS_OK; >+ if (mContent) { >+- nsCOMPtr<nsIDOMNode> node = do_QueryInterface(mContent, &result); >+- if (NS_SUCCEEDED(result)) { >+- result = node->GetOwnerDocument(aOwnerDocument); >++ nsCOMPtr<nsIDOMNode> node = do_QueryInterface(mContent); >++ if (node) { >++ rv = node->GetOwnerDocument(aOwnerDocument); >+ } >+ } >+ else { >+- *aOwnerDocument = nsnull; >++ nsIDocument *document = mNodeInfo->GetDocument(); >++ if (document) { >++ rv = CallQueryInterface(document, aOwnerDocument); >++ } >+ } >+ >+- return result; >++ return rv; >+ } >+ >+ NS_IMETHODIMP >--- debian/ubuntu-patches/6590-hebrew-ltr >+++ debian/ubuntu-patches/6590-hebrew-ltr >@@ -0,0 +1,149 @@ >+? obj-debug >+Index: gfx/public/nsIRenderingContext.h >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/public/nsIRenderingContext.h,v >+retrieving revision 1.62 >+diff -u -r1.62 nsIRenderingContext.h >+--- gfx/public/nsIRenderingContext.h 27 Nov 2004 08:22:21 -0000 1.62 >++++ gfx/public/nsIRenderingContext.h 14 Mar 2005 08:52:56 -0000 >+@@ -835,6 +835,12 @@ >+ */ >+ #define NS_RENDERING_HINT_FAST_MEASURE 0x10 >+ >++/** >++ * This bit, when set, indicates that gfx renders runs with character or word >++ * spacing in a single operation, not character by character >++ */ >++#define NS_RENDERING_HINT_SPACING_RUNS 0x40 >++ >+ //flags for copy CopyOffScreenBits >+ >+ //when performing the blit, use the region, if any, >+Index: gfx/src/gtk/nsFontMetricsPango.cpp >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/gtk/nsFontMetricsPango.cpp,v >+retrieving revision 1.13 >+diff -u -r1.13 nsFontMetricsPango.cpp >+--- gfx/src/gtk/nsFontMetricsPango.cpp 23 Jan 2005 23:58:30 -0000 1.13 >++++ gfx/src/gtk/nsFontMetricsPango.cpp 14 Mar 2005 08:52:57 -0000 >+@@ -903,7 +903,8 @@ >+ { >+ return (NS_RENDERING_HINT_BIDI_REORDERING | >+ NS_RENDERING_HINT_ARABIC_SHAPING | >+- NS_RENDERING_HINT_FAST_MEASURE); >++ NS_RENDERING_HINT_FAST_MEASURE | >++ NS_RENDERING_HINT_SPACING_RUNS); >+ } >+ >+ /* static */ >+Index: layout/generic/nsTextFrame.cpp >+=================================================================== >+RCS file: /cvsroot/mozilla/layout/generic/nsTextFrame.cpp,v >+retrieving revision 1.495 >+diff -u -r1.495 nsTextFrame.cpp >+--- layout/generic/nsTextFrame.cpp 28 Feb 2005 23:39:26 -0000 1.495 >++++ layout/generic/nsTextFrame.cpp 14 Mar 2005 08:53:09 -0000 >+@@ -3098,10 +3098,19 @@ >+ >+ if (0 != textLength) { >+ #ifdef IBMBIDI >++ PRBool isRightToLeftOnBidiPlatform = PR_FALSE; >++ PRBool isBidiSystem = PR_FALSE; >+ PRBool isOddLevel = PR_FALSE; >++ PRUint32 hints = 0; >++ aRenderingContext.GetHints(hints); >++ PRBool paintCharByChar = (0 == hints & NS_RENDERING_HINT_SPACING_RUNS) && >++ ((0 != aTextStyle.mLetterSpacing) || >++ (0 != aTextStyle.mWordSpacing) || >++ aTextStyle.mJustifying); >+ nsCharType charType = eCharType_LeftToRight; >+ >+ if (aPresContext->BidiEnabled()) { >++ isBidiSystem = aPresContext->IsBidiSystem(); >+ nsBidiPresUtils* bidiUtils = aPresContext->GetBidiUtils(); >+ >+ if (bidiUtils) { >+@@ -3110,9 +3119,19 @@ >+ #ifdef DEBUG >+ PRInt32 rememberTextLength = textLength; >+ #endif >+- // Since we paint char by char, handle the text like on non-bidi platform >++ isRightToLeftOnBidiPlatform = (!paintCharByChar && >++ isBidiSystem && >++ (eCharType_RightToLeft == charType || >++ eCharType_RightToLeftArabic == charType)); >++ if (isRightToLeftOnBidiPlatform) { >++ // indicate that the platform should use its native >++ // capabilities to reorder the text with right-to-left >++ // base direction >++ aRenderingContext.SetRightToLeftText(PR_TRUE); >++ } >++ // If we will be painting char by char, handle the text like on non-bidi platform >+ bidiUtils->ReorderUnicodeText(text, textLength, charType, >+- isOddLevel, PR_FALSE); >++ isOddLevel, (paintCharByChar) ? PR_FALSE : isBidiSystem); >+ NS_ASSERTION(rememberTextLength == textLength, "Bidi formatting changed text length"); >+ } >+ } >+@@ -3153,7 +3172,9 @@ >+ sdptr->mStart = ip[sdptr->mStart] - mContentOffset; >+ sdptr->mEnd = ip[sdptr->mEnd] - mContentOffset; >+ #ifdef IBMBIDI >+- AdjustSelectionPointsForBidi(sdptr, textLength, CHARTYPE_IS_RTL(charType), isOddLevel, PR_FALSE); >++ AdjustSelectionPointsForBidi(sdptr, textLength, >++ CHARTYPE_IS_RTL(charType), isOddLevel, >++ (paintCharByChar) ? PR_FALSE : isBidiSystem); >+ #endif >+ sdptr = sdptr->mNext; >+ } >+@@ -3163,6 +3184,15 @@ >+ { >+ nscoord currentX = dx; >+ nsTextDimensions newDimensions;//temp >++#ifdef IBMBIDI // Simon - display substrings RTL in RTL frame >++ if (isRightToLeftOnBidiPlatform) >++ { >++ nsTextDimensions frameDimensions; >++ GetTextDimensions(aRenderingContext, aTextStyle, text, >++ (PRInt32)textLength, iter.IsLast(), &frameDimensions); >++ currentX = dx + frameDimensions.width; >++ } >++#endif >+ while (!iter.IsDone()) >+ { >+ PRUnichar *currenttext = iter.CurrentTextUnicharPtr(); >+@@ -3176,6 +3206,10 @@ >+ (PRInt32)currentlength, isEndOfFrame, &newDimensions); >+ if (newDimensions.width) >+ { >++#ifdef IBMBIDI >++ if (isRightToLeftOnBidiPlatform) >++ currentX -= newDimensions.width; >++#endif >+ if (iter.CurrentBackGroundColor(currentBKColor, &isCurrentBKColorTransparent)) >+ {//DRAW RECT HERE!!! >+ if (!isCurrentBKColorTransparent) { >+@@ -3198,6 +3232,9 @@ >+ currentX, dy, width, details); >+ } >+ >++#ifdef IBMBIDI >++ if (!isRightToLeftOnBidiPlatform) >++#endif >+ // increment twips X start but remember to get ready for >+ // next draw by reducing current x by letter spacing amount >+ currentX += newDimensions.width; // + aTextStyle.mLetterSpacing; >+@@ -3221,6 +3258,13 @@ >+ delete details; >+ } >+ } >++#ifdef IBMBIDI >++ if (isRightToLeftOnBidiPlatform) { >++ // indicate that future text should not be reordered with >++ // right-to-left base direction >++ aRenderingContext.SetRightToLeftText(PR_FALSE); >++ } >++#endif // IBMBIDI >+ } >+ } >+ >--- debian/ubuntu-patches/mozilla-1.6-separator.patch >+++ debian/ubuntu-patches/mozilla-1.6-separator.patch >@@ -0,0 +1,22 @@ >+--- mozilla/widget/src/gtk/nsGtkEventHandler.cpp.separator 2004-03-08 17:04:32.169832464 +0100 >++++ mozilla/widget/src/gtk/nsGtkEventHandler.cpp 2004-03-08 17:04:43.953783209 +0100 >+@@ -297,7 +297,7 @@ >+ case GDK_KP_Add: >+ return '+'; >+ case GDK_KP_Separator: >+- return '|'; >++ return ','; >+ case GDK_KP_Subtract: >+ return '-'; >+ case GDK_KP_Decimal: >+--- mozilla/widget/src/gtk2/nsGtkKeyUtils.cpp.separator 2004-03-08 17:05:01.493710913 +0100 >++++ mozilla/widget/src/gtk2/nsGtkKeyUtils.cpp 2004-03-08 17:05:14.806656850 +0100 >+@@ -228,7 +228,7 @@ >+ case GDK_KP_Add: >+ return '+'; >+ case GDK_KP_Separator: >+- return '|'; >++ return ','; >+ case GDK_KP_Subtract: >+ return '-'; >+ case GDK_KP_Decimal: >--- debian/ubuntu-patches/6233-non-latin1-printing >+++ debian/ubuntu-patches/6233-non-latin1-printing >@@ -0,0 +1,4169 @@ >+Index: configure.in >+=================================================================== >+RCS file: /cvsroot/mozilla/configure.in,v >+retrieving revision 1.1335.2.11 >+diff -u -7 -p -r1.1335.2.11 configure.in >+--- configure.in 12 Oct 2004 04:13:29 -0000 1.1335.2.11 >++++ configure.in 17 Oct 2004 11:09:46 -0000 >+@@ -3419,14 +3419,18 @@ dnl ==================================== >+ dnl = Xft >+ dnl ======================================================== >+ MOZ_ARG_ENABLE_BOOL(xft, >+ [ --enable-xft Enable Xft support ], >+ MOZ_ENABLE_XFT=1, >+ MOZ_ENABLE_XFT= ) >+ >++if test "$MOZ_ENABLE_XFT" && test "$MOZ_ENABLE_FREETYPE2"; then >++ AC_MSG_ERROR([Cannot enable XFT and FREETYPE2 at the same time.]) >++fi >++ >+ if test "$MOZ_ENABLE_XFT" >+ then >+ AC_DEFINE(MOZ_ENABLE_XFT) >+ PKG_CHECK_MODULES(MOZ_XFT, xft) >+ if test "$MOZ_ENABLE_GTK2"; then >+ PKG_CHECK_MODULES(_PANGOCHK, pango >= 1.1.0) >+ fi >+Index: gfx/idl/Makefile.in >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/idl/Makefile.in,v >+retrieving revision 1.30 >+diff -u -7 -p -r1.30 Makefile.in >+--- gfx/idl/Makefile.in 14 Jan 2004 12:56:38 -0000 1.30 >++++ gfx/idl/Makefile.in 17 Oct 2004 11:09:46 -0000 >+@@ -35,22 +35,27 @@ XPIDLSRCS = \ >+ nsIFontList.idl \ >+ nsIScriptableRegion.idl \ >+ nsIScreen.idl \ >+ nsIScreenManager.idl \ >+ nsIPrintOptions.idl \ >+ nsIPrintSettings.idl \ >+ nsIPrintSettingsService.idl \ >+- nsIFontCatalogService.idl \ >+- nsIFreeType2.idl \ >+ nsIPrintSession.idl \ >+ gfxIFormats.idl \ >+ gfxIImageFrame.idl \ >+ gfxtypes.idl \ >+ $(NULL) >+ >++ifdef MOZ_ENABLE_FREETYPE2 >++XPIDLSRCS += \ >++ nsIFontCatalogService.idl \ >++ nsIFreeType2.idl \ >++ $(NULL) >++endif >++ >+ ifneq (,$(filter mac cocoa,$(MOZ_GFX_TOOLKIT))) >+ XPIDLSRCS += nsIPrintSettingsX.idl \ >+ nsIPrintSessionX.idl \ >+ $(NULL) >+ endif >+ >+ ifeq ($(MOZ_GFX_TOOLKIT),windows) >+Index: gfx/src/gtk/Makefile.in >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/gtk/Makefile.in,v >+retrieving revision 1.108 >+diff -u -7 -p -r1.108 Makefile.in >+--- gfx/src/gtk/Makefile.in 10 Nov 2003 12:24:51 -0000 1.108 >++++ gfx/src/gtk/Makefile.in 17 Oct 2004 11:09:46 -0000 >+@@ -62,21 +62,26 @@ endif >+ NATIVE_THEME_SUPPORT = 1 >+ >+ CSRCS = nsPrintdGTK.c >+ >+ # Code shared between GTK+, Xlib and Xprint gfx modules >+ X11SHARED_LCPPSRCS = \ >+ nsAntiAliasedGlyph.cpp \ >+- nsFontFreeType.cpp \ >+- nsFT2FontNode.cpp \ >+- nsFT2FontCatalog.cpp \ >+ nsX11AlphaBlend.cpp \ >+ nsXFontAAScaledBitmap.cpp \ >+ nsXFontNormal.cpp \ >+ $(NULL) >++ >++ifdef MOZ_ENABLE_FREETYPE2 >++X11SHARED_LCPPSRCS += \ >++ nsFontFreeType.cpp \ >++ nsFT2FontNode.cpp \ >++ nsFT2FontCatalog.cpp \ >++ $(NULL) >++endif >+ >+ CPPSRCS = \ >+ nsDeviceContextGTK.cpp \ >+ nsDeviceContextSpecFactoryG.cpp \ >+ nsDeviceContextSpecG.cpp \ >+ nsDrawingSurfaceGTK.cpp \ >+ nsGfxFactoryGTK.cpp \ >+@@ -204,21 +209,21 @@ EXTRA_DSO_LDOPTS += \ >+ endif >+ >+ LOCAL_INCLUDES = \ >+ -I../.. \ >+ -I$(srcdir)/. \ >+ -I$(srcdir)/.. \ >+ -I$(srcdir)/../shared \ >+- -I$(srcdir)/../freetype \ >+ -I$(srcdir)/../x11shared \ >+ $(MOZ_XFT_CFLAGS) \ >+ $(NULL) >+ >+ ifdef MOZ_ENABLE_FREETYPE2 >+ INCLUDES += $(FT2_CFLAGS) >++LOCAL_INCLUDES += -I$(srcdir)/../freetype >+ endif >+ >+ ifdef MOZ_ENABLE_XPRINT >+ export:: $(addprefix $(srcdir)/../xprint/,$(XPU_LCSRCS)) $(addprefix $(srcdir)/../x11shared/,$(X11SHARED_LCPPSRCS)) >+ $(INSTALL) $^ . >+ else >+ export:: $(addprefix $(srcdir)/../x11shared/,$(X11SHARED_LCPPSRCS)) >+Index: gfx/src/gtk/nsFontMetricsGTK.cpp >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/gtk/nsFontMetricsGTK.cpp,v >+retrieving revision 1.268 >+diff -u -7 -p -r1.268 nsFontMetricsGTK.cpp >+--- gfx/src/gtk/nsFontMetricsGTK.cpp 9 Mar 2004 14:14:54 -0000 1.268 >++++ gfx/src/gtk/nsFontMetricsGTK.cpp 17 Oct 2004 11:10:00 -0000 >+@@ -58,16 +58,18 @@ >+ #include "nsPrintfCString.h" >+ #include "nspr.h" >+ #include "nsHashtable.h" >+ #include "nsReadableUtils.h" >+ #include "nsAString.h" >+ #include "nsXPIDLString.h" >+ #include "nsFontDebug.h" >++#ifdef MOZ_ENABLE_FREETYPE2 >+ #include "nsFT2FontNode.h" >+ #include "nsFontFreeType.h" >++#endif >+ #include "nsXFontNormal.h" >+ #include "nsX11AlphaBlend.h" >+ #include "nsXFontAAScaledBitmap.h" >+ #include "nsUnicharUtils.h" >+ #ifdef ENABLE_X_FONT_BANNING >+ #include <regex.h> >+ #endif /* ENABLE_X_FONT_BANNING */ >+@@ -98,28 +100,34 @@ static PRLogModuleInfo * FontMetricsGTKL >+ // this factor larger than the height of the display, it's clamped to >+ // that value instead of the requested size. >+ #define FONT_MAX_FONT_SCALE 2 >+ >+ #undef NOISY_FONTS >+ #undef REALLY_NOISY_FONTS >+ >++#ifndef MOZ_ENABLE_FREETYPE2 >++static PRUint32 gFontDebug = 0 | NS_FONT_DEBUG_FONT_SCAN; >++#endif >++ >+ struct nsFontCharSetMap; >+ struct nsFontFamilyName; >+ struct nsFontPropertyName; >+ struct nsFontStyle; >+ struct nsFontWeight; >+ struct nsFontLangGroup; >+ >+ struct nsFontCharSetInfo >+ { >+ const char* mCharSet; >+ nsFontCharSetConverter Convert; >+ PRUint8 mSpecialUnderline; >++#ifdef MOZ_ENABLE_FREETYPE2 >+ PRInt32 mCodeRange1Bits; >+ PRInt32 mCodeRange2Bits; >++#endif >+ PRUint16* mCCMap; >+ nsIUnicodeEncoder* mConverter; >+ nsIAtom* mLangGroup; >+ PRBool mInitedSizeInfo; >+ PRInt32 mOutlineScaleMin; >+ PRInt32 mAABitmapScaleMin; >+ double mAABitmapOversize; >+@@ -216,14 +224,15 @@ static gint DoubleByteConvert(nsFontChar >+ const PRUnichar* aSrcBuf, PRInt32 aSrcLen, char* aDestBuf, PRInt32 aDestLen); >+ static gint ISO10646Convert(nsFontCharSetInfo* aSelf, XFontStruct* aFont, >+ const PRUnichar* aSrcBuf, PRInt32 aSrcLen, char* aDestBuf, PRInt32 aDestLen); >+ >+ static nsFontCharSetInfo Unknown = { nsnull }; >+ static nsFontCharSetInfo Special = { nsnull }; >+ >++#ifdef MOZ_ENABLE_FREETYPE2 >+ static nsFontCharSetInfo USASCII = >+ { "us-ascii", SingleByteConvert, 0, >+ TT_OS2_CPR1_LATIN1 | TT_OS2_CPR1_MAC_ROMAN, >+ TT_OS2_CPR2_CA_FRENCH | TT_OS2_CPR2_PORTUGESE >+ | TT_OS2_CPR2_WE_LATIN1 | TT_OS2_CPR2_US }; >+ static nsFontCharSetInfo ISO88591 = >+ { "ISO-8859-1", SingleByteConvert, 0, >+@@ -421,15 +430,168 @@ static nsFontCharSetInfo Mathematica2 = >+ { "x-mathematica2", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; >+ static nsFontCharSetInfo Mathematica3 = >+ { "x-mathematica3", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; >+ static nsFontCharSetInfo Mathematica4 = >+ { "x-mathematica4", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; >+ static nsFontCharSetInfo Mathematica5 = >+ { "x-mathematica5", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; >+-#endif >++#endif /* MATHML */ >++ >++#else >++ >++static nsFontCharSetInfo USASCII = >++ { "us-ascii", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO88591 = >++ { "ISO-8859-1", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO88592 = >++ { "ISO-8859-2", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO88593 = >++ { "ISO-8859-3", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO88594 = >++ { "ISO-8859-4", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO88595 = >++ { "ISO-8859-5", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO88596 = >++ { "ISO-8859-6", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO885968x = >++ { "x-iso-8859-6-8-x", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO8859616 = >++ { "x-iso-8859-6-16", SingleByteConvert, 0 }; >++static nsFontCharSetInfo IBM1046 = >++ { "x-IBM1046", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO88597 = >++ { "ISO-8859-7", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO88598 = >++ { "ISO-8859-8", SingleByteConvert, 0 }; >++// change from >++// { "ISO-8859-8", SingleByteConvertReverse, 0, 0, 0 }; >++// untill we fix the layout and ensure we only call this with pure RTL text >++static nsFontCharSetInfo ISO88599 = >++ { "ISO-8859-9", SingleByteConvert, 0 }; >++// no support for iso-8859-10 (Nordic/Icelandic) currently >++// static nsFontCharSetInfo ISO885910 = >++// { "ISO-8859-10", SingleByteConvert, 0, >++// 0, TT_OS2_CPR2_NORDIC | TT_OS2_CPR2_ICELANDIC }; >++// no support for iso-8859-12 (Vietnamese) currently >++// static nsFontCharSetInfo ISO885912 = >++// { "ISO-8859-12", SingleByteConvert, 0, >++// TT_OS2_CPR1_VIETNAMESE, 0 }; >++static nsFontCharSetInfo ISO885913 = >++ { "ISO-8859-13", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO885915 = >++ { "ISO-8859-15", SingleByteConvert, 0 }; >++static nsFontCharSetInfo JISX0201 = >++ { "jis_0201", SingleByteConvert, 1 }; >++static nsFontCharSetInfo KOI8R = >++ { "KOI8-R", SingleByteConvert, 0 }; >++static nsFontCharSetInfo KOI8U = >++ { "KOI8-U", SingleByteConvert, 0 }; >++static nsFontCharSetInfo TIS6202 = >++/* Added to support thai context sensitive shaping if >++ * CTL extension is is in force */ >++#ifdef SUNCTL >++ { "tis620-2", SingleByteConvert, 0 }; >++#else >++ { "windows-874", SingleByteConvert, 0 }; >++#endif /* SUNCTL */ >++static nsFontCharSetInfo TIS620 = >++ { "TIS-620", SingleByteConvert, 0 }; >++static nsFontCharSetInfo ISO885911 = >++ { "ISO-8859-11", SingleByteConvert, 0 }; >++static nsFontCharSetInfo Big5 = >++ { "x-x-big5", DoubleByteConvert, 1 }; >++// a kludge to distinguish zh-TW only fonts in Big5 (such as hpbig5-) >++// from zh-TW/zh-HK common fonts in Big5 (such as big5-1) >++static nsFontCharSetInfo Big5TWHK = >++ { "x-x-big5", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo CNS116431 = >++ { "x-cns-11643-1", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo CNS116432 = >++ { "x-cns-11643-2", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo CNS116433 = >++ { "x-cns-11643-3", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo CNS116434 = >++ { "x-cns-11643-4", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo CNS116435 = >++ { "x-cns-11643-5", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo CNS116436 = >++ { "x-cns-11643-6", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo CNS116437 = >++ { "x-cns-11643-7", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo GB2312 = >++ { "gb_2312-80", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo GB18030_0 = >++ { "gb18030.2000-0", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo GB18030_1 = >++ { "gb18030.2000-1", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo GBK = >++ { "x-gbk-noascii", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo HKSCS = >++ { "hkscs-1", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo JISX0208 = >++ { "jis_0208-1983", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo JISX0212 = >++ { "jis_0212-1990", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo KSC5601 = >++ { "ks_c_5601-1987", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo X11Johab = >++ { "x-x11johab", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo JohabNoAscii = >++ { "x-johab-noascii", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo JamoTTF = >++ { "x-koreanjamo-0", DoubleByteConvert, 1 }; >++static nsFontCharSetInfo TamilTTF = >++ { "x-tamilttf-0", DoubleByteConvert, 0 }; >++static nsFontCharSetInfo CP1250 = >++ { "windows-1250", SingleByteConvert, 0 }; >++static nsFontCharSetInfo CP1251 = >++ { "windows-1251", SingleByteConvert, 0 }; >++static nsFontCharSetInfo CP1252 = >++ { "windows-1252", SingleByteConvert, 0 }; >++static nsFontCharSetInfo CP1253 = >++ { "windows-1253", SingleByteConvert, 0 }; >++static nsFontCharSetInfo CP1257 = >++ { "windows-1257", SingleByteConvert, 0 }; >++ >++#ifdef SUNCTL >++/* Hindi range currently unsupported in FT2 range. Change TT* once we >++ arrive at a way to identify hindi */ >++static nsFontCharSetInfo SunIndic = >++ { "x-sun-unicode-india-0", DoubleByteConvert, 0 }; >++#endif /* SUNCTL */ >++ >++static nsFontCharSetInfo ISO106461 = >++ { nsnull, ISO10646Convert, 1}; >++ >++static nsFontCharSetInfo AdobeSymbol = >++ { "Adobe-Symbol-Encoding", SingleByteConvert, 0 }; >++static nsFontCharSetInfo AdobeEuro = >++ { "x-adobe-euro", SingleByteConvert, 0 }; >++ >++#ifdef MOZ_MATHML >++static nsFontCharSetInfo CMCMEX = >++ { "x-t1-cmex", SingleByteConvert, 0}; >++static nsFontCharSetInfo CMCMSY = >++ { "x-t1-cmsy", SingleByteConvert, 0}; >++static nsFontCharSetInfo CMCMR = >++ { "x-t1-cmr", SingleByteConvert, 0}; >++static nsFontCharSetInfo CMCMMI = >++ { "x-t1-cmmi", SingleByteConvert, 0}; >++static nsFontCharSetInfo Mathematica1 = >++ { "x-mathematica1", SingleByteConvert, 0}; >++static nsFontCharSetInfo Mathematica2 = >++ { "x-mathematica2", SingleByteConvert, 0}; >++static nsFontCharSetInfo Mathematica3 = >++ { "x-mathematica3", SingleByteConvert, 0}; >++static nsFontCharSetInfo Mathematica4 = >++ { "x-mathematica4", SingleByteConvert, 0}; >++static nsFontCharSetInfo Mathematica5 = >++ { "x-mathematica5", SingleByteConvert, 0}; >++#endif /* MATHML */ >++#endif /* FREETYPE2 */ >+ >+ static nsFontLangGroup FLG_WESTERN = { "x-western", nsnull }; >+ static nsFontLangGroup FLG_RUSSIAN = { "x-cyrillic", nsnull }; >+ static nsFontLangGroup FLG_BALTIC = { "x-baltic", nsnull }; >+ static nsFontLangGroup FLG_CE = { "x-central-euro",nsnull }; >+ static nsFontLangGroup FLG_GREEK = { "el", nsnull }; >+ static nsFontLangGroup FLG_TURKISH = { "tr", nsnull }; >+@@ -817,15 +979,17 @@ FreeNodeArray(nsHashKey* aKey, void* aDa >+ static void >+ FreeGlobals(void) >+ { >+ // XXX complete this >+ >+ gInitialized = 0; >+ >++#ifdef MOZ_ENABLE_FREETYPE2 >+ nsFT2FontNode::FreeGlobals(); >++#endif >+ >+ #ifdef ENABLE_X_FONT_BANNING >+ if (gFontRejectRegEx) { >+ regfree(gFontRejectRegEx); >+ delete gFontRejectRegEx; >+ gFontRejectRegEx = nsnull; >+ } >+@@ -1217,19 +1381,21 @@ InitGlobals(nsIDeviceContext *aDevice) >+ >+ FreeGlobals(); >+ return NS_ERROR_INVALID_ARG; >+ } >+ } >+ #endif /* ENABLE_X_FONT_BANNING */ >+ >++#ifdef MOZ_ENABLE_FREETYPE2 >+ rv = nsFT2FontNode::InitGlobals(); >+ if (NS_FAILED(rv)) { >+ FreeGlobals(); >+ return NS_ERROR_OUT_OF_MEMORY; >+ } >++#endif >+ >+ gInitialized = 1; >+ >+ return NS_OK; >+ } >+ >+ // do the 8 to 16 bit conversion on the stack >+@@ -1553,23 +1719,23 @@ NS_IMETHODIMP nsFontMetricsGTK::Destroy >+ } >+ >+ void nsFontMetricsGTK::RealizeFont() >+ { >+ float f; >+ f = mDeviceContext->DevUnitsToAppUnits(); >+ >++#ifdef MOZ_ENABLE_FREETYPE2 >+ if (mWesternFont->IsFreeTypeFont()) { >+ nsFreeTypeFont *ft = (nsFreeTypeFont *)mWesternFont; >+ if (!ft) >+ return; >+ // now that there are multiple font types (eg: core X fonts >+ // and TrueType fonts) there should be a common set of methods >+ // to get the metrics info from the font object. These methods >+ // probably should be virtual functions defined in nsFontGTK. >+-#if (defined(MOZ_ENABLE_FREETYPE2)) >+ int lineSpacing = ft->ascent() + ft->descent(); >+ if (lineSpacing > mWesternFont->mSize) { >+ mLeading = nscoord((lineSpacing - mWesternFont->mSize) * f); >+ } >+ else { >+ mLeading = 0; >+ } >+@@ -1633,16 +1799,16 @@ void nsFontMetricsGTK::RealizeFont() >+ } >+ >+ /* need better way to calculate this */ >+ mStrikeoutOffset = NSToCoordRound(mXHeight / 2.0); >+ mStrikeoutSize = mUnderlineSize; >+ >+ return; >+-#endif /* (defined(MOZ_ENABLE_FREETYPE2)) */ >+ } >++#endif >+ nsXFont *xFont = mWesternFont->GetXFont(); >+ XFontStruct *fontInfo = xFont->GetXFontStruct(); >+ f = mDeviceContext->DevUnitsToAppUnits(); >+ >+ nscoord lineSpacing = nscoord((fontInfo->ascent + fontInfo->descent) * f); >+ mEmHeight = PR_MAX(1, nscoord(mWesternFont->mSize * f)); >+ if (lineSpacing > mEmHeight) { >+@@ -3251,14 +3417,16 @@ nsFontMetricsGTK::GetAASBBaseFont(nsFont >+ return base_aafont; >+ } >+ >+ nsFontGTK* >+ nsFontMetricsGTK::PickASizeAndLoad(nsFontStretch* aStretch, >+ nsFontCharSetInfo* aCharSet, PRUint32 aChar, const char *aName) >+ { >++ >++#ifdef MOZ_ENABLE_FREETYPE2 >+ if (aStretch->mFreeTypeFaceID) { >+ //FREETYPE_FONT_PRINTF(("mFreeTypeFaceID = 0x%p", aStretch->mFreeTypeFaceID)); >+ nsFreeTypeFont *ftfont = nsFreeTypeFont::NewFont(aStretch->mFreeTypeFaceID, >+ mPixelSize, >+ aName); >+ if (!ftfont) { >+ FREETYPE_FONT_PRINTF(("failed to create font")); >+@@ -3283,14 +3451,15 @@ nsFontMetricsGTK::PickASizeAndLoad(nsFon >+ return AddToLoadedFontsList(ftfont); >+ } >+ >+ if (IS_SURROGATE(aChar)) { >+ // SURROGATE is only supported by FreeType >+ return nsnull; >+ } >++#endif >+ >+ PRBool use_scaled_font = PR_FALSE; >+ PRBool have_nearly_rightsized_bitmap = PR_FALSE; >+ nsFontGTK* base_aafont = nsnull; >+ >+ PRInt32 bitmap_size = NOT_FOUND_FONT_SIZE; >+ PRInt32 scale_size = mPixelSize; >+@@ -5191,16 +5360,18 @@ GetFontNames(const char* aPattern, PRBoo >+ { >+ #ifdef NS_FONT_DEBUG_CALL_TRACE >+ if (gFontDebug & NS_FONT_DEBUG_CALL_TRACE) { >+ printf("GetFontNames %s\n", aPattern); >+ } >+ #endif >+ >++#ifdef MOZ_ENABLE_FREETYPE2 >+ // get FreeType fonts >+ nsFT2FontNode::GetFontNames(aPattern, aNodes); >++#endif >+ >+ nsCAutoString previousNodeName; >+ nsHashtable* node_hash; >+ if (aAnyFoundry) { >+ NS_ASSERTION(aPattern[1] == '*', "invalid 'anyFoundry' pattern"); >+ node_hash = gAFRENodes; >+ } >+@@ -6565,18 +6736,20 @@ GetCharSetMap(const char *aCharSetName) >+ nsFontCharSetMap* charSetMap = >+ (nsFontCharSetMap*) gCharSetMaps->Get(&charSetKey); >+ if (!charSetMap) >+ charSetMap = gNoneCharSetMap; >+ return charSetMap; >+ } >+ >++#ifdef MOZ_ENABLE_FREETYPE2 >+ void >+ CharSetNameToCodeRangeBits(const char *aCharset, >+ PRUint32 *aCodeRange1, PRUint32 *aCodeRange2) >+ { >+ nsFontCharSetMap *charSetMap = GetCharSetMap(aCharset); >+ nsFontCharSetInfo* charSetInfo = charSetMap->mInfo; >+ >+ *aCodeRange1 = charSetInfo->mCodeRange1Bits; >+ *aCodeRange2 = charSetInfo->mCodeRange2Bits; >+ } >++#endif >+ >+Index: gfx/src/gtk/nsFontMetricsGTK.h >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/gtk/nsFontMetricsGTK.h,v >+retrieving revision 1.60 >+diff -u -7 -p -r1.60 nsFontMetricsGTK.h >+--- gfx/src/gtk/nsFontMetricsGTK.h 5 Feb 2004 01:57:03 -0000 1.60 >++++ gfx/src/gtk/nsFontMetricsGTK.h 17 Oct 2004 11:10:04 -0000 >+@@ -48,15 +48,17 @@ >+ #include "nsIDeviceContext.h" >+ #include "nsCRT.h" >+ #include "nsCOMPtr.h" >+ #include "nsRenderingContextGTK.h" >+ #include "nsICharRepresentable.h" >+ #include "nsCompressedCharMap.h" >+ #include "nsIFontMetricsGTK.h" >++#ifdef MOZ_ENABLE_FREETYPE2 >+ #include "nsIFontCatalogService.h" >++#endif >+ >+ #include <gdk/gdk.h> >+ #include <gdk/gdkx.h> >+ >+ #undef FONT_HAS_GLYPH >+ #define FONT_HAS_GLYPH(map, char) IS_REPRESENTABLE(map, char) >+ #define WEIGHT_INDEX(weight) (((weight) / 100) - 1) >+@@ -88,15 +90,17 @@ struct nsFontStretch >+ nsFontGTK** mSizes; >+ PRUint16 mSizesAlloc; >+ PRUint16 mSizesCount; >+ >+ char* mScalable; >+ PRBool mOutlineScaled; >+ nsVoidArray mScaledFonts; >++#ifdef MOZ_ENABLE_FREETYPE2 >+ nsITrueTypeFontCatalogEntry* mFreeTypeFaceID; >++#endif >+ }; >+ >+ struct nsFontStyle >+ { >+ NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW >+ >+ void FillWeightHoles(void); >+@@ -407,14 +411,16 @@ public: >+ NS_DECL_ISUPPORTS >+ NS_DECL_NSIFONTENUMERATOR >+ }; >+ >+ class nsHashKey; >+ PRBool FreeNode(nsHashKey* aKey, void* aData, void* aClosure); >+ nsFontCharSetInfo *GetCharSetInfo(const char *aCharSetName); >++#ifdef MOZ_ENABLE_FREETYPE2 >+ void CharSetNameToCodeRangeBits(const char*, PRUint32*, PRUint32*); >++#endif >+ nsFontCharSetMap *GetCharSetMap(const char *aCharSetName); >+ >+ >+ >+ >+ #endif >+Index: gfx/src/gtk/nsFontMetricsXft.cpp >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/gtk/nsFontMetricsXft.cpp,v >+retrieving revision 1.51.6.2 >+diff -u -7 -p -r1.51.6.2 nsFontMetricsXft.cpp >+--- gfx/src/gtk/nsFontMetricsXft.cpp 14 Oct 2004 20:36:14 -0000 1.51.6.2 >++++ gfx/src/gtk/nsFontMetricsXft.cpp 17 Oct 2004 11:10:11 -0000 >+@@ -60,14 +60,15 @@ >+ #include "nsICharsetConverterManager.h" >+ #include "nsICharRepresentable.h" >+ #include "nsIPersistentProperties2.h" >+ #include "nsCompressedCharMap.h" >+ #include "nsNetUtil.h" >+ #include "nsClassHashtable.h" >+ #include "nsAutoBuffer.h" >++#include "nsFontConfigUtils.h" >+ >+ #include <gdk/gdkx.h> >+ #include <freetype/tttables.h> >+ #include <freetype/freetype.h> >+ >+ #define FORCE_PR_LOG >+ #include "prlog.h" >+@@ -190,34 +191,14 @@ class nsFontXftInfo { >+ // Unicode, Custom, CustomWide >+ nsXftFontType mFontType; >+ // Truetype cmap to use for direct retrieval of GIDs with FT_Get_Char_Index >+ // for 'narrow' custom fonts. >+ FT_Encoding mFT_Encoding; >+ }; >+ >+-struct MozXftLangGroup { >+- const char *mozLangGroup; >+- FcChar32 character; >+- const FcChar8 *XftLang; >+-}; >+- >+-static const MozXftLangGroup MozXftLangGroups[] = { >+- { "x-western", 0x0041, (const FcChar8 *)"en" }, >+- { "x-central-euro", 0x0100, (const FcChar8 *)"pl" }, >+- { "x-cyrillic", 0x0411, (const FcChar8 *)"ru" }, >+- { "x-baltic", 0x0104, (const FcChar8 *)"lv" }, >+- { "x-devanagari", 0x0905, (const FcChar8 *)"hi" }, >+- { "x-tamil", 0x0B85, (const FcChar8 *)"ta" }, >+- { "x-unicode", 0x0000, 0 }, >+- { "x-user-def", 0x0000, 0 }, >+-}; >+- >+-#define NUM_XFT_LANG_GROUPS (sizeof (MozXftLangGroups) / \ >+- sizeof (MozXftLangGroups[0])) >+- >+ struct DrawStringData { >+ nscoord x; >+ nscoord y; >+ const nscoord *spacing; >+ nscoord xOffset; >+ nsRenderingContextGTK *context; >+ XftDraw *draw; >+@@ -232,29 +213,19 @@ struct BoundingMetricsData { >+ PRBool firstTime; >+ }; >+ #endif /* MOZ_MATHML */ >+ >+ #define AUTO_BUFFER_SIZE 3000 >+ typedef nsAutoBuffer<FcChar32, AUTO_BUFFER_SIZE> nsAutoFcChar32Buffer; >+ >+-static int CalculateSlant (PRUint8 aStyle); >+-static int CalculateWeight (PRUint16 aWeight); >+-static void AddLangGroup (FcPattern *aPattern, nsIAtom *aLangGroup); >+-static void AddFFRE (FcPattern *aPattern, nsCString *aFamily, >+- PRBool aWeak); >+-static void FFREToFamily (nsACString &aFFREName, nsACString &oFamily); >+-static int FFRECountHyphens (nsACString &aFFREName); >+ static int CompareFontNames (const void* aArg1, const void* aArg2, >+ void* aClosure); >+-static PRBool IsASCIIFontName (const nsString& aName); >+ static nsresult EnumFontsXft (nsIAtom* aLangGroup, const char* aGeneric, >+ PRUint32* aCount, PRUnichar*** aResult); >+ >+-static const MozXftLangGroup* FindFCLangGroup (nsACString &aLangGroup); >+- >+ static void ConvertCharToUCS4 (const char *aString, >+ PRUint32 aLength, >+ nsAutoFcChar32Buffer &aOutBuffer, >+ PRUint32 *aOutLen); >+ static void ConvertUnicharToUCS4 (const PRUnichar *aString, >+ PRUint32 aLength, >+ nsAutoFcChar32Buffer &aOutBuffer, >+@@ -1018,21 +989,21 @@ nsFontMetricsXft::SetupFCPattern(void) >+ for (int i=0; i < mFontList.Count(); ++i) { >+ // if this was a generic name, break out of the loop since we >+ // don't want to add it to the pattern yet >+ if (mFontIsGeneric[i]) >+ break;; >+ >+ nsCString *familyName = mFontList.CStringAt(i); >+- AddFFRE(mPattern, familyName, PR_FALSE); >++ NS_AddFFRE(mPattern, familyName, PR_FALSE); >+ } >+ >+ // Add the language group. Note that we do this before adding any >+ // generics. That's because the language is more important than >+ // any generic font. >+- AddLangGroup (mPattern, mLangGroup); >++ NS_AddLangGroup (mPattern, mLangGroup); >+ >+ // If there's a generic add a pref for the generic if there's one >+ // set. >+ if (mGenericFont && !mFont->systemFont) { >+ nsCString name; >+ name += "font.name."; >+ name += mGenericFont->get(); >+@@ -1048,31 +1019,31 @@ nsFontMetricsXft::SetupFCPattern(void) >+ if (pref) { >+ nsresult rv; >+ nsXPIDLCString value; >+ rv = pref->GetCharPref(name.get(), getter_Copies(value)); >+ >+ // we ignore prefs that have three hypens since they are X >+ // style prefs. >+- if (FFRECountHyphens(value) < 3) { >++ if (NS_FFRECountHyphens(value) < 3) { >+ nsCString tmpstr; >+ tmpstr.Append(value); >+ >+ if (PR_LOG_TEST(gXftFontLoad, PR_LOG_DEBUG)) { >+ printf("\tadding generic font from preferences: %s\n", >+ tmpstr.get()); >+ } >+ >+- AddFFRE(mPattern, &tmpstr, PR_FALSE); >++ NS_AddFFRE(mPattern, &tmpstr, PR_FALSE); >+ } >+ } >+ } >+ >+ // Add the generic if there is one. >+ if (mGenericFont && !mFont->systemFont) >+- AddFFRE(mPattern, mGenericFont, PR_FALSE); >++ NS_AddFFRE(mPattern, mGenericFont, PR_FALSE); >+ >+ if (PR_LOG_TEST(gXftFontLoad, PR_LOG_DEBUG)) { >+ // generic font >+ if (mGenericFont && !mFont->systemFont) { >+ printf("\tadding generic family: %s\n", mGenericFont->get()); >+ } >+ >+@@ -1091,31 +1062,31 @@ nsFontMetricsXft::SetupFCPattern(void) >+ default: >+ printf("roman\n"); >+ break; >+ } >+ >+ // weight >+ printf("\tweight: (orig,calc) %d,%d\n", >+- mFont->weight, CalculateWeight(mFont->weight)); >++ mFont->weight, NS_CalculateWeight(mFont->weight)); >+ >+ } >+ >+ // add the point size >+ // We've done some round-tripping of floating point numbers so they >+ // might not be quite right. Since Xft rounds down, add a little, >+ // so we don't go from 9.00000 to 8.99999 to 8. >+ FcPatternAddDouble(mPattern, FC_PIXEL_SIZE, mPixelSize + 0.000001); >+ >+ // Add the slant type >+ FcPatternAddInteger(mPattern, FC_SLANT, >+- CalculateSlant(mFont->style)); >++ NS_CalculateSlant(mFont->style)); >+ >+ // Add the weight >+ FcPatternAddInteger(mPattern, FC_WEIGHT, >+- CalculateWeight(mFont->weight)); >++ NS_CalculateWeight(mFont->weight)); >+ >+ // Set up the default substitutions for this font >+ FcConfigSubstitute(0, mPattern, FcMatchPattern); >+ XftDefaultSubstitute(GDK_DISPLAY(), DefaultScreen(GDK_DISPLAY()), >+ mPattern); >+ } >+ >+@@ -1270,15 +1241,15 @@ nsFontMetricsXft::SetupMiniFont(void) >+ XftPatternAddBool(mPattern, XFT_RENDER, False); >+ >+ FcPatternAddString(pattern, FC_FAMILY, (FcChar8 *)"monospace"); >+ >+ FcPatternAddInteger(pattern, FC_PIXEL_SIZE, int(0.5 * mPixelSize)); >+ >+ FcPatternAddInteger(pattern, FC_WEIGHT, >+- CalculateWeight(mFont->weight)); >++ NS_CalculateWeight(mFont->weight)); >+ >+ FcConfigSubstitute(0, pattern, FcMatchPattern); >+ XftDefaultSubstitute(GDK_DISPLAY(), DefaultScreen(GDK_DISPLAY()), >+ pattern); >+ >+ FcResult res; >+ >+@@ -1686,15 +1657,15 @@ nsFontMetricsXft::BoundingMetricsCallbac >+ #endif /* MOZ_MATHML */ >+ >+ /* static */ >+ nsresult >+ nsFontMetricsXft::FamilyExists(nsIDeviceContext *aDevice, >+ const nsString &aName) >+ { >+- if (!IsASCIIFontName(aName)) >++ if (!NS_IsASCIIFontName(aName)) >+ return NS_ERROR_FAILURE; >+ >+ NS_ConvertUCS2toUTF8 name(aName); >+ >+ FcFontSet *set = nsnull; >+ FcObjectSet *os = nsnull; >+ >+@@ -1744,15 +1715,15 @@ nsFontMetricsXft::FamilyExists(nsIDevice >+ /* static */ >+ PRBool >+ nsFontMetricsXft::EnumFontCallback(const nsString &aFamily, PRBool aIsGeneric, >+ void *aData) >+ { >+ // make sure it's an ascii name, if not then return and continue >+ // enumerating >+- if (!IsASCIIFontName(aFamily)) >++ if (!NS_IsASCIIFontName(aFamily)) >+ return PR_TRUE; >+ >+ nsCAutoString name; >+ name.AssignWithConversion(aFamily.get()); >+ ToLowerCase(name); >+ nsFontMetricsXft *metrics = (nsFontMetricsXft *)aData; >+ metrics->mFontList.AppendCString(name); >+@@ -1842,15 +1813,15 @@ nsFontEnumeratorXft::GetDefaultFont(cons >+ match_pattern = FcPatternCreate(); >+ >+ if (!match_pattern) >+ return NS_OK; // not fatal, just return an empty default name >+ >+ if (aLangGroup && *aLangGroup) { >+ nsCOMPtr<nsIAtom> langGroup = do_GetAtom(aLangGroup); >+- AddLangGroup(match_pattern, langGroup); >++ NS_AddLangGroup(match_pattern, langGroup); >+ } >+ >+ FcConfigSubstitute(0, match_pattern, FcMatchPattern); >+ FcDefaultSubstitute(match_pattern); >+ FcPattern* result_pattern = FcFontMatch(0, match_pattern, &res); >+ if (result_pattern) { >+ char *family; >+@@ -2227,182 +2198,22 @@ nsAutoDrawSpecBuffer::Flush() >+ } >+ } >+ >+ // Static functions >+ >+ /* static */ >+ int >+-CalculateSlant(PRUint8 aStyle) >+-{ >+- int fcSlant; >+- >+- switch(aStyle) { >+- case NS_FONT_STYLE_ITALIC: >+- fcSlant = FC_SLANT_ITALIC; >+- break; >+- case NS_FONT_STYLE_OBLIQUE: >+- fcSlant = FC_SLANT_OBLIQUE; >+- break; >+- default: >+- fcSlant = FC_SLANT_ROMAN; >+- break; >+- } >+- >+- return fcSlant; >+-} >+- >+-/* static */ >+-int >+-CalculateWeight (PRUint16 aWeight) >+-{ >+- /* >+- * weights come in two parts crammed into one >+- * integer -- the "base" weight is weight / 100, >+- * the rest of the value is the "offset" from that >+- * weight -- the number of steps to move to adjust >+- * the weight in the list of supported font weights, >+- * this value can be negative or positive. >+- */ >+- PRInt32 baseWeight = (aWeight + 50) / 100; >+- PRInt32 offset = aWeight - baseWeight * 100; >+- >+- /* clip weights to range 0 to 9 */ >+- if (baseWeight < 0) >+- baseWeight = 0; >+- if (baseWeight > 9) >+- baseWeight = 9; >+- >+- /* Map from weight value to fcWeights index */ >+- static int fcWeightLookup[10] = { >+- 0, 0, 0, 0, 1, 1, 2, 3, 3, 4, >+- }; >+- >+- PRInt32 fcWeight = fcWeightLookup[baseWeight]; >+- >+- /* >+- * adjust by the offset value, make sure we stay inside the >+- * fcWeights table >+- */ >+- fcWeight += offset; >+- >+- if (fcWeight < 0) >+- fcWeight = 0; >+- if (fcWeight > 4) >+- fcWeight = 4; >+- >+- /* Map to final FC_WEIGHT value */ >+- static int fcWeights[5] = { >+- FC_WEIGHT_LIGHT, /* 0 */ >+- FC_WEIGHT_MEDIUM, /* 1 */ >+- FC_WEIGHT_DEMIBOLD, /* 2 */ >+- FC_WEIGHT_BOLD, /* 3 */ >+- FC_WEIGHT_BLACK, /* 4 */ >+- }; >+- >+- return fcWeights[fcWeight]; >+- >+-} >+- >+-/* static */ >+-void >+-AddLangGroup(FcPattern *aPattern, nsIAtom *aLangGroup) >+-{ >+- // Find the FC lang group for this lang group >+- nsCAutoString cname; >+- aLangGroup->ToUTF8String(cname); >+- >+- // see if the lang group needs to be translated from mozilla's >+- // internal mapping into fontconfig's >+- const struct MozXftLangGroup *langGroup; >+- langGroup = FindFCLangGroup(cname); >+- >+- // if there's no lang group, just use the lang group as it was >+- // passed to us >+- // >+- // we're casting away the const here for the strings - should be >+- // safe. >+- if (!langGroup) >+- FcPatternAddString(aPattern, FC_LANG, (FcChar8 *)cname.get()); >+- else if (langGroup->XftLang) >+- FcPatternAddString(aPattern, FC_LANG, (FcChar8 *)langGroup->XftLang); >+-} >+- >+-/* static */ >+-void >+-AddFFRE(FcPattern *aPattern, nsCString *aFamily, PRBool aWeak) >+-{ >+- nsCAutoString family; >+- FFREToFamily(*aFamily, family); >+- >+- FcValue v; >+- v.type = FcTypeString; >+- // casting away the const here, should be safe >+- v.u.s = (FcChar8 *)family.get(); >+- >+- if (aWeak) >+- FcPatternAddWeak(aPattern, FC_FAMILY, v, FcTrue); >+- else >+- FcPatternAdd(aPattern, FC_FAMILY, v, FcTrue); >+-} >+- >+-/* static */ >+-void >+-FFREToFamily(nsACString &aFFREName, nsACString &oFamily) >+-{ >+- if (FFRECountHyphens(aFFREName) == 3) { >+- PRInt32 familyHyphen = aFFREName.FindChar('-') + 1; >+- PRInt32 registryHyphen = aFFREName.FindChar('-',familyHyphen); >+- oFamily.Append(Substring(aFFREName, familyHyphen, >+- registryHyphen-familyHyphen)); >+- } >+- else { >+- oFamily.Append(aFFREName); >+- } >+-} >+- >+-/* static */ >+-int >+-FFRECountHyphens (nsACString &aFFREName) >+-{ >+- int h = 0; >+- PRInt32 hyphen = 0; >+- while ((hyphen = aFFREName.FindChar('-', hyphen)) >= 0) { >+- ++h; >+- ++hyphen; >+- } >+- return h; >+-} >+- >+-/* static */ >+-int >+ CompareFontNames (const void* aArg1, const void* aArg2, void* aClosure) >+ { >+ const PRUnichar* str1 = *((const PRUnichar**) aArg1); >+ const PRUnichar* str2 = *((const PRUnichar**) aArg2); >+ >+ return nsCRT::strcmp(str1, str2); >+ } >+ >+-PRBool >+-IsASCIIFontName(const nsString& aName) >+-{ >+- PRUint32 len = aName.Length(); >+- const PRUnichar* str = aName.get(); >+- for (PRUint32 i = 0; i < len; i++) { >+- /* >+- * X font names are printable ASCII, ignore others (for now) >+- */ >+- if ((str[i] < 0x20) || (str[i] > 0x7E)) { >+- return PR_FALSE; >+- } >+- } >+- >+- return PR_TRUE; >+-} >+- >+ /* static */ >+ nsresult >+ EnumFontsXft(nsIAtom* aLangGroup, const char* aGeneric, >+ PRUint32* aCount, PRUnichar*** aResult) >+ { >+ FcPattern *pat = NULL; >+ FcObjectSet *os = NULL; >+@@ -2422,15 +2233,15 @@ EnumFontsXft(nsIAtom* aLangGroup, const >+ >+ os = FcObjectSetBuild(FC_FAMILY, FC_FOUNDRY, 0); >+ if (!os) >+ goto end; >+ >+ // take the pattern and add the lang group to it >+ if (aLangGroup) >+- AddLangGroup(pat, aLangGroup); >++ NS_AddLangGroup(pat, aLangGroup); >+ >+ // get the font list >+ fs = FcFontList(0, pat, os); >+ >+ if (!fs) >+ goto end; >+ >+@@ -2530,28 +2341,14 @@ EnumFontsXft(nsIAtom* aLangGroup, const >+ if (fs) >+ FcFontSetDestroy(fs); >+ >+ return rv; >+ } >+ >+ /* static */ >+-const MozXftLangGroup* >+-FindFCLangGroup (nsACString &aLangGroup) >+-{ >+- for (unsigned int i=0; i < NUM_XFT_LANG_GROUPS; ++i) { >+- if (aLangGroup.Equals(MozXftLangGroups[i].mozLangGroup, >+- nsCaseInsensitiveCStringComparator())) { >+- return &MozXftLangGroups[i]; >+- } >+- } >+- >+- return nsnull; >+-} >+- >+-/* static */ >+ void >+ ConvertCharToUCS4(const char *aString, PRUint32 aLength, >+ nsAutoFcChar32Buffer &aOutBuffer, PRUint32 *aOutLen) >+ { >+ *aOutLen = 0; >+ FcChar32 *outBuffer; >+ >+Index: gfx/src/gtk/nsGfxFactoryGTK.cpp >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/gtk/nsGfxFactoryGTK.cpp,v >+retrieving revision 1.58 >+diff -u -7 -p -r1.58 nsGfxFactoryGTK.cpp >+--- gfx/src/gtk/nsGfxFactoryGTK.cpp 7 Sep 2003 22:20:38 -0000 1.58 >++++ gfx/src/gtk/nsGfxFactoryGTK.cpp 17 Oct 2004 11:10:11 -0000 >+@@ -67,16 +67,18 @@ >+ #endif >+ #ifdef MOZ_ENABLE_COREXFONTS >+ #include "nsFontMetricsGTK.h" >+ #endif >+ #include "nsFontMetricsUtils.h" >+ #include "nsPrintSession.h" >+ #include "gfxImageFrame.h" >++#ifdef MOZ_ENABLE_FREETYPE2 >+ #include "nsFT2FontCatalog.h" >+ #include "nsFreeType.h" >++#endif >+ >+ // objects that just require generic constructors >+ >+ NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceContextGTK) >+ NS_GENERIC_FACTORY_CONSTRUCTOR(nsRenderingContextGTK) >+ NS_GENERIC_FACTORY_CONSTRUCTOR(nsImageGTK) >+ NS_GENERIC_FACTORY_CONSTRUCTOR(nsBlender) >+@@ -88,16 +90,16 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsScreenM >+ NS_GENERIC_FACTORY_CONSTRUCTOR(nsPrintOptionsGTK) >+ NS_GENERIC_FACTORY_CONSTRUCTOR(nsPrinterEnumeratorGTK) >+ #ifdef NATIVE_THEME_SUPPORT >+ NS_GENERIC_FACTORY_CONSTRUCTOR(nsNativeThemeGTK) >+ #endif >+ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSession, Init) >+ NS_GENERIC_FACTORY_CONSTRUCTOR(gfxImageFrame) >+-NS_GENERIC_FACTORY_CONSTRUCTOR(nsFT2FontCatalog) >+ #ifdef MOZ_ENABLE_FREETYPE2 >++NS_GENERIC_FACTORY_CONSTRUCTOR(nsFT2FontCatalog) >+ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsFreeType2, Init) >+ #endif >+ >+ // our custom constructors >+ >+ static nsresult >+ nsFontMetricsConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult) >+@@ -287,19 +289,19 @@ static const nsModuleComponentInfo compo >+ GFX_IMAGEFRAME_CID, >+ "@mozilla.org/gfx/image/frame;2", >+ gfxImageFrameConstructor, }, >+ { "Print Session", >+ NS_PRINTSESSION_CID, >+ "@mozilla.org/gfx/printsession;1", >+ nsPrintSessionConstructor }, >++#ifdef MOZ_ENABLE_FREETYPE2 >+ { "TrueType Font Catalog Service", >+ NS_FONTCATALOGSERVICE_CID, >+ "@mozilla.org/gfx/xfontcatalogservice;1", >+ nsFT2FontCatalogConstructor }, >+-#ifdef MOZ_ENABLE_FREETYPE2 >+ { "FreeType2 routines", >+ NS_FREETYPE2_CID, >+ NS_FREETYPE2_CONTRACTID, >+ nsFreeType2Constructor }, >+ #endif >+ #ifdef NATIVE_THEME_SUPPORT >+ { "Native Theme Renderer", >+Index: gfx/src/ps/Makefile.in >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/ps/Makefile.in,v >+retrieving revision 1.50 >+diff -u -7 -p -r1.50 Makefile.in >+--- gfx/src/ps/Makefile.in 11 Mar 2004 22:05:32 -0000 1.50 >++++ gfx/src/ps/Makefile.in 17 Oct 2004 11:10:14 -0000 >+@@ -73,35 +73,46 @@ EXTRA_DSO_LDOPTS = \ >+ -L$(DIST)/lib \ >+ -lgfxshared_s \ >+ $(EXTRA_DSO_LIBS) \ >+ $(MOZ_COMPONENT_LIBS) \ >+ $(MOZ_UNICHARUTIL_LIBS) \ >+ $(NULL) >+ >+-ifdef MOZ_ENABLE_FREETYPE2 >++ifdef MOZ_ENABLE_XFT >++EXTRA_DSO_LDOPTS += \ >++ $(MOZ_XFT_LIBS) \ >++ $(NULL) >++endif >++ >++ifneq (,$(MOZ_ENABLE_FREETYPE2)$(MOZ_ENABLE_XFT)) >+ CPPSRCS += \ >+ nsCidMap.cpp \ >+ nsType1.cpp \ >+ nsType8.cpp \ >+ $(NULL) >+ endif >+ >+ include $(topsrcdir)/config/rules.mk >+ >+-ifdef MOZ_ENABLE_FREETYPE2 >+-INCLUDES += $(FT2_CFLAGS) >+-endif >+- >+ CFLAGS += $(TK_CFLAGS) >+ CXXFLAGS += $(TK_CFLAGS) >+ >+ LOCAL_INCLUDES = \ >+ -I../.. \ >+ -I$(srcdir)/.. \ >+ $(NULL) >+ >++ifdef MOZ_ENABLE_XFT >++INCLUDES += $(MOZ_XFT_CFLAGS) >++LOCAL_INCLUDES += -I$(srcdir)/../shared >++else >++ifdef MOZ_ENABLE_FREETYPE2 >++INCLUDES += $(FT2_CFLAGS) >++endif >++endif >++ >+ libs:: >+ $(INSTALL) $(EXPORT_RESOURCE) $(DIST)/bin/res >+ >+ install:: >+ $(SYSINSTALL) $(IFLAGS1) $(EXPORT_RESOURCE) $(DESTDIR)$(mozappdir)/res >+ >+Index: gfx/src/ps/nsDeviceContextPS.cpp >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/ps/nsDeviceContextPS.cpp,v >+retrieving revision 1.65 >+diff -u -7 -p -r1.65 nsDeviceContextPS.cpp >+--- gfx/src/ps/nsDeviceContextPS.cpp 20 Feb 2004 17:29:31 -0000 1.65 >++++ gfx/src/ps/nsDeviceContextPS.cpp 17 Oct 2004 11:10:14 -0000 >+@@ -209,24 +209,35 @@ nsDeviceContextPS::InitDeviceContextPS(n >+ mParentDeviceContext = aParentContext; >+ >+ mPSFontGeneratorList = new nsHashtable(); >+ NS_ENSURE_TRUE(mPSFontGeneratorList, NS_ERROR_OUT_OF_MEMORY); >+ >+ nsresult rv; >+ nsCOMPtr<nsIPref> pref(do_GetService(NS_PREF_CONTRACTID, &rv)); >++#ifdef MOZ_ENABLE_XFT >++ if (NS_SUCCEEDED(rv)) { >++ rv = pref->GetBoolPref("font.FreeType2.printing", &mFTPEnable); >++ if (NS_FAILED(rv)) >++ mFTPEnable = PR_FALSE; >++ } >++#else >++ mFTPEnable = PR_FALSE; >++#ifdef MOZ_ENABLE_FREETYPE2 >+ if (NS_SUCCEEDED(rv)) { >+ rv = pref->GetBoolPref("font.FreeType2.enable", &mFTPEnable); >+ if (NS_FAILED(rv)) >+ mFTPEnable = PR_FALSE; >+ if (mFTPEnable) { >+ rv = pref->GetBoolPref("font.FreeType2.printing", &mFTPEnable); >+ if (NS_FAILED(rv)) >+ mFTPEnable = PR_FALSE; >+ } >+ } >++#endif >++#endif >+ >+ // the user's locale >+ nsCOMPtr<nsILanguageAtomService> langService; >+ langService = do_GetService(NS_LANGUAGEATOMSERVICE_CONTRACTID); >+ if (langService) { >+ langService->GetLocaleLanguageGroup(&gUsersLocale); >+ } >+@@ -431,15 +442,15 @@ GeneratePSFontCallback(nsHashKey *aKey, >+ */ >+ NS_IMETHODIMP nsDeviceContextPS::EndDocument(void) >+ { >+ PR_LOG(nsDeviceContextPSLM, PR_LOG_DEBUG, ("nsDeviceContextPS::EndDocument()\n")); >+ >+ NS_ENSURE_TRUE(mPSObj != nsnull, NS_ERROR_NULL_POINTER); >+ >+-#ifdef MOZ_ENABLE_FREETYPE2 >++#if defined(MOZ_ENABLE_FREETYPE2) || defined(MOZ_ENABLE_XFT) >+ // Before output Type8 font, check whether printer support CID font >+ if (mFTPEnable && mPSFontGeneratorList) >+ if (mPSFontGeneratorList->Count() > 0) >+ mPSObj->add_cid_check(); >+ #endif >+ >+ /* Core of TrueType printing: >+Index: gfx/src/ps/nsFontMetricsPS.cpp >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/ps/nsFontMetricsPS.cpp,v >+retrieving revision 1.42 >+diff -u -7 -p -r1.42 nsFontMetricsPS.cpp >+--- gfx/src/ps/nsFontMetricsPS.cpp 5 Feb 2004 01:57:05 -0000 1.42 >++++ gfx/src/ps/nsFontMetricsPS.cpp 17 Oct 2004 11:10:16 -0000 >+@@ -17,14 +17,17 @@ >+ * The Initial Developer of the Original Code is >+ * Netscape Communications Corporation. >+ * Portions created by the Initial Developer are Copyright (C) 1998 >+ * the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * Roland Mainz <roland.mainz@informatik.med.uni-giessen.de> >++ * Ervin Yan <Ervin.Yan@sun.com> >++ * Christopher Blizzard <blizzard@mozilla.org> >++ * Jungshik Shin <jshin@i18nl10n.com> >+ * >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+@@ -43,30 +46,39 @@ >+ #include "nsRenderingContextPS.h" >+ #include "nsIServiceManager.h" >+ #include "nsGfxCIID.h" >+ >+ #include "nsIPref.h" >+ #include "nsVoidArray.h" >+ #include "nsReadableUtils.h" >+-#ifdef MOZ_ENABLE_FREETYPE2 >++#if defined(MOZ_ENABLE_FREETYPE2) || defined(MOZ_ENABLE_XFT) >+ #include "nsType8.h" >+ #endif >+ #include "prlog.h" >+ >+ #include "nsArray.h" >+ >+ extern nsIAtom *gUsersLocale; >+ #define NS_IS_BOLD(weight) ((weight) > 400 ? 1 : 0) >+ >++#ifdef MOZ_ENABLE_XFT >++ >++#include "nsFontConfigUtils.h" >++ >++static nsFontPS* CreateFontPS(nsXftEntry*, const nsFont&, >++ nsFontMetricsPS*); >++ >++#else >+ #ifdef MOZ_ENABLE_FREETYPE2 >+ static nsFontPS* CreateFontPS(nsITrueTypeFontCatalogEntry*, const nsFont&, >+ nsFontMetricsPS*); >+ >+ static NS_DEFINE_CID(kFCSCID, NS_FONTCATALOGSERVICE_CID); >+ #endif >++#endif >+ >+ #ifdef PR_LOGGING >+ static PRLogModuleInfo *gFontMetricsPSM = PR_NewLogModule("FontMetricsPS"); >+ #endif >+ >+ /** --------------------------------------------------- >+ * See documentation in nsFontMetricsPS.h >+@@ -89,19 +101,28 @@ nsFontMetricsPS :: ~nsFontMetricsPS() >+ >+ if (mFontsPS) { >+ int i; >+ for (i=0; i<mFontsPS->Count(); i++) { >+ fontps *fontPS = (fontps *)mFontsPS->ElementAt(i); >+ if (!fontPS) >+ continue; >+- NS_IF_RELEASE(fontPS->entry); >+ if (fontPS->fontps) >+ delete fontPS->fontps; >++#ifdef MOZ_ENABLE_XFT >++ if (fontPS->entry) >++ delete fontPS->entry; >++ if (fontPS->charset) >++ FcCharSetDestroy(fontPS->charset); >++#else >++#ifdef MOZ_ENABLE_FREETYPE2 >++ NS_IF_RELEASE(fontPS->entry); >+ if (fontPS->ccmap) >+ FreeCCMap(fontPS->ccmap); >++#endif >++#endif >+ delete fontPS; >+ } >+ delete mFontsPS; >+ } >+ >+ if (mFontsAlreadyLoaded) { >+ delete mFontsAlreadyLoaded; >+@@ -123,14 +144,15 @@ NS_IMPL_ISUPPORTS1(nsFontMetricsPS, nsIF >+ NS_IMETHODIMP >+ nsFontMetricsPS :: Init(const nsFont& aFont, nsIAtom* aLangGroup, >+ nsIDeviceContext *aContext) >+ { >+ mLangGroup = aLangGroup; >+ >+ mFont = new nsFont(aFont); >++ >+ //don't addref this to avoid circular refs >+ mDeviceContext = (nsDeviceContextPS *)aContext; >+ >+ mFontsPS = new nsVoidArray(); >+ NS_ENSURE_TRUE(mFontsPS, NS_ERROR_OUT_OF_MEMORY); >+ mFontsAlreadyLoaded = new nsHashtable(); >+ NS_ENSURE_TRUE(mFontsAlreadyLoaded, NS_ERROR_OUT_OF_MEMORY); >+@@ -158,15 +180,15 @@ nsFontMetricsPS :: Destroy() >+ void >+ nsFontMetricsPS::RealizeFont() >+ { >+ if (mFont && mDeviceContext) { >+ float dev2app; >+ dev2app = mDeviceContext->DevUnitsToAppUnits(); >+ fontps *font = (fontps*)mFontsPS->ElementAt(0); >+-#ifdef MOZ_ENABLE_FREETYPE2 >++#if defined(MOZ_ENABLE_FREETYPE2) || defined(MOZ_ENABLE_XFT) >+ NS_ASSERTION(font && font->entry, "no font available"); >+ if (font && !font->fontps && font->entry) >+ font->fontps = CreateFontPS(font->entry, *mFont, this); >+ #endif >+ NS_ASSERTION(font && font->fontps, "no font available"); >+ if (font && font->fontps) >+ font->fontps->RealizeFont(this, dev2app); >+@@ -464,19 +486,23 @@ nsFontPS::FindFont(char aChar, const nsF >+ // nsFontPS >+ nsFontPS* >+ nsFontPS::FindFont(PRUnichar aChar, const nsFont& aFont, >+ nsFontMetricsPS* aFontMetrics) >+ { >+ nsFontPS* fontPS; >+ >+-#ifdef MOZ_ENABLE_FREETYPE2 >++#if defined(MOZ_ENABLE_FREETYPE2) || defined(MOZ_ENABLE_XFT) >+ nsDeviceContextPS* dc = aFontMetrics->GetDeviceContext(); >+ NS_ENSURE_TRUE(dc, nsnull); >+ if (dc->mFTPEnable) { >++#ifdef MOZ_ENABLE_XFT >++ fontPS = nsFontPSXft::FindFont(aChar, aFont, aFontMetrics); >++#else >+ fontPS = nsFontPSFreeType::FindFont(aChar, aFont, aFontMetrics); >++#endif >+ if (fontPS) >+ return fontPS; >+ } >+ #endif >+ >+ /* Find in afm font */ >+ if (aFontMetrics->GetFontsPS()->Count() > 0) { >+@@ -484,17 +510,23 @@ nsFontPS::FindFont(PRUnichar aChar, cons >+ NS_ENSURE_TRUE(fps, nsnull); >+ fontPS = fps->fontps; >+ } >+ else { >+ fontPS = nsFontPSAFM::FindFont(aFont, aFontMetrics); >+ fontps *fps = new fontps; >+ NS_ENSURE_TRUE(fps, nsnull); >+- fps->entry = nsnull; >+ fps->fontps = fontPS; >++#if defined(MOZ_ENABLE_XFT) || defined(MOZ_ENABLE_FREETYPE2) >++ fps->entry = nsnull; >++#ifdef MOZ_ENABLE_XFT >++ fps->charset = nsnull; >++#else >+ fps->ccmap = nsnull; >++#endif >++#endif >+ aFontMetrics->GetFontsPS()->AppendElement(fps); >+ } >+ return fontPS; >+ } >+ >+ nsFontPS::nsFontPS(const nsFont& aFont, nsFontMetricsPS* aFontMetrics) >+ { >+@@ -544,162 +576,926 @@ nsFontPSAFM::FindFont(const nsFont& aFon >+ } >+ >+ nsFontPSAFM::nsFontPSAFM(const nsFont& aFont, nsAFMObject* aAFMInfo, >+ PRInt16 fontIndex, nsFontMetricsPS* aFontMetrics) : >+ nsFontPS(aFont, aFontMetrics), mAFMInfo(aAFMInfo), mFontIndex(fontIndex) >+ { >+ if (!(mFont && mAFMInfo)) return; >+- mFamilyName.AssignWithConversion((char*)mAFMInfo->mPSFontInfo->mFamilyName); >++ AppendASCIItoUTF16(mAFMInfo->mPSFontInfo->mFamilyName, mFamilyName); >+ } >+ >+ nsFontPSAFM::~nsFontPSAFM() >+ { >+ if (mAFMInfo) { >+ delete mAFMInfo; >+ mAFMInfo = nsnull; >+ } >+ } >+ >+ nscoord >+ nsFontPSAFM::GetWidth(const char* aString, PRUint32 aLength) >+ { >+- nscoord width = 0; >+- if (mAFMInfo) { >+- mAFMInfo->GetStringWidth(aString, width, aLength); >+- } >+- return width; >++ nscoord width = 0; >++ if (mAFMInfo) { >++ mAFMInfo->GetStringWidth(aString, width, aLength); >++ } >++ return width; >++} >++ >++nscoord >++nsFontPSAFM::GetWidth(const PRUnichar* aString, PRUint32 aLength) >++{ >++ nscoord width = 0; >++ if (mAFMInfo) { >++ mAFMInfo->GetStringWidth(aString, width, aLength); >++ } >++ return width; >++} >++ >++nscoord >++nsFontPSAFM::DrawString(nsRenderingContextPS* aContext, >++ nscoord aX, nscoord aY, >++ const char* aString, PRUint32 aLength) >++{ >++ NS_ENSURE_TRUE(aContext, 0); >++ nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >++ NS_ENSURE_TRUE(psObj, 0); >++ >++ psObj->moveto(aX, aY); >++ psObj->show(aString, aLength, ""); >++ return GetWidth(aString, aLength); >++} >++ >++nscoord >++nsFontPSAFM::DrawString(nsRenderingContextPS* aContext, >++ nscoord aX, nscoord aY, >++ const PRUnichar* aString, PRUint32 aLength) >++{ >++ NS_ENSURE_TRUE(aContext, 0); >++ nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >++ NS_ENSURE_TRUE(psObj, 0); >++ >++ psObj->moveto(aX, aY); >++ psObj->show(aString, aLength, "", 0); >++ return GetWidth(aString, aLength); >++} >++ >++nsresult >++nsFontPSAFM::RealizeFont(nsFontMetricsPS* aFontMetrics, float dev2app) >++{ >++ NS_ENSURE_ARG_POINTER(aFontMetrics); >++ >++ float fontSize; >++ float offset; >++ >++ nscoord onePixel = NSToCoordRound(1 * dev2app); >++ >++ // convert the font size which is in twips to points >++ fontSize = mFont->size / TWIPS_PER_POINT_FLOAT; >++ >++ offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mXHeight) / 1000.0f; >++ nscoord xHeight = NSToCoordRound(offset); >++ aFontMetrics->SetXHeight(xHeight); >++ aFontMetrics->SetSuperscriptOffset(xHeight); >++ aFontMetrics->SetSubscriptOffset(xHeight); >++ aFontMetrics->SetStrikeout((nscoord)(xHeight / 2), onePixel); >++ >++ offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mUnderlinePosition) / 1000.0f; >++ aFontMetrics->SetUnderline(NSToCoordRound(offset), onePixel); >++ >++ nscoord size = NSToCoordRound(fontSize * dev2app); >++ aFontMetrics->SetHeight(size); >++ aFontMetrics->SetEmHeight(size); >++ aFontMetrics->SetMaxAdvance(size); >++ aFontMetrics->SetMaxHeight(size); >++ >++ offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mAscender) / 1000.0f; >++ nscoord ascent = NSToCoordRound(offset); >++ aFontMetrics->SetAscent(ascent); >++ aFontMetrics->SetEmAscent(ascent); >++ aFontMetrics->SetMaxAscent(ascent); >++ >++ offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mDescender) / 1000.0f; >++ nscoord descent = -(NSToCoordRound(offset)); >++ aFontMetrics->SetDescent(descent); >++ aFontMetrics->SetEmDescent(descent); >++ aFontMetrics->SetMaxDescent(descent); >++ >++ aFontMetrics->SetLeading(0); >++ >++ nscoord spaceWidth = GetWidth(" ", 1); >++ aFontMetrics->SetSpaceWidth(spaceWidth); >++ >++ nscoord aveCharWidth = GetWidth("x", 1); >++ aFontMetrics->SetAveCharWidth(aveCharWidth); >++ >++ return NS_OK; >++} >++ >++nsresult >++nsFontPSAFM::SetupFont(nsRenderingContextPS* aContext) >++{ >++ NS_ENSURE_TRUE(aContext && mFontMetrics, 0); >++ nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >++ NS_ENSURE_TRUE(psObj, 0); >++ >++ nscoord fontHeight = 0; >++ mFontMetrics->GetHeight(fontHeight); >++ >++ psObj->setscriptfont(mFontIndex, mFamilyName, >++ fontHeight, mFont->style, mFont->variant, >++ mFont->weight, mFont->decorations); >++ return NS_OK; >++} >++ >++#ifdef MOZ_MATHML >++nsresult >++nsFontPSAFM::GetBoundingMetrics(const char* aString, >++ PRUint32 aLength, >++ nsBoundingMetrics& aBoundingMetrics) >++{ >++ return NS_ERROR_NOT_IMPLEMENTED; >++} >++ >++nsresult >++nsFontPSAFM::GetBoundingMetrics(const PRUnichar* aString, >++ PRUint32 aLength, >++ nsBoundingMetrics& aBoundingMetrics) >++{ >++ return NS_ERROR_NOT_IMPLEMENTED; >++} >++#endif >++ >++#if defined(MOZ_ENABLE_FREETYPE2) || defined(MOZ_ENABLE_XFT) >++ >++#define WIDEN_8_TO_16_BUF_SIZE 1024 >++ >++#ifdef MOZ_ENABLE_XFT >++ >++nsXftEntry::nsXftEntry(FcPattern *aFontPattern) >++{ >++ mFace = nsnull; >++ mFaceIndex = 0; >++ >++ char *fcResult; >++ >++ if (FcPatternGetString(aFontPattern, FC_FILE, 0, (FcChar8 **) &fcResult) >++ == FcResultMatch) >++ mFontFileName = fcResult; >++ >++ if (FcPatternGetString(aFontPattern, FC_FAMILY, 0, (FcChar8 **) &fcResult) >++ == FcResultMatch) >++ mFamilyName = fcResult; >++ >++ if (FcPatternGetString(aFontPattern, FC_STYLE, 0, (FcChar8 **) &fcResult) >++ == FcResultMatch) >++ mStyleName = fcResult; >++} >++ >++ >++static nsFontPS* >++CreateFontPS(nsXftEntry *aEntry, const nsFont& aFont, >++ nsFontMetricsPS* aFontMetrics) >++{ >++ nsresult rv; >++ nsDeviceContextPS* dc = aFontMetrics->GetDeviceContext(); >++ NS_ENSURE_TRUE(dc, nsnull); >++ >++ nsCAutoString fileName(aEntry->mFontFileName); >++ nsCAutoString familyName(aEntry->mFamilyName); >++ nsCAutoString styleName(aEntry->mStyleName); >++ ToLowerCase(familyName); >++ ToLowerCase(styleName); >++ >++ nsCAutoString fontName; >++ fontName.Append(familyName); >++ fontName.Append("-"); >++ fontName.Append(styleName); >++ nsCStringKey key(fontName); >++ >++ nsHashtable *psFGList = dc->GetPSFontGeneratorList(); >++ NS_ENSURE_TRUE(psFGList, nsnull); >++ >++ nsPSFontGenerator* psFontGen = (nsPSFontGenerator*) psFGList->Get(&key); >++ if (!psFontGen) { >++ psFontGen = new nsXftType8Generator; >++ NS_ENSURE_TRUE(psFontGen, nsnull); >++ rv = ((nsXftType8Generator*)psFontGen)->Init(aEntry); >++ if (NS_FAILED(rv)) { >++ delete psFontGen; >++ return nsnull; >++ } >++ psFGList->Put(&key, (void *) psFontGen); >++ } >++ nsFontPSXft* font = new nsFontPSXft(aFont, aFontMetrics); >++ NS_ENSURE_TRUE(font, nsnull); >++ rv = font->Init(aEntry, psFontGen); >++ if (NS_FAILED(rv)) { >++ delete font; >++ return nsnull; >++ } >++ return font; >++} >++ >++/* static */ >++PRBool >++nsFontPSXft::CSSFontEnumCallback(const nsString& aFamily, PRBool aIsGeneric, >++ void* aFpi) >++{ >++ fontPSInfo *fpi = (fontPSInfo *)aFpi; >++ >++ // make sure it's an ascii name, if not then return and continue >++ // enumerating >++ if (!NS_IsASCIIFontName(aFamily)) >++ return PR_TRUE; >++ >++ NS_LossyConvertUTF16toASCII name(aFamily); >++ ToLowerCase(name); >++ fpi->mFontList.AppendCString(name); >++ fpi->mFontIsGeneric.AppendElement((void *)aIsGeneric); >++ if (aIsGeneric) { >++ fpi->mGenericFont = >++ fpi->mFontList.CStringAt(fpi->mFontList.Count() - 1); >++ return PR_FALSE; // stop processing >++ } >++ >++ return PR_TRUE; // keep processing >++} >++ >++nsFontPS* >++nsFontPSXft::FindFont(PRUnichar aChar, const nsFont& aFont, >++ nsFontMetricsPS* aFontMetrics) >++{ >++ PRBool inited = PR_FALSE; >++ nsCOMPtr<nsIAtom> langGroup; >++ fontPSInfo fpi; >++ fpi.fontps = aFontMetrics->GetFontsPS(); >++ int i = 0; >++ >++ while (1) { >++ // >++ // see if it is already in the list of fonts >++ // >++ for (; i<fpi.fontps->Count(); i++) { >++ fontps *fi = (fontps *)fpi.fontps->ElementAt(i); >++ if (!fi->entry || !fi->charset) { >++ NS_ASSERTION(fi->entry, "invalid entry"); >++ NS_ASSERTION(fi->charset, "invalid charset"); >++ continue; >++ } >++ if (FcCharSetHasChar(fi->charset, aChar)) { >++ if (!fi->fontps) { >++#ifdef PR_LOGGING >++ if (PR_LOG_TEST(gFontMetricsPSM, PR_LOG_DEBUG)) { >++ PR_LogPrint("CreateFontPS %s/%s\n", >++ fi->entry->mFamilyName.get(), fi->entry->mStyleName.get()); >++ } >++#endif >++ fi->fontps = CreateFontPS(fi->entry, aFont, aFontMetrics); >++ } >++ if (fi->fontps) >++ return fi->fontps; >++ } >++ } >++ >++ // if already get all matched fonts and not found suitable >++ // then return nsnull >++ if (fpi.fontps->Count() > 0) >++ return nsnull; >++ >++ // >++ // it is not already in the list of fonts >++ // so add more fonts to the list >++ // >++ if (inited) >++ return nsnull; >++ >++ inited = PR_TRUE; >++ >++ fpi.nsfont = &aFont; >++ fpi.alreadyLoaded = aFontMetrics->GetFontsAlreadyLoadedList(); >++ fpi.mGenericFont = nsnull; >++ >++ aFontMetrics->GetLangGroup(getter_AddRefs(langGroup)); >++ if (!langGroup) >++ langGroup = NS_NewAtom("x-western"); >++ >++ // enumerate over the font names passed in >++ aFont.EnumerateFamilies(nsFontPSXft::CSSFontEnumCallback, &fpi); >++ >++ nsCOMPtr<nsIPref> prefService; >++ prefService = do_GetService(NS_PREF_CONTRACTID); >++ if (!prefService) >++ return nsnull; >++ >++ nsXPIDLCString value; >++ nsCAutoString aDefaultFont; >++ >++ // Set up the default font name if it's not set >++ if (!fpi.mGenericFont) { >++ prefService->CopyCharPref("font.default", getter_Copies(value)); >++ >++ if (value.get()) >++ aDefaultFont = value.get(); >++ else >++ aDefaultFont = "serif"; >++ >++ fpi.mGenericFont = &aDefaultFont; >++ } >++ >++ // If pattern is null, set up the base bits of it so we can >++ // match. If we need to match later we don't have to set it up >++ // again. >++ FcPattern *pattern = nsnull; >++ >++ pattern = FcPatternCreate(); >++ if (!pattern) >++ return nsnull; >++ >++ // XXX need to add user defined family >++ >++ // Add CSS names - walk the list of fonts, adding the generic as >++ // the last font >++ for (int i=0; i < fpi.mFontList.Count(); ++i) { >++ // if this was a generic name, break out of the loop since we >++ // don't want to add it to the pattern yet >++ if (fpi.mFontIsGeneric[i]) >++ break;; >++ >++ nsCString *familyName = fpi.mFontList.CStringAt(i); >++ NS_AddFFRE(pattern, familyName, PR_FALSE); >++ } >++ >++ // Add the language group. Note that we do this before adding any >++ // generics. That's because the language is more important than >++ // any generic font. >++ NS_AddLangGroup(pattern, langGroup); >++ >++ // If there's a generic add a pref for the generic if there's one >++ // set. >++ if (fpi.mGenericFont && !aFont.systemFont) { >++ nsCAutoString name("font.name."); >++ name += fpi.mGenericFont->get(); >++ name += "."; >++ >++ nsAutoString langGroupStr; >++ langGroup->ToString(langGroupStr); >++ >++ LossyAppendUTF16toASCII(langGroupStr, name); >++ >++ nsCOMPtr<nsIPref> pref; >++ pref = do_GetService(NS_PREF_CONTRACTID); >++ if (pref) { >++ nsresult rv; >++ nsXPIDLCString value; >++ rv = pref->GetCharPref(name.get(), getter_Copies(value)); >++ >++ // we ignore prefs that have three hypens since they are X >++ // style prefs. >++ if (NS_FFRECountHyphens(value) < 3) { >++ nsCAutoString tmpstr(value); >++ >++ if (PR_LOG_TEST(gFontMetricsPSM, PR_LOG_DEBUG)) { >++ printf("\tadding generic font from preferences: %s\n", >++ tmpstr.get()); >++ } >++ >++ NS_AddFFRE(pattern, &tmpstr, PR_FALSE); >++ } >++ } >++ } >++ >++ // Add the generic if there is one. >++ if (fpi.mGenericFont && !aFont.systemFont) >++ NS_AddFFRE(pattern, fpi.mGenericFont, PR_FALSE); >++ >++ // Add the slant type >++ FcPatternAddInteger(pattern, FC_SLANT, NS_CalculateSlant(aFont.style)); >++ >++ // Add the weight >++ FcPatternAddInteger(pattern, FC_WEIGHT, NS_CalculateWeight(aFont.weight)); >++ >++ // Set up the default substitutions for this font >++ FcConfigSubstitute(0, pattern, FcMatchPattern); >++ FcDefaultSubstitute(pattern); >++ >++ FcResult result; >++ FcFontSet *set = FcFontSort(0, pattern, FcTrue, 0, &result); >++ if (!set) { >++ return nsnull; >++ } >++ >++ // Create a list of new font objects based on the fonts returned >++ // as part of the query >++ for (int i=0; i < set->nfont; ++i) { >++ FcBool fc_outline; >++ FcChar8 *fc_family; >++ FcChar8 *fc_style; >++ FcCharSet *fc_charset; >++ >++ // skip if the fonts is not outline font files. >++ result = FcPatternGetBool (set->fonts[i], FC_OUTLINE, 0, &fc_outline); >++ if (!fc_outline) >++ continue; >++ >++ result = FcPatternGetString (set->fonts[i], FC_FAMILY, 0, &fc_family); >++ if (result != FcResultMatch || fc_family == nsnull) >++ continue; >++ >++ result = FcPatternGetString (set->fonts[i], FC_STYLE, 0, &fc_style); >++ if (result != FcResultMatch || fc_style == nsnull) >++ continue; >++ >++ result = FcPatternGetCharSet(set->fonts[i], FC_CHARSET, 0, &fc_charset); >++ if (result != FcResultMatch || fc_charset == nsnull) >++ continue; >++ >++ nsXftEntry *xftEntry = new nsXftEntry(set->fonts[i]); >++ if (!xftEntry) >++ continue; >++ >++ fontps *fps = new fontps; >++ fps->entry = xftEntry; >++ fps->charset = fc_charset; >++ fps->fontps = nsnull; >++ fpi.fontps->AppendElement(fps); >++ } >++ >++ // we're done with the set now >++ FcFontSetDestroy(set); >++ >++ FcPatternDestroy(pattern); >++ } >++ >++ return nsnull; >++} >++ >++/*FT_CALLBACK_DEF*/ >++FT_Error >++nsXftFaceRequester(FTC_FaceID face_id, FT_Library lib, >++ FT_Pointer request_data, FT_Face* aFace) >++{ >++ nsXftEntry *faceID = (nsXftEntry *)face_id; >++ >++ FT_Error fterror = FT_New_Face(lib, faceID->mFontFileName.get(), >++ faceID->mFaceIndex, aFace); >++ if (fterror) >++ *aFace = nsnull; >++ return 0; >++} >++ >++nsFontPSXft::nsFontPSXft(const nsFont& aFont, >++ nsFontMetricsPS* aFontMetrics) >++ :nsFontPS(aFont, aFontMetrics) >++{ >++} >++ >++nsresult >++nsFontPSXft::Init(nsXftEntry* aEntry, >++ nsPSFontGenerator* aPSFontGen) >++{ >++ NS_ENSURE_TRUE(aEntry && aPSFontGen, NS_ERROR_FAILURE); >++ mEntry = aEntry; >++ mPSFontGenerator = aPSFontGen; >++ >++ float app2dev; >++ nsIDeviceContext* dc = mFontMetrics->GetDeviceContext(); >++ NS_ENSURE_TRUE(dc, NS_ERROR_NULL_POINTER); >++ app2dev = dc->AppUnitsToDevUnits(); >++ >++ mPixelSize = NSToIntRound(app2dev * mFont->size); >++ >++ mImageDesc.font.face_id = (void*)mEntry; >++ mImageDesc.font.pix_width = mPixelSize; >++ mImageDesc.font.pix_height = mPixelSize; >++ mImageDesc.image_type = 0; >++ >++ FT_Error fterror; >++ fterror = FT_Init_FreeType(&mFreeTypeLibrary); >++ if (fterror) { >++ NS_ASSERTION(!fterror, "failed to initialize FreeType library"); >++ mFreeTypeLibrary = nsnull; >++ return NS_ERROR_FAILURE; >++ } >++ fterror = FTC_Manager_New(mFreeTypeLibrary, 0, 0, 0, nsXftFaceRequester, >++ NULL, &mFTCacheManager); >++ NS_ASSERTION(!fterror, "failed to create FreeType Cache manager"); >++ if (fterror) >++ return NS_ERROR_FAILURE; >++ >++ fterror = FTC_Image_Cache_New(mFTCacheManager, &mImageCache); >++ NS_ASSERTION(!fterror, "failed to create FreeType image cache"); >++ if (fterror) >++ return NS_ERROR_FAILURE; >++ >++ return NS_OK; >++} >++ >++nsFontPSXft::~nsFontPSXft() >++{ >++ FTC_Manager_Done(mFTCacheManager); >++ >++ if (FT_Done_FreeType(mFreeTypeLibrary)) >++ return; >++ >++ mEntry = nsnull; >++} >++ >++FT_Face >++nsFontPSXft::getFTFace() >++{ >++ FT_Error error; >++ FT_Face face = mEntry->mFace; >++ >++ if (face) >++ return (face); >++ >++ error = FTC_Manager_Lookup_Size(mFTCacheManager, &mImageDesc.font, >++ &face, nsnull); >++ NS_ASSERTION(error == 0, "failed to get face/size"); >++ if (error) >++ return nsnull; >++ >++ mEntry->mFace = face; >++ return face; >++} >++ >++nscoord >++nsFontPSXft::GetWidth(const char* aString, PRUint32 aLength) >++{ >++ PRUnichar unichars[WIDEN_8_TO_16_BUF_SIZE]; >++ PRUint32 len, width = 0; >++ while ( aLength > 0 ) { >++ len = PR_MIN(aLength, WIDEN_8_TO_16_BUF_SIZE); >++ for (PRUint32 i=0; i < len; i++) { >++ unichars[i] = PRUnichar(PRUint8(aString[i])); >++ } >++ width += GetWidth(unichars, len); >++ aString += len; >++ aLength -= len; >++ } >++ return width; >++} >++ >++ >++nscoord >++nsFontPSXft::GetWidth(const PRUnichar* aString, PRUint32 aLength) >++{ >++ FT_UInt glyph_index; >++ FT_Glyph glyph; >++ double origin_x = 0; >++ >++ // get the face/size from the FreeType cache >++ FT_Face face = getFTFace(); >++ NS_ASSERTION(face, "failed to get face/size"); >++ if (!face) >++ return 0; >++ >++ for (PRUint32 i=0; i<aLength; i++) { >++ glyph_index = FT_Get_Char_Index((FT_Face)face, aString[i]); >++ FT_Error error = FTC_Image_Cache_Lookup(mImageCache, &mImageDesc, >++ glyph_index, &glyph); >++ if (error) { >++ origin_x += FT_REG_TO_16_16(face->size->metrics.x_ppem/2 + 2); >++ continue; >++ } >++ origin_x += glyph->advance.x; >++ } >++ >++ NS_ENSURE_TRUE(mFontMetrics, 0); >++ >++ nsDeviceContextPS* dc = mFontMetrics->GetDeviceContext(); >++ NS_ENSURE_TRUE(dc, 0); >++ >++ float dev2app; >++ dev2app = dc->DevUnitsToAppUnits(); >++ origin_x *= dev2app; >++ origin_x /= FT_REG_TO_16_16(1); >++ >++ return NSToCoordRound((nscoord)origin_x); >++} >++ >++nscoord >++nsFontPSXft::DrawString(nsRenderingContextPS* aContext, >++ nscoord aX, nscoord aY, >++ const char* aString, PRUint32 aLength) >++{ >++ NS_ENSURE_TRUE(aContext, 0); >++ nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >++ NS_ENSURE_TRUE(psObj, 0); >++ nscoord width = 0; >++ >++ psObj->moveto(aX, aY); >++ >++ PRUnichar unichars[WIDEN_8_TO_16_BUF_SIZE]; >++ PRUint32 len; >++ >++ while ( aLength > 0 ) { >++ len = PR_MIN(aLength, WIDEN_8_TO_16_BUF_SIZE); >++ for (PRUint32 i=0; i < len; i++) { >++ unichars[i] = PRUnichar(PRUint8(aString[i])); >++ } >++ psObj->show(unichars, len, "", 1); >++ mPSFontGenerator->AddToSubset(unichars, len); >++ width += GetWidth(unichars, len); >++ aString += len; >++ aLength -= len; >++ } >++ return width; >++} >++ >++nscoord >++nsFontPSXft::DrawString(nsRenderingContextPS* aContext, >++ nscoord aX, nscoord aY, >++ const PRUnichar* aString, PRUint32 aLength) >++{ >++ NS_ENSURE_TRUE(aContext, 0); >++ nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >++ NS_ENSURE_TRUE(psObj, 0); >++ >++ psObj->moveto(aX, aY); >++ psObj->show(aString, aLength, "", 1); >++ >++ mPSFontGenerator->AddToSubset(aString, aLength); >++ return GetWidth(aString, aLength); >++} >++ >++int >++nsFontPSXft::ascent() >++{ >++ FT_Face face = getFTFace(); >++ NS_ASSERTION(face, "failed to get face/size"); >++ NS_ENSURE_TRUE(face, 0); >++ return FT_DESIGN_UNITS_TO_PIXELS(face->ascender, face->size->metrics.y_scale); >++} >++ >++int >++nsFontPSXft::descent() >++{ >++ FT_Face face = getFTFace(); >++ NS_ASSERTION(face, "failed to get face/size"); >++ NS_ENSURE_TRUE(face, 0); >++ return FT_DESIGN_UNITS_TO_PIXELS(-face->descender, face->size->metrics.y_scale); >++} >++ >++int >++nsFontPSXft::max_ascent() >++{ >++ FT_Face face = getFTFace(); >++ NS_ASSERTION(face, "failed to get face/size"); >++ NS_ENSURE_TRUE(face, 0); >++ TT_OS2 *tt_os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2); >++ NS_ASSERTION(tt_os2, "unable to get OS2 table"); >++ if (tt_os2) >++ return FT_DESIGN_UNITS_TO_PIXELS(tt_os2->sTypoAscender, >++ face->size->metrics.y_scale); >++ else >++ return FT_DESIGN_UNITS_TO_PIXELS(face->bbox.yMax, >++ face->size->metrics.y_scale); >++} >++ >++int >++nsFontPSXft::max_descent() >++{ >++ FT_Face face = getFTFace(); >++ NS_ASSERTION(face, "failed to get face/size"); >++ NS_ENSURE_TRUE(face, 0); >++ TT_OS2 *tt_os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2); >++ NS_ASSERTION(tt_os2, "unable to get OS2 table"); >++ if (tt_os2) >++ return FT_DESIGN_UNITS_TO_PIXELS(-tt_os2->sTypoDescender, >++ face->size->metrics.y_scale); >++ else >++ return FT_DESIGN_UNITS_TO_PIXELS(-face->bbox.yMin, >++ face->size->metrics.y_scale); >++} >++ >++int >++nsFontPSXft::max_width() >++{ >++ FT_Face face = getFTFace(); >++ NS_ASSERTION(face, "failed to get face/size"); >++ NS_ENSURE_TRUE(face, 0); >++ return FT_DESIGN_UNITS_TO_PIXELS(face->max_advance_width, >++ face->size->metrics.x_scale); >++} >++ >++PRBool >++nsFontPSXft::getXHeight(unsigned long &aVal) >++{ >++ FT_Face face = getFTFace(); >++ NS_ASSERTION(face, "failed to get face/size"); >++ if (!face || !aVal) >++ return PR_FALSE; >++ aVal = FT_DESIGN_UNITS_TO_PIXELS(face->height, face->size->metrics.y_scale); >++ >++ return PR_TRUE; >++} >++ >++PRBool >++nsFontPSXft::underlinePosition(long &aVal) >++{ >++ FT_Face face = getFTFace(); >++ NS_ASSERTION(face, "failed to get face/size"); >++ if (!face) >++ return PR_FALSE; >++ aVal = FT_DESIGN_UNITS_TO_PIXELS(-face->underline_position, >++ face->size->metrics.y_scale); >++ return PR_TRUE; >+ } >+ >+-nscoord >+-nsFontPSAFM::GetWidth(const PRUnichar* aString, PRUint32 aLength) >++PRBool >++nsFontPSXft::underline_thickness(unsigned long &aVal) >+ { >+- nscoord width = 0; >+- if (mAFMInfo) { >+- mAFMInfo->GetStringWidth(aString, width, aLength); >+- } >+- return width; >++ FT_Face face = getFTFace(); >++ NS_ASSERTION(face, "failed to get face/size"); >++ if (!face) >++ return PR_FALSE; >++ aVal = FT_DESIGN_UNITS_TO_PIXELS(face->underline_thickness, >++ face->size->metrics.x_scale); >++ return PR_TRUE; >+ } >+ >+-nscoord >+-nsFontPSAFM::DrawString(nsRenderingContextPS* aContext, >+- nscoord aX, nscoord aY, >+- const char* aString, PRUint32 aLength) >++PRBool >++nsFontPSXft::superscript_y(long &aVal) >+ { >+- NS_ENSURE_TRUE(aContext, 0); >+- nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >+- NS_ENSURE_TRUE(psObj, 0); >++ aVal = 0; >++ FT_Face face = getFTFace(); >++ NS_ASSERTION(face, "failed to get face/size"); >++ if (!face) >++ return PR_FALSE; >+ >+- psObj->moveto(aX, aY); >+- psObj->show(aString, aLength, ""); >+- return GetWidth(aString, aLength); >++ TT_OS2 *tt_os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2); >++ NS_ASSERTION(tt_os2, "unable to get OS2 table"); >++ if (!tt_os2) >++ return PR_FALSE; >++ >++ aVal = FT_DESIGN_UNITS_TO_PIXELS(tt_os2->ySuperscriptYOffset, >++ face->size->metrics.y_scale); >++ return PR_TRUE; >+ } >+ >+-nscoord >+-nsFontPSAFM::DrawString(nsRenderingContextPS* aContext, >+- nscoord aX, nscoord aY, >+- const PRUnichar* aString, PRUint32 aLength) >++PRBool >++nsFontPSXft::subscript_y(long &aVal) >+ { >+- NS_ENSURE_TRUE(aContext, 0); >+- nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >+- NS_ENSURE_TRUE(psObj, 0); >++ aVal = 0; >++ FT_Face face = getFTFace(); >++ NS_ASSERTION(face, "failed to get face/size"); >++ if (!face) >++ return PR_FALSE; >+ >+- psObj->moveto(aX, aY); >+- psObj->show(aString, aLength, "", 0); >+- return GetWidth(aString, aLength); >++ TT_OS2 *tt_os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2); >++ NS_ASSERTION(tt_os2, "unable to get OS2 table"); >++ if (!tt_os2) >++ return PR_FALSE; >++ >++ aVal = FT_DESIGN_UNITS_TO_PIXELS(tt_os2->ySubscriptYOffset, >++ face->size->metrics.y_scale); >++ >++ // some fonts have the sign wrong. it should be always positive. >++ aVal = (aVal < 0) ? -aVal : aVal; >++ return PR_TRUE; >+ } >+ >+ nsresult >+-nsFontPSAFM::RealizeFont(nsFontMetricsPS* aFontMetrics, float dev2app) >++nsFontPSXft::RealizeFont(nsFontMetricsPS* aFontMetrics, float dev2app) >+ { >+- NS_ENSURE_ARG_POINTER(aFontMetrics); >+- >+- float fontSize; >+- float offset; >++ >++ nscoord leading, emHeight, emAscent, emDescent; >++ nscoord maxHeight, maxAscent, maxDescent, maxAdvance; >++ nscoord xHeight, spaceWidth, aveCharWidth; >++ nscoord underlineOffset, underlineSize, superscriptOffset, subscriptOffset; >++ nscoord strikeoutOffset, strikeoutSize; >+ >+- nscoord onePixel = NSToCoordRound(1 * dev2app); >++ int lineSpacing = ascent() + descent(); >++ if (lineSpacing > mPixelSize) { >++ leading = nscoord((lineSpacing - mPixelSize) * dev2app); >++ } >++ else { >++ leading = 0; >++ } >++ emHeight = PR_MAX(1, nscoord(mPixelSize * dev2app)); >++ emAscent = nscoord(ascent() * mPixelSize * dev2app / lineSpacing); >++ emDescent = emHeight - emAscent; >+ >+- // convert the font size which is in twips to points >+- fontSize = mFont->size / TWIPS_PER_POINT_FLOAT; >++ maxHeight = nscoord((max_ascent() + max_descent()) * dev2app); >++ maxAscent = nscoord(max_ascent() * dev2app) ; >++ maxDescent = nscoord(max_descent() * dev2app); >++ maxAdvance = nscoord(max_width() * dev2app); >+ >+- offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mXHeight) / 1000.0f; >+- nscoord xHeight = NSToCoordRound(offset); >+- aFontMetrics->SetXHeight(xHeight); >+- aFontMetrics->SetSuperscriptOffset(xHeight); >+- aFontMetrics->SetSubscriptOffset(xHeight); >+- aFontMetrics->SetStrikeout((nscoord)(xHeight / 2), onePixel); >++ // 56% of ascent, best guess for non-true type >++ xHeight = NSToCoordRound((float)ascent()* dev2app * 0.56f); >+ >+- offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mUnderlinePosition) / 1000.0f; >+- aFontMetrics->SetUnderline(NSToCoordRound(offset), onePixel); >++ PRUnichar space = (PRUnichar)' '; >++ spaceWidth = NSToCoordRound(GetWidth(&space, 1)); >++ PRUnichar averageX = (PRUnichar)'x'; >++ aveCharWidth = NSToCoordRound(GetWidth(&averageX, 1)); >++ >++ unsigned long pr = 0; >++ if (getXHeight(pr)) { >++ xHeight = (nscoord(pr * dev2app)); >++ } >+ >+- nscoord size = NSToCoordRound(fontSize * dev2app); >+- aFontMetrics->SetHeight(size); >+- aFontMetrics->SetEmHeight(size); >+- aFontMetrics->SetMaxAdvance(size); >+- aFontMetrics->SetMaxHeight(size); >++ float height; >++ long val; >++ >++ height = ascent() + descent(); >++ underlineOffset = -NSToIntRound( >++ PR_MAX (1, floor (0.1 * height + 0.5)) * dev2app); >+ >+- offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mAscender) / 1000.0f; >+- nscoord ascent = NSToCoordRound(offset); >+- aFontMetrics->SetAscent(ascent); >+- aFontMetrics->SetEmAscent(ascent); >+- aFontMetrics->SetMaxAscent(ascent); >++ if (underline_thickness(pr)) { >++ /* this will only be provided from adobe .afm fonts */ >++ underlineSize = nscoord(PR_MAX(dev2app, NSToIntRound(pr * dev2app))); >++ } >++ else { >++ height = ascent() + descent(); >++ underlineSize = NSToIntRound( >++ PR_MAX(1, floor (0.05 * height + 0.5)) * dev2app); >++ } >+ >+- offset = NSFloatPointsToTwips(fontSize * mAFMInfo->mPSFontInfo->mDescender) / 1000.0f; >+- nscoord descent = -(NSToCoordRound(offset)); >+- aFontMetrics->SetDescent(descent); >+- aFontMetrics->SetEmDescent(descent); >+- aFontMetrics->SetMaxDescent(descent); >++ if (superscript_y(val)) { >++ superscriptOffset = nscoord(PR_MAX(dev2app, NSToIntRound(val * dev2app))); >++ } >++ else { >++ superscriptOffset = xHeight; >++ } >+ >+- aFontMetrics->SetLeading(0); >++ if (subscript_y(val)) { >++ subscriptOffset = nscoord(PR_MAX(dev2app, NSToIntRound(val * dev2app))); >++ } >++ else { >++ subscriptOffset = xHeight; >++ } >+ >+- nscoord spaceWidth = GetWidth(" ", 1); >++ /* need better way to calculate this */ >++ strikeoutOffset = NSToCoordRound(xHeight / 2.0); >++ strikeoutSize = underlineSize; >++ >++ // TODO: leading never used, does it equal to "Height"? >++ aFontMetrics->SetHeight(emHeight); >++ aFontMetrics->SetEmHeight(emHeight); >++ aFontMetrics->SetEmAscent(emAscent); >++ aFontMetrics->SetEmDescent(emDescent); >++ aFontMetrics->SetMaxHeight(maxHeight); >++ aFontMetrics->SetMaxAscent(maxAscent); >++ aFontMetrics->SetMaxDescent(maxDescent); >++ aFontMetrics->SetMaxAdvance(maxAdvance); >++ aFontMetrics->SetXHeight(xHeight); >+ aFontMetrics->SetSpaceWidth(spaceWidth); >+- >+- nscoord aveCharWidth = GetWidth("x", 1); >+ aFontMetrics->SetAveCharWidth(aveCharWidth); >++ aFontMetrics->SetUnderline(underlineOffset, underlineSize); >++ aFontMetrics->SetSuperscriptOffset(superscriptOffset); >++ aFontMetrics->SetSubscriptOffset(subscriptOffset); >++ aFontMetrics->SetStrikeout(strikeoutOffset, strikeoutSize); >+ >+ return NS_OK; >+ } >+ >+ nsresult >+-nsFontPSAFM::SetupFont(nsRenderingContextPS* aContext) >++nsFontPSXft::SetupFont(nsRenderingContextPS* aContext) >+ { >+- NS_ENSURE_TRUE(aContext && mFontMetrics, 0); >++ NS_ENSURE_TRUE(aContext, NS_ERROR_FAILURE); >+ nsPostScriptObj* psObj = aContext->GetPostScriptObj(); >+- NS_ENSURE_TRUE(psObj, 0); >++ NS_ENSURE_TRUE(psObj, NS_ERROR_FAILURE); >+ >+ nscoord fontHeight = 0; >+ mFontMetrics->GetHeight(fontHeight); >+ >+- psObj->setscriptfont(mFontIndex, mFamilyName, >+- fontHeight, mFont->style, mFont->variant, >+- mFont->weight, mFont->decorations); >++ nsCString fontName; >++ int wmode = 0; >++ FT_Face face = getFTFace(); >++ NS_ENSURE_TRUE(face, NS_ERROR_NULL_POINTER); >++ char *cidFontName = FT2ToType8CidFontName(face, wmode); >++ NS_ENSURE_TRUE(cidFontName, NS_ERROR_FAILURE); >++ fontName.Assign(cidFontName); >++ psObj->setfont(fontName, fontHeight); >++ PR_Free(cidFontName); >++ >+ return NS_OK; >+ } >+ >+ #ifdef MOZ_MATHML >+ nsresult >+-nsFontPSAFM::GetBoundingMetrics(const char* aString, >+- PRUint32 aLength, >+- nsBoundingMetrics& aBoundingMetrics) >++nsFontPSXft::GetBoundingMetrics(const char* aString, >++ PRUint32 aLength, >++ nsBoundingMetrics& aBoundingMetrics) >+ { >+ return NS_ERROR_NOT_IMPLEMENTED; >+ } >+ >+ nsresult >+-nsFontPSAFM::GetBoundingMetrics(const PRUnichar* aString, >+- PRUint32 aLength, >+- nsBoundingMetrics& aBoundingMetrics) >++nsFontPSXft::GetBoundingMetrics(const PRUnichar* aString, >++ PRUint32 aLength, >++ nsBoundingMetrics& aBoundingMetrics) >+ { >+ return NS_ERROR_NOT_IMPLEMENTED; >+ } >+-#endif >+- >+-#ifdef MOZ_ENABLE_FREETYPE2 >++#endif //MOZ_MATHML >+ >+-#define WIDEN_8_TO_16_BUF_SIZE 1024 >++#else >+ >+ PRBool >+ nsFontPSFreeType::CSSFontEnumCallback(const nsString& aFamily, PRBool aGeneric, >+ void* aFpi) >+ { >+ fontPSInfo* fpi = (fontPSInfo*)aFpi; >+ nsCAutoString familyname; >+@@ -709,15 +1505,15 @@ nsFontPSFreeType::CSSFontEnumCallback(co >+ return PR_TRUE; // keep trying >+ } >+ nsXPIDLCString value; >+ nsresult rv; >+ nsCOMPtr<nsIPref> pref(do_GetService(NS_PREF_CONTRACTID, &rv)); >+ NS_ENSURE_SUCCESS(rv, PR_TRUE); // keep trying >+ nsCAutoString name("font.name."); >+- name.AppendWithConversion(aFamily.get()); >++ LossyAppendUTF16toASCII(aFamily, name); >+ name.Append(char('.')); >+ name.Append(fpi->lang); >+ pref->CopyCharPref(name.get(), getter_Copies(value)); >+ if (!value.get()) >+ return PR_TRUE; // keep trying >+ // strip down to just the family name >+ PRInt32 startFamily = value.FindChar('-') + 1; >+@@ -730,15 +1526,15 @@ nsFontPSFreeType::CSSFontEnumCallback(co >+ else // FFRE >+ familyname.Append(Substring(value, startFamily, endFamily - startFamily)); >+ } >+ PR_LOG(gFontMetricsPSM, PR_LOG_DEBUG, >+ ("generic font \"%s\" -> \"%s\"\n", name.get(), familyname.get())); >+ } >+ else >+- familyname.AppendWithConversion(aFamily); >++ LossyAppendUTF16toASCII(aFamily, familyname); >+ >+ AddFontEntries(familyname, fpi->lang, fpi->weight, >+ nsIFontCatalogService::kFCWidthAny, fpi->slant, >+ nsIFontCatalogService::kFCSpacingAny, fpi); >+ >+ return PR_TRUE; >+ } >+@@ -1556,14 +2352,15 @@ nsFontPSFreeType::GetBoundingMetrics(con >+ nsBoundingMetrics& aBoundingMetrics) >+ { >+ return NS_ERROR_NOT_IMPLEMENTED; >+ } >+ #endif //MOZ_MATHML >+ >+ #endif //MOZ_ENABLE_FREETYPE2 >++#endif //MOZ_ENABLE_XFT >+ >+ // Implementation of nsPSFontGenerator >+ nsPSFontGenerator::nsPSFontGenerator() >+ { >+ } >+ >+ nsPSFontGenerator::~nsPSFontGenerator() >+@@ -1589,15 +2386,77 @@ void nsPSFontGenerator::AddToSubset(cons >+ for (PRUint32 i=0; i < aLength; i++) { >+ unichar = (PRUnichar)((unsigned char)aString[i]); >+ if (mSubset.FindChar(unichar) == -1 ) >+ mSubset.Append(unichar); >+ } >+ } >+ >++#ifdef MOZ_ENABLE_XFT >++nsXftType8Generator::nsXftType8Generator() >++{ >++} >++ >++nsresult >++nsXftType8Generator::Init(nsXftEntry* aEntry) >++{ >++ NS_ENSURE_TRUE(aEntry, NS_ERROR_FAILURE); >++ mEntry = aEntry; >++ >++ FT_Error error = FT_Init_FreeType(&mFreeTypeLibrary); >++ NS_ASSERTION(!error, "failed to initialize FreeType library"); >++ if (error) { >++ mFreeTypeLibrary = nsnull; >++ return NS_ERROR_FAILURE; >++ } >++ error = FTC_Manager_New(mFreeTypeLibrary, 0, 0, 0, nsXftFaceRequester, >++ NULL, &mFTCacheManager); >++ NS_ASSERTION(!error, "failed to create FreeType Cache manager"); >++ if (error) >++ return NS_ERROR_FAILURE; >++ >++ return NS_OK; >++} >++ >++nsXftType8Generator::~nsXftType8Generator() >++{ >++ FTC_Manager_Done(mFTCacheManager); >++ >++ if (FT_Done_FreeType(mFreeTypeLibrary)) >++ return; >++ >++ mEntry = nsnull; >++} >++ >++void nsXftType8Generator::GeneratePSFont(FILE* aFile) >++{ >++ FT_Error error; >++ FT_Face face = mEntry->mFace; >++ >++ if (face == nsnull) { >++ mImageDesc.font.face_id = (void*)mEntry; >++ mImageDesc.font.pix_width = 16; >++ mImageDesc.font.pix_height = 16; >++ mImageDesc.image_type = 0; >++ error = FTC_Manager_Lookup_Size(mFTCacheManager, &mImageDesc.font, >++ &face, nsnull); >++ if (error) >++ return; >++ } >++ >++ if (face == nsnull) >++ return; >++ >++ int wmode = 0; >++ if (!mSubset.IsEmpty()) >++ FT2SubsetToType8(face, mSubset.get(), mSubset.Length(), wmode, aFile); >++} >++ >++#else >+ #ifdef MOZ_ENABLE_FREETYPE2 >++ >+ nsFT2Type8Generator::nsFT2Type8Generator() >+ { >+ } >+ >+ nsresult >+ nsFT2Type8Generator::Init(nsITrueTypeFontCatalogEntry* aEntry) >+ { >+@@ -1635,9 +2494,10 @@ void nsFT2Type8Generator::GeneratePSFont >+ if (NS_FAILED(rv)) >+ return; >+ >+ int wmode = 0; >+ if (!mSubset.IsEmpty()) >+ FT2SubsetToType8(face, mSubset.get(), mSubset.Length(), wmode, aFile); >+ } >+-#endif //MOZ_ENABLE_FREETYPE2 >+ >++#endif //MOZ_ENABLE_FREETYPE2 >++#endif //MOZ_ENABLE_XFT >+Index: gfx/src/ps/nsFontMetricsPS.h >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/ps/nsFontMetricsPS.h,v >+retrieving revision 1.24 >+diff -u -7 -p -r1.24 nsFontMetricsPS.h >+--- gfx/src/ps/nsFontMetricsPS.h 22 Apr 2003 16:25:09 -0000 1.24 >++++ gfx/src/ps/nsFontMetricsPS.h 17 Oct 2004 11:10:19 -0000 >+@@ -47,15 +47,28 @@ >+ #include "nsIAtom.h" >+ #include "nsUnitConversion.h" >+ #include "nsIDeviceContext.h" >+ #include "nsCOMPtr.h" >+ #include "nsCRT.h" >+ #include "nsCompressedCharMap.h" >+ #include "nsPostScriptObj.h" >++#ifdef MOZ_ENABLE_XFT >++#include <ft2build.h> >++#include FT_FREETYPE_H >++#include FT_GLYPH_H >++#include FT_CACHE_H >++#include FT_CACHE_IMAGE_H >++#include FT_OUTLINE_H >++#include FT_OUTLINE_H >++#include FT_TRUETYPE_TABLES_H >++#else >++#ifdef MOZ_ENABLE_FREETYPE2 >+ #include "nsIFontCatalogService.h" >++#endif >++#endif >+ #include "nsVoidArray.h" >+ #include "nsHashtable.h" >+ >+ class nsPSFontGenerator; >+ class nsDeviceContextPS; >+ class nsRenderingContextPS; >+ class nsFontPS; >+@@ -247,24 +260,121 @@ public: >+ #endif >+ >+ nsAFMObject* mAFMInfo; >+ PRInt16 mFontIndex; >+ nsString mFamilyName; >+ }; >+ >++ >++#ifdef MOZ_ENABLE_XFT >++ >++#include <X11/Xft/Xft.h> >++ >++class nsXftEntry >++{ >++public: >++ nsXftEntry(FcPattern *aFontPattern); >++ ~nsXftEntry() {}; >++ >++ FT_Face mFace; >++ int mFaceIndex; >++ nsCString mFontFileName; >++ nsCString mFamilyName; >++ nsCString mStyleName; >++ >++protected: >++ nsXftEntry() {}; >++}; >++ >++struct fontps { >++ nsXftEntry *entry; >++ nsFontPS *fontps; >++ FcCharSet *charset; >++}; >++ >++struct fontPSInfo { >++ nsVoidArray *fontps; >++ const nsFont* nsfont; >++ nsCAutoString lang; >++ nsHashtable *alreadyLoaded; >++ nsCStringArray mFontList; >++ nsAutoVoidArray mFontIsGeneric; >++ nsCString *mGenericFont; >++}; >++ >++class nsFontPSXft : public nsFontPS >++{ >++public: >++ static nsFontPS* FindFont(PRUnichar aChar, const nsFont& aFont, >++ nsFontMetricsPS* aFontMetrics); >++ nsresult Init(nsXftEntry* aEntry, >++ nsPSFontGenerator* aPSFontGen); >++ static PRBool CSSFontEnumCallback(const nsString& aFamily, PRBool aGeneric, >++ void* aFpi); >++ >++ nsFontPSXft(const nsFont& aFont, nsFontMetricsPS* aFontMetrics); >++ virtual ~nsFontPSXft(); >++ NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW >++ >++ nscoord GetWidth(const char* aString, PRUint32 aLength); >++ nscoord GetWidth(const PRUnichar* aString, PRUint32 aLength); >++ nscoord DrawString(nsRenderingContextPS* aContext, >++ nscoord aX, nscoord aY, >++ const char* aString, PRUint32 aLength); >++ nscoord DrawString(nsRenderingContextPS* aContext, >++ nscoord aX, nscoord aY, >++ const PRUnichar* aString, PRUint32 aLength); >++ nsresult RealizeFont(nsFontMetricsPS* aFontMetrics, float dev2app); >++ nsresult SetupFont(nsRenderingContextPS* aContext); >++ >++#ifdef MOZ_MATHML >++ nsresult >++ GetBoundingMetrics(const char* aString, >++ PRUint32 aLength, >++ nsBoundingMetrics& aBoundingMetrics); >++ nsresult >++ GetBoundingMetrics(const PRUnichar* aString, >++ PRUint32 aLength, >++ nsBoundingMetrics& aBoundingMetrics); >++#endif >++ >++ nsXftEntry *mEntry; >++ FT_Face getFTFace(); >++ >++protected: >++ PRUint16 mPixelSize; >++ FTC_Image_Desc mImageDesc; >++ FT_Library mFreeTypeLibrary; >++ FTC_Manager mFTCacheManager; >++ FTC_Image_Cache mImageCache; >++ >++ int ascent(); >++ int descent(); >++ PRBool getXHeight(unsigned long &aVal); >++ int max_ascent(); >++ int max_descent(); >++ int max_width(); >++ PRBool superscript_y(long &aVal); >++ PRBool subscript_y(long &aVal); >++ PRBool underlinePosition(long &aVal); >++ PRBool underline_thickness(unsigned long &aVal); >++ nsPSFontGenerator* mPSFontGenerator; >++}; >++ >++#else >++ >++#ifdef MOZ_ENABLE_FREETYPE2 >++#include "nsIFreeType2.h" >++ >+ typedef struct { >+ nsITrueTypeFontCatalogEntry *entry; >+ nsFontPS *fontps; >+ unsigned short *ccmap; >+ } fontps; >+ >+-#ifdef MOZ_ENABLE_FREETYPE2 >+- >+-#include "nsIFreeType2.h" >+- >+ typedef struct { >+ nsVoidArray *fontps; >+ const nsFont* nsfont; >+ nsCAutoString lang; >+ nsHashtable *alreadyLoaded; >+ PRUint16 slant; >+ PRUint16 weight; >+@@ -334,38 +444,61 @@ protected: >+ PRBool superscript_y(long &aVal); >+ PRBool subscript_y(long &aVal); >+ PRBool underlinePosition(long &aVal); >+ PRBool underline_thickness(unsigned long &aVal); >+ nsPSFontGenerator* mPSFontGenerator; >+ }; >+ >+-#endif >++#else // !FREETYPE2 && !XFT >++typedef struct { >++ nsFontPS *fontps; >++} fontps; >++#endif // MOZ_ENABLE_FREETYPE2 >++#endif // MOZ_ENABLE_XFT >+ >+ class nsPSFontGenerator { >+ public: >+ nsPSFontGenerator(); >+ virtual ~nsPSFontGenerator(); >+ virtual void GeneratePSFont(FILE* aFile); >+ void AddToSubset(const PRUnichar* aString, PRUint32 aLength); >+ void AddToSubset(const char* aString, PRUint32 aLength); >+ >+ protected: >+ nsString mSubset; >+ }; >+ >++ >++#ifdef MOZ_ENABLE_XFT >++ >++class nsXftType8Generator : public nsPSFontGenerator { >++public: >++ nsXftType8Generator(); >++ ~nsXftType8Generator(); >++ nsresult Init(nsXftEntry* aFce); >++ void GeneratePSFont(FILE* aFile); >++ >++protected: >++ nsXftEntry *mEntry; >++ FTC_Image_Desc mImageDesc; >++ FT_Library mFreeTypeLibrary; >++ FTC_Manager mFTCacheManager; >++}; >++#else >+ #ifdef MOZ_ENABLE_FREETYPE2 >+ class nsFT2Type8Generator : public nsPSFontGenerator { >+ public: >+ nsFT2Type8Generator(); >+ ~nsFT2Type8Generator(); >+ nsresult Init(nsITrueTypeFontCatalogEntry* aFce); >+ void GeneratePSFont(FILE* aFile); >+ >+ protected: >+ nsCOMPtr<nsITrueTypeFontCatalogEntry> mEntry; >+ nsCOMPtr<nsIFreeType2> mFt2; >+ FTC_Image_Desc mImageDesc; >+ }; >+-#endif >++#endif // MOZ_ENABLE_FREETYPE2 >++#endif // MOZ_ENABLE_XFT >+ >+ #endif >+ >+Index: gfx/src/ps/nsType1.cpp >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/ps/nsType1.cpp,v >+retrieving revision 1.1 >+diff -u -7 -p -r1.1 nsType1.cpp >+--- gfx/src/ps/nsType1.cpp 11 Dec 2002 06:24:47 -0000 1.1 >++++ gfx/src/ps/nsType1.cpp 17 Oct 2004 11:10:19 -0000 >+@@ -67,15 +67,17 @@ >+ >+ #include "nsType1.h" >+ >+ static const PRUint16 type1_encryption_c1 = TYPE1_ENCRYPTION_C1; >+ static const PRUint16 type1_encryption_c2 = TYPE1_ENCRYPTION_C2; >+ >+ typedef struct { >++#ifndef MOZ_ENABLE_XFT >+ nsIFreeType2 *ft2; >++#endif >+ FT_Face face; >+ int elm_cnt; >+ int len; >+ double cur_x; >+ double cur_y; >+ unsigned char *buf; >+ int wmode; >+@@ -177,25 +179,32 @@ sideWidthAndBearing(FT_Vector *aEndPt, F >+ { >+ int aw = 0; >+ int ah = 0; >+ FT_UShort upm = aFti->face->units_per_EM; >+ FT_GlyphSlot slot; >+ FT_Glyph glyph; >+ FT_BBox bbox; >+- nsresult rv; >+ >+ slot = aFti->face->glyph; >+ >+- rv = aFti->ft2->GetGlyph(slot, &glyph); >++#ifdef MOZ_ENABLE_XFT >++ FT_Error error = FT_Get_Glyph(slot, &glyph); >++ if (error) { >++ NS_ERROR("sideWidthAndBearing failed to get glyph"); >++ return PR_FALSE; >++ } >++ FT_Glyph_Get_CBox(glyph, ft_glyph_bbox_unscaled, &bbox); >++#else >++ nsresult rv = aFti->ft2->GetGlyph(slot, &glyph); >+ if (NS_FAILED(rv)) { >+ NS_ERROR("sideWidthAndBearing failed to get glyph"); >+ return PR_FALSE; >+ } >+ aFti->ft2->GlyphGetCBox(glyph, ft_glyph_bbox_unscaled, &bbox); >+- >++#endif >+ >+ if (aFti->wmode == 0) >+ aw = toCS(upm, slot->metrics.horiAdvance); >+ else >+ aw = -toCS(upm, slot->metrics.vertAdvance); >+ >+ if (aEndPt->y == 0) { >+@@ -367,52 +376,73 @@ static FT_Outline_Funcs ft_outline_funcs >+ conicto, >+ cubicto, >+ 0, >+ 0 >+ }; >+ >+ FT_Error >++#ifdef MOZ_ENABLE_XFT >++FT2GlyphToType1CharString(FT_Face aFace, PRUint32 aGlyphID, >++ int aWmode, int aLenIV, unsigned char *aBuf) >++#else >+ FT2GlyphToType1CharString(nsIFreeType2 *aFt2, FT_Face aFace, PRUint32 aGlyphID, >+ int aWmode, int aLenIV, unsigned char *aBuf) >++#endif >+ { >+ int j; >+ FT_Int32 flags = FT_LOAD_NO_BITMAP | FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING; >+ FT_GlyphSlot slot; >+ unsigned char *start = aBuf; >+ FT2PT1_info fti; >+- nsresult rv; >+ >+- rv = aFt2->LoadGlyph(aFace, aGlyphID, flags); >++#ifdef MOZ_ENABLE_XFT >++ FT_Error error = FT_Load_Glyph(aFace, aGlyphID, flags); >++ if (error) { >++ NS_ERROR("failed to load aGlyphID"); >++ return error; >++ } >++#else >++ nsresult rv = aFt2->LoadGlyph(aFace, aGlyphID, flags); >+ if (NS_FAILED(rv)) { >+ NS_ERROR("failed to load aGlyphID"); >+ return 1; >+ } >++#endif >+ slot = aFace->glyph; >+ >+ if (slot->format != ft_glyph_format_outline) { >+ NS_ERROR("aGlyphID is not an outline glyph"); >+ return 1; >+ } >+ >++#ifndef MOZ_ENABLE_XFT >+ fti.ft2 = aFt2; >++#endif >+ fti.face = aFace; >+ fti.buf = aBuf; >+ fti.elm_cnt = 0; >+ fti.len = 0; >+ fti.wmode = aWmode; >+ >+ /* add space for "random" bytes */ >+ for (j=0; j< aLenIV; j++) { >+ fti.len += ecsi(&fti.buf, 0); >+ } >++#ifdef MOZ_ENABLE_XFT >++ if (FT_Outline_Decompose(&slot->outline, &ft_outline_funcs, &fti)) { >++ NS_ERROR("error decomposing aGlyphID"); >++ return 1; >++ } >++#else >+ rv = aFt2->OutlineDecompose(&slot->outline, &ft_outline_funcs, &fti); >+ if (NS_FAILED(rv)) { >+ NS_ERROR("error decomposing aGlyphID"); >+ return 1; >+ } >++#endif >+ >+ if (fti.elm_cnt) { >+ fti.len += csc(&fti.buf, T1_CLOSEPATH); >+ fti.len += csc(&fti.buf, T1_ENDCHAR); >+ } >+ else { >+ FT_Vector end_pt; >+Index: gfx/src/ps/nsType1.h >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/ps/nsType1.h,v >+retrieving revision 1.2 >+diff -u -7 -p -r1.2 nsType1.h >+--- gfx/src/ps/nsType1.h 16 Jan 2003 05:04:23 -0000 1.2 >++++ gfx/src/ps/nsType1.h 17 Oct 2004 11:10:19 -0000 >+@@ -50,15 +50,23 @@ >+ // >+ >+ #ifndef TYPE1_H >+ #define TYPE1_H >+ >+ #include <stdio.h> >+ #include "nspr.h" >++#ifdef MOZ_ENABLE_XFT >++#include "nsISupports.h" >++#include <ft2build.h> >++#include FT_FREETYPE_H >++#include FT_GLYPH_H >++#include FT_OUTLINE_H >++#else >+ #include "nsIFreeType2.h" >++#endif >+ >+ /* to/from Character Space */ >+ inline int >+ toCS(double upm, double x) >+ { >+ return (int)((x*1000.0)/upm); >+ } >+@@ -91,12 +99,16 @@ fromCS(double upm, double x) >+ /* the 2 byte (escaped) Postscript Type 1 commands */ >+ #define T1_ESC_SBW 7 /* 0x07 */ >+ >+ #define TYPE1_ENCRYPTION_KEY 4330 >+ #define TYPE1_ENCRYPTION_C1 52845 >+ #define TYPE1_ENCRYPTION_C2 22719 >+ >++#ifdef MOZ_ENABLE_XFT >++FT_Error FT2GlyphToType1CharString(FT_Face aFace, >++#else /* MOZ_ENABLE_FREETYPE2 */ >+ FT_Error FT2GlyphToType1CharString(nsIFreeType2 *aFt2, FT_Face aFace, >++#endif >+ PRUint32 aGlyphID, int aWmode, int aLenIV, >+ unsigned char *aBuf); >+ >+ #endif /* TYPE1_H */ >+Index: gfx/src/ps/nsType8.cpp >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/ps/nsType8.cpp,v >+retrieving revision 1.5 >+diff -u -7 -p -r1.5 nsType8.cpp >+--- gfx/src/ps/nsType8.cpp 17 Jan 2003 23:28:42 -0000 1.5 >++++ gfx/src/ps/nsType8.cpp 17 Oct 2004 11:10:22 -0000 >+@@ -49,29 +49,35 @@ >+ >+ #include <string.h> >+ #include <unistd.h> >+ >+ #include "nsCidMap.h" >+ #include "nsType1.h" >+ #include "nsType8.h" >++#ifndef MOZ_ENABLE_XFT >+ #include "nsIFreeType2.h" >++#endif >+ #include "nsIServiceManager.h" >+ #include "nsISignatureVerifier.h" >+ #include "plbase64.h" >+ #include "nsCRT.h" >+ >+ #define DEFAULT_CMAP_SIZE 10240 >+ >+ #define HEXASCII_LINE_LEN 64 >+ >+ >+ static void hex_out(unsigned char *buf, PRUint32 n, FILE *f, PRUint32 *pos); >+ >+ static void flatten_name(char *aToName); >++#ifdef MOZ_ENABLE_XFT >++static int FT2SubsetToCidKeyedType1(FT_Face aFace, >++#else >+ static int FT2SubsetToCidKeyedType1(nsIFreeType2 *aFt2, FT_Face aFace, >++#endif >+ const PRUnichar *aCharIDs, int aLen, >+ const char *aFontName, >+ const char *aRegistry, >+ const char *aEncoding, int aSupplement, >+ int aWmode, int aLenIV, FILE *aFile); >+ >+ void >+@@ -315,20 +321,22 @@ FT2SubsetToType8(FT_Face aFace, const PR >+ char *encoding = NULL; >+ int supplement, lenIV; >+ PRUint32 CIDs_buf[5000]; >+ PRUint32 *CIDs = CIDs_buf; >+ int cmap_type = 0; >+ PRBool status = PR_FALSE; >+ >++#ifndef MOZ_ENABLE_XFT >+ nsresult rv; >+ nsCOMPtr<nsIFreeType2> ft2 = do_GetService(NS_FREETYPE2_CONTRACTID, &rv); >+ if (NS_FAILED(rv)) { >+ NS_ERROR("Failed to get nsIFreeType2 service"); >+ goto done; >+ } >++#endif >+ >+ if ((aNumChars+1) > sizeof(CIDs_buf)/sizeof(CIDs_buf[0])) >+ CIDs = (PRUint32 *)PR_Malloc((aNumChars+1)*sizeof(CIDs_buf[0])); >+ if (!CIDs) { >+ NS_ERROR("Failed to alloc space for CIDs"); >+ goto done; >+ } >+@@ -364,15 +372,19 @@ FT2SubsetToType8(FT_Face aFace, const PR >+ WriteCmapHeader(cmapname, registry, encoding, supplement, cmap_type, aWmode, >+ aFile); >+ WriteCodeSpaceRangeMapUCS2(aFile); >+ WriteCidCharMap(aCharIDs, CIDs, aNumChars, aFile); >+ WriteCmapFooter(aFile); >+ >+ /* output the Type 8 CID font */ >++#ifdef MOZ_ENABLE_XFT >++ FT2SubsetToCidKeyedType1(aFace, aCharIDs, aNumChars, fontname, >++#else >+ FT2SubsetToCidKeyedType1(ft2, aFace, aCharIDs, aNumChars, fontname, >++#endif >+ registry, encoding, supplement, aWmode, lenIV, >+ aFile); >+ fprintf(aFile, "\n"); >+ >+ /* compose the cmap and font */ >+ fprintf(aFile, "/%s\n", cidfontname); >+ fprintf(aFile, " /%s /CMap findresource\n", cmapname); >+@@ -388,15 +400,19 @@ done: >+ PR_FREEIF(cidfontname); >+ if (CIDs != CIDs_buf) >+ PR_Free(CIDs); >+ return status; >+ } >+ >+ static PRBool >++#ifdef MOZ_ENABLE_XFT >++FT2SubsetToCidKeyedType1(FT_Face aFace, >++#else >+ FT2SubsetToCidKeyedType1(nsIFreeType2 *aFt2, FT_Face aFace, >++#endif >+ const PRUnichar *aCharIDs, >+ int aLen, const char *aFontName, >+ const char *aRegistry, const char *aEncoding, >+ int aSupplement, int aWmode, int aLenIV, FILE *aFile) >+ { >+ int i, charstrings_len, data_offset; >+ unsigned int charstring_len; >+@@ -441,24 +457,34 @@ FT2SubsetToCidKeyedType1(nsIFreeType2 *a >+ toCS(upm, aFace->bbox.yMin), >+ toCS(upm, aFace->bbox.xMax), >+ toCS(upm, aFace->bbox.yMax)); >+ >+ fprintf(aFile, "\n"); >+ >+ /* measure the notdef glyph length */ >++#ifdef MOZ_ENABLE_XFT >++ cmapinfo[0] = FT2GlyphToType1CharString(aFace, 0, aWmode, aLenIV, NULL); >++#else >+ cmapinfo[0] = FT2GlyphToType1CharString(aFt2, aFace, 0, aWmode, aLenIV, NULL); >++#endif >+ num_charstrings = 1; >+ charstrings_len = cmapinfo[0]; >+ >+ /* get charstring lengths */ >+ max_charstring = cmapinfo[0]; >+ for (i=0; i<aLen; i++) { >++#ifdef MOZ_ENABLE_XFT >++ glyphID = FT_Get_Char_Index(aFace, aCharIDs[i]); >++ cmapinfo[i+1] = FT2GlyphToType1CharString(aFace, glyphID, aWmode, >++ aLenIV, NULL); >++#else >+ aFt2->GetCharIndex(aFace, aCharIDs[i], &glyphID); >+ cmapinfo[i+1] = FT2GlyphToType1CharString(aFt2, aFace, glyphID, aWmode, >+ aLenIV, NULL); >++#endif >+ charstrings_len += cmapinfo[i+1]; >+ if (cmapinfo[i+1]) >+ num_charstrings++; >+ if (cmapinfo[i+1] > max_charstring) >+ max_charstring = cmapinfo[i+1]; >+ } >+ cmapinfo[i+1] = 0; >+@@ -550,23 +576,34 @@ FT2SubsetToCidKeyedType1(nsIFreeType2 *a >+ data_offset += cmapinfo[i]; >+ } >+ >+ // >+ // output the charStrings >+ // >+ // output the notdef glyph >++#ifdef MOZ_ENABLE_XFT >++ charstring_len = FT2GlyphToType1CharString(aFace, 0, aWmode, aLenIV, >++ charstring); >++#else >+ charstring_len = FT2GlyphToType1CharString(aFt2, aFace, 0, aWmode, aLenIV, >+ charstring); >++#endif >+ hex_out(charstring, charstring_len, aFile, &line_pos); >+ >+ /* output the charstrings for the glyphs */ >+ for (i=0; i<aLen; i++) { >++#ifdef MOZ_ENABLE_XFT >++ glyphID = FT_Get_Char_Index(aFace, aCharIDs[i]); >++ charstring_len = FT2GlyphToType1CharString(aFace, glyphID, aWmode, >++ aLenIV, charstring); >++#else >+ aFt2->GetCharIndex(aFace, aCharIDs[i], &glyphID); >+ charstring_len = FT2GlyphToType1CharString(aFt2, aFace, glyphID, aWmode, >+ aLenIV, charstring); >++#endif >+ NS_ASSERTION(charstring_len==cmapinfo[i+1], "glyph data changed"); >+ hex_out(charstring, charstring_len, aFile, &line_pos); >+ } >+ // add one byte padding so the interperter can always do 2 byte reads >+ charstring[0] = 0; >+ hex_out(charstring, 1, aFile, &line_pos); >+ >+Index: gfx/src/ps/nsType8.h >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/ps/nsType8.h,v >+retrieving revision 1.2 >+diff -u -7 -p -r1.2 nsType8.h >+--- gfx/src/ps/nsType8.h 16 Jan 2003 05:04:24 -0000 1.2 >++++ gfx/src/ps/nsType8.h 17 Oct 2004 11:10:22 -0000 >+@@ -39,15 +39,32 @@ >+ * ***** END LICENSE BLOCK ***** */ >+ >+ #ifndef TYPE8_H >+ #define TYPE8_H >+ >+ #include <stdio.h> >+ #include "nspr.h" >++#ifdef MOZ_ENABLE_XFT >++#include <ft2build.h> >++#include FT_FREETYPE_H >++#include FT_GLYPH_H >++#include FT_CACHE_H >++#include FT_CACHE_IMAGE_H >++#include FT_OUTLINE_H >++// macros to handle FreeType2 26.6 numbers (26 bit number with 6 bit fraction) >++#define FT_REG_TO_16_16(x) ((x)<<16) >++#ifndef FT_MulFix >++#define FT_MulFix(v, s) (((v)*(s))>>16) >++#endif >++#define FT_ROUND(x) (((x) + 32) & ~63) // 63 = 2^6 - 1 >++#define FT_TRUNC(x) ((x) >> 6) >++#define FT_DESIGN_UNITS_TO_PIXELS(v, s) FT_TRUNC(FT_ROUND(FT_MulFix((v) , (s)))) >++#else /* MOZ_ENABLE_FREETYPE2 */ >+ #include "nsIFreeType2.h" >++#endif /* MOZ_ENABLE_XFT */ >+ >+ void AddCIDCheckCode(FILE *aFile); >+ PRBool FT2SubsetToType8(FT_Face aFace, const PRUnichar *aCharIDs, >+ PRUint32 aNumChars, int aWmode, FILE *aFile); >+ char* FT2ToType8CidFontName(FT_Face aFace, int aWmode); >+ >+ >+Index: gfx/src/x11shared/nsFontDebug.h >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/x11shared/nsFontDebug.h,v >+retrieving revision 1.1 >+diff -u -7 -p -r1.1 nsFontDebug.h >+--- gfx/src/x11shared/nsFontDebug.h 17 Sep 2002 06:15:04 -0000 1.1 >++++ gfx/src/x11shared/nsFontDebug.h 17 Oct 2004 11:10:22 -0000 >+@@ -93,11 +93,13 @@ >+ fflush(stdout); \ >+ } \ >+ PR_END_MACRO >+ >+ #define FREETYPE_FONT_PRINTF(x) \ >+ DEBUG_PRINTF_MACRO(x, NS_FONT_DEBUG_FREETYPE_FONT) >+ >++#ifdef MOZ_ENABLE_FREETYPE2 >+ extern PRUint32 gFontDebug; >++#endif >+ >+ #endif >+ >+Index: gfx/src/xlib/nsFontMetricsXlib.cpp >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/xlib/nsFontMetricsXlib.cpp,v >+retrieving revision 1.165 >+diff -u -7 -p -r1.165 nsFontMetricsXlib.cpp >+--- gfx/src/xlib/nsFontMetricsXlib.cpp 9 Mar 2004 14:14:55 -0000 1.165 >++++ gfx/src/xlib/nsFontMetricsXlib.cpp 17 Oct 2004 11:10:49 -0000 >+@@ -60,18 +60,18 @@ >+ #include "nsCOMPtr.h" >+ #include "nsPrintfCString.h" >+ #include "nspr.h" >+ #include "nsHashtable.h" >+ #include "nsReadableUtils.h" >+ #include "nsAString.h" >+ #include "nsXPIDLString.h" >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ #include "nsFT2FontCatalog.h" >+ #include "nsFreeType.h" >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ #ifdef USE_X11SHARED_CODE >+ #include "nsXFontNormal.h" >+ #endif /* USE_X11SHARED_CODE */ >+ #ifdef USE_AASB >+ #include "nsX11AlphaBlend.h" >+ #include "nsXFontAAScaledBitmap.h" >+ #endif /* USE_AASB */ >+@@ -109,17 +109,17 @@ static PRLogModuleInfo *FontMetricsXlibL >+ #define FONT_MAX_FONT_SCALE 2 >+ >+ #undef NOISY_FONTS >+ #undef REALLY_NOISY_FONTS >+ >+ /* Local prototypes */ >+ static PRBool FreeNode(nsHashKey* aKey, void* aData, void* aClosure); >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ static void CharSetNameToCodeRangeBits(const char*, PRUint32*, PRUint32*); >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ static const nsFontCharSetMapXlib *GetCharSetMap(nsFontMetricsXlibContext *aFmctx, const char *aCharSetName); >+ >+ // the font catalog is so expensive to generate >+ // always tell the user what is happening >+ static PRUint32 gFontDebug = 0 | NS_FONT_DEBUG_FONT_SCAN; >+ >+ struct nsFontCharSetMapXlib; >+@@ -211,19 +211,19 @@ public: >+ double mBitmapUndersize; >+ >+ #ifdef USE_AASB >+ PRInt32 mAntiAliasMinimum; >+ #endif /* USE_AASB */ >+ PRInt32 mEmbeddedBitmapMaximumHeight; >+ >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ PRBool mEnableFreeType2; >+ PRBool mFreeType2Autohinted; >+ PRBool mFreeType2Unhinted; >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ #ifdef USE_AASB >+ PRUint8 mAATTDarkTextMinValue; >+ double mAATTDarkTextGain; >+ #endif /* USE_AASB */ >+ >+ #ifdef ENABLE_X_FONT_BANNING >+ regex_t *mFontRejectRegEx, >+@@ -232,16 +232,18 @@ public: >+ }; >+ >+ struct nsFontCharSetInfoXlib >+ { >+ const char* mCharSet; >+ nsFontCharSetConverterXlib Convert; >+ PRUint8 mSpecialUnderline; >++#ifdef MOZ_ENABLE_FREETYPE2 >+ PRInt32 mCodeRange1Bits; >+ PRInt32 mCodeRange2Bits; >++#endif >+ PRUint16* mCCMap; >+ nsIUnicodeEncoder* mConverter; >+ nsIAtom* mLangGroup; >+ PRBool mInitedSizeInfo; >+ PRInt32 mOutlineScaleMin; >+ PRInt32 mBitmapScaleMin; >+ double mBitmapOversize; >+@@ -281,14 +283,15 @@ static int DoubleByteConvert(nsFontCharS >+ const PRUnichar* aSrcBuf, PRInt32 aSrcLen, char* aDestBuf, PRInt32 aDestLen); >+ static int ISO10646Convert(nsFontCharSetInfoXlib* aSelf, XFontStruct* aFont, >+ const PRUnichar* aSrcBuf, PRInt32 aSrcLen, char* aDestBuf, PRInt32 aDestLen); >+ >+ static nsFontCharSetInfoXlib Unknown = { nsnull }; >+ static nsFontCharSetInfoXlib Special = { nsnull }; >+ >++#ifdef MOZ_ENABLE_FREETYPE2 >+ static nsFontCharSetInfoXlib USASCII = >+ { "us-ascii", SingleByteConvert, 0, >+ TT_OS2_CPR1_LATIN1 | TT_OS2_CPR1_MAC_ROMAN, >+ TT_OS2_CPR2_CA_FRENCH | TT_OS2_CPR2_PORTUGESE >+ | TT_OS2_CPR2_WE_LATIN1 | TT_OS2_CPR2_US }; >+ static nsFontCharSetInfoXlib ISO88591 = >+ { "ISO-8859-1", SingleByteConvert, 0, >+@@ -486,15 +489,168 @@ static nsFontCharSetInfoXlib Mathematica >+ { "x-mathematica2", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; >+ static nsFontCharSetInfoXlib Mathematica3 = >+ { "x-mathematica3", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; >+ static nsFontCharSetInfoXlib Mathematica4 = >+ { "x-mathematica4", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; >+ static nsFontCharSetInfoXlib Mathematica5 = >+ { "x-mathematica5", SingleByteConvert, 0, TT_OS2_CPR1_SYMBOL, 0}; >+-#endif /* MOZ_MATHML */ >++#endif /* MATHML */ >++ >++#else >++ >++static nsFontCharSetInfoXlib USASCII = >++ { "us-ascii", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO88591 = >++ { "ISO-8859-1", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO88592 = >++ { "ISO-8859-2", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO88593 = >++ { "ISO-8859-3", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO88594 = >++ { "ISO-8859-4", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO88595 = >++ { "ISO-8859-5", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO88596 = >++ { "ISO-8859-6", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO885968x = >++ { "x-iso-8859-6-8-x", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO8859616 = >++ { "x-iso-8859-6-16", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib IBM1046 = >++ { "x-IBM1046", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO88597 = >++ { "ISO-8859-7", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO88598 = >++ { "ISO-8859-8", SingleByteConvert, 0 }; >++// change from >++// { "ISO-8859-8", SingleByteConvertReverse, 0, 0, 0 }; >++// untill we fix the layout and ensure we only call this with pure RTL text >++static nsFontCharSetInfoXlib ISO88599 = >++ { "ISO-8859-9", SingleByteConvert, 0 }; >++// no support for iso-8859-10 (Nordic/Icelandic) currently >++// static nsFontCharSetInfoXlib ISO885910 = >++// { "ISO-8859-10", SingleByteConvert, 0, >++// 0, TT_OS2_CPR2_NORDIC | TT_OS2_CPR2_ICELANDIC }; >++// no support for iso-8859-12 (Vietnamese) currently >++// static nsFontCharSetInfoXlib ISO885912 = >++// { "ISO-8859-12", SingleByteConvert, 0, >++// TT_OS2_CPR1_VIETNAMESE, 0 }; >++static nsFontCharSetInfoXlib ISO885913 = >++ { "ISO-8859-13", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO885915 = >++ { "ISO-8859-15", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib JISX0201 = >++ { "jis_0201", SingleByteConvert, 1 }; >++static nsFontCharSetInfoXlib KOI8R = >++ { "KOI8-R", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib KOI8U = >++ { "KOI8-U", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib TIS6202 = >++/* Added to support thai context sensitive shaping if >++ * CTL extension is is in force */ >++#ifdef SUNCTL >++ { "tis620-2", SingleByteConvert, 0 }; >++#else >++ { "windows-874", SingleByteConvert, 0 }; >++#endif /* SUNCTL */ >++static nsFontCharSetInfoXlib TIS620 = >++ { "TIS-620", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib ISO885911 = >++ { "ISO-8859-11", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib Big5 = >++ { "x-x-big5", DoubleByteConvert, 1 }; >++// a kludge to distinguish zh-TW only fonts in Big5 (such as hpbig5-) >++// from zh-TW/zh-HK common fonts in Big5 (such as big5-1) >++static nsFontCharSetInfoXlib Big5TWHK = >++ { "x-x-big5", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib CNS116431 = >++ { "x-cns-11643-1", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib CNS116432 = >++ { "x-cns-11643-2", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib CNS116433 = >++ { "x-cns-11643-3", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib CNS116434 = >++ { "x-cns-11643-4", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib CNS116435 = >++ { "x-cns-11643-5", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib CNS116436 = >++ { "x-cns-11643-6", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib CNS116437 = >++ { "x-cns-11643-7", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib GB2312 = >++ { "gb_2312-80", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib GB18030_0 = >++ { "gb18030.2000-0", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib GB18030_1 = >++ { "gb18030.2000-1", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib GBK = >++ { "x-gbk-noascii", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib HKSCS = >++ { "hkscs-1", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib JISX0208 = >++ { "jis_0208-1983", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib JISX0212 = >++ { "jis_0212-1990", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib KSC5601 = >++ { "ks_c_5601-1987", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib X11Johab = >++ { "x-x11johab", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib JohabNoAscii = >++ { "x-johab-noascii", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib JamoTTF = >++ { "x-koreanjamo-0", DoubleByteConvert, 1 }; >++static nsFontCharSetInfoXlib TamilTTF = >++ { "x-tamilttf-0", DoubleByteConvert, 0 }; >++static nsFontCharSetInfoXlib CP1250 = >++ { "windows-1250", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib CP1251 = >++ { "windows-1251", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib CP1252 = >++ { "windows-1252", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib CP1253 = >++ { "windows-1253", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib CP1257 = >++ { "windows-1257", SingleByteConvert, 0 }; >++ >++#ifdef SUNCTL >++/* Hindi range currently unsupported in FT2 range. Change TT* once we >++ arrive at a way to identify hindi */ >++static nsFontCharSetInfoXlib SunIndic = >++ { "x-sun-unicode-india-0", DoubleByteConvert, 0 }; >++#endif /* SUNCTL */ >++ >++static nsFontCharSetInfoXlib ISO106461 = >++ { nsnull, ISO10646Convert, 1}; >++ >++static nsFontCharSetInfoXlib AdobeSymbol = >++ { "Adobe-Symbol-Encoding", SingleByteConvert, 0 }; >++static nsFontCharSetInfoXlib AdobeEuro = >++ { "x-adobe-euro", SingleByteConvert, 0 }; >++ >++#ifdef MOZ_MATHML >++static nsFontCharSetInfoXlib CMCMEX = >++ { "x-t1-cmex", SingleByteConvert, 0}; >++static nsFontCharSetInfoXlib CMCMSY = >++ { "x-t1-cmsy", SingleByteConvert, 0}; >++static nsFontCharSetInfoXlib CMCMR = >++ { "x-t1-cmr", SingleByteConvert, 0}; >++static nsFontCharSetInfoXlib CMCMMI = >++ { "x-t1-cmmi", SingleByteConvert, 0}; >++static nsFontCharSetInfoXlib Mathematica1 = >++ { "x-mathematica1", SingleByteConvert, 0}; >++static nsFontCharSetInfoXlib Mathematica2 = >++ { "x-mathematica2", SingleByteConvert, 0}; >++static nsFontCharSetInfoXlib Mathematica3 = >++ { "x-mathematica3", SingleByteConvert, 0}; >++static nsFontCharSetInfoXlib Mathematica4 = >++ { "x-mathematica4", SingleByteConvert, 0}; >++static nsFontCharSetInfoXlib Mathematica5 = >++ { "x-mathematica5", SingleByteConvert, 0}; >++#endif /* MATHML */ >++#endif /* FREETYPE2 */ >+ >+ static nsFontLangGroupXlib FLG_WESTERN = { "x-western", nsnull }; >+ static nsFontLangGroupXlib FLG_BALTIC = { "x-baltic", nsnull }; >+ static nsFontLangGroupXlib FLG_CE = { "x-central-euro",nsnull }; >+ static nsFontLangGroupXlib FLG_RUSSIAN = { "x-cyrillic", nsnull }; >+ static nsFontLangGroupXlib FLG_GREEK = { "el", nsnull }; >+ static nsFontLangGroupXlib FLG_TURKISH = { "tr", nsnull }; >+@@ -1044,17 +1200,17 @@ FreeNodeArray(nsHashKey* aKey, void* aDa >+ /* This is only required for the main display */ >+ static nsFontMetricsXlibContext *global_fmctx = nsnull; >+ >+ nsFontMetricsXlibContext::~nsFontMetricsXlibContext() >+ { >+ PR_LOG(FontMetricsXlibLM, PR_LOG_DEBUG, ("# nsFontMetricsXlibContext destroy()\n")); >+ >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ nsFreeTypeFreeGlobals(); >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ >+ #ifdef ENABLE_X_FONT_BANNING >+ if (mFontRejectRegEx) { >+ regfree(mFontRejectRegEx); >+ delete mFontRejectRegEx; >+ } >+ >+@@ -1176,19 +1332,19 @@ nsFontMetricsXlibContext::Init(nsIDevice >+ mBitmapUndersize = 0.8; >+ >+ #ifdef USE_AASB >+ mAntiAliasMinimum = 8; >+ #endif /* USE_AASB */ >+ mEmbeddedBitmapMaximumHeight = 1000000; >+ >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ mEnableFreeType2 = PR_TRUE; >+ mFreeType2Autohinted = PR_FALSE; >+ mFreeType2Unhinted = PR_TRUE; >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ #ifdef USE_AASB >+ mAATTDarkTextMinValue = 64; >+ mAATTDarkTextGain = 0.8; >+ #endif /* USE_AASB */ >+ >+ #ifdef ENABLE_X_FONT_BANNING >+ mFontRejectRegEx = nsnull; >+@@ -1364,15 +1520,15 @@ nsFontMetricsXlibContext::Init(nsIDevice >+ #ifdef USE_XPRINT >+ } >+ #endif /* USE_XPRINT */ >+ if (NS_SUCCEEDED(rv)) { >+ mForceOutlineScaledFonts = force_outline_scaled_fonts; >+ } >+ >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ PRBool enable_freetype2 = PR_TRUE; >+ rv = mPref->GetBoolPref("font.FreeType2.enable", &enable_freetype2); >+ if (NS_SUCCEEDED(rv)) { >+ mEnableFreeType2 = enable_freetype2; >+ FREETYPE_FONT_PRINTF(("mEnableFreeType2 = %d", mEnableFreeType2)); >+ } >+ >+@@ -1385,15 +1541,15 @@ nsFontMetricsXlibContext::Init(nsIDevice >+ >+ PRBool freetype2_unhinted = PR_TRUE; >+ rv = mPref->GetBoolPref("font.FreeType2.unhinted", &freetype2_unhinted); >+ if (NS_SUCCEEDED(rv)) { >+ mFreeType2Unhinted = freetype2_unhinted; >+ FREETYPE_FONT_PRINTF(("mFreeType2Unhinted = %d", mFreeType2Unhinted)); >+ } >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ >+ #ifdef USE_AASB >+ PRInt32 antialias_minimum = 8; >+ rv = mPref->GetIntPref("font.antialias.min", &antialias_minimum); >+ if (NS_SUCCEEDED(rv)) { >+ mAntiAliasMinimum = antialias_minimum; >+ FREETYPE_FONT_PRINTF(("mAntiAliasMinimum = %d", mAntiAliasMinimum)); >+@@ -1581,20 +1737,20 @@ nsFontMetricsXlibContext::Init(nsIDevice >+ mFontAcceptRegEx = nsnull; >+ >+ return NS_ERROR_INVALID_ARG; >+ } >+ } >+ #endif /* ENABLE_X_FONT_BANNING */ >+ >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ rv = nsFreeTypeInitGlobals(); >+ if (NS_FAILED(rv)) { >+ return NS_ERROR_OUT_OF_MEMORY; >+ } >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ >+ return NS_OK; >+ } >+ >+ #ifdef USE_X11SHARED_CODE >+ #error not implemented yet >+ #else >+@@ -1912,15 +2068,15 @@ NS_IMETHODIMP nsFontMetricsXlib::Destro >+ } >+ >+ void nsFontMetricsXlib::RealizeFont() >+ { >+ float f; >+ f = mDeviceContext->DevUnitsToAppUnits(); >+ >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ if (mWesternFont->IsFreeTypeFont()) { >+ nsFreeTypeFont *ft = (nsFreeTypeFont *)mWesternFont; >+ if (!ft) >+ return; >+ // now that there are multiple font types (eg: core X fonts >+ // and TrueType fonts) there should be a common set of methods >+ // to get the metrics info from the font object. These methods >+@@ -1995,15 +2151,15 @@ void nsFontMetricsXlib::RealizeFont() >+ /* need better way to calculate this */ >+ mStrikeoutOffset = NSToCoordRound(mXHeight / 2.0); >+ mStrikeoutSize = mUnderlineSize; >+ >+ return; >+ #endif /* MOZ_ENABLE_FREETYPE2 */ >+ } >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ nsXFont *xFont = mWesternFont->GetXFont(); >+ XFontStruct *fontInfo = xFont->GetXFontStruct(); >+ f = mDeviceContext->DevUnitsToAppUnits(); >+ >+ nscoord lineSpacing = nscoord((fontInfo->ascent + fontInfo->descent) * f); >+ mEmHeight = PR_MAX(1, nscoord(mWesternFont->mSize * f)); >+ if (lineSpacing > mEmHeight) { >+@@ -3006,21 +3162,21 @@ nsFontXlib::GetXFont(void) >+ >+ PRBool >+ nsFontXlib::GetXFontIs10646(void) >+ { >+ return ((PRBool) (mCharSetInfo == mFontMetricsContext->mISO106461)); >+ } >+ >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ PRBool >+ nsFontXlib::IsFreeTypeFont(void) >+ { >+ return PR_FALSE; >+ } >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ >+ MOZ_DECL_CTOR_COUNTER(nsFontXlib) >+ >+ nsFontXlib::nsFontXlib() >+ { >+ MOZ_COUNT_CTOR(nsFontXlib); >+ } >+@@ -3650,15 +3806,15 @@ nsFontMetricsXlib::GetAASBBaseFont(nsFon >+ } >+ #endif /* USE_AASB */ >+ >+ nsFontXlib* >+ nsFontMetricsXlib::PickASizeAndLoad(nsFontStretchXlib* aStretch, >+ nsFontCharSetInfoXlib* aCharSet, PRUnichar aChar, const char *aName) >+ { >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ if (aStretch->mFreeTypeFaceID) { >+ //FREETYPE_FONT_PRINTF(("mFreeTypeFaceID = 0x%p", aStretch->mFreeTypeFaceID)); >+ nsFreeTypeFont *ftfont = nsFreeTypeFont::NewFont(aStretch->mFreeTypeFaceID, >+ mPixelSize, >+ aName); >+ if (!ftfont) { >+ FREETYPE_FONT_PRINTF(("failed to create font")); >+@@ -3678,15 +3834,15 @@ nsFontMetricsXlib::PickASizeAndLoad(nsFo >+ SetCharsetLangGroup(mFontMetricsContext, aCharSet); >+ ftfont->mSize = mPixelSize; >+ ftfont->LoadFont(); >+ ftfont->mCharSetInfo = mFontMetricsContext->mISO106461; >+ //FREETYPE_FONT_PRINTF(("add the ftfont")); >+ return AddToLoadedFontsList(ftfont); >+ } >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ >+ PRBool use_scaled_font = PR_FALSE; >+ PRBool have_nearly_rightsized_bitmap = PR_FALSE; >+ #ifdef USE_AASB >+ nsFontXlib *base_aafont = nsnull; >+ #endif /* USE_AASB */ >+ >+@@ -4494,18 +4650,18 @@ GetFontNames(nsFontMetricsXlibContext *a >+ >+ #ifdef NS_FONT_DEBUG_CALL_TRACE >+ if (gFontDebug & NS_FONT_DEBUG_CALL_TRACE) { >+ printf("GetFontNames %s\n", aPattern); >+ } >+ #endif >+ >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ // get FreeType fonts >+ nsFT2FontCatalog::GetFontNames(aFmctx, aPattern, aNodes); >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ >+ nsCAutoString previousNodeName; >+ nsHashtable* node_hash; >+ if (aAnyFoundry) { >+ NS_ASSERTION(aPattern[1] == '*', "invalid 'anyFoundry' pattern"); >+ node_hash = &aFmctx->mAFRENodes; >+ } >+@@ -5892,20 +6048,20 @@ const nsFontCharSetMapXlib *GetCharSetMa >+ nsCStringKey charSetKey(aCharSetName); >+ const nsFontCharSetMapXlib* charSetMap = (const nsFontCharSetMapXlib *) aFmctx->mCharSetMaps.Get(&charSetKey); >+ if (!charSetMap) >+ charSetMap = aFmctx->mNoneCharSetMap; >+ return charSetMap; >+ } >+ >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ static >+ void CharSetNameToCodeRangeBits(const char *aCharset, >+ PRUint32 *aCodeRange1, PRUint32 *aCodeRange2) >+ { >+ nsFontCharSetMapXlib *charSetMap = GetCharSetMap(aFmctx, aCharset); >+ nsFontCharSetInfoXlib *charSetInfo = charSetMap->mInfo; >+ >+ *aCodeRange1 = charSetInfo->mCodeRange1Bits; >+ *aCodeRange2 = charSetInfo->mCodeRange2Bits; >+ } >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ >+Index: gfx/src/xlib/nsFontMetricsXlib.h >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/xlib/nsFontMetricsXlib.h,v >+retrieving revision 1.37 >+diff -u -7 -p -r1.37 nsFontMetricsXlib.h >+--- gfx/src/xlib/nsFontMetricsXlib.h 5 Feb 2004 01:57:06 -0000 1.37 >++++ gfx/src/xlib/nsFontMetricsXlib.h 17 Oct 2004 11:10:49 -0000 >+@@ -52,15 +52,15 @@ >+ #include "nsCRT.h" >+ #include "nsCOMPtr.h" >+ #include "nsRenderingContextXlib.h" >+ #include "nsICharRepresentable.h" >+ #include "nsCompressedCharMap.h" >+ >+ /* Undefine some CPP symbols which wrap not-yet-implemented code */ >+-#undef USE_FREETYPE >++#undef MOZ_ENABLE_FREETYPE2 >+ #undef USE_AASB >+ #undef USE_X11SHARED_CODE >+ >+ #ifdef USE_X11SHARED_CODE >+ /* XXX: I wish I would use the code in gfx/src/x11shared/ - unfortunately >+ * it is full of GDK/GTK+ dependices which makes it impossible to use it >+ * yet... ;-( >+@@ -183,34 +183,34 @@ struct nsFontCharSetXlib; >+ struct nsFontFamilyXlib; >+ struct nsFontNodeXlib; >+ struct nsFontStretchXlib; >+ struct nsFontWeightXlib; >+ >+ class nsFontXlibUserDefined; >+ class nsFontMetricsXlib; >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ class nsFreeTypeFace; >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ >+ struct nsFontStretchXlib >+ { >+ NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW >+ >+ void SortSizes(void); >+ >+ nsFontXlib **mSizes; >+ PRUint16 mSizesAlloc; >+ PRUint16 mSizesCount; >+ >+ char* mScalable; >+ PRBool mOutlineScaled; >+ nsVoidArray mScaledFonts; >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ nsFreeTypeFace *mFreeTypeFaceID; >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ }; >+ >+ struct nsFontStyleXlib >+ { >+ NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW >+ >+ void FillWeightHoles(void); >+@@ -285,17 +285,17 @@ public: >+ >+ inline int SupportsChar(PRUnichar aChar) >+ { return mCCMap && CCMAP_HAS_CHAR(mCCMap, aChar); }; >+ >+ virtual XFontStruct *GetXFontStruct(void); >+ virtual nsXFont *GetXFont(void); >+ virtual PRBool GetXFontIs10646(void); >+-#ifdef USE_FREETYPE >++#ifdef MOZ_ENABLE_FREETYPE2 >+ virtual PRBool IsFreeTypeFont(void); >+-#endif /* USE_FREETYPE */ >++#endif /* MOZ_ENABLE_FREETYPE2 */ >+ virtual int GetWidth(const PRUnichar* aString, PRUint32 aLength) = 0; >+ virtual int DrawString(nsRenderingContextXlib *aContext, >+ nsIDrawingSurfaceXlib *aSurface, nscoord aX, >+ nscoord aY, const PRUnichar* aString, >+ PRUint32 aLength) = 0; >+ #ifdef MOZ_MATHML >+ // bounding metrics for a string >+@@ -472,15 +472,15 @@ public: >+ >+ class nsHashKey; >+ >+ /* XXX: We can't include gfx/src/x11shared/nsFreeType.h because it relies on >+ * GDK/GTK+ includes which are not available in Xlib builds (fix is to remove >+ * the GDK/GTK+ dependicy from the code in gfx/src/x11shared/ ...) >+ */ >+-#ifndef USE_FREETYPE >++#ifndef MOZ_ENABLE_FREETYPE2 >+ /* >+ * Defines for the TrueType codepage bits. >+ * Used as a hint for the languages supported in a TrueType font. >+ */ >+ >+ /* >+ * ulCodePageRange1 >+@@ -521,11 +521,11 @@ class nsHashKey; >+ #define TT_OS2_CPR2_CYRILLIC (0x02000000)/*IBM Cyrillic; primarily Russian*/ >+ #define TT_OS2_CPR2_LATIN2 (0x04000000) /* Latin 2 */ >+ #define TT_OS2_CPR2_BALTIC (0x08000000) /* MS-DOS Baltic */ >+ #define TT_OS2_CPR2_GREEK_437G (0x10000000) /* Greek; former 437 G */ >+ #define TT_OS2_CPR2_ARABIC_708 (0x20000000) /* Arabic; ASMO 708 */ >+ #define TT_OS2_CPR2_WE_LATIN1 (0x40000000) /* WE/Latin 1 */ >+ #define TT_OS2_CPR2_US (0x80000000) /* US */ >+-#endif /* !USE_FREETYPE */ >++#endif /* !MOZ_ENABLE_FREETYPE2 */ >+ >+ #endif /* !nsFontMetricsXlib_h__ */ >+ >+Index: gfx/src/shared/Makefile.in >+=================================================================== >+RCS file: /cvsroot/mozilla/gfx/src/shared/Makefile.in,v >+retrieving revision 1.5 >+diff -u -7 -p -r1.5 Makefile.in >+--- gfx/src/shared/Makefile.in 12 Mar 2003 04:57:15 -0000 1.5 >++++ gfx/src/shared/Makefile.in 17 Oct 2004 11:10:49 -0000 >+@@ -50,10 +50,15 @@ CPPSRCS = \ >+ >+ ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) >+ CPPSRCS += nsNativeTheme.cpp >+ endif >+ >+ LOCAL_INCLUDES = -I$(srcdir)/.. \ >+ $(NULL) >++ >++ifdef MOZ_ENABLE_XFT >++CPPSRCS += nsFontConfigUtils.cpp >++LOCAL_INCLUDES += $(MOZ_XFT_CFLAGS) >++endif >+ >+ include $(topsrcdir)/config/rules.mk >+ >+Index: gfx/src/shared/nsFontConfigUtils.cpp >+=================================================================== >+RCS file: gfx/src/shared/nsFontConfigUtils.cpp >+diff -N gfx/src/shared/nsFontConfigUtils.cpp >+--- /dev/null 1 Jan 1970 00:00:00 -0000 >++++ gfx/src/shared/nsFontConfigUtils.cpp 17 Oct 2004 11:10:50 -0000 >+@@ -0,0 +1,227 @@ >++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ >++/* ***** BEGIN LICENSE BLOCK ***** >++ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >++ * >++ * The contents of this file are subject to the Mozilla Public License Version >++ * 1.1 (the "License"); you may not use this file except in compliance with >++ * the License. You may obtain a copy of the License at >++ * http://www.mozilla.org/MPL/ >++ * >++ * Software distributed under the License is distributed on an "AS IS" basis, >++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >++ * for the specific language governing rights and limitations under the >++ * License. >++ * >++ * The Original Code is mozilla.org code. >++ * >++ * The Initial Developer of the Original Code is Christopher Blizzard >++ * <blizzard@mozilla.org>. Portions created by the Initial Developer >++ * are Copyright (C) 2002 the Initial Developer. All Rights Reserved. >++ * >++ * Contributor(s): >++ * >++ * Alternatively, the contents of this file may be used under the terms of >++ * either of the GNU General Public License Version 2 or later (the "GPL"), >++ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >++ * in which case the provisions of the GPL or the LGPL are applicable instead >++ * of those above. If you wish to allow use of your version of this file only >++ * under the terms of either the GPL or the LGPL, and not to allow others to >++ * use your version of this file under the terms of the MPL, indicate your >++ * decision by deleting the provisions above and replace them with the notice >++ * and other provisions required by the GPL or the LGPL. If you do not delete >++ * the provisions above, a recipient may use your version of this file under >++ * the terms of any one of the MPL, the GPL or the LGPL. >++ * >++ * ***** END LICENSE BLOCK ***** */ >++ >++#include "nsFontConfigUtils.h" >++ >++struct MozXftLangGroup { >++ const char *mozLangGroup; >++ FcChar32 character; >++ const FcChar8 *XftLang; >++}; >++ >++const MozXftLangGroup MozXftLangGroups[] = { >++ { "x-western", 0x0041, (const FcChar8 *)"en" }, >++ { "x-central-euro", 0x0100, (const FcChar8 *)"pl" }, >++ { "x-cyrillic", 0x0411, (const FcChar8 *)"ru" }, >++ { "x-baltic", 0x0104, (const FcChar8 *)"lv" }, >++ { "x-devanagari", 0x0905, (const FcChar8 *)"hi" }, >++ { "x-tamil", 0x0B85, (const FcChar8 *)"ta" }, >++ { "x-unicode", 0x0000, 0 }, >++ { "x-user-def", 0x0000, 0 }, >++}; >++ >++#define NUM_XFT_LANG_GROUPS (sizeof (MozXftLangGroups) / \ >++ sizeof (MozXftLangGroups[0])) >++ >++static >++void FFREToFamily(nsACString &aFFREName, nsACString &oFamily); >++ >++static >++const MozXftLangGroup* >++FindFCLangGroup (nsACString &aLangGroup) >++{ >++ for (unsigned int i=0; i < NUM_XFT_LANG_GROUPS; ++i) { >++ if (aLangGroup.Equals(MozXftLangGroups[i].mozLangGroup, >++ nsCaseInsensitiveCStringComparator())) { >++ return &MozXftLangGroups[i]; >++ } >++ } >++ >++ return nsnull; >++} >++ >++int >++NS_CalculateSlant(PRUint8 aStyle) >++{ >++ int fcSlant; >++ >++ switch(aStyle) { >++ case NS_FONT_STYLE_ITALIC: >++ fcSlant = FC_SLANT_ITALIC; >++ break; >++ case NS_FONT_STYLE_OBLIQUE: >++ fcSlant = FC_SLANT_OBLIQUE; >++ break; >++ default: >++ fcSlant = FC_SLANT_ROMAN; >++ break; >++ } >++ >++ return fcSlant; >++} >++ >++int >++NS_CalculateWeight (PRUint16 aWeight) >++{ >++ /* >++ * weights come in two parts crammed into one >++ * integer -- the "base" weight is weight / 100, >++ * the rest of the value is the "offset" from that >++ * weight -- the number of steps to move to adjust >++ * the weight in the list of supported font weights, >++ * this value can be negative or positive. >++ */ >++ PRInt32 baseWeight = (aWeight + 50) / 100; >++ PRInt32 offset = aWeight - baseWeight * 100; >++ >++ /* clip weights to range 0 to 9 */ >++ if (baseWeight < 0) >++ baseWeight = 0; >++ if (baseWeight > 9) >++ baseWeight = 9; >++ >++ /* Map from weight value to fcWeights index */ >++ static int fcWeightLookup[10] = { >++ 0, 0, 0, 0, 1, 1, 2, 3, 3, 4, >++ }; >++ >++ PRInt32 fcWeight = fcWeightLookup[baseWeight]; >++ >++ /* >++ * adjust by the offset value, make sure we stay inside the >++ * fcWeights table >++ */ >++ fcWeight += offset; >++ if (fcWeight < 0) >++ fcWeight = 0; >++ if (fcWeight > 4) >++ fcWeight = 4; >++ >++ /* Map to final FC_WEIGHT value */ >++ static int fcWeights[5] = { >++ FC_WEIGHT_LIGHT, /* 0 */ >++ FC_WEIGHT_MEDIUM, /* 1 */ >++ FC_WEIGHT_DEMIBOLD, /* 2 */ >++ FC_WEIGHT_BOLD, /* 3 */ >++ FC_WEIGHT_BLACK, /* 4 */ >++ }; >++ >++ return fcWeights[fcWeight]; >++} >++ >++void >++NS_AddLangGroup(FcPattern *aPattern, nsIAtom *aLangGroup) >++{ >++ // Find the FC lang group for this lang group >++ nsCAutoString cname; >++ aLangGroup->ToUTF8String(cname); >++ >++ // see if the lang group needs to be translated from mozilla's >++ // internal mapping into fontconfig's >++ const struct MozXftLangGroup *langGroup; >++ langGroup = FindFCLangGroup(cname); >++ >++ // if there's no lang group, just use the lang group as it was >++ // passed to us >++ // >++ // we're casting away the const here for the strings - should be >++ // safe. >++ if (!langGroup) >++ FcPatternAddString(aPattern, FC_LANG, (FcChar8 *)cname.get()); >++ else if (langGroup->XftLang) >++ FcPatternAddString(aPattern, FC_LANG, (FcChar8 *)langGroup->XftLang); >++} >++ >++void >++NS_AddFFRE(FcPattern *aPattern, nsCString *aFamily, PRBool aWeak) >++{ >++ nsCAutoString family; >++ FFREToFamily(*aFamily, family); >++ >++ FcValue v; >++ v.type = FcTypeString; >++ // casting away the const here, should be safe >++ v.u.s = (FcChar8 *)family.get(); >++ >++ if (aWeak) >++ FcPatternAddWeak(aPattern, FC_FAMILY, v, FcTrue); >++ else >++ FcPatternAdd(aPattern, FC_FAMILY, v, FcTrue); >++} >++ >++/* static */ >++void >++FFREToFamily(nsACString &aFFREName, nsACString &oFamily) >++{ >++ if (NS_FFRECountHyphens(aFFREName) == 3) { >++ PRInt32 familyHyphen = aFFREName.FindChar('-') + 1; >++ PRInt32 registryHyphen = aFFREName.FindChar('-',familyHyphen); >++ oFamily.Append(Substring(aFFREName, familyHyphen, >++ registryHyphen-familyHyphen)); >++ } >++ else { >++ oFamily.Append(aFFREName); >++ } >++} >++ >++int >++NS_FFRECountHyphens (nsACString &aFFREName) >++{ >++ int h = 0; >++ PRInt32 hyphen = 0; >++ while ((hyphen = aFFREName.FindChar('-', hyphen)) >= 0) { >++ ++h; >++ ++hyphen; >++ } >++ return h; >++} >++ >++PRBool >++NS_IsASCIIFontName(const nsString& aName) >++{ >++ PRUint32 len = aName.Length(); >++ const PRUnichar* str = aName.get(); >++ for (PRUint32 i = 0; i < len; i++) { >++ /* >++ * X font names are printable ASCII, ignore others (for now) >++ */ >++ if ((str[i] < 0x20) || (str[i] > 0x7E)) { >++ return PR_FALSE; >++ } >++ } >++ >++ return PR_TRUE; >++} >+Index: gfx/src/shared/nsFontConfigUtils.h >+=================================================================== >+RCS file: gfx/src/shared/nsFontConfigUtils.h >+diff -N gfx/src/shared/nsFontConfigUtils.h >+--- /dev/null 1 Jan 1970 00:00:00 -0000 >++++ gfx/src/shared/nsFontConfigUtils.h 17 Oct 2004 11:10:50 -0000 >+@@ -0,0 +1,55 @@ >++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ >++/* ***** BEGIN LICENSE BLOCK ***** >++ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >++ * >++ * The contents of this file are subject to the Mozilla Public License Version >++ * 1.1 (the "License"); you may not use this file except in compliance with >++ * the License. You may obtain a copy of the License at >++ * http://www.mozilla.org/MPL/ >++ * >++ * Software distributed under the License is distributed on an "AS IS" basis, >++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >++ * for the specific language governing rights and limitations under the >++ * License. >++ * >++ * The Original Code is mozilla.org code. >++ * >++ * The Initial Developer of the Original Code is Christopher Blizzard >++ * <blizzard@mozilla.org>. Portions created by the Initial Developer >++ * are Copyright (C) 2002 the Initial Developer. All Rights Reserved. >++ * >++ * Contributor(s): >++ * >++ * Alternatively, the contents of this file may be used under the terms of >++ * either of the GNU General Public License Version 2 or later (the "GPL"), >++ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >++ * in which case the provisions of the GPL or the LGPL are applicable instead >++ * of those above. If you wish to allow use of your version of this file only >++ * under the terms of either the GPL or the LGPL, and not to allow others to >++ * use your version of this file under the terms of the MPL, indicate your >++ * decision by deleting the provisions above and replace them with the notice >++ * and other provisions required by the GPL or the LGPL. If you do not delete >++ * the provisions above, a recipient may use your version of this file under >++ * the terms of any one of the MPL, the GPL or the LGPL. >++ * >++ * ***** END LICENSE BLOCK ***** */ >++ >++#ifndef nsFontConfigUtils_h__ >++#define nsFontConfigUtils_h__ >++ >++#include "nspr.h" >++#include "nsString.h" >++#include "nsIAtom.h" >++#include "nsFont.h" >++ >++#include <fontconfig/fontconfig.h> >++ >++extern int NS_CalculateSlant (PRUint8 aStyle); >++extern int NS_CalculateWeight (PRUint16 aWeight); >++extern void NS_AddLangGroup (FcPattern *aPattern, nsIAtom *aLangGroup); >++extern void NS_AddFFRE (FcPattern *aPattern, nsCString *aFamily, >++ PRBool aWeak); >++extern int NS_FFRECountHyphens (nsACString &aFFREName); >++extern PRBool NS_IsASCIIFontName (const nsString& aName); >++#endif >++ >--- debian/ubuntu-patches/pango-spacing >+++ debian/ubuntu-patches/pango-spacing >@@ -0,0 +1,75 @@ >+--- mozilla/gfx/src/gtk/nsFontMetricsPango.cpp.foo 2005-03-21 17:09:14.000000000 -0500 >++++ mozilla/gfx/src/gtk/nsFontMetricsPango.cpp 2005-03-21 17:16:53.000000000 -0500 >+@@ -501,13 +501,11 @@ >+ >+ pango_layout_get_size(layout, &width, &height); >+ >+- width /= PANGO_SCALE; >+- >+ g_object_unref(layout); >+ >+ float f; >+ f = mDeviceContext->DevUnitsToAppUnits(); >+- aWidth = NSToCoordRound(width * f); >++ aWidth = NSToCoordRound(width * f / PANGO_SCALE); >+ >+ // printf("GetWidth (char *) %d\n", aWidth); >+ >+@@ -541,11 +539,9 @@ >+ FixupSpaceWidths(layout, text); >+ pango_layout_get_size(layout, &width, &height); >+ >+- width /= PANGO_SCALE; >+- >+ float f; >+ f = mDeviceContext->DevUnitsToAppUnits(); >+- aWidth = NSToCoordRound(width * f); >++ aWidth = NSToCoordRound(width * f / PANGO_SCALE); >+ >+ // printf("GetWidth %d\n", aWidth); >+ >+@@ -601,9 +597,9 @@ >+ float P2T; >+ P2T = mDeviceContext->DevUnitsToAppUnits(); >+ >+- aDimensions.width = NSToCoordRound(rect.width / PANGO_SCALE * P2T); >+- aDimensions.ascent = NSToCoordRound(PANGO_ASCENT(rect) / PANGO_SCALE * P2T); >+- aDimensions.descent = NSToCoordRound(PANGO_DESCENT(rect) / PANGO_SCALE * P2T); >++ aDimensions.width = NSToCoordRound(rect.width * P2T / PANGO_SCALE); >++ aDimensions.ascent = NSToCoordRound(PANGO_ASCENT(rect) * P2T / PANGO_SCALE); >++ aDimensions.descent = NSToCoordRound(PANGO_DESCENT(rect) * P2T / PANGO_SCALE); >+ >+ // printf("GetTextDimensions %d %d %d\n", aDimensions.width, >+ //aDimensions.ascent, aDimensions.descent); >+@@ -880,12 +876,12 @@ >+ P2T = mDeviceContext->DevUnitsToAppUnits(); >+ >+ aBoundingMetrics.leftBearing = >+- NSToCoordRound(rect.x / PANGO_SCALE * P2T); >++ NSToCoordRound(rect.x * P2T / PANGO_SCALE); >+ aBoundingMetrics.rightBearing = >+- NSToCoordRound(rect.width / PANGO_SCALE * P2T); >+- aBoundingMetrics.width = NSToCoordRound((rect.x + rect.width) / PANGO_SCALE * P2T); >+- aBoundingMetrics.ascent = NSToCoordRound(rect.y / PANGO_SCALE * P2T); >+- aBoundingMetrics.descent = NSToCoordRound(rect.height / PANGO_SCALE * P2T); >++ NSToCoordRound(rect.width * P2T / PANGO_SCALE); >++ aBoundingMetrics.width = NSToCoordRound((rect.x + rect.width) * P2T / PANGO_SCALE); >++ aBoundingMetrics.ascent = NSToCoordRound(rect.y * P2T / PANGO_SCALE); >++ aBoundingMetrics.descent = NSToCoordRound(rect.height * P2T / PANGO_SCALE); >+ >+ loser: >+ g_free(text); >+@@ -1118,11 +1114,11 @@ >+ >+ // Convert the width into app units >+ for (int i = 0; i < n_ranges; i++) { >+- aWidth += (ranges[(i * 2) + 1] - ranges[(i * 2)]) / PANGO_SCALE; >++ aWidth += (ranges[(i * 2) + 1] - ranges[(i * 2)]); >+ } >+ >+ f = mDeviceContext-> DevUnitsToAppUnits(); >+- aWidth = nscoord(aWidth * f); >++ aWidth = nscoord(aWidth * f / PANGO_SCALE); >+ >+ loser: >+ if (ranges) >--- debian/ubuntu-patches/8611-js-js-can-access-any-ff-memory >+++ debian/ubuntu-patches/8611-js-js-can-access-any-ff-memory >@@ -0,0 +1,60 @@ >+Index: jsstr.c >+=================================================================== >+RCS file: /cvsroot/mozilla/js/src/jsstr.c,v >+retrieving revision 3.98 >+diff -p -u -8 -r3.98 jsstr.c >+--- jsstr.c 24 Feb 2005 18:59:41 -0000 3.98 >++++ jsstr.c 2 Apr 2005 02:36:30 -0000 >+@@ -1381,21 +1381,27 @@ find_replen(JSContext *cx, ReplaceData * >+ if (lambda) { >+ uintN argc, i, j, m, n, p; >+ jsval *sp, *oldsp, rval; >+ void *mark; >+ JSStackFrame *fp; >+ JSBool ok; >+ >+ /* >+- * Save the rightContext from the current regexp, since it >+- * gets stuck at the end of the replacement string and may >+- * be clobbered by a RegExp usage in the lambda function. >++ * Save the regExpStatics from the current regexp, since they may be >++ * clobbered by a RegExp usage in the lambda function. Note that all >++ * members of JSRegExpStatics are JSSubStrings, so not GC roots, save >++ * input, which is rooted otherwise via argv[-1] in str_replace. >++ * >++ * We need to clear moreParens in the top-of-stack cx->regExpStatics >++ * to it won't be possibly realloc'ed, leaving the bottom-of-stack >++ * moreParens pointing to freed memory. >+ */ >+- JSSubString saveRightContext = cx->regExpStatics.rightContext; >++ JSRegExpStatics save = cx->regExpStatics; >++ cx->regExpStatics.moreParens = NULL; >+ >+ /* >+ * In the lambda case, not only do we find the replacement string's >+ * length, we compute repstr and return it via rdata for use within >+ * do_replace. The lambda is called with arguments ($&, $1, $2, ..., >+ * index, input), i.e., all the properties of a regexp match array. >+ * For $&, etc., we must create string jsvals from cx->regExpStatics. >+ * We grab up stack space to keep the newborn strings GC-rooted. >+@@ -1463,17 +1469,19 @@ find_replen(JSContext *cx, ReplaceData * >+ } else { >+ rdata->repstr = repstr; >+ *sizep = JSSTRING_LENGTH(repstr); >+ } >+ } >+ >+ lambda_out: >+ js_FreeStack(cx, mark); >+- cx->regExpStatics.rightContext = saveRightContext; >++ if (cx->regExpStatics.moreParens) >++ JS_free(cx, cx->regExpStatics.moreParens); >++ cx->regExpStatics = save; >+ return ok; >+ } >+ #endif /* JS_HAS_REPLACE_LAMBDA */ >+ >+ repstr = rdata->repstr; >+ replen = JSSTRING_LENGTH(repstr); >+ for (dp = rdata->dollar, ep = rdata->dollarEnd; dp; >+ dp = js_strchr_limit(dp, '$', ep)) { >--- debian/mozilla-firefox-runner >+++ debian/mozilla-firefox-runner >@@ -0,0 +1,402 @@ >+#!/bin/sh >+# >+# The contents of this file are subject to the Netscape Public >+# License Version 1.1 (the "License"); you may not use this file >+# except in compliance with the License. You may obtain a copy of >+# the License at http://www.mozilla.org/NPL/ >+# >+# Software distributed under the License is distributed on an "AS >+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or >+# implied. See the License for the specific language governing >+# rights and limitations under the License. >+# >+# The Original Code is mozilla.org code. >+# >+# The Initial Developer of the Original Code is Netscape >+# Communications Corporation. Portions created by Netscape are >+# Copyright (C) 1998 Netscape Communications Corporation. All >+# Rights Reserved. >+# >+# Contributor(s): >+# >+ >+## >+## For silly people running firefox through sudo >+## >+if [ "${SUDO_USER}" ] && [ "${SUDO_USER}" != "${USER}" ]; then >+ SUDO_HOME=`getent passwd ${SUDO_USER} | cut -f6 -d:` >+ if [ "${SUDO_HOME}" = "${HOME}" ]; then >+ echo "You should really not run firefox through sudo WITHOUT the -H option." >&2 >+ echo "Anyway, I'll do as if you did use the -H option." >&2 >+ HOME=`getent passwd ${USER} | cut -f6 -d:` >+ if [ -z "${HOME}" ]; then >+ echo "Could not find the correct home directory. Please use the -H option of sudo." >&2. >+ fi >+ fi >+fi >+ >+## >+## Variables >+## >+MOZ_DIST_BIN="/usr/lib/mozilla-firefox" >+MOZ_PROGRAM="/usr/lib/mozilla-firefox/firefox-bin" >+ >+## >+## Load system and user properties >+## >+ >+RUNTIME_FIREFOX_DSP="${FIREFOX_DSP}" >+ >+if [ -f /etc/mozilla-firefox/mozilla-firefoxrc ]; then >+ . /etc/mozilla-firefox/mozilla-firefoxrc >+fi >+ >+if [ -f "${HOME}/.mozilla/firefox/rc" ]; then >+ . "${HOME}/.mozilla/firefox/rc" >+elif [ -f "${HOME}/.mozilla-firefoxrc" ]; then >+ . "${HOME}/.mozilla-firefoxrc" >+ echo "Warning: a .mozilla-firefoxrc file has been found in your home directory" >&2 >+ echo "While it is still supported, it is recommended to move it to" >&2 >+ echo "\${HOME}/.mozilla/firefox/rc" >&2 >+fi >+ >+if [ "${RUNTIME_FIREFOX_DSP}" ]; then >+ FIREFOX_DSP="${RUNTIME_FIREFOX_DSP}" >+fi >+ >+if [ -z "${FIREFOX_DSP}" ]; then >+ FIREFOX_DSP="auto" >+fi >+ >+## >+## find /dev/dsp handler >+## >+ >+if [ "${FIREFOX_DSP}" = "auto" ]; then >+ FIREFOX_DSP= >+ P=`fuser /dev/dsp /dev/sound/dsp /dev/snd/pcm* /dev/audio 2>/dev/null | sed -e 's#^[^:]*:##' -e 's#[^0-9 ]##g' ` >+ if [ -n "$P" ]; then >+ if echo $P | xargs ps --no-headers -o user,command -p | grep "^${USER} *.*esd" >/dev/null 2>&1; then >+ FIREFOX_DSP=esddsp >+ elif echo $P | xargs ps --no-headers -o user,command -p | grep "^${USER} *.*arts" >/dev/null 2>&1; then >+ FIREFOX_DSP=artsdsp >+ fi >+ fi >+elif [ "${FIREFOX_DSP}" = "none" ]; then >+ FIREFOX_DSP= >+fi >+ >+## >+## Set MOZILLA_FIVE_HOME >+## >+MOZILLA_FIVE_HOME="/usr/lib/mozilla-firefox" >+ >+export MOZILLA_FIVE_HOME >+ >+## >+## Set LD_LIBRARY_PATH >+## >+EXTENT_LD_LIB_PATH=/usr/lib/mozilla-firefox:/usr/lib/mozilla-firefox/plugins:/usr/lib/mozilla/plugins:/usr/lib >+if [ "${LD_LIBRARY_PATH}" ]; then >+ LD_LIBRARY_PATH=${EXTENT_LD_LIB_PATH}:${LD_LIBRARY_PATH} >+else >+ LD_LIBRARY_PATH=${EXTENT_LD_LIB_PATH} >+fi >+ >+export LD_LIBRARY_PATH >+ >+# Set XPSERVERLIST if not set yet for XPrint support, or complain. >+ >+#if [ -z "${XPSERVERLIST}" ]; then >+# if [ -x /etc/init.d/xprint ]; then >+# XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist` >+# export XPSERVERLIST >+# else >+# echo -e "Warning: \${XPSERVERLIST} not set and /etc/init.d/xprint not found;\nprinting will not work.\nPlease install the xprt-xprintorg package" >&2 >+# fi >+#fi >+ >+#Set our package version, for use during start. >+if [ -f "${MOZILLA_FIVE_HOME}/pkg-ver" ]; then >+ PKG_VER=`cat ${MOZILLA_FIVE_HOME}/pkg-ver`; >+fi >+ >+verbose () { >+ if [ "${VERBOSE}" ]; then >+ echo $@ >+ fi >+} >+ >+echo_vars () { >+ if [ "${VERBOSE}" ]; then >+ for var in "$@"; do >+ echo "$var=`eval echo \\${$var}`" >+ done >+ fi >+} >+ >+# exec wrapper for verbosity >+exec_verbose () { >+ verbose Running: $@ >+ exec $@ >+} >+ >+# exec wrapper for verbosity >+run_verbose () { >+ verbose Running: $@ >+ $@ >+} >+ >+## >+## Set MOZ_ENABLE_PANGO >+## >+ >+MOZ_ENABLE_PANGO=1 >+export MOZ_ENABLE_PANGO >+ >+# Figure out if we need to ser LD_ASSUME_KERNEL for older versions of the JVM. >+set_jvm_vars () { >+ >+ if [ ! -L /usr/lib/mozilla/plugins/libjavaplugin_oji.so ]; then >+ return; >+ fi >+ >+ JVM_LINK=`readlink /usr/lib/mozilla/plugins/libjavaplugin_oji.so` >+ >+ # is it relative? if so append the full path >+ >+ echo "${JVM_LINK}" | grep -e "^/" 2>&1 > /dev/null >+ >+ if [ "$?" -ne 0 ]; then >+ JVM_LINK="/usr/lib/mozilla/plugins/${JVM_LINK}" >+ fi >+ >+ JVM_BASE=`basename "${JVM_LINK}"` >+ JVM_DIR=`dirname "${JVM_LINK}"` >+ JVM_COMMAND="${JVM_DIR}/java" >+ if [ ! -r "${JVM_COMMAND}" ]; then >+ JVM_DIR="${JVM_DIR}/../../../bin/" >+ JVM_COMMAND="${JVM_DIR}/java" >+ # does the command exist? >+ if [ ! -r "${JVM_COMMAND}" ]; then >+ return >+ fi >+ fi >+ >+ # export this temporarily - it seems to work with old and new >+ # versions of the JVM. >+ export LD_ASSUME_KERNEL=2.2.5 >+ >+ # get the version >+ JVM_VERSION=`${JVM_COMMAND} -version 2>&1 | grep version | cut -f 3 -d " " | sed -e 's/\"//g'` >+ >+ unset LD_ASSUME_KERNEL >+ >+ case "${JVM_VERSION}" in >+ (1.3.0*) >+ # bad JVM >+ export LD_ASSUME_KERNEL=2.2.5 >+ ;; >+ esac >+ >+ echo_vars JVM_DIR JVM_VERSION >+} >+ >+clean_profile() >+{ >+# Clean up the XUL.mfasl unconditionally on launch, since we have the >+# corner case of when firefox is running when upgraded. Need a >+# better solution or upstream fix. >+# Clean up the compatibility.ini as well, since we have a corner case of when >+# some components register protocols. Need a better solution or upstream fix. >+ if [ -f "${HOME}/.mozilla/firefox/profiles.ini" ]; then >+ sed -e '/Path=/! d' -e 's,Path=/,/,' -e "s,Path=,${HOME}/.mozilla/firefox/," "${HOME}/.mozilla/firefox/profiles.ini" \ >+ | while read dir >+ do >+ if [ -f "${dir}/ver" ]; then >+ LOCAL_VER=`cat "${dir}/ver"` >+ else >+ LOCAL_VER=0 >+ fi >+ if `dpkg --compare-versions "$PKG_VER" gt "$LOCAL_VER"`; then >+ rm -f "${dir}/XUL.mfasl" >+ fi >+ echo $PKG_VER > "${dir}/ver" >+ if [ "${dir}/compreg.dat" -ot "/usr/lib/mozilla-firefox/components.ini" ]; then >+ rm -f "${dir}/compatibility.ini" >+ fi >+ done >+ fi >+} >+ >+# OK, here's where all the real work gets done >+ >+# parse command line >+APPLICATION_ID=firefox >+REMOTE=0 >+TRY_USE_EXIST=0 >+VERBOSE= >+DEBUG=0 >+DEBUGGER= >+first=1 >+opt= >+for arg in "$@"; do >+ if [ ${first} -eq 1 ]; then >+ set dummy >+ first=0 >+ fi >+ >+ case "${arg}" in >+ -a | --display | -contentLocale | -UILocale | -remote | --debugger | -height | -width | -chrome | -P) >+ prev=${arg} >+ continue >+ ;; >+ esac >+ >+ if [ "${prev}" ]; then >+ case "${prev}" in >+ -a) >+ APPLICATION_ID="${arg}" >+ ;; >+ --display) >+ CMDLINE_DISPLAY="${arg}" >+ set "$@" --display "${arg}" >+ ;; >+ -remote) >+ REMOTE=1 >+ set "$@" -remote "${arg}" >+ ;; >+ --debugger) >+ DEBUGGER="${arg}" >+ DEBUG=1 >+ ;; >+ *) >+ set "$@" "${prev}" "${arg}" >+ ;; >+ esac >+ prev= >+ elif [ "${arg}" ]; then >+ case "$arg" in >+ --verbose | -V) >+ VERBOSE=1 >+ ;; >+ --display=*) >+ CMDLINE_DISPLAY=`echo ${arg} | sed 's/^--display=//'` >+ set "$@" "${arg}" >+ ;; >+ -g | -debug) >+ DEBUG=1 >+ ;; >+ -*) >+ set "$@" "${arg}" >+ ;; >+ *) >+ if [ -z "${opt}" ]; then >+ opt="${arg}" >+ # check to make sure that the url contains at least a :/ in it. >+ echo ${opt} | grep -e ':/' 2>/dev/null > /dev/null >+ RETURN_VAL=$? >+ if [ "${RETURN_VAL}" -eq 1 ]; then >+ # if it doesn't begin with a '/' and it exists when the pwd is >+ # prepended to it then append the full path >+ echo ${opt} | grep -e '^/' 2>/dev/null > /dev/null >+ if [ "$?" -ne "0" ] && [ -e "`pwd`/${opt}" ]; then >+ opt="`pwd`/${opt}" >+ fi >+ # Replace all spaces by %20 and prepend file:// if it is a valid file >+ if [ -e "${opt}" ]; then >+ opt="file://`echo ${opt} | sed 's/ /%20/g'`" >+ fi >+ fi >+ set "$@" "${opt}" >+ else >+ set "$@" "${arg}" >+ fi >+ ;; >+ esac >+ fi >+done >+ >+if [ $# -ne 0 ]; then >+ shift >+fi >+OPTIONS="$@" >+ >+if [ ${DEBUG} -eq 1 ]; then >+ if [ "${DEBUGGER}" = "" ]; then >+ DEBUGGER=gdb >+ fi >+ TMPFILE=`mktemp -t firefox_argsXXXXXX` >+ echo set args -a ${APPLICATION_ID} "$@" > ${TMPFILE} >+ case "${DEBUGGER}" in >+ gdb) >+ run_verbose gdb "${MOZ_PROGRAM}" -x ${TMPFILE} >+ ;; >+ ddd) >+ run_verbose ddd --debugger "gdb -x ${TMPFILE}" "${MOZ_PROGRAM}" >+ ;; >+ *) >+ run_verbose ${DEBUGGER} "${MOZ_PROGRAM}" "$@" >+ ;; >+ esac >+ rm ${TMPFILE} >+ exit >+fi >+ >+if [ $# -eq 1 ] && [ "$1" = "${opt}" ]; then >+ TRY_USE_EXIST=1 >+fi >+ >+MOZ_PROGRAM="${MOZ_PROGRAM} -a ${APPLICATION_ID}" >+ >+echo_vars FIREFOX_DSP APPLICATION_ID CMDLINE_DISPLAY DISPLAY REMOTE \ >+ TRY_USE_EXIST OPTIONS DEBUG DEBUGGER >+ >+# set our JVM vars >+# we don't want to do this (Ubuntu: #5636) >+#set_jvm_vars >+ >+PING_STATUS=1 >+ >+# No need to check if DISPLAY is not set, it will fail. But let's continue, >+# so that firefox gives the display error message itself. >+if [ "${DISPLAY}" ] || [ "${CMDLINE_DISPLAY}" ]; then >+ if [ -z "${CMDLINE_DISPLAY}" ]; then >+ CMDLINE_DISPLAY="${DISPLAY}" >+ fi >+ >+ # check to see if there's an already running instance or not >+ verbose "Running: ${MOZ_PROGRAM} -remote 'ping()'" >+ DISPLAY="${CMDLINE_DISPLAY}" ${MOZ_PROGRAM} -remote 'ping()' \ >+ > /dev/null 2>&1 >+ PING_STATUS=$? >+fi >+ >+echo_vars PING_STATUS >+ >+# Clean user profile if we are not trying to use the running instance and only >+# if the check was successful (status 2) >+if [ "${REMOTE}" -eq 0 ] && [ "${TRY_USE_EXIST}" -eq 0 ] && [ "${PING_STATUS}" -eq 2 ]; then >+ verbose "Cleaning user profile" >+ clean_profile >+fi >+ >+# If there is no command line argument at all then try to open a new >+# window in an already running instance. >+if [ "${PING_STATUS}" -eq 0 ] && [ $# -eq 0 ]; then >+ exec_verbose ${MOZ_PROGRAM} -remote "xfeDoCommand(openBrowser)" >+fi >+ >+# If we are trying to use existing instance, and it exists, and we're not having >+# a -remote command line argument, then open in window or tab accordingly. >+if [ "${REMOTE}" -eq 0 ] && [ "${TRY_USE_EXIST}" -eq 1 ] && [ "${PING_STATUS}" -eq 0 ]; then >+ # just pass it off if it looks like a url >+ exec_verbose ${MOZ_PROGRAM} -remote "openURL(${opt})" >+fi >+ >+if type "${FIREFOX_DSP}" > /dev/null 2>&1; then >+ # echo "Using $FIREFOX_DSP." >+ MOZ_PROGRAM="${FIREFOX_DSP} ${MOZ_PROGRAM}" >+fi >+ >+exec_verbose ${MOZ_PROGRAM} "$@" >--- debian/rules >+++ debian/rules >@@ -0,0 +1,258 @@ >+#!/usr/bin/make -f >+# Sample debian/rules that uses debhelper. >+# GNU copyright 1997 to 1999 by Joey Hess. >+ >+# Uncomment this to turn on verbose mode. >+#export DH_VERBOSE=1 >+ >+SHELL=/bin/bash # I use bashisms >+ >+# build phoenix >+export MOZ_PHOENIX=1 >+export MOZ_FIREBIRD=1 >+export MOZ_FIREFOX=1 >+export BUILD_OFFICIAL=1 >+export MOZILLA_OFFICIAL=1 >+#export MOZ_INTERNAL_LIBART_LGPL=1 >+ >+PHOENIX := mozilla-firefox >+PHOENIX_CVS := mozilla >+# things to remove from upstream tarball cause we don't need them >+UPSTREAM_REMOVE := debian mailnews themes/modern editor/ui \ >+ editor/composer/src lib/mac >+DEBIAN_VERSION := $(shell dpkg-parsechangelog | sed -n 's/Version: *\(.*\)/\1/ p') >+UPSTREAM_VERSION := $(shell echo $(DEBIAN_VERSION) | sed 's/-.*$$//') >+LIB_DIR := /usr/lib/mozilla-firefox >+ >+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) >+ OPTFLAGS = -O0 >+else >+ OPTFLAGS = -O2 >+ >+ifeq ($(DEB_BUILD_ARCH),ia64) >+ OPTFLAGS=-O >+endif >+ >+ifeq ($(DEB_BUILD_ARCH),powerpc) >+ OPTFLAGS=-O >+endif >+ >+ifeq ($(DEB_BUILD_ARCH),arm) >+ OPTFLAGS=-O >+endif >+ >+endif >+ >+OPTFLAGS += -DDEBIAN >+ >+DEBUG_FLAG= >+ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) >+ DEBUG_FLAG = --enable-debug >+else >+ DEBUG_FLAG = --disable-debug >+endif >+ >+ifeq ($(DEB_BUILD_ARCH),amd64) >+CC=gcc-3.4 >+CXX=g++-3.4 >+export CC CXX >+endif >+ >+ >+CONFIGURE_OPTIONS = \ >+ --enable-default-toolkit=gtk2 \ >+ --with-default-mozilla-five-home=$(LIB_DIR) \ >+ --with-user-appdir=.mozilla \ >+ --with-system-mng=/usr \ >+ --with-system-png=/usr \ >+ --with-system-jpeg=/usr \ >+ --disable-mailnews \ >+ --disable-composer \ >+ --disable-ldap \ >+ --enable-postscript \ >+ --disable-installer \ >+ --disable-xprint \ >+ --enable-crypto \ >+ --disable-svg \ >+ --enable-mathml \ >+ --disable-tests \ >+ --disable-gtktest \ >+ --enable-xft \ >+ --enable-optimize="-pipe -w $(OPTFLAGS)" \ >+ --with-system-zlib=/usr \ >+ --with-gssapi=/usr \ >+ --without-system-nspr \ >+ --enable-xinerama \ >+ --enable-extensions=cookie,xml-rpc,xmlextras,pref,transformiix,universalchardet,webservices,inspector,gnomevfs,negotiateauth,typeaheadfind \ >+ --disable-pedantic \ >+ --disable-long-long-warning \ >+ --enable-single-profile \ >+ --disable-profilesharing \ >+ --enable-gnomevfs \ >+ --enable-pango \ >+ --disable-strip-libs \ >+ $(DEBUG_FLAG) >+ >+ifneq ($(DEB_BUILD_ARCH),mips) >+ifneq ($(DEB_BUILD_ARCH),mipsel) >+# CONFIGURE_OPTIONS += --enable-static --disable-shared >+endif >+endif >+ >+configure: configure-stamp >+configure-stamp: >+ dh_testdir >+ >+ #(uudecode debian/firefox-gnomestripe-0.1.tar.gz.uu && tar xzf firefox-gnomestripe-0.1.tar.gz) >+ >+ ./configure --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info $(CONFIGURE_OPTIONS) >+ >+ touch configure-stamp >+ >+build: configure-stamp build-stamp >+build-stamp: >+ dh_testdir >+ >+ $(MAKE) >+ >+ (cd debian && uudecode mozilla-firefox.png.uu \ >+ && uudecode debsearch.gif.uu) >+ touch build-stamp >+ >+clean: >+ dh_testdir >+ dh_testroot >+ rm -f build-stamp configure-stamp debian/stamp-* \ >+ debian/mozilla-firefox.png debian/debsearch.gif \ >+ firefox-gnomestripe-0.1.tar.gz >+ >+ -$(MAKE) distclean >+ >+ rm -fr browser/themes/gnomestripe >+ rm -f toolkit/xre/nsWindowCreator.cpp toolkit/xre/showOSAlert.cpp toolkit/xre/nsSigHandlers.cpp extensions/pref/system-pref/src/gconf/nsSystemPrefFactory.cpp >+ dh_clean >+ >+install: build >+ dh_testdir >+ dh_testroot >+ dh_clean -k >+ dh_installdirs >+ >+ $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp >+ chmod 755 debian/mozilla-firefox-xremote-client >+# Remove execute on javascript files >+ find debian/tmp -name '*.so' | xargs chmod -x >+ chmod -x debian/tmp/$(LIB_DIR)/components/*.js >+ >+# Exclude inspector for mozilla-firefox >+ dh_install -pmozilla-firefox '-X*inspector*' '-X*gnome*' >+ dh_install -pmozilla-firefox-dom-inspector >+ dh_install -pmozilla-firefox-gnome-support >+ dh_install -pmozilla-firefox-dev >+ >+#Install helpers >+ install -m 755 debian/mozilla-firefox-runner \ >+ debian/mozilla-firefox/usr/lib/mozilla-firefox/firefox >+ install -m 755 debian/update-mozilla-firefox-chrome \ >+ debian/mozilla-firefox/usr/sbin/update-mozilla-firefox-chrome >+ >+# Filter installed chrome >+ egrep -v 'inspector\.jar|embed-sample\.jar|classic\.jar' \ >+ debian/tmp/$(LIB_DIR)/chrome/installed-chrome.txt \ >+ > debian/mozilla-firefox/$(LIB_DIR)/chrome/installed-chrome.txt >+ >+# Remove installed-extensions.txt >+ rm -rf 'debian/mozilla-firefox/$(LIB_DIR)/defaults/profile/extensions/installed-extensions.txt' >+ >+# Move classic theme's install.rdf to final destination >+ mv debian/mozilla-firefox/$(LIB_DIR)/defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf debian/mozilla-firefox/$(LIB_DIR)/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/ >+# Remove unneeded extensions directory >+ rm -rf debian/mozilla-firefox/$(LIB_DIR)/defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd} >+ >+# Remove unneeded configs >+ rm -f debian/mozilla-firefox/$(LIB_DIR)/defaults/pref/editor.js \ >+ debian/mozilla-firefox/${LIB_DIR}/defaults/pref/mailnews.js \ >+ debian/mozilla-firefox/${LIB_DIR}/defaults/pref/inspector.js \ >+ debian/mozilla-firefox/${LIB_DIR}/defaults/pref/firefox-l10n.js >+ >+# Add Ubuntu package version to preferences >+ echo // Debian package version \ >+ > debian/mozilla-firefox/${LIB_DIR}/defaults/pref/vendor.js >+ echo "pref(\"general.useragent.vendorComment\",\"Ubuntu package $(UPSTREAM_VERSION)\");" \ >+ >> debian/mozilla-firefox/${LIB_DIR}/defaults/pref/vendor.js >+ >+# Move profiles into /etc >+ mv \ >+ debian/mozilla-firefox/$(LIB_DIR)/defaults/profile \ >+ debian/mozilla-firefox/etc/mozilla-firefox/ >+ >+# Ensure that we open links in new windows by default >+ echo // Open links in new windows by default \ >+ >> debian/mozilla-firefox/${LIB_DIR}/defaults/pref/vendor.js >+ echo "pref(\"browser.link.open_external\", 2);" \ >+ >> debian/mozilla-firefox/${LIB_DIR}/defaults/pref/vendor.js >+ >+# Enable smooth scrolling, and use system colours >+ echo "pref(\"browser.display.use_system_colors\", true);"\ >+ >> debian/mozilla-firefox/${LIB_DIR}/defaults/pref/vendor.js >+ echo "pref(\"general.smoothScroll\", true);" \ >+ >> debian/mozilla-firefox/${LIB_DIR}/defaults/pref/vendor.js >+ >+ echo "$(UPSTREAM_VERSION)" > debian/mozilla-firefox/${LIB_DIR}/pkg-ver >+ >+#Move pretty icons into place >+ cp -f debian/mozilla-firefox.xpm \ >+ debian/mozilla-firefox/$(LIB_DIR)/icons/default.xpm >+ cp -f debian/mozilla-firefox.xpm \ >+ debian/mozilla-firefox/$(LIB_DIR)/icons/mozicon50.xpm >+ cp -f debian/mozilla-firefox-small.xpm \ >+ debian/mozilla-firefox/$(LIB_DIR)/icons/mozicon16.xpm >+ cp -f debian/mozilla-firefox.xpm \ >+ debian/mozilla-firefox/$(LIB_DIR)/chrome/icons/default/default.xpm >+ >+# Build architecture-independent files here. >+binary-indep: build install >+ >+ >+# Build architecture-dependent files here. >+binary-arch: build install >+# dh_testversion >+ dh_testdir >+ dh_testroot >+ dh_installdebconf >+ dh_installdocs >+ dh_installexamples >+ dh_installmenu >+# dh_installemacsen >+# dh_installpam >+# dh_installinit >+# dh_installcron >+ dh_installman >+ dh_installinfo >+ dh_installmime >+# dh_undocumented >+ dh_installchangelogs >+ dh_link >+ dh_strip >+ dh_compress >+ dh_fixperms >+# dh_makeshlibs >+ dh_installdeb >+# dh_perl >+ dh_shlibdeps >+ dh_gencontrol >+ dh_md5sums >+ dh_builddeb >+ >+source-tarball-from-cvs: clean >+ cp -af ../$(PHOENIX_CVS) ../$(PHOENIX)-$(UPSTREAM_VERSION).orig >+ cd ../$(PHOENIX)-$(UPSTREAM_VERSION).orig ; rm -rf mailnews debian >+ cd ../$(PHOENIX)-$(UPSTREAM_VERSION).orig ; find . -depth \( -name CVS \ >+ -or -name .cvsignore \) -exec rm -rf '{}' \; >+ cd .. ; tar --remove-files -cf $(PHOENIX)_$(UPSTREAM_VERSION).orig.tar \ >+ $(PHOENIX)-$(UPSTREAM_VERSION).orig >+ rm -rf ../$(PHOENIX)-$(UPSTREAM_VERSION).orig >+ gzip -9 ../$(PHOENIX)_$(UPSTREAM_VERSION).orig.tar >+ >+binary: binary-indep binary-arch >+.PHONY: build clean binary-indep binary-arch binary install configure source-tarball-from-cvs >--- debian/mozilla-firefox.preinst >+++ debian/mozilla-firefox.preinst >@@ -0,0 +1,62 @@ >+#!/bin/sh -e >+ >+LIBDIR=/usr/lib/mozilla-firefox >+VARDIR=/var/lib/mozilla-firefox >+ >+# Remove old link >+rm -fr ${LIBDIR}/defaults/pref >+ >+if [ "$1" = "upgrade" ]; then >+ if [ -d "/usr/lib/mozilla-firebird/defaults/pref" ]; then >+ rm -rf /usr/lib/mozilla-firebird/defaults/pref >+ fi >+ >+ # Remove old alternative to www-browser that version < 0.6.1-1 installed >+ if dpkg --compare-versions "$2" lt 0.6.1-1; then >+ update-alternatives --remove www-browser /usr/bin/MozillaFirebird || true >+ fi >+ >+ # Remove old conf files >+ if dpkg --compare-versions "$2" lt 0.9.1-3; then >+ rm -f /etc/mozilla-firefox/pref/all.js >+ rm -f /etc/mozilla-firefox/pref/security-prefs.js >+ rm -f /etc/mozilla-firefox/pref/unix.js >+ rm -f /etc/mozilla-firefox/pref/xpinstall.js >+ rm -f /etc/mozilla-firefox/pref/non-shared.txt >+ fi >+ >+ if dpkg --compare-versions "$2" lt 0.10.1+1.0PR-5 || >+ dpkg --compare-versions "$2" lt 0.99+1.0PR.1+revertedto0.9.3-0ubuntu3; then >+ if [ -f /etc/mozilla-firefox/profile/US/bookmarks.html ]; then >+ mv /etc/mozilla-firefox/profile/US/bookmarks.html /etc/mozilla-firefox/profile/bookmarks.html >+ fi >+ [ -d /etc/mozilla-firefox/profile/US ] && rmdir --ignore-fail-on-non-empty /etc/mozilla-firefox/profile/US >+ fi >+ >+ if dpkg --compare-versions "$2" lt 1.0-1; then >+ rm -f /etc/mozilla-firefox/pref/firefox-l10n.js >+ rm -f /etc/mozilla-firefox/pref/vendor.js >+ >+ >+ # Remove old installed-chrome.txt >+ rm -f ${VARDIR}/chrome/installed-chrome.txt >+ fi >+ >+ if dpkg --compare-versions "$2" lt 1.0-3; then >+ for f in `find ${LIBDIR}/extensions/ -maxdepth 1 -name '{*}' -type l`; do >+ if [ "`readlink -f $f`" = "${LIBDIR}/defaults/profile/extensions/`basename $f`" ]; then >+ rm -f $f >+ fi >+ done >+ if [ -e ${LIBDIR}/defaults/profile/extensions/installed-extensions.txt ] || [ -L ${LIBDIR}/defaults/profile/extensions/installed-extensions.txt ]; then >+ rm -f ${LIBDIR}/defaults/profile/extensions/installed-extensions.txt >+ fi >+ fi >+ >+ # Move of default profile into /etc >+ if dpkg --compare-versions "$2" lt 1.0+dfsg.1-1; then >+ rm -rf /usr/lib/mozilla-firefox/defaults/profile >+ fi >+fi >+ >+#DEBHELPER# >--- debian/changelog >+++ debian/changelog >@@ -0,0 +1,1824 @@ >+mozilla-firefox (1.0.2-0ubuntu5) hoary; urgency=low >+ >+ * Ensure default homepage is correct (US only) (Ubuntu: #8685) >+ * Low risk fix for crasher caused by dragging images (Moz: #288006) >+ * Trivial fix to make sidebar bookamrks work properly again (Moz: #287459) >+ (The combination of the two above bugs is to give us the important bits of >+ Firefox 1.0.3) >+ * Fix defaults/pref harder >+ >+ -- Thom May <thom@ubuntu.com> Tue, 5 Apr 2005 18:20:21 +0100 >+ >+mozilla-firefox (1.0.2-0ubuntu4) hoary; urgency=low >+ >+ * Always delete /usr/lib/mozilla-firebird/defaults/pref in preinst >+ * Apply patch from moz: 288688; Ubuntu: 8611 >+ JS "lambda" replace exposes malloc heap space after end of JS string >+ >+ -- Thom May <thom@ubuntu.com> Mon, 4 Apr 2005 13:49:06 +0100 >+ >+mozilla-firefox (1.0.2-0ubuntu3) hoary; urgency=low >+ >+ * Only strip our libs once, for debugging porpoises. >+ >+ -- Thom May <thom@ubuntu.com> Fri, 1 Apr 2005 13:07:46 +0100 >+ >+mozilla-firefox (1.0.2-0ubuntu2) hoary; urgency=low >+ >+ * Fix gtk2 themer to correctly set foreground and background >+ * Ensure that we correctly delete XUL.mfasl when we change major versions >+ >+ -- Thom May <thom@ubuntu.com> Mon, 28 Mar 2005 19:22:02 +0100 >+ >+mozilla-firefox (1.0.2-0ubuntu1) hoary; urgency=low >+ >+ * New upstream release >+ * Ensure that AddLangGroup is renamed to NS_AddLangGroup everywhere >+ (Ubuntu: #8103) >+ >+ -- Thom May <thom@ubuntu.com> Wed, 23 Mar 2005 22:07:04 +0000 >+ >+mozilla-firefox (1.0.1-2ubuntu2) hoary; urgency=low >+ >+ * Enable xinerama (Ubuntu: #6414) >+ * Fix warning to talk about Firefox rather than mozilla (Ubuntu: #6182) >+ * Open in new window by default (Ubuntu: #7653) >+ * Fixes for non Latin1 printing (Ubuntu: #6233) >+ * Fix for Extension-Manager crashing with broken xml >+ * Combination of fixes to hopefully get #7711; certainly I can't reproduce >+ the problem now. >+ >+ -- Thom May <thom@ubuntu.com> Tue, 15 Mar 2005 14:27:15 +0000 >+ >+mozilla-firefox (1.0.1-2ubuntu1) hoary; urgency=low >+ >+ * Resynchronise with Debian. >+ Security fixes: CAN-2004-1156 - Window Injection Vulnerability >+ CAN-2005-0232 - Fireflashing >+ CAN-2005-0231 - Firetabbing >+ * Add patch to render hebrew RtL rather than LtR >+ * Add patch to make ',' on the numpad work correctly (Ubuntu: #6301) >+ >+ -- Thom May <thom@ubuntu.com> Mon, 07 Mar 2005 12:54:09 +0000 >+ >+mozilla-firefox (1.0.1-2) unstable; urgency=high >+ >+ * Changes by Mike Hommey: >+ * Urgency: high due to RC bug fix. >+ * debian/update-mozilla-firefox-chrome: Re-initialize Extensions.rdf >+ inside the script instead of relying on mozilla-firefox's default >+ behaviour, which just fails when defaults/profile/extensions/ \ >+ Extensions.rdf doesn't exist (and it seems some people like to remove >+ files in /etc). (Closes: #294175) >+ >+ * Changes by Eric Dorland: >+ * debian/mozilla-firefox.menu: Capitalize "browsers". Thanks Gerfried >+ Fuchs. >+ * debian/mozilla-firefox-runner: Fix from Marc Horowitz to fix sound >+ device detection. (Closes: #297088) >+ * toolkit/content/widgets/tabbrowser.xml: Apply patch from bz#283063, to >+ fix a memory leak when closing tabs. (Closes: #296749) >+ * xpfe/global/resources/content/bindings/browser.xml, >+ xpfe/global/resources/content/bindings/tabbrowser.xml, >+ toolkit/content/widgets/browser.xml, >+ toolkit/content/widgets/tabbrowser.xml: Apply patches from bz#131456 >+ to fix various tab related memory leaks. (Closes: #280586) >+ * netwerk/protocol/http/src/nsHttpHandler.cpp: Patch from bz#265536 to >+ differentiate between AMD64 and i386. (Closes: #282592) >+ >+ -- Eric Dorland <eric@debian.org> Sat, 5 Mar 2005 18:46:09 -0500 >+ >+mozilla-firefox (1.0.1-1) unstable; urgency=high >+ >+ * New upstream release. (Closes: #296851) >+ - This release fixes the Secunia window injection bug, >+ CAN-2004-1156. (Closes: #293664) >+ >+ * Changes by Mike Hommey: >+ * debian/rules: Some clean-up. >+ * debian/control: Changed my maintainer address. >+ * debian/README.Debian: Add a note about automatic updates for >+ extensions. (Closes: #296761) >+ >+ * Changes by Eric Dorland: >+ * browser/app/profile/firefox.js: Remove disable IDN pref, it's the >+ default now anyway. >+ >+ -- Eric Dorland <eric@debian.org> Tue, 1 Mar 2005 02:03:48 -0500 >+ >+mozilla-firefox (1.0+dfsg.1-6ubuntu1) hoary; urgency=low >+ >+ * Resynchronise with Debian. >+ * Stop disabling IDN. >+ * Update Pango patches to fix text area problems (Closes: Ubuntu #6007) >+ * Drop alternatives priority to 84, so that people who install ephy get it. >+ * Revert b.m.o 155293 (Closes: Ubuntu #5992) >+ * Change from "Firefox" to "Firefox Web Browser" (Closes: Ubuntu #6380) >+ >+ -- Thom May <thom@ubuntu.com> Fri, 11 Feb 2005 12:49:57 +0000 >+ >+mozilla-firefox (1.0+dfsg.1-6) unstable; urgency=high >+ >+ * The "And I thought IE had security bugs!" release. >+ * toolkit/content/widgets/tabbrowser.xml, >+ xpfe/global/resources/content/bindings/tabbrowser.xml: Fix >+ "Firetabbing" vulnerability from bugzilla#280056, fixes >+ CAN-2005-0231. (Closes: #294415) >+ * modules/plugin/base/src/nsPluginHostImpl.cpp: Fix "Fireflashing" >+ vulnerability from bugzilla#280664, fixes CAN-2005-0232. (Also Closes: >+ #294415) >+ * build/unix/run-mozilla.sh: Patch from Javier Fernández-Sanguino Peña >+ to fix insecure temp file usage in run-mozilla.sh. (Closes: #294127) >+ * netwerk/base/src/nsStandardURL.cpp, netwerk/base/src/nsStandardURL.h: >+ Patch from bugzilla#261934 to make the network.enableIDN preference >+ work and again. >+ * browser/app/profile/firefox.js: Disable IDN by default. This doesn't >+ close #293975, but drops its severity. >+ * debian/README.Debian: Add warning and describe how to enable IDN. >+ >+ -- Eric Dorland <eric@debian.org> Wed, 9 Feb 2005 22:56:17 -0500 >+ >+mozilla-firefox (1.0+dfsg.1-5) unstable; urgency=low >+ >+ * debian/mozilla-firefox.desktop: Don't translate "Mozilla Firefox" into >+ French. >+ * browser/app/profile/firefox.js: Set mozilla.widget.raise-on-setfocus >+ to false to prevent unecessary window raising. (Closes: #292049) >+ * debian/rules: Don't compile statically on mips and mipsel, since it's >+ broken for now. >+ >+ -- Eric Dorland <eric@debian.org> Sun, 6 Feb 2005 15:02:36 -0500 >+ >+mozilla-firefox (1.0+dfsg.1-4) unstable; urgency=low >+ >+ * debian/mozilla-firefox.desktop: Add French translations from Jerome >+ Warnier. I will accept more, but closing this bug. (Closes: #292506) >+ * debian/README.Debian: Update the Emacs keybindings instructions. >+ (Closes: #291691) >+ * debian/mozilla-firefox.1: >+ - Remove -splash from the manpage, it has never worked. (Closes: >+ #287088) >+ - Add units to -height and -width description. (Closes: #285142) >+ >+ -- Eric Dorland <eric@debian.org> Wed, 2 Feb 2005 01:42:53 -0500 >+ >+mozilla-firefox (1.0+dfsg.1-3) experimental; urgency=low >+ >+ * debian/mozilla-firefox.desktop: Add %u to the exec line so that apps >+ know it can handle URLs. (Closes: #290132) >+ * debian/README.Debian: >+ - Improve button reversal instructions. Thanks Christian Mayrhuber >+ - Fix reference to ~/.firefox. >+ * debian/rules: Enable static building. This will build firefox as one >+ large binary (mostly) and should speed a few things up, especially >+ program load time. I'd like to hear about any speedup (or slow down) >+ you exprience. Porters, please build this for your arch to make sure >+ this doesn't break anything. >+ >+ -- Eric Dorland <eric@debian.org> Thu, 20 Jan 2005 01:40:34 -0500 >+ >+mozilla-firefox (1.0+dfsg.1-2ubuntu5) hoary; urgency=low >+ >+ * Fix build deps. >+ >+ -- Thom May <thom@ubuntu.com> Fri, 28 Jan 2005 11:14:40 +0000 >+ >+mozilla-firefox (1.0+dfsg.1-2ubuntu4) hoary; urgency=low >+ >+ * Fix alternatives priority to 85 (Ubuntu #4801) >+ * Use startup notification (Ubuntu: #4984) >+ * Don't set LD_ASSUME_KERNEL for old java VMs, they won't run on Ubuntu >+ anyway (Ubuntu: #5636) >+ * Don't blow away users profile every run (Ubuntu: #3615) >+ * Download to Desktop (Ubuntu: #1358) >+ * Enable gnomestripe theme >+ >+ -- Thom May <thom@ubuntu.com> Mon, 24 Jan 2005 15:29:18 +0000 >+ >+mozilla-firefox (1.0+dfsg.1-2ubuntu3) hoary; urgency=low >+ >+ * should fix the typeahead in epiphany-browser. >+ * fixed the typeahead conflict with the find extension. >+ * debian/rules: >+ - added typeaheadfind to the extensions. >+ >+ -- Sebastien Bacher <seb128@canonical.com> Sun, 23 Jan 2005 15:37:40 +0100 >+ >+mozilla-firefox (1.0+dfsg.1-2ubuntu2) hoary; urgency=low >+ >+ * The "nail that gets hammered down" release >+ * Fixes for epiphany and other embedded users: >+ mozilla: #256988, #277587, #97580, #270243, #276482, #238052 >+ gnome: #157435 >+ * Allow search engines to be added to a users profile (Ubuntu: #1855) >+ * Handle warty's entertaining version number in preinst (Ubuntu: #3949) >+ * "Bang, bang, bang" >+ >+ -- Thom May <thom@planetarytramp.net> Thu, 20 Jan 2005 11:30:24 +0000 >+ >+mozilla-firefox (1.0+dfsg.1-2ubuntu1) hoary; urgency=low >+ >+ * Resynchronise with Debian. >+ >+ -- Scott James Remnant <scott@canonical.com> Tue, 11 Jan 2005 12:53:01 +0000 >+ >+mozilla-firefox (1.0+dfsg.1-2) unstable; urgency=medium >+ >+ * debian/mozilla-firefox-gnome-support.postrm, >+ debian/mozilla-firefox-dom-inspector.postrm: Don't die if >+ update-mozilla-firefox-chrome dies. (Closes: #287355) >+ >+ -- Eric Dorland <eric@debian.org> Sun, 9 Jan 2005 23:51:10 -0500 >+ >+mozilla-firefox (1.0+dfsg.1-1) unstable; urgency=low >+ >+ * Not a new upstream release. >+ * other-licenses/branding/firefox, other-licenses/7zstub/firefox: Remove >+ these from the .orig.tar.gz, since they are not DFSG-free. We're not >+ using the files anyway, so out they go. (Not sure the 7zstub stuff is >+ non-free, but it's Windows only so no harm) >+ * debian/rules: >+ - Remove explicit low-optimization on alpha, since Falk >+ Hueffner claims it works. >+ - Move entire defaults/profile directory into /etc/mozilla-firefox, >+ rather than just the bookmarks.html. (Closes: #285538) >+ * debian/mozilla-firefox.links: Link entire defaults/profile now. >+ * debian/mozilla-firefox.preinst: Add upgrade code to remove old >+ defaults/profile to make way for new symlink. >+ * debian/mozilla-firefox.dirs: Just create etc/mozilla-firefox. >+ >+ -- Eric Dorland <eric@debian.org> Sun, 19 Dec 2004 01:31:44 -0500 >+ >+mozilla-firefox (1.0-5) unstable; urgency=medium >+ >+ * Changes by Mike Hommey: >+ * toolkit/mozapps/extensions/src/nsExtensionManager.js.in: Make the >+ extensions upgrade work again. (Closes: #282143) >+ * debian/rules: Better DEB_BUILD_OPTIONS handling, better debugging >+ build (DEB_BUILD_OPTIONS="nostrip debug") >+ * toolkit/mozapps/extensions/src/nsExtensionManager.js.in, >+ toolkit/mozapps/extensions/content/extensions.js: Allow users to >+ disable globally installed extensions. >+ >+ * Changes by Eric Dorland: >+ * debian/rules: Remove explicit low-optimization on sparc. Apparently >+ there was an issue for a number of arches that required lower >+ optimization settings, but it is now resolved. So porters, please >+ check -O2 on arm, alpha, powerpc and ia64 and let me know if it's >+ safe. Thanks David S. Miller. (Closes: #284533) >+ >+ -- Eric Dorland <eric@debian.org> Tue, 7 Dec 2004 01:06:48 -0500 >+ >+mozilla-firefox (1.0-4) unstable; urgency=medium >+ >+ * debian/control: Make mozilla-firefox-gnome-support and xprt-xprintorg >+ Suggests, no Recommends after a look at policy. (Closes: #282432) >+ * debian/README.Debian: >+ - Refer to .mozilla/firefox, not .firefox. >+ - Explain how to reenable emacs style keybindings. (Closes: #282321) >+ >+ -- Eric Dorland <eric@debian.org> Sat, 27 Nov 2004 20:40:10 -0500 >+ >+mozilla-firefox (1.0-3) unstable; urgency=low >+ >+ * Changes by Mike Hommey >+ * The "becoming more and more an iceweasel" release. >+ * debian/firefox.js: >+ + Enable firefox's internal locale autodetection. >+ + Disable default browser question at startup. (Closes: #280752) >+ * debian/mozilla-firefox-runner: Removed our locale autodetection. >+ That means now locales installed in user profiles are automatically >+ used, and that there is no need for /var/lib/mozilla-firefox/locales.d >+ anymore. >+ * debian/mozilla-firefox.dirs: Removed creation of >+ /var/lib/mozilla-firefox/locales.d. >+ * debian/rules: Removed creation of the locale file in >+ /var/lib/mozilla-firefox/locales.d. >+ * debian/presubj: Put some more recent information. >+ * htmlparser/src/nsParser.cpp: Applied patch from bz#57717 so that empty >+ html files don't get <html><body></body></html> when viewing source. >+ * browser/base/content/aboutDialog.css: increase the User Agent element >+ height as in bz#238137 (but up to MacOSX's height) to show the full User >+ Agent string. >+ * xpcom/io/nsAppDirectoryServiceDefs.h, >+ xpcom/io/nsAppFileLocationProvider.cpp, >+ xpfe/components/search/src/nsInternetSearchService.cpp: Applied patch from >+ bz#123315 so that Internet search services in user profiles are supported. >+ (Closes: #219053) >+ * debian/mozilla-firefox-runner: >+ + Remove compatibility.ini only if it is older than >+ /usr/lib/mozilla-firefox/components.ini. That way, we only rebuild it >+ after an update-mozilla-firefox-chrome. >+ + Detect if we're being run through sudo without the -H option, in which >+ case we force setting of $HOME. (Closes: #218156) >+ * browser/app/profile/firefox.js: Sync'ed with debian/firefox.js. >+ * toolkit/mozapps/extensions/src/nsExtensionManager.js.in: >+ + Removed some error messages that get there because firefox is trying to >+ write in the /usr/lib/mozilla-firefox directory as a user. They are >+ useless and lead users to think something is going wrong while it's the >+ (stupid but) normal way firefox works. >+ + Avoid creation of directories when attempting to read files, that >+ throwed uncaught exceptions breaking some stuff in several different >+ ways when extensions don't follow the new scheme for extensions. >+ + Avoid copying stuff from >+ /usr/lib/mozilla-firefox/defaults/profile/extensions/ to >+ /usr/lib/mozilla-firefox/extensions/, that's the *very* old way of >+ installing extensions, which, since the old scheme has been thrown away, >+ won't work anyway, if any extension provides files out there. >+ + CheckForMismatches: Avoid to disable already disabled global extensions, >+ and don't propose to upgrade the locked extensions. That fixes a >+ never-ending loop occuring when running firefox for the first time in a >+ user account, while some global extensions are expired. >+ (Closes: #278722, #281537) >+ * debian/mozilla-firefox.prerm, debian/mozilla-firefox.preinst: Moved >+ removal of links to /usr/lib/mozilla-firefox/defaults/profile/extensions/ >+ sitting in /usr/lib/mozilla-firefox/extensions/, if any remaining, from >+ prerm to preinst. We remove them once and for all, they won't be created >+ by us anymore. >+ * debian/update-mozilla-firefox-chrome: >+ + Removed support for extensions in >+ /usr/lib/mozilla-firefox/defaults/profile/extensions/. >+ + Removed some clean-up that had been introduced to help the Extensions >+ Manager not to die, and which, actually, did not work out quite so well. >+ Anyways, with the changes this time, the EM is supposed to support much >+ more problems than ever before (as usual ;) ) so we don't need that >+ anymore. >+ + Avoid stupid mv error messages when firefox-bin -register fails (which >+ is not supposed to happen, but you're never too careful) >+ * debian/update-mozilla-firefox-chrome, debian/mozilla-firefox.preinst: >+ Move removal of some very old stuff to preinst, to do it once and for all >+ instead of doing it every time we run update-mozilla-firefox-chrome. >+ * netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp: Applied patch from >+ bz#124561 to get a prompt for username/password in case anonymous login >+ fails. >+ * debian/mozilla-firefox-runner: >+ + Added check for more arguments so that the url in the command line get >+ detected more accurately. >+ + When a file name is given on the command line, prepend "file://" and >+ change spaces into %20. (Closes: #281800) >+ >+ * Changes by Eric Dorland >+ * debian/mozilla-firefox.prerm: Patch from Philipp Weis to fix order of >+ find arguments. (Closes: #280852) >+ * debian/mozilla-firefox.desktop: Support new mime type handler in Gnome >+ 2.8. (Closes: #281274) (MH: I added some more myme-types) >+ * debian/mozilla-firefox.postinst: Run update-desktop-database if it >+ exists. >+ * widget/src/gtk/nsWidget.cpp: We don't use gtk anymore, might as well >+ revert these patches. Thanks Stephane Despret. >+ >+ -- Eric Dorland <eric@debian.org> Thu, 18 Nov 2004 22:16:28 -0500 >+ >+mozilla-firefox (1.0-2ubuntu3) hoary; urgency=low >+ >+ * browser/components/prefwindow/content/pref-advanced.xul: Revert Ubuntu >+ changes. Debian now disables application updates and locks packaged >+ extensions, so commenting out the whole software update expander is >+ unnecessary; also, our changes made the file invalid XML (closes: Ubuntu >+ #3761). >+ >+ -- Colin Watson <cjwatson@canonical.com> Tue, 16 Nov 2004 19:27:55 +0000 >+ >+mozilla-firefox (1.0-2ubuntu2) hoary; urgency=low >+ >+ * Resolve merge conflicts >+ - debian/mozilla-firefox-runner: Debian commented out Xprint code, where >+ we deleted it. Revert to their version >+ - browser/app/profile/firefox.js: Debian set autoUpdateEnabled to >+ "false" rather than commenting out a bunch of settings. Revert to their >+ version >+ - browser/app/profile/firefox.js: Update branded version number to 1.0 >+ - Skip inapplicable changes >+ - browser/app/profile/firefox.js: throbber changed >+ - Manually apply some changes which weren't automatically merged due to >+ EOL-at-EOF conditions >+ - debian/mozilla-firefox.NEWS >+ - debian/mozilla-firefox.dirs >+ - Revert debian/rules changes, merge Debian changes and reapply (creating >+ a trivial conflict rather than a big nasty one) >+ >+ -- Matt Zimmerman <mdz@canonical.com> Sun, 14 Nov 2004 10:52:01 -0800 >+ >+mozilla-firefox (1.0-2ubuntu1) hoary; urgency=low >+ >+ * Resynchronise with Debian. >+ >+ -- Scott James Remnant <scott@canonical.com> Sat, 13 Nov 2004 21:38:27 +0000 >+ >+mozilla-firefox (1.0-2) unstable; urgency=low >+ >+ * Changes by Mike Hommey >+ * The "don't do too much on the same day, it's bad for health" release. >+ * debian/firefox.js: Re-activated the extensions update service, and >+ removed the update url. >+ * browser/app/profile/firefox.js: Sync'ed with debian/firefox.js. >+ * debian/mozilla-firefox-dom-inspector.preinst: Removed old inspector.js >+ file. >+ * toolkit/mozapps/extensions/src/nsExtensionManager.js.in, >+ toolkit/mozapps/extensions/content/extensions.js: Disabled possibility >+ to update locked extensions and themes. Locked extensions being the >+ ones installed by the packaging system, they should be updated through >+ that. >+ * toolkit/mozapps/update/src/nsUpdateService.js.in: Disabled application >+ update functionnality. Firefox should be updated through the packaging >+ system. >+ * browser/components/prefwindow/content/pref-advanced.xul: Removed the >+ preferences panel item to activate application update, since it is >+ totally disabled. >+ * debian/mozilla-firefox-runner: Remove compatibility.ini instead of >+ compreg.dat. (Eric: This will cause a rebuild of the compreg.dat) >+ >+ * Changes by Eric Dorland: >+ * debian/mozilla-firefox.NEWS: Fix typos. >+ * README.Debian: >+ - Add note about application update being completely disabled. >+ - Fix path to XUL.mfsal >+ >+ -- Eric Dorland <eric@debian.org> Wed, 10 Nov 2004 22:56:22 -0500 >+ >+mozilla-firefox (1.0-1) unstable; urgency=medium >+ >+ * New upstream release (Closes: #280449) >+ >+ * Changes by Mike Hommey: >+ * netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp: Apply new patch >+ #164795 from bz#266835 + some tweaks as previously. This might lead to >+ encoding problems with the password, but it is supposed to be ASCII >+ anyway. >+ * toolkit/mozapps/extensions/src/nsExtensionManager.js.in: Reworked the >+ previous patches so that the Extensions Manager shows extensions that >+ have been disabled due to version mismatch, and added a workaround so >+ that components registration works correctly. >+ * debian/update-mozilla-firefox-chrome: Removed part that is useless due >+ to last changes in the Extensions Manager. >+ * Make the inspector a real extension again: >+ - debian/inspector/00dom-inspector: File for >+ /var/lib/mozilla-firefox/extensions.d. >+ - debian/inspector/Uninstall: Uninstall file needed in extension >+ directory. >+ - debian/inspector/install.rdf: install.rdf taken from older versions, >+ and adapted to newer versions, adding registered chrome. >+ - debian/mozilla-firefox-dom-inspector.dirs: Removed. Everything will >+ be created by dh_install. >+ - debian/mozilla-firefox-dom-inspector.install: install >+ debian/inspector.rdf and most inspector files in the right place in >+ /usr/lib/mozilla-firefox/extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9} >+ and /var/lib/mozilla-firefox >+ * Make the classic theme a real extension, even though it's still in >+ the main package: >+ - debian/theme/00classic: File for >+ /var/lib/mozilla-firefox/extensions.d. >+ - debian/theme/Uninstall: Uninstall file needed in extension >+ directory. >+ - debian/mozilla-firefox.install: Install all files in the right >+ place in >+ /usr/lib/mozilla-firefox/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd} >+ - debian/mozilla-firefox.dirs: Removed creation of >+ /usr/lib/mozilla-firefox/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/chrome, >+ it will be done by dh_install. >+ - browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in: >+ Added chrome to be registered. >+ * Removed support for /var/lib/mozilla-firefox/chrome.d: >+ - debian/mozilla-firefox.dirs: Removed creation of the directory. >+ - debian/rules: Removed creation of files there, and put the >+ installed-chrome.txt, excluding inspector and classic theme stuff, >+ directly in /usr/lib/mozilla-firefox/chrome. >+ - debian/update-mozilla-firefox-chrome: Removed all >+ /var/lib/mozilla-firefox/chrome.d related stuff. >+ - debian/mozilla-firefox.links: Removed installed-chrome.txt link. >+ - toolkit/mozapps/extensions/src/nsExtensionManager.js.in: disable >+ extensions that fail to install chrome. >+ * debian/mozilla-firefox-runner: Remove user profile compreg.dat at >+ launch time. >+ * Moved some files in /var/lib/mozilla-firefox: >+ - debian/mozilla-firefox.links: Add a symlink for Extensions.rdf >+ and components.ini, from /usr to /var. >+ - debian/mozilla-firefox.prerm: Don't remove files we don't >+ provide and remove files at their new locations. >+ - debian/mozilla-firefox.preinst: Remove >+ /var/lib/mozilla-firefox/installed-chrome.txt. >+ - debian/update-mozilla-firefox-chrome: Create links for >+ Extensions.rdf and components.ini after register call, and remove >+ components.ini before. >+ * Clean-up in files generated by update-mozilla-firefox-chrome: >+ - debian/mozilla-firefox.links: Put all the links generated by >+ update-mozilla-firefox-chrome into the package. >+ - debian/mozilla-firefox.prerm: Remove all /var files generated >+ in the remove target, and changed the way we clean-up >+ /var/lib/mozilla-firefox. >+ * debian/mozilla-firefox.install: Removed chromelist.txt. >+ * Add support for extensions preferences: >+ - debian/update-mozilla-firefox-chrome: Handle >+ /usr/lib/mozilla-firefox/defaults.ini file. >+ - debian/mozilla-firefox.links: Add a symlink to /var for >+ defaults.ini. >+ - toolkit/mozapps/extensions/src/nsExtensionManager.js.in: Added >+ defaults registration in -register command. >+ - mozilla-firefox-dom-inspector.install: Move inspector.js into >+ the appropriate extension specific directory. >+ * Move preferences back into /usr: >+ - debian/rules: Don't move the prefs into >+ /etc/mozilla-firefox/pref, and put the vendor thing into /usr >+ as well, and remove firefox-l10.js file. >+ - debian/mozilla-firefox.preinst: remove old prefs in /etc and >+ old symlink /usr/lib/mozilla-firefox/defaults/pref. >+ - debian/firefox.js: new Debian default preferences file. >+ - debian/mozilla-firefox.install: install firefox.js in >+ /etc/mozilla-firefox/pref. >+ - debian/mozilla-firefox.links: rename >+ /usr/lib/mozilla-firefox/defaults/pref symlink to >+ /usr/lib/mozilla-firefox/defaults/syspref. >+ - toolkit/mozapps/extensions/src/nsExtensionManager.js.in: Added >+ a hook so that defaults/syspref gets registered in defaults.ini >+ after all other extensions preferences. >+ * debian/mozilla-firefox.preinst: only clean-up stuff if we are >+ upgrading from a version known to still have the files. Added some >+ more clean-up. >+ * debian/mozilla-firefox.install: Removed useless init.d. >+ * modules/libpref/src/init/all.js: Fixed all chrome URLs which refered to >+ mozilla stuff. >+ * debian/update-mozilla-firefox-chrome: Remove some more files before running >+ firefox-bin -register. >+ >+ * Changes by Eric Dorland: >+ * debian/mozilla-firefox.NEWS: Add warning about broken extension and >+ locale packages with this release. >+ * debian/mozilla-firefox-runner: Comment out warning about xprint, >+ xprint isn't necessarily needed for printing since postscript was >+ reenabled. (Closes: #279858) >+ >+ -- Eric Dorland <eric@debian.org> Wed, 10 Nov 2004 00:33:44 -0500 >+ >+mozilla-firefox (0.99+1.0RC1-4ubuntu1) hoary; urgency=low >+ >+ * Resynchronise with Debian. >+ >+ -- Scott James Remnant <scott@canonical.com> Tue, 09 Nov 2004 19:09:41 +0000 >+ >+mozilla-firefox (0.99+1.0RC1-4) unstable; urgency=low >+ >+ * debian/mozilla-firefox-runner: >+ - Fixed to run properly with dash. (Closes: #279549). >+ - Fixed indentation. >+ - Added a basic debugger support. >+ * debian/mozilla-firefox.1: Added information about debugger options. >+ * debian/rules: Added a debug option to DEB_BUILD_OPTIONS. If you want to >+ build a fully gdb'able package, use DEB_BUILD_OPTIONS="noopt nostrip >+ debug" >+ * netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp: Apply new patch from >+ bz#266835. >+ - Further change this patch to use Append rather than AppendLiteral, >+ which doesn't seem to exist. (ED) >+ >+ -- Mike Hommey <mh@glandium.org> Thu, 4 Nov 2004 22:01:51 +0900 >+ >+mozilla-firefox (0.99+1.0RC1-3ubuntu1) hoary; urgency=low >+ >+ * Fix AMD64 build. >+ * Add -dev package (Ubuntu: #3199) >+ * Use pango for rendering >+ * Restore branding changes >+ >+ -- Thom May <thom@canonical.com> Thu, 4 Nov 2004 14:53:04 +0000 >+ >+mozilla-firefox (0.99+1.0RC1-3) unstable; urgency=low >+ >+ * netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp: Apply patch from >+ bz#266835 to fix anonymous user password issue. (Closes: #226784) >+ * toolkit/mozapps/extensions/src/nsExtensionManager.js.in: (MH) >+ - Fully apply previous patches, which for some reason left a spurious code >+ line which made the extensions manager not like expired extensions >+ anymore. (Closes: #279140) >+ - Enhanced extensions manager so that the behaviour described in >+ https://bugzilla.mozilla.org/show_bug.cgi?id=247846#c14 *actually* >+ works. Extensions packagers are invited to move their chrome files >+ accordingly, and remove /var/lib/mozilla-firefox/chrome.d files so that >+ extensions chrome don't get registered when they are forced-disable due >+ to version mismatch or some other reason. >+ * debian/mozilla-firefox-runner: >+ - Fix some thinkos. (MH) >+ - Fix for loading files from the command line. (Closes: #279018) (MH) >+ - Removed setting --display from $DISPLAY, let it get it from the >+ environment, but pass --display if it is set. (Mike, >+ I'm worried this will screw up some session >+ managers, let me know what you think, we can revert it) >+ - Removed FIREFOX_OPEN_IN stuff, so that firefox now obeys to "open >+ links from other applications in" setting. (Closes: #279073) (MH) >+ - Enhanced command line parsing, and drop empty arguments. >+ (Closes: #279138) (MH) >+ - No need for a find to look for XUL.mfasl, we already have its >+ location from the path list taken from profiles.ini. (MH) >+ - Better detection of dsp wrapper, when FIREFOX_DSP=auto. >+ (Closes: #254611) (MH) >+ - Correctly open local files even when firefox was not previously >+ running. (Closes: #279018) (MH) >+ * debian/mozilla-firefox.1: (MH) >+ - Removed references to FIREFOX_OPEN_IN. >+ - Added the -safe-mode option. >+ * debian/mozilla-firefoxrc: Removed FIREFOX_OPEN_IN. (MH) >+ >+ -- Eric Dorland <eric@debian.org> Tue, 2 Nov 2004 00:46:28 -0500 >+ >+mozilla-firefox (0.99+1.0RC1-2) unstable; urgency=medium >+ >+ * browser/app/profile/firefox.js: Disable browser update checking by >+ default. >+ * debian/mozilla-firefox-runner: Apply patch from Aurelien Jarno to fix >+ variable name typo. (Closes: #278844) >+ >+ -- Eric Dorland <eric@debian.org> Fri, 29 Oct 2004 23:50:59 -0400 >+ >+mozilla-firefox (0.99+1.0RC1-1) unstable; urgency=medium >+ >+ * New upstream release. >+ * layout/xul/base/src/nsImageBoxFrame.{cpp,h}: Remove some conflicts >+ from a previous patch. >+ >+ -- Eric Dorland <eric@debian.org> Thu, 28 Oct 2004 23:33:46 -0400 >+ >+mozilla-firefox (0.10.1+1.0PR-5) unstable; urgency=low >+ >+ * debian/rules: (MH) >+ - Use upstream extensions set. This will eventually get a >+ correct help menu and fix some yet undiscovered UI issues. >+ (Closes: #257946) >+ - Added support for DEB_BUILD_OPTIONS=noopt. >+ - Changed OPTFLAGS assignment. >+ - Remove whitespace characters in version number for UserAgent >+ branding. >+ - Install mozilla-firefox-runner into /usr/lib/mozilla-firefox/firefox >+ (Closes: #278477) >+ * debian/mozilla-firefox.links: (MH) >+ - Link /usr/bin/firefox and /usr/bin/mozilla-firefox to >+ /usr/lib/mozilla-firefox/firefox. >+ - Removed obsolete profile/US links. >+ * debian/mozilla-firefox.dirs: Create /etc/mozilla/profile instead of >+ /etc/mozilla/profile/US. (MH) >+ * toolkit/xre/nsAppRunner.cpp: Fix crash in nsCmdLineService::Initialize >+ when argc is changed by gtk (when treating gtk specific arguments) >+ (MH) >+ * debian/mozilla-firefox-runner (Changes by MH): >+ - Removed workaround for bug #122990. First, xmlterm is not an activated >+ extension, and secondly, if it still requires the TERM environment >+ variable, it is the user's duty to set it to whatever he wants, not >+ firefox's start script's. >+ - Removed the ulimit -c setting. First, it is set by default to 0 on a >+ newly installed debian, and secondly, it is user's choice to set it or >+ not if he needs to get core files. >+ - Removed unused shell variables. >+ - Removed unsetting AUDIODEV variable. If it still crashes, it does belong >+ to some other code than firefox. The AUDIODEV environment variable is >+ used nowhere in firefox code: >+ http://lxr.mozilla.org/aviarybranch/search?string=AUDIODEV >+ Note that there is a "A crash which occurred when AUDIODEV doesn't >+ contain "/" was fixed." log message in esound version 0.2.33 changes and >+ that the bug may have belonged there. >+ - Replaced ${HOME}/.mozilla-firefoxrc file by a ${HOME}/.mozilla/firefox/rc >+ file. The former is still supported, though, but will bring a warning >+ message. If both are present, only the latter is taken into account. >+ - Changed the way system and user FIREFOX_DSP and FIREFOX_OPEN_IN >+ variables are handled. First, use system values defined in >+ /etc/mozilla-firefox/mozilla-firefoxrc, then override with >+ ${HOME}/.mozilla/firefox/rc and then with runtime environment variables. >+ - Don't die when DISPLAY is not set. Display can be passed by --display >+ option, and if not set and needed (some options don't require it), >+ firefox will complain. >+ - Some shell code simplifications by using some coreutils. >+ - Added better command line parsing. >+ - Added verbosity mode. >+ - Removed setting of FONTCONFIG_PATH, /usr/lib/mozilla-firefox/res/Xft >+ doesn't exist >+ - Factorized localization detection. >+ * debian/mozilla-firefox.1 (MH): >+ - Made some clean-up between dashes and hyphens. >+ - Removed obsolete options and added new ones. >+ - Added informations about some debian specific stuff. >+ * debian/update-mozilla-firefox-chrome: Changed the way we move files to >+ /var/lib/mozilla-firefox. It will avoid creating files with a * in their >+ name whenever registration failed. (MH) >+ * debian/README.Debian: Update java instructions, tell them to just use >+ java-package. >+ >+ -- Eric Dorland <eric@debian.org> Thu, 28 Oct 2004 21:30:40 -0400 >+ >+mozilla-firefox (0.10.1+1.0PR-4) unstable; urgency=medium >+ >+ * This release mostly courtesy Mike Hommey. >+ * layout/src/xul/base/src/nsImageBoxFrame.*: Backported patch from >+ bz#255372. (Closes: #278046) >+ * toolkit/mozapps/extensions/src/nsExtensionManager.js.in: Force locking >+ globally installed extensions, that will prevent extensions packages >+ files to be unexpectedly removed by firefox. >+ * debian/control: Add Mike Hommey as an Uploader. >+ * debian/mozilla-firefox.install: Removed content-packs.jar which is >+ mozilla-browser specific. >+ * debian/mozilla-firefox.dirs: >+ - Remove leading /'s. >+ - Create >+ /usr/lib/mozilla-firefox/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd} >+ /chrome directory so that preview is shown in the Themes Manager. Yes, >+ this is stupid, but it is the way firefox wants it (and it's not even >+ created by make install, nor in the official binary tarball. It is >+ only created at run time, but you know what ? under *nix, a normal >+ user can't create that directory) (Closes: #276404) >+ * debian/rules: Add a /etc/mozilla-firefox/pref/vendor.js file adding >+ the debian package version to the UserAgent. (Closes: #268654) >+ * debian/README.Debian: Update java instructions. I'd love some more >+ definitive pointers. (Closes: #277983) >+ >+ -- Eric Dorland <eric@debian.org> Tue, 26 Oct 2004 00:11:48 -0400 >+ >+mozilla-firefox (0.10.1+1.0PR-3) experimental; urgency=low >+ >+ * debian/control: >+ - Rename the mozilla-firefox-gnome-vfs package >+ mozilla-firefox-gnome-support since it does more than vfs. No >+ need for Replaces or anything, since it never actually made it to >+ the archive. >+ - Remove strict build dependencies on g++ and binutils, since the >+ fixed versions have hit sarge. >+ - Remove hppa build depends, since gcc has also been fixed there. >+ - Build-depend on libgnome2-dev and libgconf2-dev to build in more >+ gnome support. >+ - Have mozilla-firefox recommend it's gnome support. >+ * debian/rules: >+ - Remove hppa CC redefinitions. >+ - Exclude *gnome* not just *gnomevfs*. >+ - dh_install for gnome-support. >+ * debian/mozilla-firefox-gnome-vfs.*: Rename to >+ mozilla-firefox-gnome-support.*. >+ * debian/mozilla-firefox-gnome-support.install: Grab *gnome*, not just >+ *gnomevfs*. >+ >+ -- Eric Dorland <eric@debian.org> Thu, 21 Oct 2004 23:04:53 -0400 >+ >+mozilla-firefox (0.10.1+1.0PR-2) experimental; urgency=low >+ >+ * debian/mozilla-firefox-runner: >+ - Patch from Sam Morris to handle cleanup of directories with >+ unusual names. >+ - Fix return value check, patch from rgselk. (Closes: #269690) >+ * debian/mozilla-firefox.1: List full path to firefox-bin. (Closes: >+ #275563) >+ * debian/rules: >+ - --with-gssapi=/usr, enable Negotiate extension. (Closes: >+ #274258) >+ - Enable gnomevfs support, >+ * debian/control: >+ - Build-depend on libkrb5-dev. >+ - Build-depend on libgnomevfs2-dev. >+ - New gnomevfs package, based on work by Mike Hommey. (Closes: >+ #262062) >+ * debian/mozilla-firefox-gnome-vfs.post{inst,rm}: Added, same as >+ corresponding files from mozilla-firefox-dom-inspector. >+ * debian/mozilla-firefox-gnome-vfs.install: Install gnomevfs components. >+ * browser/app/profile/firefox.js: Set >+ network.negotiate-auth.trusted-uris to https:// to enable the >+ negotiate extension over secure links. >+ * config/rules.mk: Tweak patch from Thiemo Seufer to include svg_doc in >+ non-optimization. (Closes: #273353) >+ >+ -- Eric Dorland <eric@debian.org> Sun, 17 Oct 2004 21:25:08 -0400 >+ >+mozilla-firefox (0.10.1+1.0PR-1) experimental; urgency=critical >+ >+ * New upstream release, fixes security issue bz#259708. (Closes: >+ #274493) >+ >+ -- Eric Dorland <eric@debian.org> Sun, 3 Oct 2004 03:32:43 -0400 >+ >+mozilla-firefox (0.10+1.0PR-1) experimental; urgency=low >+ >+ * New upstream release. (Closes: #273700, #267003) >+ * toolkit/mozapps/extensions/src/nsExtensionManager.js.in, >+ netwerk/dns/src/nsIDNService.cpp, >+ modules/libpr0n/decoders/bmp/nsBMPDecoder.cpp, >+ gfx/src/windows/nsImageWin.cpp, gfx/src/shared/gfxImageFrame.cpp, >+ browser/app/profile/firefox.js: Resolve conflicts between my tree and >+ upstream. >+ * browser/app/Makefile.in: Fix $(DESTDIR) variable. >+ * accessible/src/atk/nsAccessibleWrap.cpp, >+ accessible/src/atk/nsAccessibleWrap.h: Apply patch from bugzilla for >+ alpha fix that's more likely to make it into CVS. >+ * debian/update-mozilla-firefox-chrome: Patch from Mike Hommey to make >+ update-mozilla-firefox-chrome more verbose on -v. >+ * debian/rules: >+ - Remove typeaheadfind for new find toolbar to work. (Mike Hommey) >+ (Closes: #267170) >+ - Changes to reflect new upstream files. >+ * debian/control: >+ - Remove build-depend on libcairo-dev. >+ - Build depend on libxt-dev, seems to be necessary now. (Closes: >+ #274311) >+ * debian/docs: Removed, as browser/README.html disappeared. (Mike Hommey) >+ * debian/mozilla-firefox.dirs: >+ - Changes to reflect new upstream files. >+ - Removed obsolete libnullplugin.so. >+ * debian/mozilla-firefox.install: >+ - Remove .jar's that aren't there anymore. >+ - Removed obsolete libnullplugin.so. >+ * debian/mozilla-firefox-dom-inspector.dirs, >+ debian/mozilla-firefox-dom-inspector.install, debian/rules: Upstream >+ doesn't consider DOM Inspector as a real extension, and do not provide >+ the appropriate files to make it appear in the extensions >+ manager. Removed all the extension related stuff in the package. (Mike >+ Hommey) >+ * other-licenses/libart_lgpl: Removed, was for SVG, no longer needed. >+ * modules/plugin/samples/default/unix/*: Reverted debian specific >+ changes, we don't want them in the diff since libnullplugin won't get >+ installed. >+ >+ -- Eric Dorland <eric@debian.org> Fri, 1 Oct 2004 18:50:46 -0400 >+ >+mozilla-firefox (0.9.3-6) unstable; urgency=high >+ >+ * gfx/src/gtk/fontEncoding.properties: Uncomment symbol fonts. (Closes: >+ #272927) >+ * debian/control: Build-depend on binutils (>= 2.15-4) but only on mips >+ and mipsel. (Closes: #273353) >+ * configure.in, configure, rules.mk: Patch from Thiemo Seufer to >+ increase stability and performance on mips. (Closes: #272159) >+ * debian/mozilla-firefox-runner: Detect failure of ping() >+ better. (Closes: #267393) >+ * layout/html/document/src/html.css: Testing fix for xprint problems. >+ >+ -- Eric Dorland <eric@debian.org> Mon, 27 Sep 2004 17:07:37 -0400 >+ >+mozilla-firefox (0.9.3-5) unstable; urgency=high >+ >+ * debian/update-mozilla-firefox-chrome: Apply another patch form Mike >+ Hommey to fix a few more issues in the script. (Closes: #271480) >+ * Fixes to Secunia security bugs, ported from bugzilla: >+ (Closes: #271888) >+ - browser/base/content/browser.js, >+ xpfe/communicator/resources/content/contentAreaDD.js: Fix for >+ drag and drop exploit, bz#250862. >+ - caps/include/nsScriptSecurityManager.h, caps/src/caps.properties, >+ caps/src/nsScriptSecurityManager.cpp: Fix for enablePrivilege >+ exploit, bz#253942. >+ - gfx/src/shared/gfxImageFrame.cpp, gfx/src/windows/nsImageWin.cpp, >+ modules/libpr0n/decoders/bmp/nsBMPDecoder.cpp: Fix for various >+ overflows in the BMP code, bz#255067. >+ - netwerk/dns/src/nsIDNService.cpp: Fix for bug in non-ASCII >+ characters in domain names, bz#256316 >+ - content/xbl/src/nsXBLPrototypeHandler.cpp: Clipboard injection >+ fix, bz#257523. >+ >+ -- Eric Dorland <eric@debian.org> Thu, 16 Sep 2004 20:06:47 -0400 >+ >+mozilla-firefox (0.9.3-4) unstable; urgency=high >+ >+ * Urgency high, go into testing dammit! >+ * Apply patch from Mike Hommey as -3.1, which wasn't actually >+ released. See below. (Closes: #271480) >+ * debian/rules: Patch from Matthew Mueller to fix underquoted >+ argument. (Closes: #271432) >+ * debian/control: Build depend on binutils (>= 2.15-3) with fixed mips >+ support. We still need a fixed gcc. >+ >+ -- Eric Dorland <eric@debian.org> Mon, 13 Sep 2004 20:41:27 -0400 >+ >+mozilla-firefox (0.9.3-3.1) unstable; urgency=low >+ >+ * debian/rules: removed >+ /usr/lib/mozilla-firefox/defaults/profile/extensions/installed-extensions.txt >+ * debian/update-mozilla-firefox-chrome: >+ + Added a "verbose" mode. >+ + Added warning messages (only shown in verbose mode) about some >+ extensions specific issues. This is intended to be useful for extensions >+ maintainers. >+ + Check if the installed-extensions.txt file disappears, which tells if the >+ mozilla-firefox -register went ok. >+ * debian/update-mozilla-firefox-chrome.8: >+ + Fixed typos. >+ + Added reference to the -v option for the verbose mode. >+ * debian/mozilla-firefox-runner: enhanced the profile directory check. It >+ didn't work if the path indicated in the profiles.ini was not absolute. >+ >+ -- Mike Hommey <mh@glandium.org> Mon, 13 Sep 2004 20:31:21 +0900 >+ >+mozilla-firefox (0.9.3-3) unstable; urgency=high >+ >+ * Acknowlege NMU from Mike Hommey. He did a fantastic job in porting a >+ large amount of fixes from upstream CVS. I owe him several large >+ beverages of his choice. (Closes: #259046, #259836) >+ * Port all of Mike's changes to my local CVS. >+ * debian/mozilla-firefox-runner: >+ - Pass command-line arguments to get_locale so they can actually >+ be used. (Closes: #240058) >+ - Apply patch from Mike Hommey to use the profiles.ini to find the >+ path to the profile to clean XUL.mfasl. (Closes: #267326) >+ * debian/update-mozilla-firefox-chrome: Patch from Mike Hommey to fix >+ some bashisms introduced by his NMU. >+ * xpcom/reflect/xptcall/src/md/unix/Makefile.in, >+ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips.s, >+ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_mips.cpp, >+ xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s.m4, >+ xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s: Patch from >+ Thiemo Seufer to fix mips. This requires patches to gcc and binutils >+ to work and fully close #270621. >+ >+ -- Eric Dorland <eric@debian.org> Wed, 8 Sep 2004 21:13:35 -0400 >+ >+mozilla-firefox (0.9.3-2.2) unstable; urgency=high >+ >+ * The "never edit the diff file unless you're sure nothing will be >+ missing" release. >+ * debian/mozilla-firefox.prerm: restore the uncut version. >+ * debian/control, debian/rules: Use gcc-3.2 to build on hppa, because of >+ toolchain bug #254549. >+ >+ -- Mike Hommey <mh@glandium.org> Mon, 23 Aug 2004 19:45:54 +0900 >+ >+mozilla-firefox (0.9.3-2.1) unstable; urgency=high >+ >+ * Non Maintainer Upload for RC Fixes. >+ * Applied changes to toolkit/mozapps/extensions/src/nsExtensionManager.js.in >+ and toolkit/mozapps/extensions/locale/extensions.properties to solve some >+ issues with extensions management. (taken from CVS) >+ * Applied other changes to >+ toolkit/mozapps/extensions/src/nsExtensionManager.js.in, >+ toolkit/mozapps/extensions/public/nsIExtensionManager.idl and >+ mozilla/toolkit/xre/nsAppRunner.cpp to be able to use -register >+ instead of -list-global-items for extensions/components/chrome >+ registration through update-mozilla-firefox-chrome, thus not needing >+ Xvfb anymore (-register option doesn't require a X server). >+ (taken from CVS) >+ * Applied some more changes to >+ toolkit/mozapps/extensions/src/nsExtensionManager.js.in in order to >+ avoir overlayinfo deletion during extensions registration process. >+ (taken from CVS) >+ * Final changes to toolkit/mozapps/extensions/src/nsExtensionManager.js.in >+ to avoid registering out of date extensions so that firefox doesn't enter >+ a loop at startup when no profile was found, and to only write in the >+ installed-extensions-processed.txt file the list of actually installed >+ extensions. Note that for packaged extensions installing their files >+ directly into the chrome or components directories, that only means they >+ won't appear in the Extensions Manager. They will still be available in >+ the GUI. >+ * All these fixes improve the Extensions Manager. Closes: #259046. >+ * accessible/src/atk/nsAccessibleWrap.cpp, >+ accessible/src/atk/nsAccessibleWrap.h: fixed 32-bit abuse of gobject >+ (Steve Langasek). Closes: #259836. >+ * debian/control: Removed dependency upon xvfb. >+ * debian/update-mozilla-firefox-chrome: >+ + Removed use of Xvfb. >+ + Removed creation of a root default profile, but kept the fake home >+ hack to avoid creation of a .mozilla directory in root's home. >+ + Changed extensions handling so that the overall process is cleaner. >+ Extensions packages will have to move extensions {uid} directories >+ to /usr/lib/mozilla-firefox/extensions/, while the current location >+ is still supported for compatibility purpose (but is strongly not >+ recommended). >+ + Removed use of regxpcom and regchrome, since what they both do is >+ done by firefox-bin -register. >+ * debian/rules: force GnomeVFS support to be disabled. (Josselin Mouette) >+ * debian/README.Debian: >+ + Added a note about potential problems with packaged "old" extensions. >+ + Added a note about how to manually disable packaged extensions in user >+ profile. >+ + Removed some old notes that don't apply anymore. >+ * debian/mozilla-firefox-dom-inspector.install, debian/rules: Move >+ extensions files to /usr/lib/mozilla-firefox/extensions/ instead of >+ /usr/lib/mozilla-firefox/defaults/profile/extensions/. >+ * debian/mozilla-firefox.links: Move installed-extensions.txt symlink >+ from /usr/lib/mozilla-firefox/defaults/profile/extensions/ to >+ /usr/lib/mozilla-firefox/extensions/. >+ * debian/mozilla-firefox.prerm: More cleanup on removal of package. >+ >+ -- Mike Hommey <mh@glandium.org> Sun, 22 Aug 2004 21:43:47 +0900 >+ >+mozilla-firefox (0.9.3-2) unstable; urgency=low >+ >+ * xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s.m4: Comment out >+ NARGSAVE, like I did in 0.9.1-7, should fully fix #262571. >+ * debian/mozilla-firefox.preinst: Remove brace expansion >+ bashism. (Closes: #264200) >+ * debian/control: Depend on debianutils (>= 1.16) since we use mktemp >+ -d. (Closes: #263958) >+ * debian/mozilla-firefox-runner: Make -contentLocale COUNTRY, not >+ lang-COUNTRY. (Closes: #263940) >+ >+ -- Eric Dorland <eric@debian.org> Sun, 8 Aug 2004 23:41:02 -0400 >+ >+mozilla-firefox (0.9.3-1) unstable; urgency=low >+ >+ * New upstream release. (Closes: #263193) >+ * debian/update-mozilla-firefox-chrome.8: Add manpage from Mark Suter >+ for update-mozilla-firefox-chrome.8. (Closes: #263149) >+ * debian/mozilla-firefox.manpages: Add update-mozilla-firefox-chrome.8. >+ * debian/control: Add build-deps on gcc-3.4 for amd64. (Closes: #262679) >+ >+ -- Eric Dorland <eric@debian.org> Wed, 4 Aug 2004 20:21:22 -0400 >+ >+mozilla-firefox (0.9.1-7) unstable; urgency=low >+ >+ * debian/mozilla-firefox-runner: >+ - Reintroduce check for command-line arguments (I broke this last >+ release). (Closes: #262692, #262462, #262537, #262588, #262727) >+ - Allow overriding of -contentLocale and -UILocale. (Closes: >+ #240058) >+ * xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips.s: Comment out >+ NARGSAVE reassignment, it is defined elsewhere. (Closes: #262571) >+ * debian/rules: Force amd64 to build with gcc 3.4. (Closes: #262679) >+ >+ -- Eric Dorland <eric@debian.org> Mon, 2 Aug 2004 10:16:46 -0400 >+ >+mozilla-firefox (0.9.1-6) unstable; urgency=low >+ >+ * widget/src/gtk2/keysym2ucs.c: Patch from Eugeniy Meshcheryakov to >+ allow mozilla firefox to enter a ghe with upturn. (Closes: #261543) >+ * debian/mozilla-firefox-runner: >+ - Remove some mail and composer cruft. >+ - Add warning if DISPLAY is not set. (Closes: #261465) >+ >+ -- Eric Dorland <eric@debian.org> Thu, 29 Jul 2004 22:49:59 -0400 >+ >+mozilla-firefox (0.9.1-5) unstable; urgency=low >+ >+ * debian/control: Goodbye mozilla-firebird transition package. >+ * debian/mozilla-firefox-runner: Add -a firefox flag when running >+ firefox-bin. (Closes: #259237) >+ * debian/mozilla-firefox.desktop: Add GenericName field. >+ * debian/update-mozilla-firefox-chrome: Fix quoting problem with >+ {*}. (Closes: #257243) >+ * debian/rules: >+ - Re-enable postscript printing support, since the security >+ issues turned out to be bogus. (Closes: #257628) >+ - Disable SVG support, it's still too broken to be usable. >+ (Closes: #259544) >+ >+ -- Eric Dorland <eric@debian.org> Sun, 18 Jul 2004 20:09:14 -0400 >+ >+mozilla-firefox (0.9.1-4) unstable; urgency=low >+ >+ * The "Let's try unstable" release. There are still issues, but there >+ are issues with 0.8 as well, so no more point in waiting. >+ * debian/update-mozilla-firefox-chrome: >+ - Copy over empty Extensions.rdf file on update. (Closes: #257243) >+ - Increase sleep to 15 seconds, hopefully this will work on most >+ people's machines. >+ * My apologies to Mike Hommey for mispelling his name in last release. >+ >+ -- Eric Dorland <eric@debian.org> Sun, 11 Jul 2004 23:51:24 -0400 >+ >+mozilla-firefox (0.9.1-3) experimental; urgency=low >+ >+ * Ok, I was wrong, we're still in experimental. I think we need to fix a >+ few more issues before getting this in unstable, like #257258, and >+ make sure the hacky extensions mechanism is more bullet-proof. >+ * debian/rules: --disable-installer, since we don't use it. >+ * debian/update-mozilla-firefox-chrome: >+ - Wait 8 seconds instead of 5 for the hack, might help some >+ people reporting problems. >+ - Remove ${LIBDIR}/extensions/{*}. I may move that to >+ /var/lib/mozilla-firefox eventually, but let's leave it for now. >+ * debian/mozilla-firefox.png.uu: Make a nicer png icon, based on the >+ about box graphic. >+ * debian/mozilla-firefox.preinst: Remove old config files in >+ /etc/mozilla-firefox/pref. (Closes: #257711, 257557) >+ * browser/app/profile: firefox.js: Revert change to app.version, >+ apparently it breaks extensions. (Closes: #257941) >+ >+ -- Eric Dorland <eric@debian.org> Wed, 7 Jul 2004 21:26:55 -0400 >+ >+mozilla-firefox (0.9.1-2) experimental; urgency=low >+ >+ * The "Mike Homey, lord of the bugs" release. Thanks to Mike for being a >+ huge help with bug triage. That's right, help with bugs and your name >+ could have a prestigious place in the changelog. >+ * I'd like my next release to be to unstable, so let me know about >+ profile transition bugs, etc. >+ * debian/control: Build-depend on libcairo1-dev. >+ * debian/rules: Enable svg support using cairo renderer. (Closes: >+ #215990) >+ * debian/mozilla-firefox-xremote-client: Add -a firefox switch to make >+ the remote client find firefox only. Thanks Jonathan Black. (Closes: >+ #256967) >+ * debian/mozilla-firefox.desktop: Make comment Gnome HIG >+ compliant. (Closes: #257592) >+ * browser/app/profile/firefox.js: >+ - app.version = 0.9.1. >+ - Disable app updates by default. We're debian, we handle updates. >+ * debian/update-mozilla-firefox-chrome: >+ - Remove installed-extensions-processed.txt before regenerating. >+ (Closes: #257243) >+ - Take some, but not all advice from Alexandru Fomin. Improve Xvfb >+ and extension registration hacks. >+ >+ -- Eric Dorland <eric@debian.org> Sun, 4 Jul 2004 16:58:17 -0400 >+ >+mozilla-firefox (0.9.1-1) experimental; urgency=low >+ >+ * New upstream release. >+ * config/autoconf.mk.in: Alright, /usr/lib/firefox-0.9 was a bad idea, >+ use /usr/lib/mozilla-firefox. Change all the instances >+ /usr/lib/firefox-0.9 back to /usr/lib/mozilla-firefox. I feel >+ silly. (Closes: #256991) >+ * debian/mozilla-firefox-runner: Actually check for the existence of the >+ .mozilla/firefox directory before trying to clean it. >+ * debian/update-mozilla-firefox-runner: >+ - Call firefox-bin, not firefox you silly goose. >+ - Use mozilla-firefox tempfile, not mozilla-browser. >+ - The horrible hackiness continues: For my previous hack to work, >+ I need to preseed a profile directory in the home directory I >+ create. Now things should work. (Closes: #256812) >+ >+ -- Eric Dorland <eric@debian.org> Thu, 1 Jul 2004 17:16:29 -0400 >+ >+mozilla-firefox (0.9-1) experimental; urgency=low >+ >+ * New upstream release. There may be regressions from 0.8. (Closes: >+ #254522) >+ * widget/src/gtk/nsGtkMozRemoteHelper.cpp, >+ widget/src/gtk2/nsGtkMozRemoteHelper.cpp, >+ widget/src/xremoteclient/XRemoteClient.cpp: Fix previously applied to >+ fix -remote behaviour undone. Mozilla now includes the program name in >+ the properties to distinguish between various Mozilla apps. >+ * xpcom/reflect/xptcall/src/md/unix/Makefile.in: remove extra endif. >+ * dom/public/idl/core/nsIDOMNSDocument.idl: Reintroduce referrer >+ attribute that got lost somehow. >+ * content/events/src/nsEventStateManager.cpp: Fix a strange broken >+ function call to GetContainer. >+ >+ * debian/rules: >+ - Follow upstream and --enable-single-profile and >+ --disable-profilesharing. >+ - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. >+ - --user-app-dir=.mozilla to jive with new location. >+ - Remove dom-inspector extension dir from the regular package. >+ * debian/control: Depend on xvfb for insane hack below. >+ * debian/mozilla-firefox.install: >+ - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. >+ - Remove ipc dir, mozipcd. >+ - Add init.d, greprefs dirs. >+ * debian/mozilla-firefox.dirs: >+ - Add /var/lib/mozilla-firefox/extensions{,.d} >+ * debian/mozilla-firefox-dom-inspector.dirs: Add >+ /var/lib/mozilla-firefox/extensions.d. >+ * debian/mozilla-firefox-dom-inspector.install: >+ - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. >+ - Install dom-inspector extension dir. >+ * debian/mozilla-firefox.links: >+ - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. >+ - Link /usr/lib/mozilla-firefox to /usr/lib/firefox-0.9. >+ - Link installed-extensions.txt to our place in >+ /var/lib/mozilla-firefox. >+ * debian/mozilla-firefox-runner: >+ - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. >+ - Fix xprintorg typo. (Closes: #255706) >+ - Search .mozilla/firefox for XUL.mfasl files. >+ * debian/mozilla-firefox-xremote-client: Replace >+ /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. >+ * debian/update-mozilla-firefox-chrome: >+ - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. >+ - Capture return values from reg* commands on error, stolen >+ from mozilla source. >+ - Remove returns from check_running. >+ - Pull in snippets from /var/lib/mozilla-firefox/extensions.d >+ to generate installed-extensions.txt for new extensions mechanism. >+ - An insane hack, but necessary because of upstream: Launch a Xvfb >+ to run firefox to generate the necessary extension metadata. I've >+ been told this will not be necessary in the next version. >+ >+ -- Eric Dorland <eric@debian.org> Mon, 28 Jun 2004 23:40:59 -0400 >+ >+mozilla-firefox (0.8-12) unstable; urgency=low >+ >+ * The "Last Chance Before 0.9" release. >+ * debian/mozilla-firefox-runner: Fix unescaped \n, thanks Olly >+ Betts. (Closes: #252436) >+ * debian/update-mozilla-firefox-chrome: Watch out for empty >+ LD_LIBRARY_PATH. Thanks George Cristian Birzan. (Closes: #254142) >+ * debian/README.Debian: Restructure and update a bit. >+ * debian/presubj: Add bug information from README.Debian for reportbug. >+ * debian/mozilla-firefox.install: Install the presubj. >+ >+ -- Eric Dorland <eric@debian.org> Mon, 14 Jun 2004 19:39:27 -0400 >+ >+mozilla-firefox (0.8-11) unstable; urgency=low >+ >+ * Apply amd64 fix from #249211. >+ * debian/README.Debian: Shamelessly stole the java plugin installation >+ instructions from the mozilla package. (Closes: #243513) >+ * nsCommonWidget.cpp, nsCommonWidget.h, nsWindow.cpp: Apply patch (with >+ some hand massaging) from upstream bugzilla bug #209342 to fix initial >+ window placement. (Closes: #235209, 241519) >+ * nsprpub/pr/src/misc/prnetdb.c: Apply patch from Miquel van Smoorenburg >+ to prevent unless reverse DNS lookups. (Closes: #251978) >+ * debian/mozilla-firefox-runner: Apply patch from Jasper Spaans to fix >+ remote xprint printing. (Closes: #252072) >+ >+ -- Eric Dorland <eric@debian.org> Tue, 1 Jun 2004 23:12:36 -0400 >+ >+mozilla-firefox (0.8-10) unstable; urgency=low >+ >+ * debian/mozilla-firefox.install: Don't install uuencoded file. (Closes: >+ #251441) >+ * debian/mozilla-firefox-runner: unset AUDIODEV which can cause >+ crashes. Thanks Christopher Armstrong. (Closes: #236231) >+ * update-mozilla-firefox-chrome: Port security fix from #249613 to >+ handle insecure tempfile creation. >+ * debian/rules: Following the advice of #247585 I'm disabling postscript >+ printing. Perhaps this will alleviate some of the other printing >+ problems. >+ >+ -- Eric Dorland <eric@debian.org> Sun, 30 May 2004 01:47:52 -0400 >+ >+mozilla-firefox (0.8-9) unstable; urgency=low >+ >+ * debian/control: >+ - Suggest latex-xft-fonts for MathML fonts. Thanks Michael >+ JasonSmith. (Closes: #216925) >+ - Build depend on libx11-dev & libxp-dev instead of xlibs-dev to >+ reflect new X packages. >+ * widget/src/gtk2/nsWindow.cpp: Apply patch from Peter Colberg to ignore >+ unused mouse buttons. (Closes: #244305) >+ * debian/README.Debian: Document the fact that the loopback interface >+ has to be up and unfiltered for things to work right. >+ >+ -- Eric Dorland <eric@debian.org> Wed, 5 May 2004 23:30:42 -0400 >+ >+mozilla-firefox (0.8-8) unstable; urgency=low >+ >+ * security/nss/lib/freebl/unix_rand.c: Remove code that called netstat >+ to gain so entropy. It's pretty useless on a Linux system. Thanks >+ Wichert. (Closes: #241200) >+ * debian/README.Debian: Add note about changing the button order in the >+ dialog boxes. (Closes: #240261) >+ * debian/control: Add dummy package for mozilla-firebird to smooth >+ upgrades. (Closes: #235577) >+ >+ -- Eric Dorland <eric@debian.org> Sat, 3 Apr 2004 16:19:34 -0500 >+ >+mozilla-firefox (0.8-7) unstable; urgency=low >+ >+ * debian/mozilla-firefox-runner: >+ - Cleanup XUL.mfasl whenever firefox is run with no >+ command-line. (Closes: #238717) >+ - Add patch from Laurent Buffler to add config to allow >+ new tabs to be opened instead of new windows. (Closes: #239323) >+ * debian/mozilla-firefoxrc: Put the new FIREFOX_OPEN_IN variable in >+ there and document it's use. >+ >+ -- Eric Dorland <eric@debian.org> Sat, 27 Mar 2004 17:21:51 -0500 >+ >+mozilla-firefox (0.8-6) unstable; urgency=low >+ >+ * debian/control: Build-depend on g++-3.3 (>= 3.3.3-4) to work around >+ broken 3.3.3-3 release. (Closes: #238318, #238241, #238441, #238523, >+ #238534) >+ * debian/rules: Install new small-firefox icon. >+ * debian/mozilla-firefox{.png, .xpm, -small.xpm}: Use the new DFSG-free >+ icons, the old pretty ones are trademarked and not DSFG-free. I know, >+ it's stupid. Complain to the Mozilla Foundation, not me. (Closes: >+ #234869) >+ >+ -- Eric Dorland <eric@debian.org> Sun, 21 Mar 2004 22:09:16 -0500 >+ >+mozilla-firefox (0.8-5) unstable; urgency=low >+ >+ * Rebuild with g++-3.3 3.3.3-2 to work around broken g++. (Closes: >+ #238318) >+ >+ -- Eric Dorland <eric@debian.org> Wed, 17 Mar 2004 21:38:58 -0500 >+ >+mozilla-firefox (0.8-4) unstable; urgency=low >+ >+ * debian/README.Debian: >+ - Tell people not to remove their ~/.firefox directory. Just move it >+ out of the way. (Closes: #235594) >+ - Add notes about the sound dsp. (Closes: #236678) >+ * debian/mozilla-firefox-runner: >+ - Don't redirect stderr. (Closes: #236160) >+ - Add get_locale code from Aurelien Jarno (Closes: #235521) >+ - Fix dsp auto-detection code. (Closes: #236678) >+ * debian/rules: Add default locale file. >+ * debian/mozilla-firefox.dirs: Add locales dir. >+ >+ * browser/app/profile/all.js, >+ content/events/src/nsEventStateManager.cpp, >+ modules/libpref/src/init/all.js, widget/public/nsGUIEvent.h, >+ widget/src/gtk/nsWidget.cpp: Reapply extended mouse events patch from >+ Derek Upham. (Closes: #235385, #230876) >+ * browser/base/content/browser-sets.inc: Make ESC stop animations >+ again. (Closes: #235474) >+ >+ -- Eric Dorland <eric@debian.org> Tue, 16 Mar 2004 00:31:19 -0500 >+ >+mozilla-firefox (0.8-3) unstable; urgency=low >+ >+ * debian/mozilla.firefox.menu: Change the case of >+ mozilla-Firefox. (Closes: #234982, #234755) >+ * debian/NEWS.Debian: Move to debian/mozilla-firefox.NEWS so that it >+ actually gets installed. (Closes: #234700) >+ * debian/update-mozilla-firefox-chrome: Setup dummy home directory to >+ capture silly .firefox directory. (Closes: #234855) >+ * debian/mozilla-firefox.png.uu, debian/mozilla-firefox.xpm: Use the >+ new, pretty mozilla-firefox icons. (Closes: #234869) >+ * debian/rules: Install the pretty icon in the right places. >+ >+ -- Eric Dorland <eric@debian.org> Thu, 26 Feb 2004 21:10:27 -0500 >+ >+mozilla-firefox (0.8-2) unstable; urgency=low >+ >+ * The "what he taketh, he giveth back" release. >+ * debian/rules: >+ - Disable the wallet extension, this really closes #222447. >+ - Remove some more cruft left over from the patch system. >+ - Reinstall the dom-inspector. >+ * debian/control: Add the dom-inspector back, now that it is supported >+ upstream. >+ * debian/mozilla-firefox-dom-inspector.{install,dirs,postinst,postrm}: >+ Bring these files back. >+ * docshell/base/nsWebShell.cpp: Only do keyword lookup on when DNS >+ entries don't exist. (Closes: #233916, #218033, #211524) >+ >+ -- Eric Dorland <eric@debian.org> Mon, 23 Feb 2004 21:48:03 -0500 >+ >+mozilla-firefox (0.8-1) unstable; urgency=low >+ >+ * The "Let's Change Our Name Every Other Day" release. >+ * New upstream release, mozilla-firebird has been renamed to >+ mozilla-firefox. Let's hope it lasts. (Closes: #231903, #222447) >+ * debian/mozilla-firebird.*: Renamed to debian/mozilla-firefox.*. >+ >+ * debian/README.Debian: Update for firefox, remove blurb about the >+ inspector. >+ * debian/NEWS.Debian: Explain how to move your configs over. I may make >+ this automatic if enough people complain, but I'm loathe to muck >+ around in pople's home directories. >+ >+ * debian/control: >+ - Rename the package. >+ - Tweak description to list Firefox's previous aliases. >+ - Remove conflicts on mozilla-firebird-dom-inspector. >+ >+ * debian/rules: >+ - s/firebird/firefox/g, s/MozillaFirebird/firebird/g. >+ - Comment out some old inspector code. >+ - Remove unused patch subsystem. >+ - Disable gtktest. We don't need no stinking tests. >+ - Remove disable plaintext editor line, not sure why it's there. >+ - Disable LDAP support. We don't use it. >+ - Remove executable bit on *.so files. >+ - Remove useless preference files. >+ - Exclude the inspector files. >+ - Don't remove installed-chrome, we don't install it anymore. >+ - user-app-dir = .firefox. (Closes: #212301) >+ - export MOZILLA_OFFICIAL for the build ID. (Closes: #231133) >+ >+ * debian/mozilla-firefox-runner: >+ - s/firebird/firefox/g. >+ - Remove composer and editor functions. >+ - Use .firefox directory. >+ >+ * debian/mozilla-firefox.install: >+ - s/firebird/firefox/g, s/MozillaFirebird/firefox/g. >+ - Don't install timebombgen. >+ - Install icons directory. >+ - Don't install installed-chrome.txt, we just remove it anyway. >+ >+ * debian/mozilla-firefox.desktop, debian/mozilla-firefox.dirs, >+ debian/mozilla-firefox.manpages, debian/mozilla-firefox.links, >+ debian/mozilla-firefox.menu, debian/mozilla-firefox.mime, >+ debian/mozilla-firefoxrc, debian/mozilla-firefox.postinst, >+ debian/mozilla-firefox.prerm, debian/update-mozilla-firefox-chrome, >+ debian/mozilla-firefox.1, debian/mozilla-firefox-xremote-client: >+ s/firebird/firefox/g, s/MozillaFirebird/firefox/g. >+ >+ * debian/mozilla-firefox.links: Link mozilla-firefox.1 to firefox.1. >+ >+ * debian/mozilla-firefox.preinst: Remove, at least with the rename I can >+ erase some of my previous blunders. >+ >+ * debian/mozilla-firefox.{png.uu,xpm}: Use the package icon. >+ >+ * browser/app/nsBrowserApp.cpp: Change package name to Firefox, so now >+ the ~/.firefox is used. (Closes: #196550) >+ >+ * browser/app/profile/all.js: Merge in autoscroll fixes. >+ * browser/base/content/browser-sets.inc: Merge in upstream stop button >+ fix. >+ * modules/plugin/samples/default/unix/nullplugin.c: Merge in removal of >+ commented code. >+ * nsprpub/pr/include/md/_linux.cfg, nsprpub/pr/include/md/_linux.h, >+ security/coreconf/Linux.mk: Merge in hppa build fixes from upstream. >+ * config/autoconf.mk.in: Install into /usr/lib/mozilla-firefox now. >+ * content/base/src/nsDocumentViewer.cpp: Remove redundant stop patch >+ since it has been merged upstream. >+ * content/events/src/nsEventStateManager.cpp, >+ modules/libpref/src/init/all.js, widget/src/gtk/nsWidget.cpp: Revert >+ back to upstream version. There was a patch here to add support for >+ extended mouse buttons, but I'm removing it since I don't trust that >+ it works in the new version correctly. Send me another patch if you >+ want this functionality back. >+ * toolkit/components/passwordmgr/base/nsPasswordManager.cpp: Revert this >+ back to upstream, I'm not sure which patches I applied to this file, >+ likely something to try and fix the double password prompt. >+ * widget/src/xremoteclient/XRemoteClient.cpp, >+ widget/src/xremoteclient/XRemoteClient.h: Revert to upstream version, >+ I believe it does the right thing now, but the patch I used does not >+ apppear to have been used. Restore the properties to _FIREFOX_* >+ though. >+ * widget/src/gtk/nsGtkMozRemoteHelper.cpp, >+ widget/src/gtk2/nsGtkMozRemoteHelper.cpp: Change the _FIREBIRD_* to >+ _FIREFOX_* here as well. >+ * content/base/src/nsDocument.cpp: Comment out nsDocument::GetDomConfig, >+ needed to get things to compile. >+ >+ -- Eric Dorland <eric@debian.org> Sun, 15 Feb 2004 21:28:45 -0500 >+ >+mozilla-firebird (0.7-7) unstable; urgency=low >+ >+ * debian/mozilla-firebird-runner: Open a new window when loading a >+ regular file. (Closes: #228853) >+ >+ -- Eric Dorland <eric@debian.org> Thu, 29 Jan 2004 22:12:30 -0500 >+ >+mozilla-firebird (0.7-6) unstable; urgency=medium >+ >+ * The "Indian-giver-christmas" release. >+ * Urgency medium since we're closing some critical bugs that need to get >+ in before a freeze. >+ * Completely remove mozilla-firebird-dom-browser. No one stepped up to >+ help fix it's brokeness in 0.7 and I don't use it or particularly care >+ about it. So it is no more. If someone steps up to take responsibility >+ I might put it back, but otherwise it may RIP. (Closes: #222085) >+ * debian/mozilla-firebird-runner: Remove XUL.mfasl uncoditionally >+ now. There is a corner case where this file is corrupted on upgrade >+ when firebird was running. This is a total hack, and not an elegant >+ solution, but at least it fixes the problem. (Closes: #224779, >+ #224323) >+ * debian/control: Conflict against old mozilla-firebird-dom-inspector >+ since it doesn't work anymore. >+ >+ -- Eric Dorland <eric@debian.org> Thu, 25 Dec 2003 15:54:21 -0500 >+ >+mozilla-firebird (0.7-5) unstable; urgency=low >+ >+ * browser/base/content/browser-sets.inc: Patch to make ESC stop actually >+ work. (Closes: #223382) >+ * debian/rules: Turn down optimizations on sparc. (Closes: #223760) >+ >+ -- Eric Dorland <eric@debian.org> Sun, 14 Dec 2003 23:01:59 -0500 >+ >+mozilla-firebird (0.7-4) unstable; urgency=low >+ >+ * The "All of Takuo's hard work really pays off" release. >+ * toolkit/components/passwordmgr/base/nsPasswordManager.cpp: Patch from >+ upstream bugzilla (#220214) to fix double password prompt >+ problem. (Closes: #222696) >+ * xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s.m4: Stolen >+ patch from mozilla package to make mozilla-firebird build on >+ mips. (Closes: #222743) >+ * content/base/src/nsDocumentViewer.cpp: Port yet another patch to allow >+ the ESC key to stop animated gifs. (Closes: #223382) >+ >+ -- Eric Dorland <eric@debian.org> Mon, 8 Dec 2003 23:59:16 -0500 >+ >+mozilla-firebird (0.7-3) unstable; urgency=low >+ >+ * debian/control: Add dependency on psmisc since we use fuser. Thanks >+ Daniel Schröter. >+ * widget/src/xremoteclient/XRemoteClient.{cpp,h}: Apply patch from >+ bugzilla to fix -remote behaviour on modern WMs. Thanks Nikolai >+ Prokoschenko. (Closes: #197632) >+ * nsprpub/pr/src/misc/prdtoa.c: Apply fix from mozilla package (#215067) >+ to fix building on arm. This is a partial fix to #222743. >+ * debian/patches: Remove these. Put everything in CVS. >+ >+ -- Eric Dorland <eric@debian.org> Fri, 5 Dec 2003 20:03:46 -0500 >+ >+mozilla-firebird (0.7-2) unstable; urgency=low >+ >+ * Apply excellent patch from Alexander Sack <asac@jwsdot.com> to fix the >+ issues with mozilla running and firebird not starting. (Closes: >+ #216264) >+ * browser/app/profile/all.js: Set the default of "general.autoScroll" to >+ false because it annoyes me. (Closes: #221661) >+ >+ -- Eric Dorland <eric@debian.org> Wed, 19 Nov 2003 20:59:55 -0500 >+ >+mozilla-firebird (0.7-1) unstable; urgency=low >+ >+ * New upstream release. (Closes: #216019) >+ * debian/patches/dom-inspector.diff: Remove, and apply directly into my >+ CVS. >+ * debian/patches/pref.diff: Removed, doesn't seem applicable anymore. >+ * debian/rules: export MOZ_FIREBIRD=1. >+ * debian/control: >+ - Change Chimera to Camino. (Closes: #220821) >+ - Fix typos in descriptions. (Closes: #218202) >+ - Add build-deps on m4. (Closes: #219681) >+ >+ -- Eric Dorland <eric@debian.org> Wed, 12 Nov 2003 23:01:35 -0500 >+ >+mozilla-firebird (0.6.1-8) unstable; urgency=low >+ >+ * Apply patch to make forward and back buttons work on mice. (Closes: >+ #211606) >+ * debian/rules: Use -O optimization on alpha, so it will build >+ again. (Closes: #213603) >+ >+ -- Eric Dorland <eric@debian.org> Fri, 3 Oct 2003 00:07:44 -0400 >+ >+mozilla-firebird (0.6.1-7) unstable; urgency=low >+ >+ * Rebuild with the latest and greatest from unstable. This seems to fix >+ the problems with bookmarks people were having, at least for me. No >+ idea why. Please reopen if this doesn't fix it for you. (Closes: >+ #209339, #211706, #211286, #211146, #212011) >+ >+ -- Eric Dorland <eric@debian.org> Mon, 22 Sep 2003 00:00:08 -0400 >+ >+mozilla-firebird (0.6.1-6) unstable; urgency=low >+ >+ * Patch from Eric Wong <normalperson@yhbt.net> to make plugin requests >+ less annoying. (Closes: #196609) >+ * debian/rules: Stop building libart. >+ * debian/mozilla-firebird.links: Fix path to bookmarks file. (Partial >+ fix to #211286) >+ >+ -- Eric Dorland <eric@debian.org> Wed, 17 Sep 2003 20:22:56 -0400 >+ >+mozilla-firebird (0.6.1-5) unstable; urgency=low >+ >+ * The "sorry Chris Gray" release. >+ * debian/rules: disable SVG. This was causing drag and drop to lock up >+ X and possibly fixes #208630. (Closes: #209371) >+ * debian/mozilla-firebird-runner: Remove XUL.mfasl if we have upgraded, >+ since it can cause problems. (Closes: #200073, #202130, #207351) >+ >+ -- Eric Dorland <eric@debian.org> Sat, 13 Sep 2003 20:15:37 -0400 >+ >+mozilla-firebird (0.6.1-4) unstable; urgency=low >+ >+ * The "pleasing Chris Gray" release. >+ * other-licenses/libart_gpl: Add this library for svg. >+ * debian/rules: >+ - Enable svg. >+ - Move bookmarks.html file into /etc. (Closes: #207398) >+ * debian/mozilla-firebird.links: Add links back to files moved to /etc. >+ * security/coreconf/Linux2.6.mk: Add this as a copy of Linux2.5.mk to >+ get mozilla-firebird to build on 2.6. (Closes: #207821) >+ >+ -- Eric Dorland <eric@debian.org> Sun, 31 Aug 2003 04:40:30 -0400 >+ >+mozilla-firebird (0.6.1-3) unstable; urgency=low >+ >+ * debian/mozilla-firebird.prerm: Remove mozilla alternative on >+ remove. (Closes: #205310) >+ * debian/debsearch.{gif.uu,src}: Debian search plugin graciously >+ contributed by Fergus McKenzie-Kay <Linux@NerdIT.com>. >+ * debian/rules: >+ - uudecode and clean up debsearch.gif.uu. >+ - Steal platform specific optimization code from mozilla >+ package. Thanks Brian Nelson. (Closes: #206309) >+ * debian/mozilla-firebird.install: Install the above files. >+ * debian/control: Update Standards-Version to 3.6.1. >+ >+ -- Eric Dorland <eric@debian.org> Sun, 24 Aug 2003 19:09:11 -0400 >+ >+mozilla-firebird (0.6.1-2) unstable; urgency=low >+ >+ * The "Stop Pestering Me Already!" release. >+ * debian/control: Only recommend xprt-xprintorg, don't require >+ it. (Closes: #204176) >+ >+ -- Eric Dorland <eric@debian.org> Sun, 10 Aug 2003 20:00:11 -0400 >+ >+mozilla-firebird (0.6.1-1) unstable; urgency=low >+ >+ * New upstream release. (Closes: #203518, #201203) >+ * debian/control: >+ - Standards-Version to 3.6.0. >+ - Don't provide www-browser anymore. (Closes: #201035) >+ - Depend on xprt-xprintorg so printing will work. (Closes: #202418) >+ * debian/mozilla-firebird.preinst: Remove www-browser alternative. >+ * debian/mozilla-firebird.postinst: Don't install www-browser alternative. >+ * debian/mozilla-firebird.prerm: Don't remove www-browser alternative >+ anymore. >+ * debian/README.Debian: Added note about configuration breaking on >+ upgrade. (Closes: #202130) >+ * debian/patches/classic.diff: Removed. Not sure what it's point was. >+ * debian/rules: Add --disable-pedantic to the configure options. >+ >+ -- Eric Dorland <eric@debian.org> Sun, 3 Aug 2003 14:58:12 -0400 >+ >+mozilla-firebird (0.6-8) unstable; urgency=low >+ >+ * debian/patches/alpha-build-fix.diff: Steal patch from mozilla to allow >+ building on alpha. (Closes: #198638) >+ * debian/patches/hppa-build-fix.diff: Steal patch from mozilla to allow >+ building on hppa, clean it up so it applies cleanly. (Closes: #199068) >+ * debian/mozilla-firebird.png.uu: Added uuencoded nice png icon. >+ * debian/rules: Add code to decode and clean up the new icon file. >+ * debian/mozilla-firebird.install: Install new icon. >+ * debian/mozilla-firebird.desktop: Use the new icon. >+ >+ -- Eric Dorland <eric@debian.org> Fri, 27 Jun 2003 23:21:56 -0400 >+ >+mozilla-firebird (0.6-7) unstable; urgency=low >+ >+ * debian/mozilla-firebird.1: Stole the mozilla manpage for my own >+ nefarious purposes. (Closes: #196638) >+ * debian/mozilla-firebird.postrm: Add slave links to the >+ mozilla-firebird manpage. (Closes: #197145) >+ * debian/mozilla-firebird-xremote-client: Set up the environment >+ properly so it returns correct information. (Closes: #197632) >+ * debian/mozilla-firebird.xpm: Added icon from >+ http://iconpacks.mozdev.org/phoenix/iconshots/flame48true.png to have >+ a nice menu icon. (Closes: #197565) >+ * Updated the README.Debian with some helpful bug reporting tips. >+ * debian/rules: Replaced dh_installmanpages with dh_installman. >+ >+ -- Eric Dorland <eric@debian.org> Sun, 22 Jun 2003 15:15:37 -0400 >+ >+mozilla-firebird (0.6-6) unstable; urgency=low >+ >+ * debian/mozilla-firebird.postinst: Add priority 0 alternative on >+ mozilla. (Closes: #196444) >+ * debian/control: Add build-depends on libxrender-dev, libmng-dev, >+ libpng12-dev, libjpeg62-dev. >+ * debian/rules: >+ - Build with system jpeg, mng and png libs. >+ - Exclude inspector files from mozilla-firebird. >+ (Closes: #196432, #196509) >+ >+ -- Eric Dorland <eric@debian.org> Sat, 7 Jun 2003 15:19:23 -0400 >+ >+mozilla-firebird (0.6-5) unstable; urgency=low >+ >+ * The "Mike Hommey is my homey" release. >+ * Thanks to Mike Hommey <mh@glandium.org> for his excellent work on this >+ version (it's 99% his), which I've shamelessly stolen. >+ * Added a README.Debian file. >+ * Added a separate mozilla-firebird-dom-inspector package. >+ * debian/patches/dom-inspector.diff: >+ - add DOM Inspector to Tools menu. (note: DOM Inspector is still >+ not very well integrated with Firebird) >+ - remove modern skin references. >+ * debian/patches/xpinstall.diff: remove unneeded chrome registrations >+ from xpinstall/packager/unix/browser.jst. >+ * debian/patches/classic.diff: remove >+ themes/classic/global/win/preview.gif from jar file and modify >+ preview image reference in rdf file to Preview.png. >+ * debian/patches/pref.diff: remove preview image constraints in >+ browser/components/prefwindow/skin/pref.css file to avoid deformation >+ of preview image in classic theme. >+ * debian/mozilla-firebird.preinst: added #DEBHELPER#. >+ * debian/mozilla-firebird.install: >+ - Don't install the modern.jar and embed-sample.jar files. >+ - Remove files related to dom-inspector. >+ * debian/rules: >+ - enabling xinerama support. >+ - disabling build of chatzilla and venkman. >+ - moved /var/lib/mozilla-firebird/chrome.d/99default to >+ /var/lib/mozilla-firebird/chrome.d/00all >+ - remove references to embed-sample.jar in >+ /var/lib/mozilla-firebird/chrome.d/00all >+ - Add some comments. >+ - Change == to =, for more strict /bin/sh's. >+ * debian/control: Build-Depend on libidl-dev (>= 0.8.0) because the >+ configure script requires at least this version. >+ * debian/copyright: Make this a real debian copyright file. >+ >+ -- Eric Dorland <eric@debian.org> Thu, 5 Jun 2003 01:00:32 -0400 >+ >+mozilla-firebird (0.6-4) unstable; urgency=low >+ >+ * debian/rules: Change -O2 to -O for building on powerpc. >+ * debian/mozilla-firebird.preinst: Delete >+ /usr/lib/mozilla-firebird/defaults/pref on upgrade to facilitate >+ transition to prefs in /etc. Thanks to all who reported this. >+ >+ -- Eric Dorland <eric@debian.org> Tue, 27 May 2003 21:45:06 -0400 >+ >+mozilla-firebird (0.6-3) unstable; urgency=low >+ >+ * First attempt at a debian upload. (Closes: #163270) >+ * debian/rules: >+ + Small fix to Mike Hommey's chrome patch. >+ + Suggestion from Bernhard R. Link to install >+ /usr/lib/mozilla-firebird/defaults/pref to >+ /etc/mozilla-firebird/pref >+ + Add dh_installmime call. >+ * debian/mozilla-firebird.mime: Install mime type handlers for firebird. >+ * debian/mozilla-firebird.links: Link >+ /usr/lib/mozilla-firebird/defaults/pref to /etc/mozilla-firebird/pref >+ * debian/mozilla-firebird.install: Don't install the inspector.jar. >+ >+ -- Eric Dorland <eric@debian.org> Mon, 26 May 2003 00:28:40 -0400 >+ >+mozilla-firebird (0.6-2) unstable; urgency=low >+ >+ * debian/rules: >+ + Add --with-user-appdir=.mozilla-firebird, since it still >+ defaults to .phoenix. >+ + Don't use the ${prefix} variable, use /usr, since ${prefix} >+ doesn't seem to work. >+ + Use --without-system-nspr. >+ * debian/mozilla-firebird.install: >+ + Be picky about what chrome files we install, since there's >+ quite a few we don't need, and a bunch of empty dirs. >+ * Excellent patch from Mike Hommey <mh@glandium.org> to add a >+ update-mozilla-firebird-chrome script. >+ >+ -- Eric Dorland <eric@debian.org> Sat, 24 May 2003 13:00:44 -0400 >+ >+mozilla-firebird (0.6-1) unstable; urgency=low >+ >+ * New upstream release. >+ * Renamed to mozilla-firebird. >+ * Changed phoenix to mozilla-firebird where appropriate. >+ * debian/mozilla-firebird.links: Add link mozilla-firebird to >+ MozillaFirebird. >+ * debian/control: >+ + Standars-Version to 3.5.10.0. >+ + Build-depend on gtk2 libs now. >+ + Build-depend on libidl-dev. >+ + Add Provides x-www-browser. >+ * debian/rules: >+ + Enable building with the gtk2 libs. >+ + Make mozilla-firebird-xremote-client executable in install target. >+ * debian/mozilla-firebird.desktop: Added gnome menu entry. >+ * debian/mozilla-firebird.{prerm,postinst}: Add alternatives to >+ www-browser and x-www-browser. >+ >+ -- Eric Dorland <eric@debian.org> Mon, 19 May 2003 20:43:39 -0400 >+ >+phoenix (0.5-4) unstable; urgency=low >+ >+ * debian/control: Depend on fontconfig. >+ * debian/rules: Add source-tarball-from-cvs to build a orig tarball from >+ a checked out cvs tree. Now I can provide source package. And there >+ was much rejoicing. >+ >+ -- Eric Dorland <eric@debian.org> Fri, 17 Jan 2003 21:06:47 -0500 >+ >+phoenix (0.5-3) unstable; urgency=low >+ >+ * debian/phoenix-xremote-client: Added to send remote commands to >+ phoenix. Just a wrapper that calls phoenix-bin -remote. >+ * debian/phoenix-runner: >+ + Use phoenix-xremote-client. >+ + Replace MOZILLA_DSP with PHOENIX_DSP. >+ * debian/phoenixrc: phoenix-runner uses this file to determine what dsp >+ to start. >+ * debian/phoenix.install: >+ + Install phoenix-xremote-client, and don't install >+ mozilla-xremote-client. >+ + Install phoenixrc. >+ >+ -- Eric Dorland <eric@debian.org> Mon, 23 Dec 2002 02:52:21 -0500 >+ >+phoenix (0.5-2) unstable; urgency=low >+ >+ * debian/control: >+ + Add Provides: www-browser. >+ + Build-depend on libxft2-dev, libnspr-dev. >+ * debian/rules: >+ + Use xft and the system nspr. >+ + Install phoenix-runner. >+ * debian/phoenix-runner: Stolen from the mozilla package to run phoenix. >+ >+ -- Eric Dorland <eric@debian.org> Sat, 21 Dec 2002 02:03:11 -0500 >+ >+phoenix (0.5-1) unstable; urgency=low >+ >+ * New upstream release. >+ * debian/phoenix.install: Fix paths to phoenix libs. >+ * debian/control: >+ + Standards-Version to 3.5.8 >+ + Improve build-deps. >+ * debian/rules: >+ + Have configure options here, no more .mozconfig. >+ + Steal some patch code from Colin. >+ * debian/patches/mozappdir.diff: Change the mozappdir. >+ >+ -- Eric Dorland <eric@debian.org> Mon, 9 Dec 2002 02:43:13 -0500 >+ >+phoenix (0.4-3) unstable; urgency=low >+ >+ * debian/phoenix.menu: Add menu entry. >+ * Rebuild to fix libstdc++ dependency. >+ * .mozonfig: Disable more tests. >+ >+ -- Eric Dorland <eric@debian.org> Wed, 20 Nov 2002 19:13:18 -0500 >+ >+phoenix (0.4-2) unstable; urgency=low >+ >+ * debian/control: >+ + Add build-depends. >+ + Fix section and description. >+ * .mozconfig: >+ + Use system zlib. >+ >+ -- Eric Dorland <eric@debian.org> Wed, 13 Nov 2002 19:03:52 -0500 >+ >+phoenix (0.4-1) unstable; urgency=low >+ >+ * Initial release. >+ >+ -- Eric Dorland <eric@debian.org> Mon, 11 Nov 2002 23:09:41 -0500 >--- configure.in >+++ configure.in >@@ -92,6 +92,7 @@ > MAKE_VERSION=3.78 > WINDRES_VERSION=2.14.90 > W32API_VERSION=2.4 >+GNOMEUI_VERSION=2.0.6 > GNOMEVFS_VERSION=2.0 > GCONF_VERSION=1.2.1 > LIBGNOME_VERSION=2.0 >@@ -1112,8 +1113,7 @@ > MOZ_ENABLE_OLD_ABI_COMPAT_WRAPPERS=1 > ;; > mips*) >- CFLAGS="$CFLAGS -Wa,-xgot" >- CXXFLAGS="$CXXFLAGS -Wa,-xgot" >+ MOZ_DEBUG_FLAGS="-g" # We want inlining > ;; > esac > ;; >@@ -3461,6 +3461,10 @@ > MOZ_ENABLE_XFT=1, > MOZ_ENABLE_XFT= ) > >+if test "$MOZ_ENABLE_XFT" && test "$MOZ_ENABLE_FREETYPE2"; then >+ AC_MSG_ERROR([Cannot enable XFT and FREETYPE2 at the same time.]) >+fi >+ > if test "$MOZ_ENABLE_XFT" > then > AC_DEFINE(MOZ_ENABLE_XFT) >@@ -3475,6 +3479,34 @@ > AC_SUBST(MOZ_XFT_LIBS) > > dnl ======================================================== >+dnl = pango font rendering >+dnl ======================================================== >+MOZ_ARG_ENABLE_BOOL(pango, >+[ --enable-pango Enable Pango font rendering support], >+ MOZ_ENABLE_PANGO=1, >+ MOZ_ENABLE_PANGO=) >+ >+if test "$MOZ_ENABLE_PANGO" >+then >+ AC_DEFINE(MOZ_ENABLE_PANGO) >+ PKG_CHECK_MODULES(MOZ_PANGO, pango >= 1.5.0) >+ >+ dnl Make sure that the pango version is _actually_ new enough >+ _SAVE_CFLAGS=$CFLAGS >+ _SAVE_LDFLAGS=$LDFLAGS >+ CFLAGS="$MOZ_PANGO_CFLAGS $CFLAGS" >+ LDFLAGS="$MOZ_PANGO_LIBS $LDFLAGS" >+ AC_CHECK_LIB(pangoft2-1.0, pango_fc_font_map_add_decoder_find_func,, >+ AC_MSG_ERROR([Your Pango is too old. Sorry.])) >+ CFLAGS=$_SAVE_CFLAGS >+ LDFLAGS=$_SAVE_LDFLAGS >+ >+ AC_SUBST(MOZ_ENABLE_PANGO) >+ AC_SUBST(MOZ_PANGO_CFLAGS) >+ AC_SUBST(MOZ_PANGO_LIBS) >+fi >+ >+dnl ======================================================== > dnl = disabling x11 core support, enabled by default > dnl ======================================================== > MOZ_ENABLE_COREXFONTS=${MOZ_ENABLE_COREXFONTS-1} >@@ -3588,7 +3620,35 @@ > > AC_SUBST(MOZ_ENABLE_GNOME_COMPONENT) > fi >+dnl = libgnomeui support module >+dnl ======================================================== >+ >+if test "$MOZ_ENABLE_GTK2" >+then >+ MOZ_ENABLE_GNOMEUI=1 >+ >+ MOZ_ARG_DISABLE_BOOL(gnomeui, >+ [ --disable-gnomeui Disable libgnomeui support (default: auto, optional at runtime) ], >+ MOZ_ENABLE_GNOMEUI=, >+ MOZ_ENABLE_GNOMEUI=force) > >+ if test "$MOZ_ENABLE_GNOMEUI" >+ then >+ PKG_CHECK_MODULES(MOZ_GNOMEUI, libgnomeui-2.0 >= $GNOMEUI_VERSION, >+ [MOZ_ENABLE_GNOMEUI=1], [ >+ if test "$MOZ_ENABLE_GNOMEUI" = "force" >+ then >+ AC_MSG_ERROR([* * * Could not find libgnomeui-2.0 >= $GNOMEUI_VERSION]) >+ fi >+ MOZ_ENABLE_GNOMEUI= >+ ]) >+ fi >+ >+ AC_SUBST(MOZ_ENABLE_GNOMEUI) >+ AC_SUBST(MOZ_GNOMEUI_CFLAGS) >+ AC_SUBST(MOZ_GNOMEUI_LIBS) >+ >+fi > dnl ======================================================== > dnl = Setting MOZ_EXTRA_X11CONVERTERS turns on additional > dnl = converters in intl/uconv that are used only by X11 gfx >@@ -3999,6 +4059,17 @@ > MOZ_IMG_DECODERS_DEFAULT="$MOZ_IMG_DECODERS_DEFAULT icon" > fi > ;; >+*) >+ if test "$MOZ_ENABLE_GNOMEUI"; then >+ >+ MOZ_IMG_DECODERS_DEFAULT="$MOZ_IMG_DECODERS_DEFAULT icon" >+ fi >+ ;; >+*) >+ if test "$MOZ_ENABLE_GNOMEUI"; then >+ MOZ_IMG_DECODERS_DEFAULT="$MOZ_IMG_DECODERS_DEFAULT icon" >+ fi >+ ;; > esac > > MOZ_ARG_ENABLE_STRING(image-decoders,
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 89242
:
56394
| 56395 |
56396