[Phpmyadmin-git] [SCM] phpMyAdmin branch, TESTING, updated. RELEASE_3_3_8RC1-14-g71fb991

Marc Delisle lem9 at users.sourceforge.net
Mon Oct 18 12:14:09 CEST 2010


The branch, TESTING has been updated
       via  71fb9910bde652c1024de0bd4936ccf71180941b (commit)
       via  af98b694f4d46ce2a3e357ab6bed41065e12deab (commit)
       via  2d4b9e2aea9eb6f3914bbfdd574fd13bac424e24 (commit)
       via  2d7cbdfc4d6ad9066dad49918ed710f872e59020 (commit)
       via  8c34269e520aaba4ddbba25e938d5338db4eed7d (commit)
       via  1c49cd3d6422630be2549ce925cd91971565c5c7 (commit)
       via  1623c7e06593a7b95b9654c51537e29602c5b3a4 (commit)
       via  22fa5adee3cece9229f457d724d516eb96975186 (commit)
       via  c0d1c7a2ae0d3f70bacac2d5abcb8bdc41590248 (commit)
       via  c812a4b7fafea51c537e0fc778c521980b07a36a (commit)
       via  8e940af24c14f5aa9b3a22883343e6974613fa63 (commit)
       via  adaa35a87feeaf079d4178bb471073e0e19a75b6 (commit)
       via  f5879655d58812b978dc975e5dc8d8497d11a3c3 (commit)
       via  194e357a996310225364d311e6c27ed41db002bb (commit)
       via  5d136abd8bf9f85336f52332470acf9e52448b20 (commit)
       via  e9605b94734473400800596f07ba80ff5a4e84cf (commit)
       via  fe837095eef3aadf10211926adf8dbc2986a7034 (commit)
       via  92313cbbae4b2872fc9be57b1f1fbebace182895 (commit)
       via  667497577490e7f1c19c1a794db7ea92417d063f (commit)
       via  9b846d65a82e6c2bdcf953025842acc45619dcab (commit)
      from  f849e94e4c528822828e41838affd816bceaa4ab (commit)


- Log -----------------------------------------------------------------
commit 71fb9910bde652c1024de0bd4936ccf71180941b
Merge: f849e94e4c528822828e41838affd816bceaa4ab af98b694f4d46ce2a3e357ab6bed41065e12deab
Author: Marc Delisle <marc at infomarc.info>
Date:   Mon Oct 18 06:12:51 2010 -0400

    Merge branch 'MAINT_3_3_8' into TESTING

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   10 +
 Documentation.html                                 |    4 +-
 README                                             |    4 +-
 db_operations.php                                  |   68 +-
 db_structure.php                                   |   44 +-
 lang/polish-utf-8.inc.php                          |  780 ++++++++++----------
 libraries/Config.class.php                         |    2 +-
 libraries/PHPExcel/PHPExcel.php                    |    4 +-
 libraries/PHPExcel/PHPExcel/Autoloader.php         |    2 +-
 .../PHPExcel/PHPExcel/CachedObjectStorage/APC.php  |   45 +-
 .../PHPExcel/CachedObjectStorage/CacheBase.php     |   35 +-
 .../PHPExcel/CachedObjectStorage/DiscISAM.php      |   28 +-
 .../PHPExcel/CachedObjectStorage/ICache.php        |    9 +-
 .../PHPExcel/CachedObjectStorage/Memcache.php      |   53 +-
 .../PHPExcel/CachedObjectStorage/Memory.php        |    2 +-
 .../PHPExcel/CachedObjectStorage/MemoryGZip.php    |    2 +-
 .../CachedObjectStorage/MemorySerialized.php       |    2 +-
 .../PHPExcel/CachedObjectStorage/PHPTemp.php       |   26 +-
 .../PHPExcel/CachedObjectStorage/Wincache.php      |   58 ++-
 libraries/PHPExcel/PHPExcel/Calculation.php        |  105 ++-
 .../PHPExcel/PHPExcel/Calculation/Exception.php    |    2 +-
 .../PHPExcel/Calculation/ExceptionHandler.php      |    2 +-
 .../PHPExcel/Calculation/FormulaParser.php         |    2 +-
 .../PHPExcel/PHPExcel/Calculation/FormulaToken.php |    2 +-
 .../PHPExcel/PHPExcel/Calculation/Function.php     |    2 +-
 .../PHPExcel/PHPExcel/Calculation/Functions.php    |  175 ++---
 libraries/PHPExcel/PHPExcel/Cell.php               |  296 ++++----
 .../PHPExcel/PHPExcel/Cell/AdvancedValueBinder.php |    2 +-
 libraries/PHPExcel/PHPExcel/Cell/DataType.php      |    2 +-
 .../PHPExcel/PHPExcel/Cell/DataValidation.php      |    2 +-
 .../PHPExcel/PHPExcel/Cell/DefaultValueBinder.php  |    2 +-
 libraries/PHPExcel/PHPExcel/Cell/Hyperlink.php     |    2 +-
 libraries/PHPExcel/PHPExcel/Cell/IValueBinder.php  |    2 +-
 libraries/PHPExcel/PHPExcel/Comment.php            |    2 +-
 libraries/PHPExcel/PHPExcel/DocumentProperties.php |   93 ++-
 libraries/PHPExcel/PHPExcel/DocumentSecurity.php   |    2 +-
 libraries/PHPExcel/PHPExcel/HashTable.php          |    2 +-
 libraries/PHPExcel/PHPExcel/IComparable.php        |    2 +-
 libraries/PHPExcel/PHPExcel/IOFactory.php          |    2 +-
 libraries/PHPExcel/PHPExcel/NamedRange.php         |    2 +-
 libraries/PHPExcel/PHPExcel/Reader/CSV.php         |    2 +-
 .../PHPExcel/PHPExcel/Reader/DefaultReadFilter.php |    2 +-
 .../PHPExcel/PHPExcel/Reader/Excel2003XML.php      |    7 +-
 libraries/PHPExcel/PHPExcel/Reader/Excel2007.php   |   55 ++-
 libraries/PHPExcel/PHPExcel/Reader/Excel5.php      |   77 ++-
 .../PHPExcel/PHPExcel/Reader/Excel5/Escher.php     |    2 +-
 libraries/PHPExcel/PHPExcel/Reader/IReadFilter.php |    2 +-
 libraries/PHPExcel/PHPExcel/Reader/IReader.php     |    2 +-
 libraries/PHPExcel/PHPExcel/Reader/OOCalc.php      |   15 +-
 libraries/PHPExcel/PHPExcel/Reader/SYLK.php        |    2 +-
 libraries/PHPExcel/PHPExcel/Reader/Serialized.php  |    2 +-
 libraries/PHPExcel/PHPExcel/ReferenceHelper.php    |  161 +++-
 libraries/PHPExcel/PHPExcel/RichText.php           |    2 +-
 .../PHPExcel/PHPExcel/RichText/ITextElement.php    |    2 +-
 libraries/PHPExcel/PHPExcel/RichText/Run.php       |    2 +-
 .../PHPExcel/PHPExcel/RichText/TextElement.php     |    2 +-
 libraries/PHPExcel/PHPExcel/Settings.php           |    2 +-
 libraries/PHPExcel/PHPExcel/Shared/CodePage.php    |    2 +-
 libraries/PHPExcel/PHPExcel/Shared/Date.php        |    2 +-
 libraries/PHPExcel/PHPExcel/Shared/Drawing.php     |    2 +-
 libraries/PHPExcel/PHPExcel/Shared/Escher.php      |    2 +-
 .../PHPExcel/Shared/Escher/DgContainer.php         |    2 +-
 .../Shared/Escher/DgContainer/SpgrContainer.php    |    2 +-
 .../DgContainer/SpgrContainer/SpContainer.php      |    2 +-
 .../PHPExcel/Shared/Escher/DggContainer.php        |   28 +-
 .../Shared/Escher/DggContainer/BstoreContainer.php |    2 +-
 .../Escher/DggContainer/BstoreContainer/BSE.php    |    2 +-
 .../DggContainer/BstoreContainer/BSE/Blip.php      |    2 +-
 libraries/PHPExcel/PHPExcel/Shared/Excel5.php      |    2 +-
 libraries/PHPExcel/PHPExcel/Shared/File.php        |   21 +-
 libraries/PHPExcel/PHPExcel/Shared/Font.php        |    2 +-
 .../PHPExcel/Shared/OLE/ChainedBlockStream.php     |    2 +-
 libraries/PHPExcel/PHPExcel/Shared/OLERead.php     |    2 +-
 .../PHPExcel/PHPExcel/Shared/PasswordHasher.php    |    2 +-
 libraries/PHPExcel/PHPExcel/Shared/String.php      |    4 +-
 libraries/PHPExcel/PHPExcel/Shared/XMLWriter.php   |   11 +-
 .../PHPExcel/PHPExcel/Shared/ZipStreamWrapper.php  |    2 +-
 .../PHPExcel/Shared/trend/bestFitClass.php         |    2 +-
 .../Shared/trend/exponentialBestFitClass.php       |    2 +-
 .../PHPExcel/Shared/trend/linearBestFitClass.php   |    2 +-
 .../Shared/trend/logarithmicBestFitClass.php       |    2 +-
 .../Shared/trend/polynomialBestFitClass.php        |    2 +-
 .../PHPExcel/Shared/trend/powerBestFitClass.php    |    2 +-
 libraries/PHPExcel/PHPExcel/Style.php              |    4 +-
 libraries/PHPExcel/PHPExcel/Style/Alignment.php    |    4 +-
 libraries/PHPExcel/PHPExcel/Style/Border.php       |    4 +-
 libraries/PHPExcel/PHPExcel/Style/Borders.php      |    4 +-
 libraries/PHPExcel/PHPExcel/Style/Color.php        |    4 +-
 libraries/PHPExcel/PHPExcel/Style/Conditional.php  |    2 +-
 libraries/PHPExcel/PHPExcel/Style/Fill.php         |    4 +-
 libraries/PHPExcel/PHPExcel/Style/Font.php         |    4 +-
 libraries/PHPExcel/PHPExcel/Style/NumberFormat.php |    4 +-
 libraries/PHPExcel/PHPExcel/Style/Protection.php   |    2 +-
 libraries/PHPExcel/PHPExcel/Worksheet.php          |   15 +-
 .../PHPExcel/PHPExcel/Worksheet/BaseDrawing.php    |    2 +-
 .../PHPExcel/PHPExcel/Worksheet/CellIterator.php   |    2 +-
 .../PHPExcel/Worksheet/ColumnDimension.php         |    2 +-
 libraries/PHPExcel/PHPExcel/Worksheet/Drawing.php  |    2 +-
 .../PHPExcel/PHPExcel/Worksheet/Drawing/Shadow.php |    2 +-
 .../PHPExcel/PHPExcel/Worksheet/HeaderFooter.php   |    2 +-
 .../PHPExcel/Worksheet/HeaderFooterDrawing.php     |    2 +-
 .../PHPExcel/PHPExcel/Worksheet/MemoryDrawing.php  |    2 +-
 .../PHPExcel/PHPExcel/Worksheet/PageMargins.php    |    2 +-
 .../PHPExcel/PHPExcel/Worksheet/PageSetup.php      |  213 +++++-
 .../PHPExcel/PHPExcel/Worksheet/Protection.php     |    2 +-
 libraries/PHPExcel/PHPExcel/Worksheet/Row.php      |    2 +-
 .../PHPExcel/PHPExcel/Worksheet/RowDimension.php   |    2 +-
 .../PHPExcel/PHPExcel/Worksheet/RowIterator.php    |    2 +-
 .../PHPExcel/PHPExcel/Worksheet/SheetView.php      |    2 +-
 libraries/PHPExcel/PHPExcel/WorksheetIterator.php  |    2 +-
 libraries/PHPExcel/PHPExcel/Writer/CSV.php         |    5 +-
 libraries/PHPExcel/PHPExcel/Writer/Excel2007.php   |    5 +-
 .../PHPExcel/Writer/Excel2007/Comments.php         |    2 +-
 .../PHPExcel/Writer/Excel2007/ContentTypes.php     |    2 +-
 .../PHPExcel/Writer/Excel2007/DocProps.php         |    2 +-
 .../PHPExcel/PHPExcel/Writer/Excel2007/Drawing.php |    2 +-
 .../PHPExcel/PHPExcel/Writer/Excel2007/Rels.php    |    2 +-
 .../PHPExcel/Writer/Excel2007/StringTable.php      |    2 +-
 .../PHPExcel/PHPExcel/Writer/Excel2007/Style.php   |    2 +-
 .../PHPExcel/PHPExcel/Writer/Excel2007/Theme.php   |    2 +-
 .../PHPExcel/Writer/Excel2007/Workbook.php         |    2 +-
 .../PHPExcel/Writer/Excel2007/Worksheet.php        |   15 +-
 .../PHPExcel/Writer/Excel2007/WriterPart.php       |    2 +-
 libraries/PHPExcel/PHPExcel/Writer/Excel5.php      |  285 +++++++-
 .../PHPExcel/PHPExcel/Writer/Excel5/BIFFwriter.php |    2 +-
 .../PHPExcel/PHPExcel/Writer/Excel5/Escher.php     |    9 +-
 libraries/PHPExcel/PHPExcel/Writer/Excel5/Font.php |    2 +-
 .../PHPExcel/PHPExcel/Writer/Excel5/Parser.php     |   20 +-
 .../PHPExcel/PHPExcel/Writer/Excel5/Workbook.php   |  172 +----
 .../PHPExcel/PHPExcel/Writer/Excel5/Worksheet.php  |  211 ++----
 libraries/PHPExcel/PHPExcel/Writer/Excel5/Xf.php   |    2 +-
 libraries/PHPExcel/PHPExcel/Writer/HTML.php        |   11 +-
 libraries/PHPExcel/PHPExcel/Writer/IWriter.php     |    2 +-
 libraries/PHPExcel/PHPExcel/Writer/PDF.php         |    2 +-
 libraries/PHPExcel/PHPExcel/Writer/Serialized.php  |    6 +-
 libraries/db_events.inc.php                        |    7 +-
 libraries/db_routines.inc.php                      |    7 +-
 libraries/dbi/mysqli.dbi.lib.php                   |    2 +-
 libraries/display_tbl.lib.php                      |    8 +-
 libraries/export/sql.php                           |   93 ++-
 libraries/import.lib.php                           |   95 ++-
 tbl_change.php                                     |    6 +-
 tbl_operations.php                                 |   55 +-
 tbl_structure.php                                  |    6 +-
 translators.html                                   |    4 +-
 145 files changed, 2190 insertions(+), 1484 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 7b7de0a..2385125 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,16 @@ phpMyAdmin - ChangeLog
 $Id$
 $HeadURL: https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/trunk/phpMyAdmin/ChangeLog $
 
+3.3.8.0 (not yet released)
+- bug #3059311 [import] BIGINT field type added to table analysis
+- [core] Update library PHPExcel to version 1.7.4
+- bug #3062455 [core] copy procedures and routines before tables
+- bug #3062455 [export] with SQL, export procedures and routines before tables
+- bug #3056023 [import] USE query not working
+- bug #3038193 [display] Error when editing row with GEOMETRY column
+- bug #3062454 [interface] Display routines/events also when no tables are defined
+- support ARIA storage engine as well as its previous name MARIA
+
 3.3.7.0 (2010-09-07)
 - patch #3050492 [PDF scratchboard] Cannot drag table box to the edge after
   a page size increase, thanks to Martin Schönberger - mad05
diff --git a/Documentation.html b/Documentation.html
index 1a065c5..ab7ae27 100644
--- a/Documentation.html
+++ b/Documentation.html
@@ -10,7 +10,7 @@ vim: expandtab ts=4 sw=4 sts=4 tw=78
     <link rel="icon" href="./favicon.ico" type="image/x-icon" />
     <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>phpMyAdmin 3.3.7 - Documentation</title>
+    <title>phpMyAdmin 3.3.8-rc1 - Documentation</title>
     <link rel="stylesheet" type="text/css" href="docs.css" />
 </head>
 
@@ -18,7 +18,7 @@ vim: expandtab ts=4 sw=4 sts=4 tw=78
 <div id="header">
     <h1>
         <a href="http://www.phpmyadmin.net/">php<span class="myadmin">MyAdmin</span></a>
-        3.3.7 
+        3.3.8-rc1 
         Documentation
     </h1>
 </div>
diff --git a/README b/README
index 4ff42f1..c6c5507 100644
--- a/README
+++ b/README
@@ -5,8 +5,8 @@ phpMyAdmin - Readme
 
   A set of PHP-scripts to manage MySQL over the web.
 
-  Version 3.3.7
-  -------------
+  Version 3.3.8-rc1
+  -----------------
   http://www.phpmyadmin.net/
 
     Copyright (C) 1998-2000 Tobias Ratschiller <tobias_at_ratschiller.com>
diff --git a/db_operations.php b/db_operations.php
index f051877..29d2635 100644
--- a/db_operations.php
+++ b/db_operations.php
@@ -66,6 +66,40 @@ if (strlen($db) && (! empty($db_rename) || ! empty($db_copy))) {
             $GLOBALS['pma']->databases->build();
         }
 
+        if (PMA_MYSQL_INT_VERSION >= 50000) {
+            // here I don't use DELIMITER because it's not part of the
+            // language; I have to send each statement one by one
+
+            // to avoid selecting alternatively the current and new db
+            // we would need to modify the CREATE definitions to qualify
+            // the db name
+            $procedure_names = PMA_DBI_get_procedures_or_functions($db, 'PROCEDURE');
+            if ($procedure_names) {
+                foreach($procedure_names as $procedure_name) {
+                    PMA_DBI_select_db($db);
+                    $tmp_query = PMA_DBI_get_definition($db, 'PROCEDURE', $procedure_name);
+                    // collect for later display
+                    $GLOBALS['sql_query'] .= "\n" . $tmp_query;
+                    PMA_DBI_select_db($newname);
+                    PMA_DBI_query($tmp_query);
+                }
+            }
+
+            $function_names = PMA_DBI_get_procedures_or_functions($db, 'FUNCTION');
+            if ($function_names) {
+                foreach($function_names as $function_name) {
+                    PMA_DBI_select_db($db);
+                    $tmp_query = PMA_DBI_get_definition($db, 'FUNCTION', $function_name);
+                    // collect for later display
+                    $GLOBALS['sql_query'] .= "\n" . $tmp_query;
+                    PMA_DBI_select_db($newname);
+                    PMA_DBI_query($tmp_query);
+                }
+            }
+        }
+        // go back to current db, just in case
+        PMA_DBI_select_db($db);
+
         if (isset($GLOBALS['add_constraints']) || $move) {
             $GLOBALS['sql_constraints_query_full_db'] = array();
         }
@@ -178,40 +212,6 @@ if (strlen($db) && (! empty($db_rename) || ! empty($db_copy))) {
             unset($GLOBALS['sql_constraints_query_full_db'], $one_query);
         }
 
-        if (PMA_MYSQL_INT_VERSION >= 50000) {
-            // here I don't use DELIMITER because it's not part of the
-            // language; I have to send each statement one by one
-
-            // to avoid selecting alternatively the current and new db
-            // we would need to modify the CREATE definitions to qualify
-            // the db name
-            $procedure_names = PMA_DBI_get_procedures_or_functions($db, 'PROCEDURE');
-            if ($procedure_names) {
-                foreach($procedure_names as $procedure_name) {
-                    PMA_DBI_select_db($db);
-                    $tmp_query = PMA_DBI_get_definition($db, 'PROCEDURE', $procedure_name);
-                    // collect for later display
-                    $GLOBALS['sql_query'] .= "\n" . $tmp_query;
-                    PMA_DBI_select_db($newname);
-                    PMA_DBI_query($tmp_query);
-                }
-            }
-
-            $function_names = PMA_DBI_get_procedures_or_functions($db, 'FUNCTION');
-            if ($function_names) {
-                foreach($function_names as $function_name) {
-                    PMA_DBI_select_db($db);
-                    $tmp_query = PMA_DBI_get_definition($db, 'FUNCTION', $function_name);
-                    // collect for later display
-                    $GLOBALS['sql_query'] .= "\n" . $tmp_query;
-                    PMA_DBI_select_db($newname);
-                    PMA_DBI_query($tmp_query);
-                }
-            }
-        }
-        // go back to current db, just in case
-        PMA_DBI_select_db($db);
-
         // Duplicate the bookmarks for this db (done once for each db)
         if (! $_error && $db != $newname) {
             $get_fields = array('user', 'label', 'query');
diff --git a/db_structure.php b/db_structure.php
index 2171ea5..7e5d70f 100644
--- a/db_structure.php
+++ b/db_structure.php
@@ -46,24 +46,6 @@ if (empty($is_info)) {
     require_once './libraries/replication.inc.php';
 }
 
-// 1. No tables
-if ($num_tables == 0) {
-    echo '<p>' . $strNoTablesFound . '</p>' . "\n";
-
-    if (empty($db_is_information_schema)) {
-        require './libraries/display_create_table.lib.php';
-    } // end if (Create Table dialog)
-
-    /**
-     * Displays the footer
-     */
-    require_once './libraries/footer.inc.php';
-    exit;
-}
-
-// else
-// 2. Shows table informations - staybyte - 11 June 2001
-
 require_once './libraries/bookmark.lib.php';
 
 require_once './libraries/mysql_charsets.lib.php';
@@ -113,6 +95,32 @@ if (true == $cfg['PropertiesIconic']) {
     $titles['NoEmpty']    = $strEmpty;
 }
 
+// 1. No tables
+if ($num_tables == 0) {
+	echo '<p>' . $strNoTablesFound . '</p>' . "\n";
+
+	// Routines
+	require './libraries/db_routines.inc.php';
+
+	// Events
+	if (PMA_MYSQL_INT_VERSION > 50100) {
+	    require './libraries/db_events.inc.php';
+	}
+
+	if (empty($db_is_information_schema)) {
+		require './libraries/display_create_table.lib.php';
+	} // end if (Create Table dialog)
+
+	/**
+	 * Displays the footer
+	 */
+	require_once './libraries/footer.inc.php';
+	exit;
+}
+
+// else
+// 2. Shows table informations
+
 /**
  * Displays the tables list
  */
diff --git a/lang/polish-utf-8.inc.php b/lang/polish-utf-8.inc.php
index d4de26d..0ddfd1b 100644
--- a/lang/polish-utf-8.inc.php
+++ b/lang/polish-utf-8.inc.php
@@ -1,6 +1,12 @@
 <?php
 /* $Id$ */
 
+/**
+ * Translated by: Piotr Roszatycki
+ *                Jakub Wilk <ubanus at users.sourceforge.net>
+ *                Jarosław Głowacki <glowacki at europa.pl>
+ */
+
 $charset = 'utf-8';
 $text_dir = 'ltr';
 $number_thousands_separator = ' ';
@@ -18,13 +24,13 @@ $timespanfmt = '%s dni, %s godzin, %s minut i %s sekund';
 $strAbortedClients = 'Przerwane';
 $strAccessDenied = 'Brak dostępu';
 $strAccessDeniedCreateConfig = 'Prawdopodobnie powodem jest brak utworzonego pliku konfiguracyjnego. Do jego stworzenia można użyć %1$sskryptu instalacyjnego%2$s.';
-$strAccessDeniedExplanation = 'phpMyAdmin próbował połączyć się z serwerem MySQL, a serwer odrzucił połączenie. Powinieneś sprawdzić nazwę hosta, nazwę użytkownika i hasło w pliku config.inc.php i upewnić się, że odpowiadają one informacjom danym przez administratora serwera MySQL.';
+$strAccessDeniedExplanation = 'phpMyAdmin próbował połączyć się z serwerem MySQL, a serwer odrzucił połączenie. Powinieneś sprawdzić nazwę hosta, nazwę użytkownika i hasło w pliku config.inc.php i upewnić się, że odpowiadają one informacjom podanym przez administratora serwera MySQL.';
 $strAction = 'Działanie';
 $strActions = 'Działania';
 $strAddAutoIncrement = 'Dodaj wartości AUTO_INCREMENT';
 $strAddClause = 'Dodaj %s';
 $strAddConstraints = 'Dodaj ograniczenia';
-$strAddDeleteColumn = 'Dodaj/usuń pola';
+$strAddDeleteColumn = 'Dodaj/usuń kolumny';
 $strAddDeleteRow = 'Dodaj/usuń wiersz kryteriów';
 $strAddFields = 'Dodaj %s pól';
 $strAddHeaderComment = 'Dodaj do nagłówka własny komentarz (\\n oddziela linie)';
@@ -43,19 +49,21 @@ $strAfterInsertNext = 'Edytuj następny rekord';
 $strAfterInsertSame = 'Powrót do tej strony';
 $strAfter = 'Po %s';
 $strAllowInterrupt = 'Zezwól na przerwanie importu w przypadku, gdy skrypt wykryje zbliżający się koniec limitu czasu. Może to być dobry sposób importu dużych plików, jednakże może on popsuć transakcje.';
-$strAllTableSameWidth = 'wyświetlić wszystkie tabele z taką samą szerokością?';
+$strAllTableSameWidth = 'Wyświetl wszystkie tabele z taką samą szerokością';
 $strAll = 'Wszystko';
 $strAlterOrderBy = 'Sortowanie tabeli wg';
 $strAnalyze = 'Analizuj';
 $strAnalyzeTable = 'Analizuj tabelę';
 $strAnd = 'oraz';
+$strAndSmall = 'i';
 $strAndThen = 'a następnie';
 $strAngularLinks = 'Kanciaste połączenia';
 $strAnIndex = 'Do %s dodany został indeks';
 $strAny = 'Dowolny';
 $strAnyHost = 'Dowolny host';
 $strAnyUser = 'Dowolny użytkownik';
-$strApproximateCount = 'Być może w przybliżeniu. Zobacz FAQ 3.11';
+$strApplyChanges = 'Zatwierdź wybrane zmiany';
+$strApproximateCount = 'Może być w przybliżeniu. Zobacz [a at ./Documentation.html#faq3_11 at Documentation]FAQ 3.11[/a]';
 $strAPrimaryKey = 'Do %s dodany został klucz podstawowy';
 $strArabic = 'Arabski';
 $strArmenian = 'Ormiański';
@@ -89,7 +97,7 @@ $strBLOBRepositoryEnable = 'Włącz';
 $strBLOBRepositoryRemove = 'Usuń odołanie do repozytorium BLOBów';
 $strBLOBRepositoryRepair = 'Napraw';
 $strBLOBRepository = 'Repozytorium BLOBów';
-$strBLOBRepositoryUpload = 'Wrzuć do repozytorium BLOBów';
+$strBLOBRepositoryUpload = 'Prześlij do repozytorium BLOBów';
 $strBookmarkAllUsers = 'Pozwól na dostęp wszystkim użytkownikom';
 $strBookmarkCreated = 'Zapytanie %s zostało zapamiętane';
 $strBookmarkDeleted = 'Zapamiętane zapytanie SQL zostało usunięte.';
@@ -117,14 +125,16 @@ $strCancel = 'Anuluj';
 $strCanNotLoadExportPlugins = 'Nie udało się załadować modułów eksportu, proszę sprawdzić instalację!';
 $strCanNotLoadImportPlugins = 'Nie udało się załadować modułów importu, proszę sprawdzić instalację!';
 $strCannotLogin = 'Nie udało się zalogować na serwer MySQL';
-$strCantLoad = 'nie udało się załadować modułu %s,<br />proszę sprawdzić konfigurację PHP';
-$strCantLoadRecodeIconv = 'Nie udało się załadować rozszerzeń iconv lub recode, które są niezbędne do konwersji kodowania napisów, skonfiguruj PHP tak, by mógł używać tych rozszerzeń albo zablokuj konwersję kodowania napisów w phpMyAdminie.';
+$strCantLoad = 'Nie udało się załadować rozszerzenia [a at http://php.net/%1$s at Documentation][em]%1$s[/em][/a]. Proszę sprawdzić konfigurację PHP.';
+$strCantLoadRecodeIconv = 'Nie udało się załadować rozszerzeń iconv lub recode, które są niezbędne do konwersji kodowania napisów. Skonfiguruj PHP tak, aby mógł używać tych rozszerzeń, albo zablokuj konwersję kodowania napisów w phpMyAdminie.';
 $strCantRenameIdxToPrimary = 'Nie można zmienić nazwy indeksu na PRIMARY!';
 $strCantUseRecodeIconv = 'Nie udało się użyć ani funkcji iconv, ani libiconv, mimo że rozszerzenia zgłaszają się jako załadowane. Proszę sprawdzić swoją konfigurację PHP.';
 $strCardinality = 'Moc';
 $strCaseInsensitive = 'bez rozróżniania wielkości liter';
 $strCaseSensitive = 'z rozróżnianiem wielkości liter';
 $strCentralEuropean = 'Środkowoeuropejski';
+$strClickToSelect = 'Kliknij, aby zaznaczyć';
+$strClickToUnselect = 'Kliknij, aby usunąć zaznaczenie';
 $strColComFeat = 'Wyświetl komentarze dla kolumn';
 $strCollation = 'Metoda porównywania napisów';
 $strColumnNames = 'Nazwy kolumn';
@@ -137,7 +147,8 @@ $strCompleteInserts = 'Pełne dodania';
 $strCompression = 'Typ kompresji';
 $strCompressionWillBeDetected = 'Rodzaj kompresji importowanych plików zostanie automatycznie rozpoznany jako jeden z: %s';
 $strConfigDefaultFileError = 'Nie udało się załadować domyślnej konfiguracji z pliku: "%1$s"';
-$strConfigFileError = 'phpMyAdmin nie zdołał odczytać Twojego pliku konfiguracji!<br />Może się to zdarzyć, jeśli PHP znajdzie w nim błąd składniowy lub nie może znaleźć tego pliku.<br />Proszę wywołać bezpośrednio plik konfiguracyjny używając poniższego linku i odczytać otrzymane komunikat(y) o błędach. W większości przypadków brakuje gdzieś cudzysłowu lub średnika.<br />Jeżeli otrzymasz pustą stronę, wszystko jest w porządku.';
+$strConfigDirectoryWarning = 'Katalog [code]config[/code], który jest używany przez skrypt konfiguracyjny. Będzie on nadal znajdował się w katalogu phpMyAdmina. Powinieneś go usunąć po skonfigurowaniu phpMyAdmina.';
+$strConfigFileError = 'phpMyAdmin nie zdołał odczytać pliku konfiguracji!<br />Może się to zdarzyć, jeśli PHP znajdzie w nim błąd składniowy, lub nie może znaleźć tego pliku.<br />Proszę wywołać bezpośrednio plik konfiguracyjny używając poniższego odnośnika i odczytać otrzymane komunikat(y) o błędach. W większości przypadków brakuje gdzieś cudzysłowu lub średnika.<br />Jeżeli widzisz pustą stronę, wszystko jest w porządku.';
 $strConfigureTableCoord = 'Proszę skonfigurować współrzędne dla tabeli %s';
 $strConnectionError = 'Nie udało się nawiązać połączenia: błędne ustawienia.';
 $strConnections = 'Połączenia';
@@ -150,6 +161,8 @@ $strCopy = 'Kopiuj';
 $strCopyTableOK = 'Tabela %s została skopiowana do %s.';
 $strCopyTableSameNames = 'Nie można skopiować tabeli do niej samej!';
 $strCopyTable = 'Skopiuj tabelę do (bazadanych<b>.</b>tabela):';
+$strCouldNotConnectSource = 'Nie można nawiązać połączenia z serwerem źródłowym';
+$strCouldNotConnectTarget = 'Nie można nawiązać połączenia z serwerem docelowym';
 $strCouldNotKill = 'phpMyAdminowi nie udało się unicestwić wątku %s. Prawdopodobnie został on już zamknięty.';
 $strCreateDatabaseBeforeCopying = 'CREATE DATABASE przed skopiowaniem';
 $strCreateIndexTopic = 'Utwórz nowy indeksu';
@@ -158,17 +171,19 @@ $strCreateNewDatabase = 'Utwórz nową bazę danych';
 $strCreateNewTable = 'Utwórz nową tabelę w bazie danych %s';
 $strCreatePage = 'Utwórz nową stronę';
 $strCreatePdfFeat = 'Tworzenie PDF-ów';
-$strCreateRelation = 'Utwórz związek';
+$strCreateRelation = 'Utwórz relację';
 $strCreateTable  = 'Utwórz tabelę';
 $strCreateUserDatabase = 'Baza danych dla użytkownika';
 $strCreateUserDatabaseName = 'Utwórz bazę danych z taką samą nazwą i przyznaj wszystkie uprawnienia';
 $strCreateUserDatabaseNone = 'Brak';
+$strCreateUserDatabasePrivileges = 'Przyznanie wszystkich uprawnień do bazy danych "%s"';
 $strCreateUserDatabaseWildcard = 'Przyznaj wszystkie uprawienia do baz danych o nazwach pasujących do maski (nazwaużytkownika_%)';
 $strCreate = 'Utwórz';
 $strCreationDates = 'Daty utworzenia/aktualizacji/sprawdzenia';
 $strCriteria = 'Kryteria';
 $strCroatian = 'Chorwacki';
 $strCSV = 'CSV';
+$strCurrentServer = 'Bieżący serwer';
 $strCustomColor = 'Własny kolor';
 $strCyrillic = 'Cyrylica';
 $strCzech = 'Czeski';
@@ -200,16 +215,21 @@ $strDatabaseEmpty = 'Nazwa bazy danych jest pusta!';
 $strDatabaseExportOptions = 'Opcje eksportu bazy danych';
 $strDatabaseHasBeenCreated = 'Baza danych %1$s została utworzona.';
 $strDatabaseHasBeenDropped = 'Baza danych %s została usunięta.';
+$strDatabaseNotExisting = 'Baza danych \'%s\' nie istnieje.';
 $strDatabases = 'Bazy danych';
 $strDatabasesDropped = '%s baz danych zostało pomyślnie usuniętych.';
+$strDatabase_src = 'Źródłowa baza danych';
 $strDatabasesStatsDisable = 'Wyłącz statystyki';
 $strDatabasesStatsEnable = 'Włącz statystyki';
 $strDatabasesStatsHeavyTraffic = 'Uwaga: Włączenie statystyk baz danych może spowodować duży ruch pomiędzy serwerem WWW a serwerem MySQL.';
 $strDatabasesStats = 'Statystyki baz danych';
+$strDatabase_trg = 'Docelowa baza danych';
 $strData = 'Dane';
 $strDataDict = 'Słownik danych';
+$strDataDiff = 'Różnica danych';
 $strDataOnly = 'Tylko dane';
 $strDataPages = 'Strony zawierające dane';
+$strDataSyn = 'Synchronizacja danych';
 $strDBComment = 'Komentarz bazy danych: ';
 $strDBCopy = 'Kopiuj bazę danych do';
 $strDbIsEmpty = 'Baza danych wydaje się pusta!';
@@ -225,16 +245,19 @@ $strDeleteAndFlushDescr = 'Jest to najzgrabniejszy sposób, ale przeładowanie u
 $strDeleteAndFlush = 'Usuń użytkowników, a następnie przeładuj uprawnienia.';
 $strDeleted = 'Rekord został skasowany';
 $strDeleteNoUsersSelected = 'Żaden użytkownik ze został zaznaczony do usunięcia!';
-$strDeleteRelation = 'Usuń związek';
+$strDeleteRelation = 'Usuń relację';
+$strDeleteTrackingData = 'Usuń dane monitorujące tę tabelę';
 $strDelete = 'Usuń';
 $strDeleting = 'Usuwanie %s';
 $strDelimiter = 'Separator';
 $strDelOld = 'Aktualna strona ma powiązania z tabelą, która już nie istnieje. Czy chcesz usunąć te powiązania?';
 $strDescending = 'Malejąco';
 $strDescription = 'Opis';
+$strDesignerHelpDisplayField = 'Wyświetlane pole jest koloru różowego. Aby włączyć/wyłączyć wyświetlanie pola, kilknij ikonę "Wybierz pole do wyświetlenia", a następnie kliknij odpowiednią nazwę pola.';
 $strDesigner = 'Projektant';
 $strDetails = 'Szczegóły…';
 $strDictionary = 'słownik';
+$strDifference = 'Różnica';
 $strDirectLinks = 'Bezpośrednie połączenia';
 $strDirtyPages = 'Strony brudne';
 $strDisabled = 'wyłączone';
@@ -245,11 +268,13 @@ $strDisplayPDF = 'Wyświetl schemat PDF';
 $strDoAQuery = 'Wykonaj "zapytanie przez przykład" (znak globalny: "%")';
 $strDocSQL = 'DocSQL';
 $strDocu = 'Dokumentacja';
+$strDoNotAutoIncrementZeroValues = 'Nie używaj AUTO_INCREMENT dla wartości zerowych';
 $strDownloadFile = 'Ściągnij plik';
 $strDoYouReally = 'Czy na pewno wykonać ';
 $strDropDatabaseStrongWarning = 'Masz zamiar ZNISZCZYĆ całą bazę danych!';
 $strDropUsersDb = 'Usuń bazy danych o takich samych nazwach jak użytkownicy.';
 $strDrop = 'Usuń';
+$strDumpAllRows = 'Zrzuć wszystkie rekordy';
 $strDumpingData = 'Zrzut danych tabeli';
 $strDumpSaved = 'Zrzut został zapisany do pliku %s.';
 $strDumpXRows = 'Zrzuć %s rekordów zaczynając od rekordu %s.';
@@ -274,8 +299,8 @@ $strEnglish = 'Angielski';
 $strEnglishPrivileges = ' Uwaga: Uprawnienia MySQL są oznaczone w języku angielskim ';
 $strError = 'Błąd';
 $strErrorInZipFile = 'Błąd w archiwum ZIP:';
-$strErrorRelationAdded = 'Błąd: nie dodano związku.';
-$strErrorRelationExists = 'Błąd: związek już istnieje.';
+$strErrorRelationAdded = 'Błąd: relacja nie została dodana.';
+$strErrorRelationExists = 'Błąd: relacja już istnieje.';
 $strErrorRenamingTable = 'Błąd podczas zmiany nazwy tabeli z %1$s na %2$s';
 $strErrorSaveTable = 'Błąd podczas zapisywania współrzędnych dla Projektanta.';
 $strEscapeWildcards = 'Aby użyć symboli wieloznacznych _ i % w znaczeniu dosłownym, należy je poprzedzić znakiem \ ';
@@ -294,7 +319,7 @@ $strExtra = 'Dodatkowo';
 
 $strFailedAttempts = 'Nieudane próby';
 $strFieldHasBeenDropped = 'Pole %s zostało usunięte';
-$strFieldInsertFromFileTempDirNotExists = 'Błąd podczas przesuwania wrzuconego pliku, zobacz FAQ 1.11';
+$strFieldInsertFromFileTempDirNotExists = 'Błąd podczas przenoszenia przesłanego pliku. Zobacz [a at ./Documentation.html#faq1_11 at Documentation]FAQ 1.11[/a]';
 $strField = 'Pole';
 $strFieldsEnclosedBy = 'Pola zawarte w';
 $strFieldsEscapedBy = 'Pola poprzedzone przez';
@@ -320,6 +345,8 @@ $strForeignKeyRelationAdded = 'Relacja FOREIGN KEY została dodana.';
 $strFormat = 'Format';
 $strFormEmpty = 'Brakująca wartość w formularzu!';
 $strFreePages = 'Strony puste';
+$strFullStart = 'Kompletny start';
+$strFullStop = 'Całkowity stop';
 $strFullText = 'Pełny tekst';
 $strFunction = 'Funkcja';
 $strFunctions = 'Funkcje';
@@ -335,6 +362,9 @@ $strGetMoreThemes = 'Pobierz więcej motywów!';
 $strGlobal = 'globalnie';
 $strGlobalPrivileges = 'Globalne uprawnienia';
 $strGlobalValue = 'Wartość globalna';
+$strGoToDatabase = 'Przejdź do bazy danych';
+$strGoToTable = 'Przejdź do tabeli';
+$strGoToView = 'Przejdź do widoku';
 $strGo = 'Wykonaj';
 $strGrantOption = 'Nadawanie';
 $strGreek = 'Grecki';
@@ -342,17 +372,19 @@ $strGzip = '".gz"';
 
 $strHandler = 'Obsługa';
 $strHasBeenAltered = 'zostało zamienione.';
+$strHaveBeenSynchronized = 'Wybrane tabele docelowe zostały zsynchronizowane z tabelami źródłowymi.';
 $strHaveToShow = 'Należy wybrać przynajmniej jedną kolumnę do wyświetlenia';
 $strHebrew = 'Hebrajski';
 $strHelp = 'Pomoc';
 $strHexForBLOB = 'Użyj liczb szesnastkowych dla typu BLOB';
 $strHideShowAll = 'Ukryj/pokaż wszystko';
-$strHideShowNoRelation = 'Ukryj/pokaż tabele bez związków';
+$strHideShowNoRelation = 'Ukryj/pokaż tabele bez relacji';
 $strHide = 'Ukryj';
 $strHomepageOfficial = 'Oficjalna strona phpMyAdmina';
 $strHome = 'Wejście';
 $strHostEmpty = 'Brak nazwy hosta!';
 $strHost = 'Host';
+$strHostTableExplanation = 'Kiedy tabela hosta jest w użyciu, to pole jest ignorowane i zamiast niego używane są wartości przechowywane w tabeli hosta.';
 $strHTMLExcel = 'Microsoft Excel 2000';
 $strHTMLWord = 'Microsoft Word 2000';
 $strHungarian = 'Węgierski';
@@ -364,11 +396,25 @@ $strIEUnsupported = 'Internet Explorer nie obsługuje tej funkcji.';
 $strIgnoreDuplicates = 'Ignoruj zdublowane rekordy';
 $strIgnore = 'Ignoruj';
 $strIgnoreInserts = 'Użyj ignorowanych dodań';
+$strImportColNames = 'W pierwszym rekordzie znajdują się nazwy kolumn';
+$strImportEmptyRows = 'Nie importuj pustych rekordów';
 $strImportExportCoords = 'Importuj/eksportuj współrzędne schematu PDF';
 $strImportFiles = 'Import plików';
 $strImportFormat = 'Format importowanych plików';
 $strImport = 'Import';
+$strImportLargeFileUploading = 'Plik przesyłany na serwer jest prawdopodobnie większy niż maksymalny dozwolony rozmiar, lub wystąpił znany błąd w przeglądarkach opartych o silnik Webkit (Safari, Google Chrome, Arora itp.).';
+$strImportNoticePt1 = 'Następujące struktury zostały wcześniej utworzone lub zaktualizowane. Możesz:';
+$strImportNoticePt2 = 'Zobacz zawartość struktury klikając jej nazwę';
+$strImportNoticePt3 = 'Możesz zmienić wszystkie ustawienia klikając odnośnik "Opcje"';
+$strImportNoticePt4 = 'Edytuj strukturę po kliknięciu odnośnika "Struktura"';
+$strImportODS = 'Arkusz kalkulacyjny OpenDocument';
+$strImportODSCurrency = 'Importuj walutę (zamienia $5.00 na 5.00)';
+$strImportODSPercents = 'Importuj procenty jako liczby podzielone przez 100 (zamienia 12.00% na .12)';
+$strImportProceedingFile = 'Plik jest przetwarzany. Proszę o cierpliwość.';
 $strImportSuccessfullyFinished = 'Import zakończony sukcesem, wykonano %d zapytań.';
+$strImportUploadInfoNotAvailable = 'Proszę o cierpliwość. Plik jest przesyłany na serwer. Szczegóły dotyczące postępu przesyłania nie są dostępne.';
+$strImportXLS = 'Skoroszyt Excel 97-2003 XLS';
+$strImportXLSX = 'Skoroszyt Excel 2007 XLSX';
 $strIndexes = 'Indeksy';
 $strIndexesSeemEqual = 'Indeksy %1$s i %2$s wyglądają na identyczne i jeden z nich mógłby zostać usunięty.';
 $strIndexHasBeenDropped = 'Klucz %s został usunięty';
@@ -460,6 +506,7 @@ $strMaximalQueryLength = 'Maksymalna długość utworzonego zapytania';
 $strMaximumSize = 'Maksymalny rozmiar: %s%s';
 $strMbExtensionMissing = 'Rozszerzenie PHP o nazwie mbstring nie zostało znalezione, a wygląda na to, że używasz wielobajtowego kodowania napisów. Bez rozszerzenia mbstring phpMyAdmin nie ma możliwości poprawnego rozbijania napisów, co może skutkować niespodziewanymi rezultatami.';
 $strMbOverloadWarning = 'Opcja mbstring.func_overload jest włączona w pliku konfiguracyjnym PHP. Jest ona niezgodna z phpMyAdminem i może powodować utratę niektórych danych!';
+$strMediaWiki = 'Tabela MediaWiki';
 $strMIME_available_mime = 'Dostępne typy MIME';
 $strMIME_available_transform = 'Dostępne transformacje';
 $strMIME_description = 'Opis';
@@ -499,6 +546,7 @@ $strMySQLSaid = 'MySQL zwrócił komunikat: ';
 $strMySQLShowProcess = 'Pokaż procesy';
 
 $strName = 'Nazwa';
+$strNavTableFilter = 'Filtr';
 $strNext = 'Następne';
 $strNoActivity = 'Brak aktywności przez co najmniej %s sekund, proszę zalogować się jeszcze raz';
 $strNoDatabases = 'Brak baz danych';
@@ -514,11 +562,12 @@ $strNoIndex = 'Brak zdefiniowanego indeksu!';
 $strNoIndexPartsDefined = 'Brak zdefiniowanych części indeksu!';
 $strNoModification = 'Bez zmian';
 $strNone = 'Brak';
+$strNoneDefault = 'Żaden';
 $strNo = 'Nie';
 $strNoOptions = 'Ten format nie ma żadnych opcji';
 $strNoPassword = 'Brak hasła';
 $strNoPermission = 'Serwer WWW nie ma praw do zapisu pliku %s.';
-$strNoPhp = 'bez kodu PHP';
+$strNoPhp = 'Bez kodu PHP';
 $strNoPrivileges = 'Brak uprawnień';
 $strNoRights = 'Brak wystarczających uprawnień!';
 $strNoRowsSelected = 'Żaden rekord nie został zaznaczony';
@@ -527,6 +576,7 @@ $strNoTablesFound = 'Nie znaleziono tabeli w bazie danych.';
 $strNoThemeSupport = 'Brak obsługi motywów graficznych, proszę sprawdzić konfigurację i/lub motywy graficzne w katalogu %s.';
 $strNotNumber = 'To nie jest liczba!';
 $strNotOK = 'błąd';
+$strNotPresent = 'nie występuje';
 $strNotSet = 'Tabela <b>%s</b> nie została znaleziona lub nie jest ustawiona w %s';
 $strNoUsersFound = 'Nie znaleziono użytkownika(ów).';
 $strNoValidateSQL = 'Pomiń sprawdzanie poprawności SQL';
@@ -565,6 +615,9 @@ $strPasswordHashing = 'Sposób kodowania haseł';
 $strPassword = 'Hasło';
 $strPasswordChanged = 'Hasło dla %s zostało pomyślnie zmienione.';
 $strPasswordNotSame = 'Hasła nie są identyczne!';
+$strPBXTDataFileGrowSizeDesc = 'Wzrost rozmiaru plików obsługi danych (.xtd).';
+$strPBXTDataFileGrowSize = 'Wzrost rozmiaru pliku danych';
+$strPBXTDataLogThresholdDesc = 'Maksymalny rozmiar pliku z dziennikiem danych. Domyślną wartością jest 64MB. PBXT może utworzyć co najwyżej 32000 dzienników danych, które są używane przez wszystkie tabele. A zatem zwiększenie wartości tej zmiennej spowoduje powiększenie całkowitej liczby dzienników danych przechowywanych w bazie danych.';
 $strPBXTDataLogThreshold = 'Próg dziennika danych.';
 $strPBXTGarbageThresholdDesc = 'Procent śmieci w dzienniku danych, nim zostanie skompaktowany. Liczba jest między 1 i 99. Domyślną wartością jest 50.';
 $strPBXTGarbageThreshold = 'Próg śmieci';
@@ -580,7 +633,11 @@ $strPBXTLogFileCountDesc = 'Liczba plików dziennika transakcji (pbxt/system/xlo
 $strPBXTLogFileCount = 'Liczba plików dziennika';
 $strPBXTLogFileThresholdDesc = 'Rozmiar logu transakcji przed rollover, and a new log is created. Domyślną wartośćią jest 16MB.';
 $strPBXTLogFileThreshold = 'Próg pliku dziennika';
+$strPBXTRecordCacheSizeDesc = 'Ilość pamięci przydzielonej jako pamięć podręczna rekordów, używana do buforowania danych tabel. Domyślą wartością jest 32MB. Ta pamięć jest używana do zmian w plikach obsługi danych (.xtd) i wskaźnikach rekordów (.xtr).';
 $strPBXTRecordCacheSize = 'Rozmiar pamięci podręcznej rekordów';
+$strPBXTRowFileGrowSizeDesc = 'Wzrost rozmiaru plików zawierających wskaźniki rekordów (.xtr).';
+$strPBXTRowFileGrowSize = 'Wzrost rozmiaru pliku rekordu';
+$strPBXTTransactionBufferSizeDesc = 'Rozmiar globalnego bufora loga transakcji (alokowane są 2 bufory tej wielkości). Wartość domyślna to 1MB.';
 $strPBXTTransactionBufferSize = 'Rozmiar bufora transakcji';
 $strPdfDbSchema = 'Schemat bazy danych "%s" - strona %s';
 $strPdfInvalidTblName = 'Tabela "%s" nie istnieje!';
@@ -593,6 +650,7 @@ $strPerMinute = 'na minutę';
 $strPerSecond = 'na sekundę';
 $strPersian = 'Perski';
 $strPhoneBook = 'książka telefoniczna';
+$strPhpArray = 'tablica PHP';
 $strPHPExtension = 'Rozszerzenie PHP';
 $strPhp = 'Utwórz kod PHP';
 $strPHPVersion = 'Wersja PHP';
@@ -601,6 +659,7 @@ $strPleaseSelectPrimaryOrUniqueKey = 'Należy wybrać klucz główny lub klucz j
 $strPmaDocumentation = 'Dokumentacja phpMyAdmina';
 $strPmaUriError = 'Dyrektywa <tt>$cfg[\'PmaAbsoluteUri\']</tt> musi być ustawiona w pliku konfiguracyjnym!';
 $strPolish = 'Polski';
+$strPort = 'Port';
 $strPortrait = 'Orientacja pionowa';
 $strPos1 = 'Początek';
 $strPrevious = 'Poprzednie';
@@ -619,7 +678,7 @@ $strPrivDescCreateRoutine = 'Pozwól tworzyć procedury składowane.';
 $strPrivDescCreateTbl = 'Pozwól tworzyć nowe tabele.';
 $strPrivDescCreateTmpTable = 'Pozwala tworzyć tabele tymczasowe.';
 $strPrivDescCreateUser = 'Pozwól tworzyć, usuwać i zmieniać nazwy kont użytkowników.';
-$strPrivDescCreateView = 'Pozwól tworzyć perspektywy.';
+$strPrivDescCreateView = 'Pozwól tworzyć widoki.';
 $strPrivDescDelete = 'Pozwól usuwać dane.';
 $strPrivDescDropDb = 'Pozwól usuwać bazy danych i tabele.';
 $strPrivDescDropTbl = 'Pozwól usuwać tabele.';
@@ -660,6 +719,7 @@ $strPutColNames = 'Umieść nazwy pól w pierwszym rekordzie';
 $strQBEDel = 'Usuń';
 $strQBEIns = 'Dodaj';
 $strQBE = 'Zapytanie przez przykład';
+$strQueriesExecuted = 'Wykonane zostały następujące zapytania:';
 $strQueryCache = 'Pamięć podręczna zapytań';
 $strQueryFrame = 'Okienko zapytania';
 $strQueryOnDb = 'Zapytanie SQL dla bazy danych <b>%s</b>:';
@@ -677,6 +737,8 @@ $strRecommended = 'zalecana';
 $strRecords = 'Rekordy';
 $strReferentialIntegrity = 'Sprawdź spójność powiązań:';
 $strRefresh = 'Odśwież';
+$strRelationalDisplayField = 'Pole relacyjne';
+$strRelationalKey = 'Klucz relacyjny';
 $strRelationalSchema = 'Schemat relacyjny';
 $strRelationDeleted = 'Usunięto powiązanie';
 $strRelationNotWorking = 'Dodatkowe możliwości pracy z połączonymi tabelami zostały wyłączone. Aby dowiedzieć się, dlaczego - kliknij %stutaj%s.';
@@ -686,6 +748,8 @@ $strRelationView = 'Widok relacyjny';
 $strReloadingThePrivileges = 'Przeładuj uprawnienia';
 $strReloadPrivileges = 'Przeładuj uprawnienia';
 $strReload = 'Przeładuj';
+$strRemoteServer = 'Serwer zdalny';
+$strRemoveCRLF = 'Usuń znaki końca linii CRLF w polach';
 $strRemovePartitioning = 'Usuń partycjonowanie';
 $strRemoveSelectedUsers = 'Usuń zaznaczonych użytkowników';
 $strRenameDatabaseOK = 'Baza danych %s ma nazwę zmienioną na %s';
@@ -695,7 +759,48 @@ $strRepair = 'Napraw';
 $strRepairTable = 'Napraw tabelę';
 $strReplaceNULLBy = 'Zamiana NULL na';
 $strReplaceTable = 'Zamiana danych tabeli z plikiem';
+$strReplicationAddLines = 'Teraz dodaj następujące wiersze na końcu pliku my.cnf a następnie zrestartuj serwer MySQL.';
+$strReplicationAddSlaveUser = 'Dodaj użytkownika replikacji na serwerze podrzędnym';
+$strReplicationConfiguredMaster = 'Ten serwer jest skonfigurowany jako główny w procesie replikacji.';
+$strReplicationControlSlave = 'Kontrola serwera podrzędnego:';
+$strReplicationErrorGetPosition = 'Nie można odczytać pozycji loga na serwerze głównym. Możliwe, że jest problem z uprawnieniami na serwerze głównym.';
+$strReplicationErrorMasterConnect = 'Nie można nawiązać połączenia do serwera głównego %s.';
+$strReplicationChangedSuccesfully = 'Serwer główny zmieniony pomyślnie na %s';
+$strReplicationMasterConfiguration = 'Konfiguracja serwera głównego';
+$strReplicationMasterChooseAll = 'Replikuj wszystkie bazy danych; Pomiń:';
+$strReplicationMasterChooseIgn = 'Pomiń wszystkie bazy danych; Replikuj:';
+$strReplicationMasterChooseMode = 'Ten serwer nie jest skonfigurowany jako serwer główny w procesie replikacji. Możesz wybrać replikację wszystkich baz danych i pominąć pewne z nich (przydatne, jeśli chcesz replikować większość baz danych) albo możesz wybrać pominięcie replikacji wszystkich baz danych i wskazać tylko te, które mają być replikowane. Wybierz tryb:';
+$strReplicationMaster = 'Replikacja serwera głównego';
 $strReplication = 'Replikacja';
+$strReplicationRestartServer = 'Gdy zrestartowałeś już serwer MySQL kliknij przycisk Go. Powinieneś zobaczyć komunikat informujący, że serwer <b>jest</b> skonfigurowany jako główny';
+$strReplicationSelectDatabases = 'Wybierz bazy danych:';
+$strReplicationServernConfiguredMaster = 'Ten serwer nie jest skonfigurowany jako główny w procesie replikacji. Czy chcesz go <a href="%s">skonfigurować</a> ?';
+$strReplicationShowConnectedSlavesNote = 'Tylko serwery podrzędne uruchomione z opcją --report-host=host_name są widoczne na tej liście.';
+$strReplicationShowConnectedSlaves = 'Pokaż połączone serwery podrzędne';
+$strReplicationShowMasterStatus = 'Pokaż stan serwera głównego';
+$strReplicationSkippingErrorWarn = 'Pominięcie błędu(ów) może doprowadzić do braku synchronizacji serwera głównego i podrzędnego!';
+$strReplicationSlaveConfiguration = 'Konfiguracja serwera podrzędnego';
+$strReplicationSlaveConfigured = 'Serwer jest skonfigurowany jako podrzędny w procesie replikacji. Czy chesz:';
+$strReplicationSlaveErrorManagement = 'Błąd zarządzania:';
+$strReplicationSlaveChangeMaster = 'Zmień lub skonfiguruj ponownie serwer główny';
+$strReplicationSlaveIOThreadNotRunning = 'Wątek IO serwera podrzędnego nie uruchomiony!';
+$strReplicationSlaveIOThread = 'Tylko wątek IO %s';
+$strReplicationSlaveNotConfigured = 'Ten serwer nie jest skonfigurowany jako podrzędny w procesie replikacji. Czy chcesz go <a href="%s">skonfigurować</a> ?';
+$strReplicationSlave = 'Replikacja serwera podrzędnego';
+$strReplicationSlaveReset = 'Zrestartuj serwer podrzędny';
+$strReplicationSlaveSeeStatus = 'Zobacz status tabeli serwera podrzędnego';
+$strReplicationSlaveSkipCurrentError = 'Pomiń bieżący błąd';
+$strReplicationSlaveSkipNextErrors = 'błędy.';
+$strReplicationSlaveSkipNext = 'Pomiń następny';
+$strReplicationSlaveSQLThreadNotRunning = 'Wątek SQL serwera podrzędnego nie uruchomiony!';
+$strReplicationSlaveSQLThread = 'Tylko wątek SQL %s';
+$strReplicationStatusInfo = 'Ten serwer MySQL pracuje jako %s w procesie <b>replikacji</b>. Aby uzyskać dalsze informacje na temat stanu replikacji na serwerze przejdź do sekcji <a href="#replication">replikacja</a>.';
+$strReplicationStatus_master = 'Stan serwera głównego';
+$strReplicationStatus_slave = 'Stan serwera podrzędnego';
+$strReplicationStatus = 'Stan replikacji';
+$strReplicationSynchronize = 'Synchronizacja baz danych z serwera głównego';
+$strReplicationUnableToChange = 'Nie można zmienić serwera na główny';
+$strReplicationUnknownError = 'Nieznany błąd';
 $strReset = 'Resetuj';
 $strResourceLimits = 'Ograniczenia zasobów';
 $strRestartInsertion = 'Odśwież wstawianie z %s rekordami';
@@ -747,6 +852,7 @@ $strSelectBinaryLog = 'Wybierz dziennik binarny do podglądu';
 $strSelectFields = 'Wybór pól (co najmniej jedno):';
 $strSelectForeignKey = 'Wybierz klucz zewnętrzny';
 $strSelectNumRows = 'w zapytaniu';
+$strSelectReferencedKey = 'Wybierz klucz odwołujący';
 $strSelectTables = 'Wybierz tabele';
 $strSend = 'Zapisz jako plik';
 $strSent = 'Wysłane';
@@ -761,18 +867,25 @@ $strServerTabVariables = 'Zmienne';
 $strServerTrafficNotes = '<b>Ruch na serwerze</b>: Poniższe tabele pokazują statystyki ruchu na tym serwerze MySQL od rozpoczęcia jego pracy.';
 $strServerVars = 'Zmienne i ustawienia serwera';
 $strServerVersion = 'Wersja serwera';
+$strSessionGCWarning = 'Parametr PHP [a at http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime@]session.gc_maxlifetime[/a] ma mniejszą wartość niż czas przechowywania ciasteczka skonfigurowany w phpMyAdmin. Z tego powodu sesja wygaśnie wcześniej niż jest to skonfigurowane w phpMyAdmin.';
 $strSessionStartupErrorGeneral = 'Nie udało się bezbłędnie utworzyć sesji. Należy sprawdzić błędy w logach PHP i serwera WWW, a następnie właściwie skonfigurować instalację PHP.';
 $strSessionValue = 'Wartość sesji';
 $strSetEnumVal = 'Jeżeli pole jest typu "ENUM" lub "SET", wartości wprowadza się w formacie: \'a\',\'b\',\'c\'…<br />Jeżeli potrzeba wprowadzić odwrotny ukośnik ("\") lub apostrof ("\'"), należy je poprzedzić odwrotnym ukośnikiem (np.: \'\\\\xyz\' lub \'a\\\'b\').';
+$strSettings = 'ustawienia';
 $strSetupAllowAnywhereRecoding_name = 'Pozwalaj na konwersję kodowania napisów';
 $strSetupAllowArbitraryServer_desc = 'Włączenie powoduje, że przy uwierzytelnianiu przez ciasteczka, użytkownik w formularzu logowania może wprowadzić dowolny serwer MySQL';
 $strSetupAllowArbitraryServerMsg = 'Ta [a@?page=form&formset=features#tab_Security]opcja[/a] powinna być wyłączona, ponieważ pozwala atakującemu metodą brute force zalogować się na dowolny serwer MySQL. Jeżeli wydaje się ona konieczna, należy użyć [a@?page=form&formset=features#tab_Security]listy zaufanych serwerów proxy[/a]. Jednakże ochrona oparta na adresy IP może nie być wiarygodna, jeżeli używany IP należy do ISP, do którego podłączonych jest tysiące użytkowników.';
 $strSetupAllowArbitraryServer_name = 'Pozwól logować się na dowolny serwera MySQL';
+$strSetupAllowUserDropDatabase_name = 'Pokaż odnośnik "Usuń bazę danych" zwykłym użytkownikom';
 $strSetupblowfish_secret_desc = 'Tajne hasło używane do szyfrowania ciasteczek przy uwierzytelnianiu przez ciasteczka.';
 $strSetupBlowfishSecretCharsMsg = 'Klucz powinien zawierać znaki alfanumeryczne [em]i[/em] i specjalne.';
 $strSetupBlowfishSecretLengthMsg = 'Klucz jest za krótki, powinien mieć co najmniej 8 znaków.';
 $strSetupBlowfishSecretMsg = 'Klucz blowfish ne był ustawiony, natomiast włączone było uwierzytelnianie przez ciasteczka, więc klucz został wygenerowany. Jest on używany do szyfrowania ciasteczek.';
 $strSetupblowfish_secret_name = 'Sekret Blowfish';
+$strSetupBrowseMarkerEnable_desc = 'Podświetl zaznaczone rekordy';
+$strSetupBrowseMarkerEnable_name = 'Oznaczanie rekordów';
+$strSetupBrowsePointerEnable_desc = 'Podświetla rekord, na który wskazuje kursor myszy';
+$strSetupBrowsePointerEnable_name = 'Podświetl wskaźnik';
 $strSetupBZipDump_desc = 'Włącza format kompresji [a at http://en.wikipedia.org/wiki/Bzip2]bzip2[/a] dla operacji importu i eksportu';
 $strSetupBZipDump_name = 'Bzip2';
 $strSetupBZipDumpWarning = '[a@?page=form&formset=features#tab_Import_export](De)kompresja bzip2[/a] wymaga funkcji (%s) która nie jest dostępna w tym systemie.';
@@ -788,12 +901,27 @@ $strSetupDefaultCharset_desc = 'Domyślne kodowanie napisów używane przy konwe
 $strSetupDefaultCharset_name = 'Domyślne kodowanie napisów';
 $strSetupDefaultLanguage = 'Domyślny język';
 $strSetupDefaultServer = 'Domyślny serwer';
+$strSetupDefaultTabDatabase_desc = 'Zakładka, która jest wyświetlana po wejściu do bazy danych';
+$strSetupDefaultTabDatabase_name = 'Domyślna zakładka bazy danych';
+$strSetupDefaultTabServer_desc = 'Zakładka, która jest wyświetlana po wejściu w szczegóły serwer';
+$strSetupDefaultTabServer_name = 'Domyślna zakładka serwera';
+$strSetupDefaultTabTable_desc = 'Zakładka, która jest wyświetlana po wejściu w szczegóły tabeli';
+$strSetupDefaultTabTable_name = 'Domyślna zakładka tabeli';
 $strSetupDirectoryNotice = 'Wartość ta powinna być dwukrotnie sprawdzona aby mieć pewność iż ten katalog jest zabezpieczony przed jakimkolwiek dostępem.';
+$strSetupDisplayDatabasesList_desc = 'Pokaż wykaz baz danych jako listę zamiast listy rozwijanej';
+$strSetupDisplayDatabasesList_name = 'Wyświetl bazy danych w postaci listy';
 $strSetupDisplay = 'Pokaż';
+$strSetupDisplayServersList_desc = 'Pokaż wykaz serwerów jako listę zamiast listy rozwijanej';
+$strSetupDisplayServersList_name = 'Wyświetl serwery w postaci listy';
 $strSetupDonateLink = 'Przekazanie darowizny';
 $strSetupDownload = 'Ściągnij';
 $strSetupEndOfLine = 'Koniec linii';
 $strSetuperror_connection = 'Nie można połączyć się z serwerem MySQL';
+$strSetuperror_empty_pmadb_password = 'Pomiń hasło użytkownika monitorującego phpMyAdmin podczas używania pmadb';
+$strSetuperror_empty_pmadb_user = 'Pomiń użytkownika monitorującego phpMyAdmin podczas używania pmadb';
+$strSetuperror_empty_signon_session = 'Pomiń nazwę sesji pojedynczego logowania (Signon) podczas używania metody uwierzytelnienia Signon';
+$strSetuperror_empty_signon_url = 'Pomiń adres URL pojedynczego logowania Singon podczas używania metody uwierzytelnienia Signon';
+$strSetuperror_empty_user_for_config_auth = 'Pomiń nazwę użytkownika podczas używania metody uwierzytelnienia z pliku konfiguracyjnego';
 $strSetuperror_form = 'Wysłany formularz zawiera błędy';
 $strSetuperror_incorrect_ip_address = 'Nieprawidłowy adres IP: %s';
 $strSetuperror_incorrect_port = 'Nieprawdiłowy numer portu';
@@ -805,33 +933,54 @@ $strSetupExecTimeLimit_desc = 'Jak długo (w sekundach) może trwać wykonywanie
 $strSetupExecTimeLimit_name = 'Maksymalny czas wykonania';
 $strSetupExport_asfile_name = 'Zapisz jako plik';
 $strSetupExport_compression_name = 'Typ kompresji';
+$strSetupExport_file_template_database_name = 'Nazwa schematu bazy danych';
+$strSetupExport_file_template_server_name = 'Nazwa schematu serwera';
+$strSetupExport_file_template_table_name = 'Nazwa schematu tabeli';
 $strSetupExport_format_name = 'Format';
 $strSetupExport_charset_name = 'Kodowanie pliku';
 $strSetupExport_onserver_name = 'Zapisz na serwerze';
 $strSetupExport_onserver_overwrite_name = 'Nadpisuj istniejące pliki';
+$strSetupExport_remember_file_template_name = 'Zapamiętaj nazwę pliku schematu';
 $strSetupFalse = 'nie';
 $strSetupForceSSL_desc = 'Wymusza bezpiecznie połącznie podczas używania phpMyAdmina';
 $strSetupForceSSLMsg = 'Ta [a@?page=form&formset=features#tab_Security]opcja[/a] powinna być włączona, jeśli serwer WWW ją obsługuje.';
 $strSetupForceSSL_name = 'Wymuszaj połączenie SSL';
+$strSetupForeignKeyDropdownOrder_desc = 'Porządek sortowania pozycji w liście rozwijanej kluczy obcych; [kbd]content[/kbd] - dane referencyjne, [kbd]id[/kbd] - wartość klucza';
+$strSetupForeignKeyDropdownOrder_name = 'Porządek sortowania kluczy obcych';
+$strSetupForeignKeyMaxLimit_desc = 'Jeśli jest mniej pozycji zostanie użyta lista wyboru';
+$strSetupForeignKeyMaxLimit_name = 'Limit kluczy obcych';
 $strSetupForm_Browse_desc = 'Personalizuj tryb przeglądania';
 $strSetupForm_Browse = 'Tryb przeglądania';
 $strSetupForm_Edit_desc = 'Personalizuj tryb edycji';
 $strSetupForm_Edit = 'Tryb edycji';
+$strSetupForm_Export_defaults_desc = 'Dostosuj domyślne opcje eksportu';
 $strSetupForm_Export_defaults = 'Domyślne opcje eksportu';
+$strSetupForm_Import_defaults_desc = 'Dostosuj domyślne opcje importu';
 $strSetupForm_Import_defaults = 'Domyślne opcje importu';
+$strSetupForm_Import_export_desc = 'Ustaw katalogi importu i eksportu oraz opcje kompresji';
 $strSetupForm_Import_export = 'Import / eksport';
 $strSetupForm_Left_databases = 'Bazy danych';
+$strSetupForm_Left_databases_desc = 'Opcje wyświetlania baz danych';
+$strSetupForm_Left_frame_desc = 'Dostosuj wygląd ramki nawigacji';
 $strSetupForm_Left_frame = 'Ramka nawigacji';
+$strSetupForm_Left_servers_desc = 'Opcje wyświetlania serwerów';
 $strSetupForm_Left_servers = 'Serwery';
+$strSetupForm_Left_tables_desc = 'Opcje wyświetlania tabel';
 $strSetupForm_Left_tables = 'Tabele';
 $strSetupForm_Main_frame = 'Główna ramka';
+$strSetupForm_Other_core_settings_desc = 'Inne ustawienia';
 $strSetupForm_Other_core_settings = 'Inne kluczowe ustawienia';
+$strSetupForm_Query_window_desc = 'Dostosuj opcje okna zapytań';
 $strSetupForm_Query_window = 'Okienko zapytania';
 $strSetupForm_Security = 'Bezpieczeństwo';
+$strSetupForm_Security_desc = 'Proszę zauważyć, że phpMyAdmin jest po prostu interfejsem użytkownika i jego funkcje nie ograniczają MySQL';
 $strSetupForm_Server_config_desc = 'Zaawansowane ustawienia serwera; nie zmieniaj ich jeżeli nie jesteś pewien ich znaczenia';
 $strSetupForm_Server_config = 'Konfiguracja serwera';
 $strSetupForm_Server_desc = 'Podaj parametry dla połączenia z serwerem';
+$strSetupForm_Server_login_options_desc = 'Wprowadź opcje logowania do uwierzytelnienia Signon';
+$strSetupForm_Server_login_options = 'Opcje pojedynczego logowania (Signon)';
 $strSetupForm_Server_pmadb = 'Baza danych PMA';
+$strSetupForm_Server_pmadb_desc = 'Skonfiguruj bazę danych phpMyAdmin, aby uzyskać dostęp do dodatkowych funkcji, zobacz więcej w dokumentacji [a at ../Documentation.html#linked-tables]linked-tables infrastructure[/a]';
 $strSetupForm_Server = 'Ustawienia podstawowe';
 $strSetupFormset_customization = 'Indywidualizacja';
 $strSetupFormset_export = 'Indywidualizacja opcji eksportu';
@@ -839,7 +988,9 @@ $strSetupFormset_features = 'Funkcje';
 $strSetupFormset_import = 'Indywidualizacja opcji importu';
 $strSetupFormset_left_frame = 'Indywidualizacja ramki nawigacyjnej';
 $strSetupFormset_main_frame = 'Indywidualizacja głównej ramkj';
+$strSetupForm_Sql_box_desc = 'Dostosuj odnośniki pokazywane w ramkach zapytań SQL';
 $strSetupForm_Sql_box = 'Okno zapytania SQL';
+$strSetupForm_Sql_queries_desc = 'Ustawienia zapytań SQL. Zobacz ustawienia opcji pola zapytań SQL [a@?page=form&formset=main_frame#tab_Sql_box]Navigation frame[/a]';
 $strSetupForm_Sql_queries = 'Zapytania SQL';
 $strSetupForm_Startup_desc = 'Personalizuj stronę startową';
 $strSetupForm_Startup = 'Strona startowa';
@@ -849,18 +1000,50 @@ $strSetupGZipDump_desc = 'Włącza format kompresji [a at http://en.wikipedia.org/w
 $strSetupGZipDump_name = 'GZip';
 $strSetupGZipDumpWarning = '[a@?page=form&formset=features#tab_Import_export](De)kompresja gzip[/a] wymaga funkcji (%s) która nie jest dostępna w tym systemie.';
 $strSetupHomepageLink = 'Strona główna phpMyAdmina';
+$strSetupCharEditing_desc = 'Określa który typ kontroli edycji powinien być używany dla pól CHAR i VARCHAR; [kbd]input[/kbd] - pozwala na limitowanie długości wprowadzanych znaków, [kbd]textarea[/kbd] - pozwala na tworzenie nowych wierszy w polach';
+$strSetupCharEditing_name = 'Edycja pól CHAR';
+$strSetupCharTextareaCols_desc = 'Liczba kolumn w polach textarea CHAR/VARCHAR';
+$strSetupCharTextareaCols_name = 'Kolumny w polu textarea CHAR/VARCHAR';
+$strSetupCharTextareaRows_desc = 'Liczba wierszy w polach textarea CHAR/VARCHAR';
+$strSetupCharTextareaRows_name = 'Wiersze w polu textarea CHAR/VARCHAR';
 $strSetupCheckConfigurationPermissions_name = 'Sprawdź uprawnienia pliku konfiguracyjnego';
 $strSetupIconvExtraParams_name = 'Dodatkowe parametry dla iconv';
 $strSetupIgnoreErrors = 'Ignoruj błędy';
 $strSetupIgnoreMultiSubmitErrors_desc = 'Włączenie powoduje, że phpMyAdmin będzie kontynuował obliczanie zapytania składającego się z wielu instrukcji, nawet jeśli wykonanie którejś z nich nie udało się';
 $strSetupIgnoreMultiSubmitErrors_name = 'Ignoruj błędy w ciągu instrukcji';
+$strSetupImport_allow_interrupt_desc = 'Pozwala przerwać import w przypadku, kiedy skrypt wykryje, że kończy się czas (maksymalny czas wykonywania skryptu). To może być dobry sposób na importowanie dużych plików, jednakże może on przerwać transakcje.';
+$strSetupImport_allow_interrupt_name = 'Import częściowy: pozwalaj przerwać';
+$strSetupImport_format_desc = 'Domyślny format oznacza, że ta lista zależy od położenia (bazy danych, tabeli) i tylko SQL jest zawsze dostępne';
 $strSetupImport_format_name = 'Format importowanych plików';
+$strSetupImport_skip_queries_desc = 'Liczba rekordów (zapytań) do pominięcia od początku';
+$strSetupImport_skip_queries_name = 'Import częściowy: pomiń zapytania';
 $strSetupInsecureConnectionMsg1 = 'W przypadku używania niezabezpieczonego połączenia, wszystkie dane (w tym niejawne, jak hasło) są przesyłanie w formie niezaszyfrowanej!';
-$strSetupInsecureConnectionMsg2 = 'Jeżeli serwer WWW jest skonfigurowany do obsługi zapytań HTTPS, należy skorzystać z [a@%s]tego linku[/a], aby zabezpieczyć połączenie.';
+$strSetupInsecureConnectionMsg2 = 'Jeżeli serwer WWW jest skonfigurowany do obsługi zapytań HTTPS, należy skorzystać z [a@%s]tego odnośnika[/a], aby zabezpieczyć połączenie.';
 $strSetupInsecureConnection = 'Niezabezpieczone połączenie';
+$strSetupInsertRows_desc = 'Pokazuje ile rekordów może zostać wstawionych w jednym czasie';
+$strSetupInsertRows_name = 'Liczba wstawianych rekordów';
+$strSetupLeftDefaultTabTable_name = 'Cel ikony szybkiej akcji';
 $strSetupLeftDisplayLogo_desc = 'Pokaż logo w lewej ramce';
 $strSetupLeftDisplayLogo_name = 'Pokaż logo';
+$strSetupLeftDisplayServers_desc = 'Wyświetla wybór serwera - w lewej ramce, na górze';
+$strSetupLeftDisplayServers_name = 'Wyświetlaj wybór serwerów';
+$strSetupLeftFrameDBSeparator_desc = 'Łańcuch znaków, który oddziela bazy danych na różne poziomy zagłębienia';
+$strSetupLeftFrameDBSeparator_name = 'Separator struktury drzewa bazy danych';
+$strSetupLeftFrameDBTree_desc = 'Tylko wersja uproszczona. Wyświetlaj bazy danych w postaci drzewa (określone przez separator zdefiniowany poniżej)';
+$strSetupLeftFrameDBTree_name = 'Wyświetla bazy danych w postaci drzewa';
+$strSetupLeftFrameLight_desc = 'Wyłącz, jeśli chcesz widzieć wszystkie bazy danych jednocześnie';
+$strSetupLeftFrameLight_name = 'Używaj uproszczonej wersji';
+$strSetupLeftFrameTableLevel_name = 'Maksymalny poziom zagłębienia tabeli';
+$strSetupLeftFrameTableSeparator_desc = 'Łańcuch znaków, który separuje tabele na różnych poziomach zagłębienia';
+$strSetupLeftFrameTableSeparator_name = 'Separator poziomów tabeli';
+$strSetupLeftLogoLink_name = 'Odnośnik URL do logo';
+$strSetupLeftLogoLinkWindow_desc = 'Otwieraj stronę w tym samym oknie ([kbd]main[/kbd]) lub w nowym oknie ([kbd]new[/kbd])';
+$strSetupLeftLogoLinkWindow_name = 'Cel odnośnika logo';
+$strSetupLeftPointerEnable_desc = 'Podświetla serwer po najechaniu kursorem myszy';
+$strSetupLeftPointerEnable_name = 'Włącz podświetlanie';
 $strSetupLetUserChoose = 'wybór pozostawiony użytkownikowi';
+$strSetupLightTabs_desc = 'Używaj mniej grafiki w zakładkach';
+$strSetupLightTabs_name = 'Uproszczone zakładki';
 $strSetupLoad = 'Załaduj';
 $strSetupLoginCookieDeleteAll_desc = 'Włączenie powoduje, że przy wylogowaniu usunięte zostaną ciasteczka dla wszystkich serwerów, a nie tylko bieżącego. Wyłączenie tej opcji powoduje, że gdy korzysta się z więcej niż jednego serwera, łatwo zapomnieć wylogować się z pozostałych.';
 $strSetupLoginCookieDeleteAll_name = 'Usuń wszystkie ciasteczka przy wylogowaniu';
@@ -875,78 +1058,156 @@ $strSetupMaxDbList_desc = 'Maksymalna liczba baz danych pokazywanych w lewej ram
 $strSetupMaxDbList_name = 'Maksimum baz danych';
 $strSetupMaxCharactersInDisplayedSQL_desc = 'Maksymalna liczba pokazywanych znaków zapytania SQL';
 $strSetupMaxCharactersInDisplayedSQL_name = 'Maksymalna pokazywana długość SQL';
+$strSetupMaxRows_desc = 'Liczba rekordów wyświetlana podczas przeglądania wyniku zapytania. Jeśli wynik zapytania zawiera więcej rekordów, zostaną wyświetlone odnośniki "Poprzednie" i "Następne".';
+$strSetupMaxRows_name = 'Maksymalna liczba rekordów do wyświetlenia';
 $strSetupMaxTableList_desc = 'Maksymalna liczba tabel pokazywanych na liście tabel';
 $strSetupMaxTableList_name = 'Maksimum tabel';
 $strSetupMemoryLimit_desc = 'Ile pamięci może zaalokować skrypt, np. [kbd]32M[/kbd] ([kbd]0[/kbd] oznacza brak limitu)';
 $strSetupMemoryLimit_name = 'Limit pamięci';
+$strSetupNavigationBarIconic_desc = 'Używaj tylko ikon, tylko tekstu lub ikon i tekstu';
+$strSetupNavigationBarIconic_name = 'Wygląd interfejsu paska nawigacji';
 $strSetupNewServer = 'Nowy serwer';
 $strSetupNoServers = 'Brak skonfigurowanych serwerów';
 $strSetupOBGzip_desc = 'Czy kompresować GZip-em wyjście w celu zwiększenia szybkości transferów HTTP';
 $strSetupOBGzip_name = 'Kompresja wyjścia GZip';
 $strSetupOptionNone = '- brak -';
+$strSetupOrder_desc = '[kbd]SMART[/kbd] - np. malejący porządek wyświetlania pól typu TIME, DATE, DATETIME i TIMESTAMP. W przeciwnym przypadku porządek rosnący.';
+$strSetupOrder_name = 'Domyslny porządek sortowania';
 $strSetupOverview = 'Opcje podstawowe';
 $strSetupPersistentConnections_desc = 'Czy użyć trwałych połączeń do baz danych MySQL';
 $strSetupPersistentConnections_name = 'Trwałe połączenia';
+$strSetupPropertiesIconic_desc = 'Używaj tylko ikon, tylko tekstu, lub ikon i tekstu';
+$strSetupPropertiesIconic_name = 'Wygląd interfejsu do operacji na tabeli';
+$strSetupProtectBinary_desc = 'Nie pozwala na edycję pól BLOB lub BLOB i BINARY';
+$strSetupProtectBinary_name = 'Chroń pola binarne';
+$strSetupQueryHistoryDB_desc = 'Włącz, jeśli chcesz przechowywać historię zapytań w bazie danych (wymaga pmadb). Jeśli jest wyłączona, to wykorzystywany jest podprogram JavaScript do wyświetlania historii zapytań (historia jest tracona przez zamknięcie okna).';
 $strSetupQueryHistoryDB_name = 'Permanentna historia zapytań';
 $strSetupQueryHistoryMax_desc = 'Ile zapytań ma być przechowywanych w historii';
 $strSetupQueryHistoryMax_name = 'Długość historii zapytań';
-$strSetupRecodingEngine_desc = 'Które funckje będą użyte do konwersji kodowania napisów';
+$strSetupQueryWindowDefTab_desc = 'Zakładka wyświetlana po otwarciu nowego okna zapytań';
+$strSetupQueryWindowDefTab_name = 'Domyślna zakładka okna zapytań';
+$strSetupRecodingEngine_desc = 'Wybierz funckje, które będą użyte do konwersji kodowania napisów';
 $strSetupRecodingEngine_name = 'Mechanizm konwersji kodowania napisów';
 $strSetupRestoreDefaultValue = 'Przywróć wartość domyślną';
 $strSetupRevertErroneousFields = 'Spróbuj przywrócić błędne pola do ich domyślnych wartości';
+$strSetupSaveDir_desc = 'Katalog na serwerze, w którym będą zapisywane eksportowane pliki';
+$strSetupSaveDir_name = 'Katalog do zapisu';
 $strSetupServerAuthConfigMsg = 'Został ustawiony typ autoryzacji [kbd]config[/kbd] z automatycznym logowaniem. Ustawienie to nie jest zalecane dla serwerów produkcyjnych, ponieważ do uzyskania dostępu do phpMyAdmina potrzebna jest znajomość tylko jego adresu URL. Zmień [a@?page=servers&mode=edit&id=%1$d#tab_Server]typ autoryzacji[/a] na [kbd]cookie[/kbd] lub [kbd]http[/kbd].';
-$strSetupServerExtensionMsg = 'Z powodów wydajnościowych powinien być uzywany mysqli.';
+$strSetupServerExtensionMsg = 'Z powodów wydajnościowych powinien być używany mysqli.';
+$strSetupServerNoPasswordMsg = 'Pozwalasz na połączenia do serwera bez podawania hasła.';
 $strSetupServersAdd = 'Dodaj nowy serwer';
 $strSetupServers_AllowDeny_order_desc = 'Należy pozostawić puste jeśli nie jest używane';
+$strSetupServers_AllowDeny_order_name = 'Porządek uwierzytelnienia hosta';
+$strSetupServers_AllowDeny_rules_desc = 'Pozostaw puste, aby użyć wartości domyślnych';
+$strSetupServers_AllowDeny_rules_name = 'Reguły uwierzytelnienia hosta';
 $strSetupServers_AllowNoPassword_name = 'Pozwól na logowanie bez hasła';
 $strSetupServers_AllowRoot_name = 'Pozwól na logowanie się roota';
+$strSetupServers_auth_swekey_config_desc = 'Plik konfiguracyjny do [a at http://swekey.com]sprzętowego uwierzytelnienia SweKey[/a]. Relatywna ścieżka do głównego katalogu phpMyAdmin, np. ./swekey.conf';
+$strSetupServers_auth_swekey_config_name = 'Plik konfiguracyjny SweKey';
 $strSetupServers_auth_type_desc = 'Jaka metoda uwierzytelniania ma być użyta';
 $strSetupServers_auth_type_name = 'Typ uwierzytelniania';
+$strSetupServers_bookmarktable_desc = 'Pozostaw puste, aby nie obsługiwać zakładek [a at http://wiki.phpmyadmin.net/pma/bookmark]bookmark[/a]. Sugerowana nazwa: [kbd]pma_bookmark[/kbd]';
 $strSetupServers_bookmarktable_name = 'Tabela zakładek';
+$strSetupServers_column_info_desc = 'Pozostaw puste, aby nie obsługiwać komentarzy i typów mime. Sugerowana nazwa: [kbd]pma_column_info[/kbd]';
+$strSetupServers_column_info_name = 'Tabela informacji o kolumnach';
 $strSetupServers_compress_desc = 'Czy połączenie do serwera MySQL ma być kompresowane';
 $strSetupServers_compress_name = 'Kompresja połączenia';
 $strSetupServers_connect_type_desc = 'Sposób połączenia z serwerem; w razie niepewności, należy pozostawić tcp';
 $strSetupServers_connect_type_name = 'Typ połączenia';
+$strSetupServers_controlpass_name = 'Hasło użytkownika monitorującego';
+$strSetupServers_controluser_desc = 'Specjalny użytkownik MySQL z ograniczonymi uprawnieniami. Więcej informacji jest dostępnych pod adresem: [a at http://wiki.phpmyadmin.net/pma/controluser]wiki[/a]';
+$strSetupServers_controluser_name = 'Użytkownik monitorujący';
 $strSetupServers_CountTables_desc = 'Zliczaj tabele podczas pokazywania listy bazy danych';
 $strSetupServers_CountTables_name = 'Zliczaj tabele';
+$strSetupServers_designer_coords_desc = 'Pozostaw puste, aby nie obsługiwać trybu projektowania. Sugerowana nazwa: [kbd]pma_designer_coords[/kbd]';
+$strSetupServers_designer_coords_name = 'Tabela trybu projektowania';
+$strSetupServers_DisableIS_desc = 'Więcej informacji jest dostępnych pod adresem: [a at http://sf.net/support/tracker.php?aid=1849494]PMA bug tracker[/a] i [a at http://bugs.mysql.com/19588]MySQL Bugs[/a]';
+$strSetupServers_DisableIS_name = 'Wyłącz używanie INFORMATION_SCHEMA';
 $strSetupServerSecurityInfoMsg = 'Jeżeli wydaje się to konieczne, można użyć dodatkowych ustawień bezpieczeństwa — [a@?page=servers&mode=edit&id=%1$d#tab_Server_config]uwierzytelniania na podstawie hosta[/a] i [a@?page=form&formset=features#tab_Security]listy zaufanych serwerów proxy[/a]. Jednakże ochrona oparta na adresy IP może nie być wiarygodna, jeżeli używany IP należy do ISP, do którego podłączonych jest tysiące użytkowników.';
 $strSetupServersEdit = 'Edytuj serwer';
 $strSetupServers_extension_desc = 'Jakiego rozszerzenie PHP ma być użyte; o ile jest obsługiwane, należy podać mysqli';
 $strSetupServers_extension_name = 'Rozszerzenie PHP';
 $strSetupServers_hide_db_desc = 'Ukryj bazy danych pasujące do wyrażenia regularnego (PCRE)';
 $strSetupServers_hide_db_name = 'Ukryj bazy danych';
+$strSetupServers_history_desc = 'Pozostaw puste, aby nie obsługiwać historii zapytań SQL. Sugerowana nazwa: [kbd]pma_history[/kbd]';
+$strSetupServers_history_name = 'Tabela historii zapytań SQL';
+$strSetupServers_host_desc = 'Nazwa hosta na którym uruchomiony jest serwer MySQL';
 $strSetupServers_host_name = 'Nazwa hosta serwera';
+$strSetupServers_LogoutURL_name = 'URL wylogowania';
 $strSetupServers_nopassword_desc = 'Ma być podejmowana próba łączenia się bez hasła';
 $strSetupServers_nopassword_name = 'Łącz się bez hasła';
 $strSetupServers_only_db_desc = 'Można użyć znaków wieloznacznych MySQL-a (% i _), należy poprzedzić je znakiem \\, by uzyskać je w znaczeniu dosłownym, np. \'moja\_baza\' a nie \'moja_baza\'';
 $strSetupServers_only_db_name = 'Pokaż tylko wymienione bazy danych';
 $strSetupServers_password_desc = 'Należy pozostawić puste w przypadku innego niż config typu uwierzytelniania';
 $strSetupServers_password_name = 'Hasło dla uwierzytelniania typu config';
-$strSetupServers_pmadb_desc = 'Baza danych używana prze funkcje związków, zakładek i generowania PDF-ów. Pełna informacja znajduje się na stronie [a at http://wiki.phpmyadmin.net/pma/pmadb]pmadb[/a]. Puste pole oznacza brak obsługi. Domyślna wartość: [kbd]phpmyadmin[/kbd]';
+$strSetupServers_pdf_pages_desc = 'Pozostaw puste, aby nie obsługiwać schematu PDF. Sugerowana nazwa: [kbd]pma_pdf_pages[/kbd]';
+$strSetupServers_pdf_pages_name = 'Schemat PDF: strony tabeli';
+$strSetupServers_pmadb_desc = 'Baza danych używana przez funkcje relacji, zakładek i generowania PDF-ów. Pełna informacja znajduje się na stronie [a at http://wiki.phpmyadmin.net/pma/pmadb]pmadb[/a]. Puste pole oznacza brak obsługi. Domyślna wartość: [kbd]phpmyadmin[/kbd]';
 $strSetupServers_pmadb_name = 'Baza danych PMA';
 $strSetupServers_port_desc = 'Port na którym nasłuchuje serwer MySQL, pole puste oznacza wartość domyślną';
 $strSetupServers_port_name = 'Port serwera';
-$strSetupServers_relation_name = 'Tabela związków';
+$strSetupServers_relation_desc = 'Pozostaw puste, aby nie obsługiwać [a at http://wiki.phpmyadmin.net/pma/relation]relation-links[/a]. Sugerowana nazwa: [kbd]pma_relation[/kbd]';
+$strSetupServers_relation_name = 'Tabela relacji';
 $strSetupServers_ShowDatabasesCommand_desc = 'Polecenie SQL do pobrania dostępnych baz danych';
 $strSetupServers_ShowDatabasesCommand_name = 'Polecenie SHOW DATABASES';
+$strSetupServers_SignonSession_desc = 'Zobacz przykład usługi pojedynczego logowania (Signon) [a at http://wiki.phpmyadmin.net/pma/auth_types#signon]authentication types[/a]';
+$strSetupServers_SignonSession_name = 'Nazwa sesji usługi pojedynczego logowania (Signon)';
+$strSetupServers_SignonURL_name = 'URL usługi pojedynczego logowania (Signon)';
 $strSetupServerSslMsg = 'Jeżeli połączenia SSL są obsługiwane przez serwer WWW, powinny być używane.';
 $strSetupServers_socket_desc = 'Gniazdko, na którym nasłuchuje serwer MySQL, pole puste oznacza wartość domyślną';
 $strSetupServers_socket_name = 'Gniazdo serwera';
+$strSetupServers_ssl_desc = 'Aktywuj SSL do połączeń z serwerem MySQL';
 $strSetupServers_ssl_name = 'Używaj SSL';
+$strSetupServers_table_coords_desc = 'Pozostaw puste, aby nie obsługiwać schematu PDF. Sugerowana nazwa: [kbd]pma_table_coords[/kbd]';
+$strSetupServers_table_coords_name = 'Schemat PDF: współrzędne tabeli';
+$strSetupServers_table_info_desc = 'Tabela opisująca wyświetlane pola. Pozostaw puste, aby nie było obsługiwane. Sugerowana nazwa: [kbd]pma_table_info[/kbd]';
+$strSetupServers_table_info_name = 'Wyświetl pola tabeli';
 $strSetupServers_user_desc = 'Należy pozostawić puste w przypadku innego niż config typu uwierzytelniania';
 $strSetupServers_user_name = 'Użytkownik dla uwierzytelniania typu config';
+$strSetupServers_verbose_desc = 'Przyjazny opis serwera dla użytkownika. Pozostaw puste, aby wyświetlić nazwę hosta.';
+$strSetupServers_verbose_check_desc = 'Dezaktywuj jeśli jesteś pewien, że tabele pma_* są zaktualizowane. To zapobiega ciągłemu sprawdzaniu kompatybilności, przez co zwiększa wydajność';
+$strSetupServers_verbose_check_name = 'Szczegółowe sprawdzanie';
+$strSetupServers_verbose_name = 'Szczegółowa nazwa serwera';
 $strSetupSetValue = 'Ustaw wartość: %s';
+$strSetupShowAll_desc = 'Czy użytkownik powinien mieć wyświetlony przycisk "Pokaż wszystko (rekordy)"';
+$strSetupShowAll_name = 'Pozwól wyświetlać wszystkie rekordy';
+$strSetupShowCreateDb_name = 'Pokaż formularz tworzenia bazy danych';
 $strSetupShowForm = 'Pokaż formularz';
+$strSetupShowFunctionFields_desc = 'Wyświetla pola z funkcjami w trybie edycji/dodawania';
+$strSetupShowFunctionFields_name = 'Pokaż pola z funkcjami';
 $strSetupShowHiddenMessages = 'Pokaż ukryte wiadomości (#MSG_COUNT)';
+$strSetupShowChgPassword_desc = 'Proszę zauważyć, że włączenie tej opcji nie ma wpływu w trybie uwierzytelnienia [kbd]config[/kbd], ponieważ hasło jest silnie kodowane w pliku konfiguracyjnym. To nie ogranicza możliwości wykonania tego samego polecenia bezpośrednio';
+$strSetupShowChgPassword_name = 'Pokaż formularz zmiany hasła';
+$strSetupShowPhpInfo_desc = 'Pokazuje odnośnik do [a at http://php.net/manual/function.phpinfo.php]phpinfo()[/a]';
+$strSetupShowPhpInfo_name = 'Pokaż odnośnik phpinfo()';
+$strSetupShowServerInfo_name = 'Pokaż szczegółowe informacje o serwerze MySQL';
 $strSetupShowSQL_desc = 'Czy mają być pokazywane zapytania SQL generowane przez phpMyAdmina';
 $strSetupShowSQL_name = 'Pokaż zapytania SQL';
+$strSetupShowStats_desc = 'Pozwala wyświetlać statystyki bazy danych i tabeli (np. wykorzystanie miejsca)';
 $strSetupShowStats_name = 'Pokaż statystyki';
+$strSetupShowTooltipAliasDB_desc = 'Jeśli podpowiedzi są włączone i ustawiony jest komentarz do bazy danych, zamienia komentarz i nazwę bazy danych';
+$strSetupShowTooltipAliasDB_name = 'Wyświetla komentarz do bazy danych zamiast jej nazwy';
+$strSetupShowTooltipAliasTB_desc = 'Gdy jest ustawione na [kbd]nested[/kbd], alias nazwy tabeli jest używany tylko do rozdzielania/zagnieżdżania tabel zgodnie z dyrektywą $cfg[\'LeftFrameTableSeparator\']. A więc tylko katalog jest nazywany jako alias, a nazwa tabeli pozostaje niezmieniona';
+$strSetupShowTooltipAliasTB_name = 'Wyświetla komentarz do tabeli zamiast jej nazwy';
+$strSetupShowTooltip_name = 'Wyświetla komentarz do tabeli w postaci podpowiedzi';
+$strSetupSkipLockedTables_desc = 'Zaznacza używane tabele i umożliwia pokazanie baz danych z zablokowanymi tabelami';
 $strSetupSkipLockedTables_name = 'Pomiń zablokowane tabele';
 $strSetupSQLQuery_Edit_name = 'Edytuj';
 $strSetupSQLQuery_Explain_name = 'Wyjaśnij SQL';
 $strSetupSQLQuery_Refresh_name = 'Odśwież';
 $strSetupSQLQuery_ShowAsPHP_name = 'Utwórz kod PHP';
+$strSetupSQLQuery_Validate_name = 'Sprawdź poprawność SQL';
+$strSetupSuggestDBName_desc = 'Sugeruje nazwę bazy danych podczas operacji "Utwórz bazę danych" (jeśli możliwe) lub zostawia puste pole';
+$strSetupSuggestDBName_name = 'Zasugeruj nazwę nowej bazy danych';
 $strSetupTrue = 'tak';
+$strSetupTrustedProxies_desc = 'Wprowadź serwery pośredniczące (proxy) jako [kbd]IP: zaufany nagłówek HTTP[/kbd]. Następujący przykład określa jak phpMyAdmin powinien polegać na nagłówku HTTP_X_FORWARDED_FOR (X-Forwarded-For) przesłanym przez serwer pośredniczący (proxy) 1.2.3.4:[br][kbd]1.2.3.4: HTTP_X_FORWARDED_FOR[/kbd]';
+$strSetupTrustedProxies_name = 'Lista zaufanych adresów IP serwerów pośredniczących (proxy) dla reguł allow/deny';
+$strSetupUploadDir_desc = 'Katalog na serwerze, do którego można przesyłać pliki w celu importowania';
+$strSetupUploadDir_name = 'Katalog na przesyłane pliki';
+$strSetupUseDbSearch_desc = 'Pozwól na przeszukiwanie całej bazy danych';
+$strSetupUseDbSearch_name = 'Przeszukiwanie bazy danych';
+$strSetupVerboseMultiSubmit_desc = 'Pokaż przetworzone rekordy każdej instrukcji w wielokrotnych zapytaniach. Zobacz libraries/import.lib.php, aby dowiedzieć się ile instrukcja może domyślnie zawierać zapytań.';
+$strSetupVerboseMultiSubmit_name = 'Szczegóły wielokrotnych instrukcji';
 $strSetupVersionCheckDataError = 'Odczytanie wersji nie udało się. Być może nie ma połączenia z Internetem lub serwer aktualizacji nie odpowiada.';
 $strSetupVersionCheckInvalid = 'Otrzymano od serwera nieprawidłowy numer wersji';
 $strSetupVersionCheckLink = 'Sprawdź, czy jest nowsza wersja';
@@ -962,6 +1223,9 @@ $strSetupZipDumpExportWarning = '[a@?page=form&formset=features#tab_Import_e
 $strSetupZipDumpImportWarning = '[a@?page=form&formset=features#tab_Import_export]Dekompresja zip[/a] wymaga funkcji (%s) która nie jest dostępna w tym systemie.';
 $strSetupZipDump_name = 'ZIP';
 $strShowAll = 'Pokaż wszystko';
+$strShowBinaryContentsAsHex = 'Pokaż zawartość binarną w postaci szesnastkowej';
+$strShowBinaryContents = 'Pokaż zawartość binarną';
+$strShowBLOBContents = 'Pokaż zawartość BLOB';
 $strShowColor = 'Pokaż kolor';
 $strShowDatadictAs = 'Format słownika danych';
 $strShowFullQueries = 'Pokaż pełne zapytania';
@@ -972,6 +1236,7 @@ $strShowingPhp = 'Wyświetlany jest kod PHP.';
 $strShowingRecords = 'Pokaż rekordy ';
 $strShowingSQL = 'Wyświetlane jest zapytanie SQL.';
 $strShowKeys = 'Pokaż tylko klucze';
+$strShowMasterStatus = 'Pokaż stan serwera głównego';
 $strShowOpenTables = 'Pokaż otwarte tabele';
 $strShowPHPInfo = 'Informacje o PHP';
 $strShow = 'Pokaż';
@@ -1091,10 +1356,12 @@ $strSimplifiedChinese = 'Chiński uproszczony';
 $strSingly = '(pojedynczo)';
 $strSize = 'Rozmiar';
 $strSkipQueries = 'Liczba rekordów (zapytań), które należy z początku pominąć';
+$strSlaveConfigure = 'Upewnij się, że w pliku konfiguracyjnym (my.conf) jest wprowadzony unikalny ID serwera. Jeśli tak nie jest, dodaj następującą linię w sekcji [mysqld]:';
 $strSlovak = 'Słowacki';
 $strSlovenian = 'Słoweński';
 $strSmallBigAll = 'Wszystko małe/duże';
 $strSnapToGrid = 'Przyciągaj do siatki';
+$strSocket = 'Gniazdo';
 $strSocketProblem = '(lub gniazdo lokalnego serwera MySQL nie jest skonfigurowane poprawnie)';
 $strSortByKey = 'Sortuj wg klucza';
 $strSorting = 'Sortowanie';
@@ -1112,12 +1379,16 @@ $strSQL = 'SQL';
 $strSQPBugInvalidIdentifer = 'Nieprawidłowy identyfikator';
 $strSQPBugUnclosedQuote = 'Niezamknięty cudzysłów';
 $strSQPBugUnknownPunctuation = 'Nieznany znak przestankowy';
+$strStandInStructureForView = 'Zastąpiona struktura widoku';
+$strStart = 'Start';
 $strStatCreateTime = 'Utworzenie';
 $strStatement = 'Cecha';
 $strStatCheckTime = 'Ostatnie sprawdzenie';
+$strStatic = 'statycznie';
 $strStatisticsOverrun = 'Na aktywnym serwerze liczniki bajtów mogą się przekręcić, więc statystyki jakich dostarcza serwer MySQL nie są wiarygodne.';
 $strStatUpdateTime = 'Ostatnia aktualizacja';
 $strStatus = 'Status';
+$strStop = 'Stop';
 $strStorageEngine = 'Mechanizm składowania';
 $strStorageEngines = 'Mechanizmy składowania';
 $strStrucCSV = 'CSV';
@@ -1125,7 +1396,11 @@ $strStrucData = 'Struktura i dane';
 $strStrucExcelCSV = 'CSV dla MS Excel';
 $strStrucOnly = 'Tylko struktura';
 $strStructPropose = 'Analiza zawartości';
+$strStructureDiff = 'Różnica w strukturze' ;
+$strStructureForView = 'Struktura widoku';
+$strStructureLC = 'struktura';
 $strStructure = 'Struktura';
+$strStructureSyn = 'Synchronizacja struktury';
 $strSubmit = 'Wyślij';
 $strSuccess = 'Zapytanie SQL zostało wykonane pomyślnie';
 $strSuhosin = 'Serwer działa pod ochroną Suhosina. Możliwe problemy opisuje %sdokumentacja%s.';
@@ -1137,24 +1412,37 @@ $strSwekeyNoKeyId = 'Plik %s nie zawiera żadnego identyfikatora klucza';
 $strSwekeyNoKey = 'Prawidłowy klucz uwierzytelniający nie jest podłączony';
 $strSwitchToDatabase = 'Przełącz do skopiowanej bazy danych';
 $strSwitchToTable = 'Przełącz na skopiowaną tabelę';
+$strSynchronizationNote = 'Docelowa baza danych zostanie w całości zsynchronizowana ze źródłową. Źródłowa baza danych pozostanie niezmieniona.';
+$strSynchronizeDb =  'Synchronizuj bazy danych';
+$strSynchronize = 'Synchronizacja';
 
+$strTableAddColumn = 'Dodaj kolumnę(y)';
 $strTableAlreadyExists = 'Tabela %s już istnieje!';
+$strTableAlterColumn = 'Modyfikuj kolumnę(y)';
 $strTableAlteredSuccessfully = 'Tabela %1$s została pomyślnie zmodyfikowana';
+$strTableAlterIndex = 'Modyfikuj indeks(y)';
+$strTableApplyIndex = 'Dołącz indeks(y)';
 $strTableComments = 'Komentarze tabeli';
+$strTableDeleteRows = 'Czy chcesz usunąć wszystkie poprzednie rekordy z tabel docelowych?';
 $strTableEmpty = 'Brak nazwy tabeli!';
 $strTableHasBeenCreated = 'Tabela %1$s została utworzona.';
 $strTableHasBeenDropped = 'Tabela %s została usunięta';
 $strTableHasBeenEmptied = 'Tabela %s została opróżniona';
 $strTableHasBeenFlushed = 'Tabela %s została przeładowana';
+$strTableInsertRow = 'Dodaj rekord(y)';
 $strTableIsEmpty = 'Tabela wydaje się pusta!';
 $strTableMaintenance = 'Zarządzanie tabelą';
 $strTableName = 'Nazwa tabeli';
 $strTableOfContents = 'Spis treści';
 $strTableOptions = 'Opcje tabeli';
+$strTableRemoveColumn = 'Usuń kolumnę(y)';
+$strTableRemoveIndex = 'Usuń indeks(y)';
 $strTables = '%s tabel(a)';
 $strTableStructure = 'Struktura tabeli dla ';
 $strTable = 'Tabela';
+$strTableUpdateRow = 'Zaktualizuj rekord(y)';
 $strTakeIt = 'użyj';
+$strTargetDatabaseHasBeenSynchronized = 'Docelowa baza danych została zsynchronizowana ze źródłową';
 $strTblPrivileges = 'Uprawnienia specyficzne dla tabel';
 $strTempData = 'Dane tymczasowe';
 $strTextAreaLength = ' To pole może nie dać się edytować<br /> z powodu swojej długości ';
@@ -1179,20 +1467,68 @@ $strToggleSmallBig = 'Przełącz małe/duże';
 $strToSelectRelation = 'Aby wybrać powiązanie, kliknij :';
 $strTotalUC = 'Sumarycznie';
 $strTotal = 'wszystkich';
+$strTrackingActivated = 'Monitorowanie %s.%s zostało aktywowane.';
+$strTrackingActivateNow = 'Aktywuj teraz';
+$strTrackingActivateTrackingFor = 'Aktywuj monitorowanie %s.%s';
+$strTrackingCommentOut = 'Ujmij w komentarz te dwa wiersze jeśli ich nie potrzebujesz.';
+$strTrackingCreateVersionOf = 'Utwórz wersję %s dla %s.%s';
+$strTrackingCreateVersion = 'Utwórz wersję';
+$strTrackingDatabaseLog = 'Log bazy danych';
+$strTrackingDataDefinitionStatement = 'Instrukcja definiowania danych';
+$strTrackingDataManipulationStatement = 'Instrukcja przetwarzania danych';
+$strTrackingDate = 'Data';
+$strTrackingDeactivateNow = 'Dezaktywuj teraz';
+$strTrackingDeactivateTrackingFor = 'Dezaktywuj monitorowanie %s.%s';
+$strTrackingExportAs = 'Eksportuj jako %s';
+$strTrackingIsActive = 'Monitorowanie jest aktywne.';
+$strTrackingIsNotActive = 'Monitorowanie nie jest aktywne.';
+$strTrackingMechanism = 'Mechanizm monitorowania';
+$strTracking = 'Monitorowanie';
+$strTrackingReportClose = 'Zamknij';
+$strTrackingReportForTable = 'Monitorowanie raportu tabeli `%s`';
+$strTrackingReport = 'Monitorowanie raportu';
+$strTrackingShowLogDateUsers = 'Pokaż %s w okresie od %s do %s użytkownika %s %s';
+$strTrackingShowVersions = 'Pokaż wersje';
+$strTrackingSQLDumpFile = 'Zrzut SQL (plik do pobrania)';
+$strTrackingSQLDump = 'Zrzut SQL';
+$strTrackingSQLExecuted = 'Instrukcje SQL zostały wykonane.';
+$strTrackingSQLExecutionAlert = 'Ta opcja zamienia twoją tabelę i zawarte w niej dane.';
+$strTrackingSQLExecution = 'Wykonanie SQL';
+$strTrackingSQLExported = 'Instrukcje SQL zostały wyeksportowane. Proszę skopiować zrzut lub go wykonać.';
+$strTrackingStatements = 'Monitorowanie instrukcji';
+$strTrackingStatusActive = 'aktywne';
+$strTrackingStatusNotActive = 'nie aktywne';
+$strTrackingStructureSnapshot = 'Migawka struktury';
+$strTrackingThCreated = 'Utworzone';
+$strTrackingThLastVersion = 'Ostatnia wersja';
+$strTrackingThUpdated = 'Zaktualizowane';
+$strTrackingThVersion = 'Wersja';
+$strTrackingTrackDDStatements = 'Monitoruj następujące instrukcje definiujące dane:';
+$strTrackingTrackDMStatements = 'Monitoruj następujące instrukcje przetwarzania danych:';
+$strTrackingTrackedTables = 'Monitorowane tabele';
+$strTrackingTrackTable = 'Monitoruj tabelę';
+$strTrackingUntrackedTables = 'Niemonitorowane tabele';
+$strTrackingUsername = 'Nazwa użytkownika';
+$strTrackingVersionActivated = 'Monitorowanie %s.%s , wersja %s jest aktywna.';
+$strTrackingVersionCreated = 'Wersja %s została utworzona, monitorowanie %s.%s jest aktywne.';
+$strTrackingVersionDeactivated = 'Monitorowanie %s.%s , wersja %s jest dezaktywowana.';
+$strTrackingVersionSnapshotSQL = 'Wersja %s migawki (kod SQL)';
+$strTrackingVersions = 'Wersje';
+$strTrackingYouCanExecute = 'Możesz wykonać zrzut poprzez utworzenie i użycie tymczasowej bazy danych. Upwenij się, że posiadasz do tego odpowiednie uprawnienia.';
 $strTraditionalChinese = 'Chiński tradycyjny';
 $strTraditionalSpanish = 'Tradycyjny hiszpański';
 $strTraffic = 'Ruch';
 $strTransactionCoordinator = 'Koordynator transakcji';
-$strTransformation_application_octetstream__download = 'Wyświetla link do ściągnięcia binarnych danych z tego pola. Pierwsza opcja to nazwa pliku binarnego. Drugą opcją jest możliwa nazwa pola zawierającego nazwę pliku. Jeżeli dana jest druga opcja, pierwsza musi być pustym napisem';
+$strTransformation_application_octetstream__download = 'Wyświetla odnośnik do pobrania danych binarnych z tego pola. Pierwsza opcja to nazwa pliku binarnego. Drugą opcją jest możliwa nazwa pola zawierającego nazwę pliku. Jeżeli dana jest druga opcja, pierwsza musi być pustym napisem';
 $strTransformation_application_octetstream__hex = 'Wyświetla szesnastkową reprezentację danych. Opcjonalny pierwszy parametr określa jak często dodawane będą spacje (domyślnie: co 2 półbajty).';
 $strTransformation_image_jpeg__inline = 'Wyświetla klikalną miniaturkę; opcje: szerokość,wysokość w pikselach (oryginalne proporcje zostaną zachowane)';
-$strTransformation_image_jpeg__link = 'Wyświetla link do tego obrazu (bezpośrednie ściągnięcie bloba).';
+$strTransformation_image_jpeg__link = 'Wyświetla odnośnik do tego obrazu (bezpośrednie ściągnięcie BLOBa).';
 $strTransformation_image_png__inline = 'Zobacz image/jpeg: inline';
 $strTransformation_text_plain__dateformat = 'Wyświetla pola typu TIME, TIMESTAMP, DATETIME lub numeryczne uniksowe znaczniki czasu jako sformatowane daty. Pierwsza opcja to przesunięcie (w godzinach) które zostanie dodane do znacznika czasu (domyślnie: 0). Drugą opcją można określić inny napis formatujący datę/czas. Trzecia opcja określa czy daty mają być lokalne ("local") czy w UTC ("utc"). Od tego wyboru zależy format daty: w przypadku "local" jest taki jak dla funkcji PHP strftime(), w przypadku "utc" — gmdate().';
 $strTransformation_text_plain__external = 'TYLKO LINUX: Uruchamia zewnętrzną aplikację i przekazuje dane pól na standardowe wejście. Zwraca standardowe wyjście tej aplikacji. Domyślnie jest to Tidy, który porządkuje kod HTML. Ze względu na bezpieczeństwo, należy ręcznie zmodyfikować plik libraries/transformations/text_plain__external.inc.php i dodać narzędzie, na którego uruchamianie pozwalasz. Pierwszą opcją jest liczba programów, których chcesz użyć, a drugą są parametry programu. Jeżeli trzeci parametr jest ustawiony na 1 (jest to domyślna wartość), zostanie dokonana konwersja wyjścia poprzez użycie htmlspecialchars(). Jeżeli czwarty parametr został ustawiony na 1 (jest to domyślna wartość), zawartość komórki nie będzie zawijana, tak że całe wyjście zostanie pokazane bez zmian formatu.';
 $strTransformation_text_plain__formatted = 'Zachowuje oryginalne formatowanie pola. Neutralizowanie znaków niespecjalnych nie jest dokonywane.';
-$strTransformation_text_plain__imagelink = 'Wyświetla obrazek i link, pole zawiera nazwę pliku; pierwszą opcję jest prefiks, taki jak "http://domena.com/", drugą opcją jest szerokość w pikselach, trzecią opcją jest wysokość.';
-$strTransformation_text_plain__link = 'Wyświetla link, pole zawiera nazwę pliku; pierwsza opcja to prefiks, taki jak "http://domena.com/", druga opcja to tytuł linku.';
+$strTransformation_text_plain__imagelink = 'Wyświetla obrazek i odnośnik, pole zawiera nazwę pliku; pierwsza opcja to prefiks, taki jak "http://domena.com/", druga opcja to szerokość w pikselach, trzecią opcją jest wysokość.';
+$strTransformation_text_plain__link = 'Wyświetla odnośnik, pole zawiera nazwę pliku; pierwsza opcja to prefiks, taki jak "http://domena.com/", druga opcja to tytuł linku.';
 $strTransformation_text_plain__sql = 'Formatuj tekst traktując jako zapytanie SQL z podświetlaniem składni.';
 $strTransformation_text_plain__substr = 'Pokazuje jedynie część napisu. Pierwsza opcja to offset, od którego ma zacząć się wyświetlanie tekstu (domyślnie 0). Druga opcja to ilość zwracanego tekstu. Jeżeli jest pusta, zwracany jest cały pozostały tekst. Trzecia opcja określa jakie znaki zostaną dodane do wyjścia, jeżeli zwracany jest część napisu (domyślnie: …) .';
 $strTriggers = 'Wyzwalacze';
@@ -1201,26 +1537,26 @@ $strTurkish = 'Turecki';
 $strType = 'Typ';
 
 $strUkrainian = 'Ukraiński';
-$strUncheckAll = 'Odznacz wszystkie';
+$strUncheckAll = 'Usuń zaznaczenie wszystkich';
 $strUnicode = 'Unicode';
 $strUnique = 'Jednoznaczny';
 $strUnknown = 'nieznany';
-$strUnselectAll = 'Odznacz wszystkie';
+$strUnselectAll = 'Usuń zaznaczenie wszystkich';
 $strUnsupportedCompressionDetected = 'Próbowano wczytać plik z nieobsługiwanym typem kompresji (%s). Albo jego obsługa nie została zaimplementowana albo została konfiguracyjnie wyłączona.';
 $strUpdatePrivMessage = 'Uaktualniłeś uprawnienia dla %s.';
 $strUpdateProfileMessage = 'Profil został uaktualniony.';
 $strUpdateQuery = 'Zmień zapytanie';
 $strUpdComTab = 'Informacje o tym, jak zaktualizować tabelę Column_comments znajdują się w dokumentacji';
-$strUpgrade = 'Poleca się aktualizację do %s w wersji %s lub późniejszej.';
+$strUpgrade = 'Zaleca się aktualizację do %s w wersji %s lub nowszej.';
 $strUploadErrorCantWrite = 'Nie udało się zapisać pliku na dysk.';
-$strUploadErrorExtension = 'Wrzucanie pliku zostało zatrzymane przez rozszerzenie.';
-$strUploadErrorFormSize = 'Rozmiar wrzucanego pliku jest więcszy niż wartość dyrektywy MAX_FILE_SIZE określonej w formularzu HTML.';
-$strUploadErrorIniSize = 'Rozmiar wrzucanego pliku jest większy niż wartość dyrektywy upload_max_filesize w php.ini.';
+$strUploadErrorExtension = 'Przesłanie pliku zostało zatrzymane przez rozszerzenie.';
+$strUploadErrorFormSize = 'Rozmiar przesyłanego pliku jest większy niż wartość dyrektywy MAX_FILE_SIZE określonej w formularzu HTML.';
+$strUploadErrorIniSize = 'Rozmiar przesyłanego pliku jest większy niż wartość dyrektywy upload_max_filesize w php.ini.';
 $strUploadErrorNoTempDir = 'Nie znaleziono katalogu tymczasowego.';
-$strUploadErrorPartial = 'Plik został wrzucony jedynie częściowo.';
-$strUploadErrorUnknown = 'Nieznany błąd wrzucania plików.';
-$strUploadLimit = 'Prawdopodobnie próbowano wrzucić duży plik. Aby poznać sposoby obejścia tego limitu, proszę zapoznać się z %sdokumenacją%s.';
-$strUploadsNotAllowed = 'Serwer nie pozwala na upload plików.';
+$strUploadErrorPartial = 'Plik został przesłany jedynie częściowo.';
+$strUploadErrorUnknown = 'Nieznany błąd przesyłania pliku.';
+$strUploadLimit = 'Prawdopodobnie próbowano przesłać duży plik. Aby poznać sposoby obejścia tego limitu, proszę zapoznać się z %sdokumenacją%s.';
+$strUploadsNotAllowed = 'Serwer nie pozwala na przesyłanie plików.';
 $strUsage = 'Wykorzystanie';
 $strUseBackquotes = 'Użyj cudzysłowów z nazwami tabel i pól';
 $strUseHostTable = 'Użyj tabeli hostów';
@@ -1245,16 +1581,16 @@ $strVersionInformation = 'Informacja o wersji';
 $strViewDumpDatabases = 'Zrzut baz danych';
 $strViewDumpDB = 'Zrzut bazy danych';
 $strViewDump = 'Zrzut tabeli';
-$strViewHasAtLeast = 'Ta perspektywa ma przynajmniej tyle wierszy. Więcej informacji w %sdocumentation%s.';
-$strViewHasBeenDropped = 'Perspektywa %s została usunięta';
+$strViewHasAtLeast = 'Ten widok ma przynajmniej tyle wierszy. Więcej informacji w %sdocumentation%s.';
+$strViewHasBeenDropped = 'Widok %s został usunięty';
 $strViewImage = 'Zobacz obraz';
-$strViewName = 'Nazwa perspektywy';
-$strView = 'Perspektywa';
+$strViewName = 'Nazwa widoku';
+$strView = 'Widok';
 $strViewVideo = 'Obejrzyj film';
 
 $strWebServer = 'Serwer WWW';
-$strWebServerUploadDirectoryError = 'Katalog ustalony dla uploadu jest nieosiągalny';
-$strWebServerUploadDirectory = 'katalog serwera WWW dla uploadu';
+$strWebServerUploadDirectoryError = 'Nie mozna znaleźć katalogu do zapisu przesyłanych plików';
+$strWebServerUploadDirectory = 'katalog serwera WWW do przesyłania plików';
 $strWelcome = 'Witamy w %s';
 $strWestEuropean = 'Zachodnioeuropejski';
 $strWiki = 'Wiki';
@@ -1264,6 +1600,14 @@ $strWithChecked = 'Zaznaczone:';
 $strWriteRequests = 'Żądań zapisu';
 $strWrongUser = 'Błędne pola użytkownik/hasło. Brak dostępu.';
 
+$strXMLError = 'Plik XML ma nieprawidłową strukturę lub jest niekompletny. Proszę skorygować problem i spróbować ponownie.';
+$strXMLExportContents = 'Eksportuj zawartość';
+$strXMLExportFunctions = 'Eksportuj funkcje';
+$strXMLExportProcedures = 'Eksportuj procedury';
+$strXMLExportStructs = 'Eksportuj schematy struktury (zalecane)';
+$strXMLExportTables = 'Eksportuj tabele';
+$strXMLExportTriggers = 'Eksportuj wyzwalacze';
+$strXMLExportViews = 'Eksportuj widoki';
 $strXML = 'XML';
 
 $strYes = 'Tak';
@@ -1271,358 +1615,4 @@ $strYes = 'Tak';
 $strZeroRemovesTheLimit = 'Uwaga: Ustawienie tych opcji na 0 (zero) usuwa ograniczenie.';
 $strZip = '".zip"';
 
-// To translate:
-$strAndSmall = 'and';  //to translate
-$strApplyChanges = 'Apply Selected Changes';  //to translate
-
-$strClickToSelect = 'Click to select';  //to translate
-$strClickToUnselect = 'Click to unselect';  //to translate
-$strConfigDirectoryWarning = 'Directory [code]config[/code], which is used by the setup script, still exists in your phpMyAdmin directory. You should remove it once phpMyAdmin has been configured.';  //to translate
-$strCouldNotConnectSource = 'Could not connect to the source';  //to translate
-$strCouldNotConnectTarget = 'Could not connect to the target';  //to translate
-$strCreateUserDatabasePrivileges = 'Grant all privileges on database "%s"';  //to translate
-$strCurrentServer = 'Current server';  //to translate
-
-$strDatabaseNotExisting = '\'%s\' database does not exist.';  //to translate 
-$strDatabase_src = 'Source database';  //to translate
-$strDatabase_trg = 'Target database';  //to translate
-$strDataDiff = 'Data Difference';  //to translate
-$strDataSyn = 'Data Synchronization';  //to translate
-$strDeleteTrackingData = 'Delete tracking data for this table';  //to translate
-$strDesignerHelpDisplayField = 'The display field is shown in pink. To set/unset a field as the display field, click the "Choose field to display" icon, then click on the appropriate field name.';  //to translate
-$strDifference = 'Difference';  //to translate
-$strDoNotAutoIncrementZeroValues = 'Do not use AUTO_INCREMENT for zero values';  //to translate
-$strDumpAllRows = 'Dump all rows';  //to translate
-
-$strFullStart = 'Full start';  //to translate
-$strFullStop = 'Full stop';  //to translate
-
-$strGoToDatabase = 'Go to database';  //to translate
-$strGoToTable = 'Go to table';  //to translate
-$strGoToView = 'Go to view';  //to translate
-
-$strHaveBeenSynchronized = 'Selected target tables have been synchronized with source tables.';  //to translate
-$strHostTableExplanation = 'When Host table is used, this field is ignored and values stored in Host table are used instead.';  //to translate
-
-$strImportColNames = 'Column names in first row';  //to translate
-$strImportEmptyRows = 'Do not import empty rows';  //to translate
-$strImportLargeFileUploading = 'The file being uploaded is probably larger than the maximum allowed size or this is a known bug in webkit based (Safari, Google Chrome, Arora etc.) browsers.';  //to translate
-$strImportNoticePt1 = 'The following structures have either been created or altered. Here you can:';  //to translate
-$strImportNoticePt2 = 'View a structure`s contents by clicking on its name';  //to translate
-$strImportNoticePt3 = 'Change any of its settings by clicking the corresponding "Options" link';  //to translate
-$strImportNoticePt4 = 'Edit its structure by following the "Structure" link';  //to translate
-$strImportODSCurrency = 'Import currencies ($5.00 to 5.00)';  //to translate
-$strImportODS = 'Open Document Spreadsheet';  //to translate
-$strImportODSPercents = 'Import percentages as proper decimals (12.00% to .12)';  //to translate
-$strImportProceedingFile = 'The file is being processed, please be patient.';  //to translate
-$strImportUploadInfoNotAvailable = 'Please be patient, the file is being uploaded. Details about the upload are not available.';  //to translate
-$strImportXLS = 'Excel 97-2003 XLS Workbook';  //to translate
-$strImportXLSX = 'Excel 2007 XLSX Workbook';  //to translate
-
-$strMediaWiki = 'MediaWiki Table';  //to translate
-
-$strNavTableFilter = 'Filter';  //to translate
-$strNoneDefault = 'None';  //to translate
-$strNotPresent = 'not present';  //to translate
-
-$strPBXTDataFileGrowSize = 'Data file grow size';  //to translate
-$strPBXTDataFileGrowSizeDesc = 'The grow size of the handle data (.xtd) files.';  //to translate
-$strPBXTDataLogThresholdDesc = 'Maksymalny rozmiar pliku z dziennikiem danych. Domyślną wartością jest 64MB. PBXT może utworzyć co najwyżej 32000 dzienników danych, which are used by all tables. So the value of this variable can be increased to increase the total amount of data that can be stored in the database.';  //to translate
-$strPBXTRecordCacheSizeDesc = 'Ilość pamięci zaalokowanej jako pamięć podręszna rekordów, używana do buforowania danych tabel. Domyślą wartością jest 32MB. This memory is used to cache changes to the handle data (.xtd) and row pointer (.xtr) files.';  //to translate
-$strPBXTRowFileGrowSizeDesc = 'The grow size of the row pointer (.xtr) files.';  //to translate
-$strPBXTRowFileGrowSize = 'Row file grow size';  //to translate
-$strPBXTTransactionBufferSizeDesc = 'The size of the global transaction log buffer (the engine allocates 2 buffers of this size). The default is 1MB.';  //to translate
-$strPhpArray = 'PHP array';  //to translate
-$strPort = 'Port';  //to translate
-
-$strQueriesExecuted = 'The following queries have been executed:';  //to translate
-
-$strRelationalDisplayField = 'Relational display field';  //to translate
-$strRelationalKey = 'Relational key';  //to translate
-$strRemoteServer = 'Remote server';  //to translate
-$strRemoveCRLF = 'Remove CRLF characters within fields';  //to translate
-$strReplicationAddLines = 'Now, add the following lines at the end of your my.cnf and please restart the MySQL server afterwards.';  //to translate
-$strReplicationAddSlaveUser = 'Add slave replication user';  //to translate
-$strReplicationConfiguredMaster = 'This server is configured as master in a replication process.';  //to translate
-$strReplicationControlSlave = 'Control slave:';  //to translate
-$strReplicationErrorGetPosition = 'Unable to read master log position. Possible privilege problem on master.';  //to translate
-$strReplicationErrorMasterConnect = 'Unable to connect to master %s.';  //to translate
-$strReplicationChangedSuccesfully = 'Master server changed succesfully to %s';  //to translate
-$strReplicationMasterConfiguration = 'Master configuration';  //to translate
-$strReplicationMasterChooseAll = 'Replicate all databases; Ignore:';  //to translate
-$strReplicationMasterChooseIgn = 'Ignore all databases; Replicate:';  //to translate
-$strReplicationMasterChooseMode = 'This server is not configured as master server in a replication process. You can choose from either replicating all databases and ignoring certain (useful if you want to replicate majority of databases) or you can choose to ignore all databases by default and allow only certain databases to be replicated. Please select the mode:';  //to translate
-$strReplicationMaster = 'Master replication';  //to translate
-$strReplicationRestartServer = 'Once you restarted MySQL server, please click on Go button. Afterwards, you should see a message informing you, that this server <b>is</b> configured as master';  //to translate
-$strReplicationSelectDatabases = 'Please select databases:';  //to translate
-$strReplicationServernConfiguredMaster = 'This server is not configured as master in a replication process. Would you like to <a href="%s">configure</a> it?';  //to translate
-$strReplicationShowConnectedSlavesNote = 'Only slaves started with the --report-host=host_name option are visible in this list.';  //to translate
-$strReplicationShowConnectedSlaves = 'Show connected slaves';  //to translate
-$strReplicationShowMasterStatus = 'Show master status';  //to translate
-$strReplicationSkippingErrorWarn = 'Skipping error(s) might lead into unsynchronized master and slave!';  //to translate
-$strReplicationSlaveConfiguration = 'Slave configuration';  //to translate
-$strReplicationSlaveConfigured = 'Server is configured as slave in a replication process. Would you like to:';  //to translate
-$strReplicationSlaveErrorManagement = 'Error management:';  //to translate
-$strReplicationSlaveChangeMaster = 'Change or reconfigure master server';  //to translate
-$strReplicationSlaveIOThread = 'IO Thread %s only';  //to translate
-$strReplicationSlaveIOThreadNotRunning = 'Slave IO Thread not running!';  //to translate
-$strReplicationSlaveNotConfigured = 'This server is not configured as slave in a replication process. Would you like to <a href="%s">configure</a> it?';  //to translate
-$strReplicationSlaveReset = 'Reset slave';  //to translate
-$strReplicationSlaveSeeStatus = 'See slave status table';  //to translate
-$strReplicationSlaveSkipCurrentError = 'Skip current error';  //to translate
-$strReplicationSlaveSkipNextErrors = 'errors.';  //to translate
-$strReplicationSlaveSkipNext = 'Skip next';  //to translate
-$strReplicationSlave = 'Slave replication';  //to translate
-$strReplicationSlaveSQLThreadNotRunning = 'Slave SQL Thread not running!';  //to translate
-$strReplicationSlaveSQLThread = 'SQL Thread %s only';  //to translate
-$strReplicationStatusInfo = 'This MySQL server works as %s in <b>replication</b> process. For further information about replication status on the server, please visit the <a href="#replication">replication section</a>.';  //to translate
-$strReplicationStatus_master = 'Master status';  //to translate
-$strReplicationStatus = 'Replication status';  //to translate
-$strReplicationStatus_slave = 'Slave status';  //to translate
-$strReplicationSynchronize = 'Synchronize databases with master';  //to translate
-$strReplicationUnableToChange = 'Unable to change master';  //to translate
-$strReplicationUnknownError = 'Unknown error';  //to translate
-
-$strSelectReferencedKey = 'Select referenced key';  //to translate
-$strSessionGCWarning = 'Your PHP parameter [a at http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime@]session.gc_maxlifetime[/a] is lower that cookie validity configured in phpMyAdmin, because of this, your login will expire sooner than configured in phpMyAdmin.';  //to translate
-$strSettings = 'settings';  //to translate
-$strSetupAllowUserDropDatabase_name = 'Show "Drop database" link to normal users';  //to translate
-$strSetupBrowseMarkerEnable_desc = 'Highlight selected rows';  //to translate
-$strSetupBrowseMarkerEnable_name = 'Row marker';  //to translate
-$strSetupBrowsePointerEnable_desc = 'Highlight row pointed by the mouse cursor';  //to translate
-$strSetupBrowsePointerEnable_name = 'Highlight pointer';  //to translate
-$strSetupDefaultTabDatabase_desc = 'Tab that is displayed when entering a database';  //to translate
-$strSetupDefaultTabDatabase_name = 'Default database tab';  //to translate
-$strSetupDefaultTabServer_desc = 'Tab that is displayed when entering a server';  //to translate
-$strSetupDefaultTabServer_name = 'Default server tab';  //to translate
-$strSetupDefaultTabTable_desc = 'Tab that is displayed when entering a table';  //to translate
-$strSetupDefaultTabTable_name = 'Default table tab';  //to translate
-$strSetupDisplayDatabasesList_desc = 'Show database listing as a list instead of a drop down';  //to translate
-$strSetupDisplayDatabasesList_name = 'Display databases as a list';  //to translate
-$strSetupDisplayServersList_desc = 'Show server listing as a list instead of a drop down';  //to translate
-$strSetupDisplayServersList_name = 'Display servers as a list';  //to translate
-$strSetuperror_empty_pmadb_password = 'Empty phpMyAdmin control user password while using pmadb';  //to translate
-$strSetuperror_empty_pmadb_user = 'Empty phpMyAdmin control user while using pmadb';  //to translate
-$strSetuperror_empty_signon_session = 'Empty signon session name while using signon authentication method';  //to translate
-$strSetuperror_empty_signon_url = 'Empty signon URL while using signon authentication method';  //to translate
-$strSetuperror_empty_user_for_config_auth = 'Empty username while using config authentication method';  //to translate
-$strSetupExport_file_template_database_name = 'Database name template';  //to translate
-$strSetupExport_file_template_server_name = 'Server name template';  //to translate
-$strSetupExport_file_template_table_name = 'Table name template';  //to translate
-$strSetupExport_remember_file_template_name = 'Remember file name template';  //to translate
-$strSetupForeignKeyDropdownOrder_desc = 'Sort order for items in a foreign-key dropdown box; [kbd]content[/kbd] is the referenced data, [kbd]id[/kbd] is the key value';  //to translate
-$strSetupForeignKeyDropdownOrder_name = 'Foreign key dropdown order';  //to translate
-$strSetupForeignKeyMaxLimit_desc = 'A dropdown will be used if fewer items are present';  //to translate
-$strSetupForeignKeyMaxLimit_name = 'Foreign key limit';  //to translate
-$strSetupForm_Export_defaults_desc = 'Customize default export options';  //to translate
-$strSetupForm_Import_defaults_desc = 'Customize default common import options';  //to translate
-$strSetupForm_Import_export_desc = 'Set import and export directories and compression options';  //to translate
-$strSetupForm_Left_databases_desc = 'Databases display options';  //to translate
-$strSetupForm_Left_frame_desc = 'Customize appearance of the navigation frame';  //to translate
-$strSetupForm_Left_servers_desc = 'Servers display options';  //to translate
-$strSetupForm_Left_tables_desc = 'Tables display options';  //to translate
-$strSetupForm_Other_core_settings_desc = 'Settings that didn\'t fit enywhere else';  //to translate
-$strSetupForm_Query_window_desc = 'Customize query window options';  //to translate
-$strSetupForm_Security_desc = 'Please note that phpMyAdmin is just a user interface and its features do not limit MySQL';  //to translate
-$strSetupForm_Server_login_options_desc = 'Enter login options for signon authentication';  //to translate
-$strSetupForm_Server_login_options = 'Signon login options';  //to translate
-$strSetupForm_Server_pmadb_desc = 'Configure phpMyAdmin database to gain access to additional features, see [a at ../Documentation.html#linked-tables]linked-tables infrastructure[/a] in documentation';  //to translate
-$strSetupForm_Sql_box_desc = 'Customize links shown in SQL Query boxes';  //to translate
-$strSetupForm_Sql_queries_desc = 'SQL queries settings, for SQL Query box options see [a@?page=form&formset=main_frame#tab_Sql_box]Navigation frame[/a] settings';  //to translate
-$strSetupCharEditing_desc = 'Defines which type of editing controls should be used for CHAR and VARCHAR fields; [kbd]input[/kbd] - allows limiting of input length, [kbd]textarea[/kbd] - allows newlines in fields';  //to translate
-$strSetupCharEditing_name = 'CHAR fields editing';  //to translate
-$strSetupCharTextareaCols_desc = 'Number of columns for CHAR/VARCHAR textareas';  //to translate
-$strSetupCharTextareaCols_name = 'CHAR textarea columns';  //to translate
-$strSetupCharTextareaRows_desc = 'Number of rows for CHAR/VARCHAR textareas';  //to translate
-$strSetupCharTextareaRows_name = 'CHAR textarea rows';  //to translate
-$strSetupImport_allow_interrupt_desc = 'Allow interrupt of import in case script detects it is close to time limit. This might be good way to import large files, however it can break transactions.';  //to translate
-$strSetupImport_allow_interrupt_name = 'Partial import: allow interrupt';  //to translate
-$strSetupImport_format_desc = 'Default format, mind that this list depends on location (database, table) and only SQL is always avaiable';  //to translate
-$strSetupImport_skip_queries_desc = 'Number of records (queries) to skip from start';  //to translate
-$strSetupImport_skip_queries_name = 'Partial import: skip queries';  //to translate
-$strSetupInsertRows_desc = 'How many rows can be inserted at one time';  //to translate
-$strSetupInsertRows_name = 'Number of inserted rows';  //to translate
-$strSetupLeftDefaultTabTable_name = 'Target for quick access icon';  //to translate
-$strSetupLeftDisplayServers_desc = 'Display server choice at the top of the left frame';  //to translate
-$strSetupLeftDisplayServers_name = 'Display servers selection';  //to translate
-$strSetupLeftFrameDBSeparator_desc = 'String that separates databases into different tree levels';  //to translate
-$strSetupLeftFrameDBSeparator_name = 'Database tree separator';  //to translate
-$strSetupLeftFrameDBTree_desc = 'Only light version; display databases in a tree (determined by the separator defined below)';  //to translate
-$strSetupLeftFrameDBTree_name = 'Display databases in a tree';  //to translate
-$strSetupLeftFrameLight_desc = 'Disable this if you want to see all databases at once';  //to translate
-$strSetupLeftFrameLight_name = 'Use light version';  //to translate
-$strSetupLeftFrameTableLevel_name = 'Maximum table tree depth';  //to translate
-$strSetupLeftFrameTableSeparator_desc = 'String that separates tables into different tree levels';  //to translate
-$strSetupLeftFrameTableSeparator_name = 'Table tree separator';  //to translate
-$strSetupLeftLogoLink_name = 'Logo link URL';  //to translate
-$strSetupLeftLogoLinkWindow_desc = 'Open the linked page in the main window ([kbd]main[/kbd]) or in a new one ([kbd]new[/kbd])';  //to translate
-$strSetupLeftLogoLinkWindow_name = 'Logo link target';  //to translate
-$strSetupLeftPointerEnable_desc = 'Highlight server under the mouse cursor';  //to translate
-$strSetupLeftPointerEnable_name = 'Enable highlighting';  //to translate
-$strSetupLightTabs_desc = 'Use less graphically intense tabs';  //to translate
-$strSetupLightTabs_name = 'Light tabs';  //to translate
-$strSetupMaxRows_desc = 'Number of rows displayed when browsing a result set. If the result set contains more rows, "Previous" and "Next" links will be shown.';  //to translate
-$strSetupMaxRows_name = 'Maximum number of rows to display';  //to translate
-$strSetupNavigationBarIconic_desc = 'Use only icons, only text or both';  //to translate
-$strSetupNavigationBarIconic_name = 'Iconic navigation bar';  //to translate
-$strSetupOrder_desc = '[kbd]SMART[/kbd] - i.e. descending order for fields of type TIME, DATE, DATETIME and TIMESTAMP, ascending order otherwise';  //to translate
-$strSetupOrder_name = 'Default sorting order';  //to translate
-$strSetupPropertiesIconic_desc = 'Use only icons, only text or both';  //to translate
-$strSetupPropertiesIconic_name = 'Iconic table operations';  //to translate
-$strSetupProtectBinary_desc = 'Disallow BLOB or BLOB and BINARY fields from editing';  //to translate
-$strSetupProtectBinary_name = 'Protect binary fields';  //to translate
-$strSetupQueryHistoryDB_desc = 'Enable if you want DB-based query history (requires pmadb). If disabled, this utilizes JS-routines to display query history (lost by window close).';  //to translate
-$strSetupQueryWindowDefTab_desc = 'Tab displayed when opening a new query window';  //to translate
-$strSetupQueryWindowDefTab_name = 'Default query window tab';  //to translate
-$strSetupSaveDir_desc = 'Directory where exports can be saved on server';  //to translate
-$strSetupSaveDir_name = 'Save directory';  //to translate
-$strSetupServerNoPasswordMsg = 'You allow for connecting to the server without a password.';  //to translate
-$strSetupServers_AllowDeny_order_name = 'Host authentication order';  //to translate
-$strSetupServers_AllowDeny_rules_desc = 'Leave blank for defaults';  //to translate
-$strSetupServers_AllowDeny_rules_name = 'Host authentication rules';  //to translate
-$strSetupServers_auth_swekey_config_desc = 'Config file for [a at http://swekey.com]SweKey hardware authentication[/a], relative to phpMyAdmin root directory, eg. ./swekey.conf';  //to translate
-$strSetupServers_auth_swekey_config_name = 'SweKey config file';  //to translate
-$strSetupServers_bookmarktable_desc = 'Leave blank for no [a at http://wiki.phpmyadmin.net/pma/bookmark]bookmark[/a] support, suggested: [kbd]pma_bookmark[/kbd]';  //to translate
-$strSetupServers_column_info_desc = 'Leave blank for no column comments/mime types, suggested: [kbd]pma_column_info[/kbd]';  //to translate
-$strSetupServers_column_info_name = 'Column information table';  //to translate
-$strSetupServers_controlpass_name = 'Control user password';  //to translate
-$strSetupServers_controluser_desc = 'A special MySQL user configured with limited permissions, more information available on [a at http://wiki.phpmyadmin.net/pma/controluser]wiki[/a]';  //to translate
-$strSetupServers_controluser_name = 'Control user';  //to translate
-$strSetupServers_designer_coords_desc = 'Leave blank for no Designer support, suggested: [kbd]pma_designer_coords[/kbd]';  //to translate
-$strSetupServers_designer_coords_name = 'Designer table';  //to translate
-$strSetupServers_DisableIS_desc = 'More information on [a at http://sf.net/support/tracker.php?aid=1849494]PMA bug tracker[/a] and [a at http://bugs.mysql.com/19588]MySQL Bugs[/a]';  //to translate
-$strSetupServers_DisableIS_name = 'Disable use of INFORMATION_SCHEMA';  //to translate
-$strSetupServers_history_desc = 'Leave blank for no SQL query history support, suggested: [kbd]pma_history[/kbd]';  //to translate
-$strSetupServers_history_name = 'SQL query history table';  //to translate
-$strSetupServers_host_desc = 'Hostname where MySQL server is running';  //to translate
-$strSetupServers_LogoutURL_name = 'Logout URL';  //to translate
-$strSetupServers_pdf_pages_desc = 'Leave blank for no PDF schema support, suggested: [kbd]pma_pdf_pages[/kbd]';  //to translate
-$strSetupServers_pdf_pages_name = 'PDF schema: pages table';  //to translate
-$strSetupServers_relation_desc = 'Leave blank for no [a at http://wiki.phpmyadmin.net/pma/relation]relation-links[/a] support, suggested: [kbd]pma_relation[/kbd]';  //to translate
-$strSetupServers_SignonSession_desc = 'See [a at http://wiki.phpmyadmin.net/pma/auth_types#signon]authentication types[/a] for an example';  //to translate
-$strSetupServers_SignonSession_name = 'Signon session name';  //to translate
-$strSetupServers_SignonURL_name = 'Signon URL';  //to translate
-$strSetupServers_ssl_desc = 'Enable SSL for connection to MySQL server';  //to translate
-$strSetupServers_table_coords_desc = 'Leave blank for no PDF schema support, suggested: [kbd]pma_table_coords[/kbd]';  //to translate
-$strSetupServers_table_coords_name = 'PDF schema: table coordinates';  //to translate
-$strSetupServers_table_info_desc = 'Table to describe the display fields, leave blank for no support; suggested: [kbd]pma_table_info[/kbd]';  //to translate
-$strSetupServers_table_info_name = 'Display fields table';  //to translate
-$strSetupServers_verbose_desc = 'A user-friendly description of this server. Leave blank to display the hostname instead.';  //to translate
-$strSetupServers_verbose_check_desc = 'Disable if you know that your pma_* tables are up to date. This prevents compatibility checks and thereby increases performance';  //to translate
-$strSetupServers_verbose_check_name = 'Verbose check';  //to translate
-$strSetupServers_verbose_name = 'Verbose name of this server';  //to translate
-$strSetupShowAll_desc = 'Whether a user should be displayed a "show all (records)" button';  //to translate
-$strSetupShowAll_name = 'Allow to display all the rows';  //to translate
-$strSetupShowCreateDb_name = 'Show create database form';  //to translate
-$strSetupShowFunctionFields_desc = 'Display the function fields in edit/insert mode';  //to translate
-$strSetupShowFunctionFields_name = 'Show function fields';  //to translate
-$strSetupShowChgPassword_desc = 'Please note that enabling this has no effect with [kbd]config[/kbd] authentication mode because the password is hard coded in the configuration file; this does not limit the ability to execute the same command directly';  //to translate
-$strSetupShowChgPassword_name = 'Show password change form';  //to translate
-$strSetupShowPhpInfo_desc = 'Shows link to [a at http://php.net/manual/function.phpinfo.php]phpinfo()[/a] output';  //to translate
-$strSetupShowPhpInfo_name = 'Show phpinfo() link';  //to translate
-$strSetupShowServerInfo_name = 'Show detailed MySQL server information';  //to translate
-$strSetupShowStats_desc = 'Allow to display database and table statistics (eg. space usage)';  //to translate
-$strSetupShowTooltipAliasDB_desc = 'If tooltips are enabled and a database comment is set, this will flip the comment and the real name';  //to translate
-$strSetupShowTooltipAliasDB_name = 'Display database comment instead of its name';  //to translate
-$strSetupShowTooltipAliasTB_desc = 'When setting this to [kbd]nested[/kbd], the alias of the table name is only used to split/nest the tables according to the $cfg[\'LeftFrameTableSeparator\'] directive, so only the folder is called like the alias, the table name itself stays unchanged';  //to translate
-$strSetupShowTooltipAliasTB_name = 'Display table comment instead of its name';  //to translate
-$strSetupShowTooltip_name = 'Display table comments in tooltips';  //to translate
-$strSetupSkipLockedTables_desc = 'Mark used tables and make it possible to show databases with locked tables';  //to translate
-$strSetupSQLQuery_Validate_name = 'Validate SQL';  //to translate
-$strSetupSuggestDBName_desc = 'Suggest a database name on the "Create Database" form (if possible) or keep the text field empty';  //to translate
-$strSetupSuggestDBName_name = 'Suggest new database name';  //to translate
-$strSetupTrustedProxies_desc = 'Input proxies as [kbd]IP: trusted HTTP header[/kbd]. The following example specifies that phpMyAdmin should trust a HTTP_X_FORWARDED_FOR (X-Forwarded-For) header coming from the proxy 1.2.3.4:[br][kbd]1.2.3.4: HTTP_X_FORWARDED_FOR[/kbd]';  //to translate
-$strSetupTrustedProxies_name = 'List of trusted proxies for IP allow/deny';  //to translate
-$strSetupUploadDir_desc = 'Directory on server where you can upload files for import';  //to translate
-$strSetupUploadDir_name = 'Upload directory';  //to translate
-$strSetupUseDbSearch_desc = 'Allow for searching inside the entire database';  //to translate
-$strSetupUseDbSearch_name = 'Use database search';  //to translate
-$strSetupVerboseMultiSubmit_desc = 'Show affected rows of each statement on multiple-statement queries. See libraries/import.lib.php for defaults on how many queries a statement may contain.';  //to translate
-$strSetupVerboseMultiSubmit_name = 'Verbose multiple statements';  //to translate
-$strShowBinaryContentsAsHex = 'Show binary contents as HEX';  //to translate
-$strShowBinaryContents = 'Show binary contents';  //to translate
-$strShowBLOBContents = 'Show BLOB contents';  //to translate
-$strShowMasterStatus = 'Show master status';  //to translate
-$strSlaveConfigure = 'Make sure, you have unique server-id in your configuration file (my.cnf). If not, please add the following line into [mysqld] section:';  //to translate
-$strSocket = 'Socket';  //to translate
-$strStandInStructureForView = 'Stand-in structure for view';  //to translate
-$strStart = 'Start';  //to translate
-$strStatic = 'static';  //to translate
-$strStop = 'Stop';  //to translate
-$strStructureDiff = 'Structure Difference' ;  //to translate
-$strStructureForView = 'Structure for view';  //to translate
-$strStructureLC = 'structure';  //to translate
-$strStructureSyn = 'Structure Synchronization';  //to translate
-$strSynchronizationNote = 'Target database will be completely synchronized with source database. Source database will remain unchanged.';  //to translate
-$strSynchronizeDb =  'Synchronize Databases';  //to translate
-$strSynchronize = 'Synchronize';  //to translate
-
-$strTableAddColumn = 'Add column(s)';  //to translate
-$strTableAlterColumn = 'Alter column(s)';  //to translate
-$strTableAlterIndex = 'Alter index(s)';  //to translate
-$strTableApplyIndex = 'Apply index(s)';  //to translate
-$strTableDeleteRows = 'Would you like to delete all the previous rows from target tables?';  //to translate
-$strTableInsertRow = 'Insert row(s)';  //to translate
-$strTableRemoveColumn = 'Remove column(s)';  //to translate
-$strTableRemoveIndex = 'Remove index(s)';  //to translate
-$strTableUpdateRow = 'Update row(s)';  //to translate
-$strTargetDatabaseHasBeenSynchronized = 'Target database has been synchronized with source database';  //to translate
-$strTrackingActivated = 'Tracking of %s.%s is activated.';  //to translate
-$strTrackingActivateNow = 'Activate now';  //to translate
-$strTrackingActivateTrackingFor = 'Activate tracking for %s.%s';  //to translate
-$strTrackingCommentOut = 'Comment out these two lines if you do not need them.';  //to translate
-$strTrackingCreateVersion = 'Create version';  //to translate
-$strTrackingCreateVersionOf = 'Create version %s of %s.%s';  //to translate
-$strTrackingDatabaseLog = 'Database Log';  //to translate
-$strTrackingDataDefinitionStatement = 'Data definition statement';  //to translate
-$strTrackingDataManipulationStatement = 'Data manipulation statement';  //to translate
-$strTrackingDate = 'Date';  //to translate
-$strTrackingDeactivateNow = 'Deactivate now';  //to translate
-$strTrackingDeactivateTrackingFor = 'Deactivate tracking for %s.%s';  //to translate
-$strTrackingExportAs = 'Export as %s';  //to translate
-$strTrackingIsActive = 'Tracking is active.';  //to translate
-$strTrackingIsNotActive = 'Tracking is not active.';  //to translate
-$strTrackingMechanism = 'Tracking Mechanism';  //to translate
-$strTrackingReportClose = 'Close';  //to translate
-$strTrackingReportForTable = 'Tracking report for table `%s`';  //to translate
-$strTrackingReport = 'Tracking report';  //to translate
-$strTrackingShowLogDateUsers = 'Show %s with dates from %s to %s by user %s %s';  //to translate
-$strTrackingShowVersions = 'Show versions';  //to translate
-$strTrackingSQLDumpFile = 'SQL dump (file download)';  //to translate
-$strTrackingSQLDump = 'SQL dump';  //to translate
-$strTrackingSQLExecuted = 'SQL statements executed.';  //to translate
-$strTrackingSQLExecutionAlert = 'This option will replace your table and contained data.';  //to translate
-$strTrackingSQLExecution = 'SQL execution';  //to translate
-$strTrackingSQLExported = 'SQL statements exported. Please copy the dump or execute it.';  //to translate
-$strTrackingStatements = 'Tracking statements';  //to translate
-$strTrackingStatusActive = 'active';  //to translate
-$strTrackingStatusNotActive = 'not active';  //to translate
-$strTrackingStructureSnapshot = 'Structure snapshot';  //to translate
-$strTrackingThCreated = 'Created';  //to translate
-$strTrackingThLastVersion = 'Last version';  //to translate
-$strTrackingThUpdated = 'Updated';  //to translate
-$strTrackingThVersion = 'Version';  //to translate
-$strTrackingTrackDDStatements = 'Track these data definition statements:';  //to translate
-$strTrackingTrackDMStatements = 'Track these data manipulation statements:';  //to translate
-$strTrackingTrackedTables = 'Tracked tables';  //to translate
-$strTracking = 'Tracking';  //to translate
-$strTrackingTrackTable = 'Track table';  //to translate
-$strTrackingUntrackedTables = 'Untracked tables';  //to translate
-$strTrackingUsername = 'Username';  //to translate
-$strTrackingVersionActivated = 'Tracking for %s.%s , version %s is activated.';  //to translate
-$strTrackingVersionCreated = 'Version %s is created, tracking for %s.%s is activated.';  //to translate
-$strTrackingVersionDeactivated = 'Tracking for %s.%s , version %s is deactivated.';  //to translate
-$strTrackingVersionSnapshotSQL = 'Version %s snapshot (SQL code)';  //to translate
-$strTrackingVersions = 'Versions';  //to translate
-$strTrackingYouCanExecute = 'You can execute the dump by creating and using a temporary database. Please ensure that you have the privileges to do so.';  //to translate
-
-$strXMLError = 'The XML file specified was either malformed or incomplete. Please correct the issue and try again.';  //to translate
-$strXMLExportContents = 'Export contents';  //to translate
-$strXMLExportFunctions = 'Export functions';  //to translate
-$strXMLExportProcedures = 'Export procedures';  //to translate
-$strXMLExportStructs = 'Export Structure Schemas (recommended)';  //to translate
-$strXMLExportTables = 'Export tables';  //to translate
-$strXMLExportTriggers = 'Export triggers';  //to translate
-$strXMLExportViews = 'Export views';  //to translate
-
 ?>
diff --git a/libraries/Config.class.php b/libraries/Config.class.php
index 9c5d029..df596ec 100644
--- a/libraries/Config.class.php
+++ b/libraries/Config.class.php
@@ -92,7 +92,7 @@ class PMA_Config
      */
     function checkSystem()
     {
-        $this->set('PMA_VERSION', '3.3.7');
+        $this->set('PMA_VERSION', '3.3.8-rc1');
         /**
          * @deprecated
          */
diff --git a/libraries/PHPExcel/PHPExcel.php b/libraries/PHPExcel/PHPExcel.php
index 8b9c71f..c54d421 100644
--- a/libraries/PHPExcel/PHPExcel.php
+++ b/libraries/PHPExcel/PHPExcel.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -434,7 +434,7 @@ class PHPExcel
 
 		// update the cellXfs
 		foreach ($pSheet->getCellCollection(false) as $cellID) {
-			$cell = $sheet->getCell($cellID);
+			$cell = $pSheet->getCell($cellID);
 			$cell->setXfIndex( $cell->getXfIndex() + $countCellXfs );
 		}
 
diff --git a/libraries/PHPExcel/PHPExcel/Autoloader.php b/libraries/PHPExcel/PHPExcel/Autoloader.php
index 3821d74..e66ce60 100644
--- a/libraries/PHPExcel/PHPExcel/Autoloader.php
+++ b/libraries/PHPExcel/PHPExcel/Autoloader.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 class PHPExcel_Autoloader
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/APC.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/APC.php
index 62e3a14..dae46c2 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/APC.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/APC.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_CachedObjectStorage

  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)

  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL

- * @version    1.7.3c, 2010-06-01

+ * @version    1.7.4, 2010-08-26

  */

 

 

@@ -45,7 +45,7 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
 

 		if (!apc_store($this->_cachePrefix.$this->_currentObjectID.'.cache',serialize($this->_currentObject),$this->_cacheTime)) {

 			$this->__destruct();

-			throw new Exception('Failed to store cell in APC');

+			throw new Exception('Failed to store cell '.$cellID.' in APC');

 		}

 		$this->_currentObjectID = $this->_currentObject = null;

 	}	//	function _storeData()

@@ -90,7 +90,7 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
 			if ($success === false) {

 				//	Entry no longer exists in APC, so clear it from the cache array

 				parent::deleteCacheData($pCoord);

-				throw new Exception('Cell entry no longer exists in APC');

+				throw new Exception('Cell entry '.$cellID.' no longer exists in APC');

 			}

 			return true;

 		}

@@ -117,7 +117,7 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
 			if ($obj === false) {

 				//	Entry no longer exists in APC, so clear it from the cache array

 				parent::deleteCacheData($pCoord);

-				throw new Exception('Cell entry no longer exists in APC');

+				throw new Exception('Cell entry '.$cellID.' no longer exists in APC');

 			}

 		} else {

 			//	Return null if requested entry doesn't exist in cache

@@ -150,6 +150,35 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
 	}	//	function deleteCacheData()

 

 

+	/**

+	 *	Clone the cell collection

+	 *

+	 *	@return	void

+	 */

+	public function copyCellCollection(PHPExcel_Worksheet $parent) {

+		parent::copyCellCollection($parent);

+		//	Get a new id for the new file name

+		$baseUnique = $this->_getUniqueID();

+		$newCachePrefix = substr(md5($baseUnique),0,8).'.';

+		$cacheList = $this->getCellList();

+		foreach($cacheList as $cellID) {

+			if ($cellID != $this->_currentObjectID) {

+				$obj = apc_fetch($this->_cachePrefix.$cellID.'.cache');

+				if ($obj === false) {

+					//	Entry no longer exists in APC, so clear it from the cache array

+					parent::deleteCacheData($cellID);

+					throw new Exception('Cell entry '.$cellID.' no longer exists in APC');

+				}

+				if (!apc_store($newCachePrefix.$cellID.'.cache',$obj,$this->_cacheTime)) {

+					$this->__destruct();

+					throw new Exception('Failed to store cell '.$cellID.' in APC');

+				}

+			}

+		}

+		$this->_cachePrefix = $newCachePrefix;

+	}	//	function copyCellCollection()

+

+

 	public function unsetWorksheetCells() {

 		if(!is_null($this->_currentObject)) {

 			$this->_currentObject->detach();

@@ -170,12 +199,8 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
 		$cacheTime	= (isset($arguments['cacheTime']))	? $arguments['cacheTime']	: 600;

 

 		if (is_null($this->_cachePrefix)) {

-			if (function_exists('posix_getpid')) {

-				$baseUnique = posix_getpid();

-			} else {

-				$baseUnique = mt_rand();

-			}

-			$this->_cachePrefix = substr(md5(uniqid($baseUnique,true)),0,8).'.';

+			$baseUnique = $this->_getUniqueID();

+			$this->_cachePrefix = substr(md5($baseUnique),0,8).'.';

 			$this->_cacheTime = $cacheTime;

 

 			parent::__construct($parent);

diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/CacheBase.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/CacheBase.php
index 9871d90..208ed02 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/CacheBase.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/CacheBase.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_CachedObjectStorage

  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)

  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL

- * @version    1.7.3c, 2010-06-01

+ * @version    1.7.4, 2010-08-26

  */

 

 

@@ -116,7 +116,7 @@ class PHPExcel_CachedObjectStorage_CacheBase {
 			$this->_currentObjectID = $this->_currentObject = null;

 		}

 

-		if (isset($this->_cellCache[$pCoord])) {

+		if (is_object($this->_cellCache[$pCoord])) {

 			$this->_cellCache[$pCoord]->detach();

 			unset($this->_cellCache[$pCoord]);

 		}

@@ -141,13 +141,34 @@ class PHPExcel_CachedObjectStorage_CacheBase {
 	public function getSortedCellList() {

 		$sortKeys = array();

 		foreach ($this->_cellCache as $coord => $value) {

-			preg_match('/^(\w+)(\d+)$/U',$coord,$matches);

-			list(,$colNum,$rowNum) = $matches;

-			$sortKeys[$coord] =  str_pad($rowNum . str_pad($colNum,3,'@',STR_PAD_LEFT),12,'0',STR_PAD_LEFT);

+			list($colNum,$rowNum) = sscanf($coord,'%[A-Z]%d');

+			$sortKeys[sprintf('%09d%3s',$rowNum,$colNum)] = $coord;

 		}

-		asort($sortKeys);

+		ksort($sortKeys);

 

-		return array_keys($sortKeys);

+		return array_values($sortKeys);

 	}	//	function sortCellList()

 

+

+	protected function _getUniqueID() {

+		if (function_exists('posix_getpid')) {

+			$baseUnique = posix_getpid();

+		} else {

+			$baseUnique = mt_rand();

+		}

+		return uniqid($baseUnique,true);

+	}

+

+	/**

+	 *	Clone the cell collection

+	 *

+	 *	@return	void

+	 */

+	public function copyCellCollection(PHPExcel_Worksheet $parent) {

+		$this->_parent = $parent;

+		if ((!is_null($this->_currentObject)) && (is_object($this->_currentObject))) {

+			$this->_currentObject->attach($parent);

+		}

+	}	//	function copyCellCollection()

+

 }

diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/DiscISAM.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/DiscISAM.php
index e685607..dff52fa 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/DiscISAM.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/DiscISAM.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_CachedObjectStorage

  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)

  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL

- * @version    1.7.3c, 2010-06-01

+ * @version    1.7.4, 2010-08-26

  */

 

 

@@ -103,6 +103,24 @@ class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage
 	}	//	function getCacheData()

 

 

+	/**

+	 *	Clone the cell collection

+	 *

+	 *	@return	void

+	 */

+	public function copyCellCollection(PHPExcel_Worksheet $parent) {

+		parent::copyCellCollection($parent);

+		//	Get a new id for the new file name

+		$baseUnique = $this->_getUniqueID();

+		$newFileName = sys_get_temp_dir().'/PHPExcel.'.$baseUnique.'.cache';

+		//	Copy the existing cell cache file

+		copy ($this->_fileName,$newFileName);

+		$this->_fileName = $newFileName;

+		//	Open the copied cell cache file

+		$this->_fileHandle = fopen($this->_fileName,'a+');

+	}	//	function copyCellCollection()

+

+

 	public function unsetWorksheetCells() {

 		if(!is_null($this->_currentObject)) {

 			$this->_currentObject->detach();

@@ -121,12 +139,8 @@ class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage
 	public function __construct(PHPExcel_Worksheet $parent) {

 		parent::__construct($parent);

 		if (is_null($this->_fileHandle)) {

-			if (function_exists('posix_getpid')) {

-				$baseUnique = posix_getpid();

-			} else {

-				$baseUnique = mt_rand();

-			}

-			$this->_fileName = sys_get_temp_dir().'/PHPExcel.'.uniqid($baseUnique,true).'.cache';

+			$baseUnique = $this->_getUniqueID();

+			$this->_fileName = sys_get_temp_dir().'/PHPExcel.'.$baseUnique.'.cache';

 			$this->_fileHandle = fopen($this->_fileName,'a+');

 		}

 	}	//	function __construct()

diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/ICache.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/ICache.php
index f3282aa..4731b8e 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/ICache.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/ICache.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_CachedObjectStorage
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -94,4 +94,11 @@ interface PHPExcel_CachedObjectStorage_ICache
 	 */
 	public function getSortedCellList();
 
+	/**
+	 *	Clone the cell collection
+	 *
+	 *	@return	void
+	 */
+	public function copyCellCollection(PHPExcel_Worksheet $parent);
+
 }
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memcache.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memcache.php
index f1fc43c..74df8e8 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memcache.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memcache.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_CachedObjectStorage

  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)

  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL

- * @version    1.7.3c, 2010-06-01

+ * @version    1.7.4, 2010-08-26

  */

 

 

@@ -49,7 +49,7 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
 		if (!$this->_memcache->replace($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) {

 			if (!$this->_memcache->add($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) {

 				$this->__destruct();

-				throw new Exception('Failed to store cell in Memcache');

+				throw new Exception('Failed to store cell '.$cellID.' in MemCache');

 			}

 		}

 		$this->_currentObjectID = $this->_currentObject = null;

@@ -90,12 +90,12 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
 			if ($this->_currentObjectID == $pCoord) {

 				return true;

 			}

-			//	Check if the requested entry still exists in apc

+			//	Check if the requested entry still exists in Memcache

 			$success = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache');

 			if ($success === false) {

 				//	Entry no longer exists in Memcache, so clear it from the cache array

 				parent::deleteCacheData($pCoord);

-				throw new Exception('Cell entry no longer exists in Memcache');

+				throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache');

 			}

 			return true;

 		}

@@ -122,7 +122,7 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
 			if ($obj === false) {

 				//	Entry no longer exists in Memcache, so clear it from the cache array

 				parent::deleteCacheData($pCoord);

-				throw new Exception('Cell entry no longer exists in Memcache');

+				throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache');

 			}

 		} else {

 			//	Return null if requested entry doesn't exist in cache

@@ -155,6 +155,35 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
 	}	//	function deleteCacheData()

 

 

+	/**

+	 *	Clone the cell collection

+	 *

+	 *	@return	void

+	 */

+	public function copyCellCollection(PHPExcel_Worksheet $parent) {

+		parent::copyCellCollection($parent);

+		//	Get a new id for the new file name

+		$baseUnique = $this->_getUniqueID();

+		$newCachePrefix = substr(md5($baseUnique),0,8).'.';

+		$cacheList = $this->getCellList();

+		foreach($cacheList as $cellID) {

+			if ($cellID != $this->_currentObjectID) {

+				$obj = $this->_memcache->get($this->_cachePrefix.$cellID.'.cache');

+				if ($obj === false) {

+					//	Entry no longer exists in Memcache, so clear it from the cache array

+					parent::deleteCacheData($cellID);

+					throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache');

+				}

+				if (!$this->_memcache->add($newCachePrefix.$cellID.'.cache',$obj,NULL,$this->_cacheTime)) {

+					$this->__destruct();

+					throw new Exception('Failed to store cell '.$cellID.' in MemCache');

+				}

+			}

+		}

+		$this->_cachePrefix = $newCachePrefix;

+	}	//	function copyCellCollection()

+

+

 	public function unsetWorksheetCells() {

 		if(!is_null($this->_currentObject)) {

 			$this->_currentObject->detach();

@@ -177,17 +206,13 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
 		$cacheTime		= (isset($arguments['cacheTime']))		? $arguments['cacheTime']		: 600;

 

 		if (is_null($this->_cachePrefix)) {

-			if (function_exists('posix_getpid')) {

-				$baseUnique = posix_getpid();

-			} else {

-				$baseUnique = mt_rand();

-			}

-			$this->_cachePrefix = substr(md5(uniqid($baseUnique,true)),0,8).'.';

+			$baseUnique = $this->_getUniqueID();

+			$this->_cachePrefix = substr(md5($baseUnique),0,8).'.';

 

 			//	Set a new Memcache object and connect to the Memcache server

 			$this->_memcache = new Memcache();

-			if (!$this->_memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback')) {

-				throw new Exception('Could not connect to Memcache server at '.$memcacheServer.':'.$memcachePort);

+			if (!$this->_memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback'))) {

+				throw new Exception('Could not connect to MemCache server at '.$memcacheServer.':'.$memcachePort);

 			}

 			$this->_cacheTime = $cacheTime;

 

@@ -197,7 +222,7 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
 

 

 	public function failureCallback($host, $port) {

-		throw new Exception('memcache '.$host.':'.$port' failed');

+		throw new Exception('memcache '.$host.':'.$port.' failed');

 	}

 

 

diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memory.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memory.php
index be0fade..4b59b91 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memory.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memory.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_CachedObjectStorage

  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)

  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL

- * @version    1.7.3c, 2010-06-01

+ * @version    1.7.4, 2010-08-26

  */

 

 

diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemoryGZip.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemoryGZip.php
index c281389..394faf2 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemoryGZip.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemoryGZip.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_CachedObjectStorage

  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)

  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL

- * @version    1.7.3c, 2010-06-01

+ * @version    1.7.4, 2010-08-26

  */

 

 

diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemorySerialized.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemorySerialized.php
index 9c29ea2..0b5b997 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemorySerialized.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemorySerialized.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_CachedObjectStorage

  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)

  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL

- * @version    1.7.3c, 2010-06-01

+ * @version    1.7.4, 2010-08-26

  */

 

 

diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/PHPTemp.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/PHPTemp.php
index 98cd952..54810d8 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/PHPTemp.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/PHPTemp.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_CachedObjectStorage

  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)

  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL

- * @version    1.7.3c, 2010-06-01

+ * @version    1.7.4, 2010-08-26

  */

 

 

@@ -38,6 +38,8 @@ class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_
 	private $_fileHandle = null;

 

 

+	private $_memoryCacheSize = null;

+

 	private function _storeData() {

 		$this->_currentObject->detach();

 

@@ -102,6 +104,24 @@ class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_
 	}	//	function getCacheData()

 

 

+	/**

+	 *	Clone the cell collection

+	 *

+	 *	@return	void

+	 */

+	public function copyCellCollection(PHPExcel_Worksheet $parent) {

+		parent::copyCellCollection($parent);

+		//	Open a new stream for the cell cache data

+		$newFileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+');

+		//	Copy the existing cell cache data to the new stream

+		fseek($this->_fileHandle,0);

+		while (!feof($this->_fileHandle)) {

+			fwrite($newFileHandle,fread($this->_fileHandle, 1024));

+		}

+		$this->_fileHandle = $newFileHandle;

+	}	//	function copyCellCollection()

+

+

 	public function unsetWorksheetCells() {

 		if(!is_null($this->_currentObject)) {

 			$this->_currentObject->detach();

@@ -118,11 +138,11 @@ class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_
 

 

 	public function __construct(PHPExcel_Worksheet $parent, $memoryCacheSize = '1MB') {

-		$memoryCacheSize	= (isset($arguments['memoryCacheSize']))	? $arguments['memoryCacheSize']	: '1MB';

+		$this->_memoryCacheSize	= (isset($arguments['memoryCacheSize']))	? $arguments['memoryCacheSize']	: '1MB';

 

 		parent::__construct($parent);

 		if (is_null($this->_fileHandle)) {

-			$this->_fileHandle = fopen('php://temp/maxmemory:'.$memoryCacheSize,'a+');

+			$this->_fileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+');

 		}

 	}	//	function __construct()

 

diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Wincache.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Wincache.php
index d759d7c..aa075be 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Wincache.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Wincache.php
@@ -22,7 +22,7 @@
  * @package	PHPExcel_CachedObjectStorage

  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)

  * @license	http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL

- * @version	1.7.3c, 2010-06-01

+ * @version	1.7.4, 2010-08-26

  */

 

 

@@ -45,9 +45,15 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
 

 		$obj = serialize($this->_currentObject);

 		if (wincache_ucache_exists($this->_cachePrefix.$this->_currentObjectID.'.cache')) {

-			wincache_ucache_set($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime);

+			if (!wincache_ucache_set($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) {

+				$this->__destruct();

+				throw new Exception('Failed to store cell '.$cellID.' in WinCache');

+			}

 		} else {

-			wincache_ucache_add($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime);

+			if (!wincache_ucache_add($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) {

+				$this->__destruct();

+				throw new Exception('Failed to store cell '.$cellID.' in WinCache');

+			}

 		}

 

 		$this->_currentObjectID = $this->_currentObject = null;

@@ -93,7 +99,7 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
 			if ($success === false) {

 				//	Entry no longer exists in Wincache, so clear it from the cache array

 				parent::deleteCacheData($pCoord);

-				throw new Exception('Cell entry no longer exists in Wincache');

+				throw new Exception('Cell entry '.$cellID.' no longer exists in WinCache');

 			}

 			return true;

 		}

@@ -120,9 +126,9 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
 			$success = false;

 			$obj = wincache_ucache_get($this->_cachePrefix.$pCoord.'.cache', $success);

 			if ($success === false) {

-				//	Entry no longer exists in Wincache, so clear it from the cache array

+				//	Entry no longer exists in WinCache, so clear it from the cache array

 				parent::deleteCacheData($pCoord);

-				throw new Exception('Cell entry no longer exists in Wincache');

+				throw new Exception('Cell entry '.$cellID.' no longer exists in WinCache');

 			}

 		} else {

 			//	Return null if requested entry doesn't exist in cache

@@ -155,13 +161,43 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
 	}	//	function deleteCacheData()

 

 

+	/**

+	 *	Clone the cell collection

+	 *

+	 *	@return	void

+	 */

+	public function copyCellCollection(PHPExcel_Worksheet $parent) {

+		parent::copyCellCollection($parent);

+		//	Get a new id for the new file name

+		$baseUnique = $this->_getUniqueID();

+		$newCachePrefix = substr(md5($baseUnique),0,8).'.';

+		$cacheList = $this->getCellList();

+		foreach($cacheList as $cellID) {

+			if ($cellID != $this->_currentObjectID) {

+				$success = false;

+				$obj = wincache_ucache_get($this->_cachePrefix.$cellID.'.cache', $success);

+				if ($success === false) {

+					//	Entry no longer exists in WinCache, so clear it from the cache array

+					parent::deleteCacheData($cellID);

+					throw new Exception('Cell entry '.$cellID.' no longer exists in Wincache');

+				}

+				if (!wincache_ucache_add($newCachePrefix.$cellID.'.cache', $obj, $this->_cacheTime)) {

+					$this->__destruct();

+					throw new Exception('Failed to store cell '.$cellID.' in Wincache');

+				}

+			}

+		}

+		$this->_cachePrefix = $newCachePrefix;

+	}	//	function copyCellCollection()

+

+

 	public function unsetWorksheetCells() {

 		if(!is_null($this->_currentObject)) {

 			$this->_currentObject->detach();

 			$this->_currentObject = $this->_currentObjectID = null;

 		}

 

-		//	Flush the Wincache cache

+		//	Flush the WinCache cache

 		$this->__destruct();

 

 		$this->_cellCache = array();

@@ -175,12 +211,8 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
 		$cacheTime	= (isset($arguments['cacheTime']))	? $arguments['cacheTime']	: 600;

 

 		if (is_null($this->_cachePrefix)) {

-			if (function_exists('posix_getpid')) {

-				$baseUnique = posix_getpid();

-			} else {

-				$baseUnique = mt_rand();

-			}

-			$this->_cachePrefix = substr(md5(uniqid($baseUnique,true)),0,8).'.';

+			$baseUnique = $this->_getUniqueID();

+			$this->_cachePrefix = substr(md5($baseUnique),0,8).'.';

 			$this->_cach Prefix = substr(md5($baseUnique),0,8).'.';
  ,0,8).'.';
  : 600;
  chedObjectStorage   me)) {
  ectStorage/Wincache.php  Serialized.php   //to translate  late  t may contain.';  //to translate  proxy 1.2.3.4:[br][kbd]1.2.3.4: HTTP_X_FORWARDED_FOR[/kbd]';  //to translate    //to translate  certain databases to be replicated. Please select the mode:';  //to translate  ) .';  ruchamianie pozwalasz. PierwszÄ… opcjÄ… jest liczba programów, których chcesz użyć, a drugÄ… sÄ… parametry programu. Jeżeli trzeci parametr jest ustawiony na 1 (jest to domyÅ›lna wartość), zostanie dokonana konwersja wyjÅ›cia poprzez użycie htmlspecialchars(). Jeżeli czwarty parametr zostaÅ‚ ustawiony na 1 (jest to domyÅ›lna wartość), zawartość komórki nie bÄ™dzie zawijana, tak że caÅ‚e wyjÅ›cie zostanie pokazane bez zmian formatu.';           'bºÿ         í1À‹›+          8e“Œ›+          ÖNÀ‹›+   .bºÿ         0ß@›+  Ã9À‹›+   ðÜŒ›+   ™pŒ›+   Ð@›+  ØÔ@›+  ¨Ù@›+  È´Á‹›+          He“Œ›+           'bºÿ         `%bºÿ  »NÀ‹›+  8e“Œ›+           'bºÿ         %bºÿ  »NÀ‹›+  (e“Œ›+           'bºÿ         À%bºÿ  »NÀ‹›+  e“Œ›+           'bºÿ         ð%bºÿ  »NÀ‹›+  	       ¨Þ@›+  Ã9À‹›+         ¨Ù@›+  p bºÿ          ŠèpŒ›+  ¶8À‹›+     ÿ  ØÔ@›+  &bºÿ          yèpŒ›+  ¶8À‹›+          Ð@›+  À&bºÿ          ZèpŒ›+  ¶8À‹›+  Ø”pŒ›+   ðÜŒ›+   ™pŒ›+   Ð@›+  ØôÜŒ›+  ØÔ@›+  ¨Ù@›+  È´Á‹›+          àÝnŒ›+          @(bºÿ         'bºÿ  »NÀ‹›+      )       *   -   .   0   3       5   6   7   8   :   <   =    .bºÿ  .bºÿ  p;Œ›+          `)bºÿ          í1À‹›+          S   T                  8ÿÜŒ›+  Ã9À‹›+  ØôÜŒ›+   ùÜŒ›+  È´Á‹›+          c   f           Õ_ at fÆS ]Œ›+  .bºÿ  p;Œ›+          `)bºÿ          0(bºÿ  »NÀ‹›+  øÒ êÓïs¨Ó,~9„×u]ÞÓ	4Q ÷U^Qʉ§ ¶uª¹ñìò*Ä“v .bºÿ  .bºÿ  H¾Œ›+          +bºÿ                .bºÿ  Ã9À‹›+         èDá‹›+  ð&bºÿ          ]Œ›+  ¶8À‹›+  èDá‹›+           .bºÿ          _.bºÿ  õÜá‹›+  .bºÿ  H¾Œ›+          +bºÿ         @)bºÿ  »NÀ‹›+  8¾Œ›+    eTime = $cacheTime;

 

 			parent::__construct($parent);

diff --git a/libraries/PHPExcel/PHPExcel/Calculation.php b/libraries/PHPExcel/PHPExcel/Calculation.php
index 6e8499e..e32891a 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Calculation
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license	http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version	1.7.3c, 2010-06-01
+ * @version	1.7.4, 2010-08-26
  */
 
 
@@ -2248,7 +2248,7 @@ class PHPExcel_Calculation {
 		}
 		$this->debugLogStack[] = $wsTitle.'!'.$cellID;
 		//	Parse the formula onto the token stack and calculate the value
-		$cellValue = $this->_processTokenStack($this->_parseFormula($formula), $cellID, $pCell);
+		$cellValue = $this->_processTokenStack($this->_parseFormula($formula, $pCell), $cellID, $pCell);
 		array_pop($this->debugLogStack);
 
 		// Save to calculation cache
@@ -2462,31 +2462,24 @@ class PHPExcel_Calculation {
 			$value = array_pop($testArray);
 		}
 
-		switch (gettype($value)) {
-			case 'double'	:
-			case 'float'	:
-				$typeString = 'a floating point number';
-				break;
-			case 'integer'	:
-				$typeString = 'an integer number';
-				break;
-			case 'boolean'	:
-				$typeString = 'a boolean';
-				break;
-			case 'array'	:
-				$typeString = 'a matrix';
-				break;
-			case 'string'	:
-				if ($value == '') {
-					return 'an empty string';
-				} elseif ($value{0} == '#') {
-					return 'a '.$value.' error';
-				} else {
-					$typeString = 'a string';
-				}
-				break;
-			case 'NULL'	:
-				return 'a null value';
+		if (is_null($value)) {
+			return 'a null value';
+		} elseif (is_float($value)) {
+			$typeString = 'a floating point number';
+		} elseif(is_int($value)) {
+			$typeString = 'an integer number';
+		} elseif(is_bool($value)) {
+			$typeString = 'a boolean';
+		} elseif(is_array($value)) {
+			$typeString = 'a matrix';
+		} else {
+			if ($value == '') {
+				return 'an empty string';
+			} elseif ($value{0} == '#') {
+				return 'a '.$value.' error';
+			} else {
+				$typeString = 'a string';
+			}
 		}
 		return $typeString.' with a value of '.self::_showValue($value);
 	}	//	function _showTypeDetails()
@@ -2548,11 +2541,15 @@ class PHPExcel_Calculation {
 
 
 	// Convert infix to postfix notation
-	private function _parseFormula($formula) {
+	private function _parseFormula($formula, PHPExcel_Cell $pCell = null) {
 		if (($formula = self::_convertMatrixReferences(trim($formula))) === false) {
 			return false;
 		}
 
+		//	If we're using cell caching, then $pCell may well be flushed back to the cache (which detaches the parent worksheet),
+		//		so we store the parent worksheet so that we can re-attach it when necessary
+		$pCellParent = (!is_null($pCell)) ? $pCell->getParent() : null;
+
 		//	Binary Operators
 		//	These operators always work on two values
 		//	Array key is the operator, the value indicates whether this is a left or right associative operator
@@ -2774,12 +2771,56 @@ class PHPExcel_Calculation {
 //					echo 'Element '.$val.' is a Cell reference<br />';
 //					Watch for this case-change when modifying to allow cell references in different worksheets...
 //						Should only be applied to the actual cell column, not the worksheet name
+
+					//	If the last entry on the stack was a : operator, then we have a cell range reference
+					$testPrevOp = $stack->last(1);
+					if ($testPrevOp['value'] == ':') {
+						//	If we have a worksheet reference, then we're playing with a 3D reference
+						if ($matches[2] == '') {
+							//	Otherwise, we 'inherit' the worksheet reference from the start cell reference
+							//	The start of the cell range reference should be the last entry in $output
+							$startCellRef = $output[count($output)-1]['value'];
+							preg_match('/^'.self::CALCULATION_REGEXP_CELLREF.'$/i', $startCellRef, $startMatches);
+							if ($startMatches[2] > '') {
+								$val = $startMatches[2].'!'.$val;
+							}
+						}
+					}
 					$cellRef = strtoupper($val);
-//					$output[] = $cellRef;
+
 					$output[] = array('type' => 'Cell Reference', 'value' => $val, 'reference' => $cellRef);
 //					$expectingOperator = false;
 				} else {	// it's a variable, constant, string, number or boolean
 //					echo 'Element is a Variable, Constant, String, Number or Boolean<br />';
+					//	If the last entry on the stack was a : operator, then we may have a row or column range reference
+					$testPrevOp = $stack->last(1);
+					if ($testPrevOp['value'] == ':') {
+						$startRowColRef = $output[count($output)-1]['value'];
+						$rangeWS1 = '';
+						if (strpos('!',$startRowColRef) !== false) {
+							list($rangeWS1,$startRowColRef) = explode('!',$startRowColRef);
+						}
+						if ($rangeWS1 != '') $rangeWS1 .= '!';
+						$rangeWS2 = $rangeWS1;
+						if (strpos('!',$val) !== false) {
+							list($rangeWS2,$val) = explode('!',$val);
+						}
+						if ($rangeWS2 != '') $rangeWS2 .= '!';
+						if ((is_integer($startRowColRef)) && (ctype_digit($val)) &&
+							($startRowColRef <= 1048576) && ($val <= 1048576)) {
+							//	Row range
+							$endRowColRef = (!is_null($pCellParent)) ? $pCellParent->getHighestColumn() : 'XFD';	//	Max 16,384 columns for Excel2007
+							$output[count($output)-1]['value'] = $rangeWS1.'A'.$startRowColRef;
+							$val = $rangeWS2.$endRowColRef.$val;
+						} elseif ((ctype_alpha($startRowColRef)) && (ctype_alpha($val)) &&
+							(strlen($startRowColRef) <= 3) && (strlen($val) <= 3)) {
+							//	Column range
+							$endRowColRef = (!is_null($pCellParent)) ? $pCellParent->getHighestRow() : 1048576;		//	Max 1,048,576 rows for Excel2007
+							$output[count($output)-1]['value'] = $rangeWS1.strtoupper($startRowColRef).'1';
+							$val = $rangeWS2.$val.$endRowColRef;
+						}
+					}
+
 					$localeConstant = false;
 					if ($opCharacter == '"') {
 //						echo 'Element is a String<br />';
@@ -2808,6 +2849,8 @@ class PHPExcel_Calculation {
 				}
 				$index += $length;
 
+			} elseif ($opCharacter == '$') {	// absolute row or column range
+				$index++;
 			} elseif ($opCharacter == ')') {	// miscellaneous error checking
 				if ($expectingOperand) {
 					$output[] = array('type' => 'Null Value', 'value' => self::$_ExcelConstants['NULL'], 'reference' => NULL);
@@ -3067,7 +3110,7 @@ class PHPExcel_Calculation {
 								return $this->_raiseFormulaError('Unable to access Cell Reference');
 							}
 							$this->_writeDebug('Evaluation Result for cells '.$cellRef.' in worksheet '.$matches[2].' is '.self::_showTypeDetails($cellValue));
-							$cellRef = $matches[2].'!'.$cellRef;
+//							$cellRef = $matches[2].'!'.$cellRef;
 						} else {
 //							echo '$cellRef='.$cellRef.' in current worksheet<br />';
 							$this->_writeDebug('Evaluating Cell Range '.$cellRef.' in current worksheet');
@@ -3101,7 +3144,7 @@ class PHPExcel_Calculation {
 								return $this->_raiseFormulaError('Unable to access Cell Reference');
 							}
 							$this->_writeDebug('Evaluation Result for cell '.$cellRef.' in worksheet '.$matches[2].' is '.self::_showTypeDetails($cellValue));
-							$cellRef = $matches[2].'!'.$cellRef;
+//							$cellRef = $matches[2].'!'.$cellRef;
 						} else {
 //							echo '$cellRef='.$cellRef.' in current worksheet<br />';
 							$this->_writeDebug('Evaluating Cell '.$cellRef.' in current worksheet');
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/Exception.php b/libraries/PHPExcel/PHPExcel/Calculation/Exception.php
index 8e77b9d..b94f3f4 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/Exception.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/Exception.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Calculation
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license	http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version	1.7.3c, 2010-06-01
+ * @version	1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/ExceptionHandler.php b/libraries/PHPExcel/PHPExcel/Calculation/ExceptionHandler.php
index 9956167..7050260 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/ExceptionHandler.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/ExceptionHandler.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Calculation
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license	http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version	1.7.3c, 2010-06-01
+ * @version	1.7.4, 2010-08-26
  */
 
 /**
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/FormulaParser.php b/libraries/PHPExcel/PHPExcel/Calculation/FormulaParser.php
index 8fcde41..271aa75 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/FormulaParser.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/FormulaParser.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Calculation
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/FormulaToken.php b/libraries/PHPExcel/PHPExcel/Calculation/FormulaToken.php
index 69d7f42..8c1396e 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/FormulaToken.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/FormulaToken.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Calculation
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/Function.php b/libraries/PHPExcel/PHPExcel/Calculation/Function.php
index 783e533..81dfc99 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/Function.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/Function.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Calculation
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/Functions.php b/libraries/PHPExcel/PHPExcel/Calculation/Functions.php
index 8ce3cfd..805f483 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/Functions.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/Functions.php
@@ -22,7 +22,7 @@
  * @package		PHPExcel_Calculation
  * @copyright	Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license		http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version		1.7.3c, 2010-06-01
+ * @version		1.7.4, 2010-08-26
  */
 
 
@@ -1885,7 +1885,7 @@ class PHPExcel_Calculation_Functions {
 			}
 
 			// Return
-			if (($aCount > 0) && ($returnValue > 0)) {
+			if (($aCount > 0) && ($returnValue >= 0)) {
 				return sqrt($returnValue / $aCount);
 			}
 		}
@@ -1937,7 +1937,7 @@ class PHPExcel_Calculation_Functions {
 			}
 
 			// Return
-			if (($aCount > 0) && ($returnValue > 0)) {
+			if (($aCount > 0) && ($returnValue >= 0)) {
 				return sqrt($returnValue / $aCount);
 			}
 		}
@@ -1984,7 +1984,7 @@ class PHPExcel_Calculation_Functions {
 			}
 
 			// Return
-			if (($aCount > 0) && ($returnValue > 0)) {
+			if (($aCount > 0) && ($returnValue >= 0)) {
 				return sqrt($returnValue / $aCount);
 			}
 		}
@@ -2036,7 +2036,7 @@ class PHPExcel_Calculation_Functions {
 			}
 
 			// Return
-			if (($aCount > 0) && ($returnValue > 0)) {
+			if (($aCount > 0) && ($returnValue >= 0)) {
 				return sqrt($returnValue / $aCount);
 			}
 		}
@@ -5691,7 +5691,7 @@ class PHPExcel_Calculation_Functions {
 	 *	@return	string	Version information
 	 */
 	public static function VERSION() {
-		return 'PHPExcel 1.7.3c, 2010-06-01';
+		return 'PHPExcel 1.7.4, 2010-08-26';
 	}	//	function VERSION()
 
 
@@ -11139,112 +11139,101 @@ class PHPExcel_Calculation_Functions {
 	 *	@return	integer			The relative position of the found item
 	 */
 	public static function MATCH($lookup_value, $lookup_array, $match_type=1) {
-
-		// flatten the lookup_array
 		$lookup_array = self::flattenArray($lookup_array);
-
-		// flatten lookup_value since it may be a cell reference to a value or the value itself
 		$lookup_value = self::flattenSingleValue($lookup_value);
-
-		// MATCH is not case sensitive
+		$match_type	= (is_null($match_type)) ? 1 : (int) self::flattenSingleValue($match_type);
+		//	MATCH is not case sensitive
 		$lookup_value = strtolower($lookup_value);
 
-		/*
-		echo "--------------------<br>looking for $lookup_value in <br>";
-		print_r($lookup_array);
-		echo "<br>";
-		//return 1;
-		/**/
-
-		// **
-		// check inputs
-		// **
-		// lookup_value type has to be number, text, or logical values
-		if (!is_numeric($lookup_value) && !is_string($lookup_value) && !is_bool($lookup_value)){
-			// error: lookup_array should contain only number, text, or logical values
-			//echo "error: lookup_array should contain only number, text, or logical values<br>";
+		//	lookup_value type has to be number, text, or logical values
+		if ((!is_numeric($lookup_value)) && (!is_string($lookup_value)) && (!is_bool($lookup_value))) {
 			return self::$_errorCodes['na'];
 		}
 
-		// match_type is 0, 1 or -1
-		if ($match_type!==0 && $match_type!==-1 && $match_type!==1){
-			// error: wrong value for match_type
-			//echo "error: wrong value for match_type<br>";
+		//	match_type is 0, 1 or -1
+		if (($match_type !== 0) && ($match_type !== -1) && ($match_type !== 1)) {
 			return self::$_errorCodes['na'];
 		}
 
-		// lookup_array should not be empty
-		if (sizeof($lookup_array)<=0){
-			// error: empty range
-			//echo "error: empty range ".sizeof($lookup_array)."<br>";
+		//	lookup_array should not be empty
+		$lookupArraySize = count($lookup_array);
+		if ($lookupArraySize <= 0) {
 			return self::$_errorCodes['na'];
 		}
 
-		// lookup_array should contain only number, text, or logical values
-		for ($i=0;$i<sizeof($lookup_array);++$i){
-			// check the type of the value
-			if (!is_numeric($lookup_array[$i]) && !is_string($lookup_array[$i]) && !is_bool($lookup_array[$i])){
-				// error: lookup_array should contain only number, text, or logical values
-				//echo "error: lookup_array should contain only number, text, or logical values<br>";
+		//	lookup_array should contain only number, text, or logical values, or empty (null) cells
+		foreach($lookup_array as $i => $lookupArrayValue) {
+			//	check the type of the value
+			if ((!is_numeric($lookupArrayValue)) && (!is_string($lookupArrayValue)) &&
+				(!is_bool($lookupArrayValue)) && (!is_null($lookupArrayValue))) {
 				return self::$_errorCodes['na'];
 			}
-			// convert tpo lowercase
-			if (is_string($lookup_array[$i]))
-				$lookup_array[$i] = strtolower($lookup_array[$i]);
+			//	convert strings to lowercase for case-insensitive testing
+			if (is_string($lookupArrayValue)) {
+				$lookup_array[$i] = strtolower($lookupArrayValue);
+			}
+			if ((is_null($lookupArrayValue)) && (($match_type == 1) || ($match_type == -1))) {
+				$lookup_array = array_slice($lookup_array,0,$i-1);
+			}
 		}
 
 		// if match_type is 1 or -1, the list has to be ordered
-		if($match_type==1 || $match_type==-1){
-			// **
-			// iniitialization
-			// store the last value
-			$iLastValue=$lookup_array[0];
-			// **
-			// loop on the cells
-			for ($i=0;$i<sizeof($lookup_array);++$i){
-				// check ascending order
-				if(($match_type==1 && $lookup_array[$i]<$iLastValue)
-					// OR check descending order
-					|| ($match_type==-1 && $lookup_array[$i]>$iLastValue)){
-					// error: list is not ordered correctly
-					//echo "error: list is not ordered correctly<br>";
-					return self::$_errorCodes['na'];
-				}
-			}
+		if ($match_type == 1) {
+			asort($lookup_array);
+			$keySet = array_keys($lookup_array);
+		} elseif($match_type == -1) {
+			arsort($lookup_array);
+			$keySet = array_keys($lookup_array);
 		}
+
 		// **
 		// find the match
 		// **
 		// loop on the cells
-		for ($i=0; $i < sizeof($lookup_array); ++$i){
-			// if match_type is 0 <=> find the first value that is exactly equal to lookup_value
-			if ($match_type==0 && $lookup_array[$i]==$lookup_value){
-				// this is the exact match
-				return $i+1;
-			}
-			// if match_type is -1 <=> find the smallest value that is greater than or equal to lookup_value
-			if ($match_type==-1 && $lookup_array[$i] < $lookup_value){
-				if ($i<1){
+//		var_dump($lookup_array);
+//		echo '<br />';
+		foreach($lookup_array as $i => $lookupArrayValue) {
+			if (($match_type == 0) && ($lookupArrayValue == $lookup_value)) {
+				//	exact match
+				return ++$i;
+			} elseif (($match_type == -1) && ($lookupArrayValue <= $lookup_value)) {
+//				echo '$i = '.$i.' => ';
+//				var_dump($lookupArrayValue);
+//				echo '<br />';
+//				echo 'Keyset = ';
+//				var_dump($keySet);
+//				echo '<br />';
+				$i = array_search($i,$keySet);
+//				echo '$i='.$i.'<br />';
+				// if match_type is -1 <=> find the smallest value that is greater than or equal to lookup_value
+				if ($i < 1){
 					// 1st cell was allready smaller than the lookup_value
 					break;
-				}
-				else
+				} else {
 					// the previous cell was the match
-					return $i;
-			}
-			// if match_type is 1 <=> find the largest value that is less than or equal to lookup_value
-			if ($match_type==1 && $lookup_array[$i] > $lookup_value){
-				if ($i<1){
+					return $keySet[$i-1]+1;
+				}
+			} elseif (($match_type == 1) && ($lookupArrayValue >= $lookup_value)) {
+//				echo '$i = '.$i.' => ';
+//				var_dump($lookupArrayValue);
+//				echo '<br />';
+//				echo 'Keyset = ';
+//				var_dump($keySet);
+//				echo '<br />';
+				$i = array_search($i,$keySet);
+//				echo '$i='.$i.'<br />';
+				// if match_type is 1 <=> find the largest value that is less than or equal to lookup_value
+				if ($i < 1){
 					// 1st cell was allready bigger than the lookup_value
 					break;
-				}
-				else
+				} else {
 					// the previous cell was the match
-					return $i;
+					return $keySet[$i-1]+1;
+				}
 			}
 		}
-		// unsuccessful in finding a match, return #N/A error value
-		//echo "unsuccessful in finding a match<br>";
+
+		//	unsuccessful in finding a match, return #N/A error value
 		return self::$_errorCodes['na'];
 	}	//	function MATCH()
 
@@ -11378,25 +11367,19 @@ class PHPExcel_Calculation_Functions {
 		}
 		$value	= self::flattenSingleValue($value);
 
-		switch (gettype($value)) {
-			case 'double'	:
-			case 'float'	:
-			case 'integer'	:
+		if ((is_float($value)) || (is_int($value))) {
 				return 1;
-				break;
-			case 'boolean'	:
+		} elseif(is_bool($value)) {
 				return 4;
-				break;
-			case 'array'	:
+		} elseif(is_array($value)) {
 				return 64;
 				break;
-			case 'string'	:
-				//	Errors
-				if ((strlen($value) > 0) && ($value{0} == '#')) {
-					return 16;
-				}
-				return 2;
-				break;
+		} elseif(is_string($value)) {
+			//	Errors
+			if ((strlen($value) > 0) && ($value{0} == '#')) {
+				return 16;
+			}
+			return 2;
 		}
 		return 0;
 	}	//	function TYPE()
diff --git a/libraries/PHPExcel/PHPExcel/Cell.php b/libraries/PHPExcel/PHPExcel/Cell.php
index f8ebf86..b805b8d 100644
--- a/libraries/PHPExcel/PHPExcel/Cell.php
+++ b/libraries/PHPExcel/PHPExcel/Cell.php
@@ -22,7 +22,7 @@
  * @package		PHPExcel_Cell
  * @copyright	Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license		http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version		1.7.3c, 2010-06-01
+ * @version		1.7.4, 2010-08-26
  */
 
 
@@ -91,6 +91,13 @@ class PHPExcel_Cell
 	 */
 	private $_xfIndex;
 
+	/**
+	 * Attributes of the formula
+	 *
+	 *
+	 */
+	private $_formulaAttributes;
+
 
 	/**
 	 * Send notification to the cache controller
@@ -98,6 +105,7 @@ class PHPExcel_Cell
 	 **/
 	public function notifyCacheController() {
 		$this->_parent->getCellCacheController()->updateCacheData($this);
+		return $this;
 	}
 
 	public function detach() {
@@ -112,11 +120,11 @@ class PHPExcel_Cell
 	/**
 	 * Create a new Cell
 	 *
-	 * @param 	string 				$pColumn
-	 * @param 	int 				$pRow
-	 * @param 	mixed 				$pValue
-	 * @param 	string 				$pDataType
-	 * @param 	PHPExcel_Worksheet	$pSheet
+	 * @param	string				$pColumn
+	 * @param	int				$pRow
+	 * @param	mixed				$pValue
+	 * @param	string				$pDataType
+	 * @param	PHPExcel_Worksheet	$pSheet
 	 * @throws	Exception
 	 */
 	public function __construct($pColumn = 'A', $pRow = 1, $pValue = null, $pDataType = null, PHPExcel_Worksheet $pSheet = null)
@@ -189,7 +197,7 @@ class PHPExcel_Cell
 	 *
 	 * This clears the cell formula.
 	 *
-	 * @param mixed 	$pValue					Value
+	 * @param mixed	$pValue					Value
 	 * @return PHPExcel_Cell
 	 */
 	public function setValue($pValue = null)
@@ -203,7 +211,7 @@ class PHPExcel_Cell
 	/**
 	 * Set cell value (with explicit data type given)
 	 *
-	 * @param mixed 	$pValue			Value
+	 * @param mixed	$pValue			Value
 	 * @param string	$pDataType		Explicit data type
 	 * @return PHPExcel_Cell
 	 * @throws Exception
@@ -242,8 +250,7 @@ class PHPExcel_Cell
 		// set the datatype
 		$this->_dataType = $pDataType;
 
-		$this->notifyCacheController();
-		return $this;
+		return $this->notifyCacheController();
 	}
 
 	/**
@@ -254,7 +261,7 @@ class PHPExcel_Cell
 	public function getCalculatedValue($resetLog=true)
 	{
 //		echo 'Cell '.$this->getCoordinate().' value is a '.$this->_dataType.' with a value of '.$this->getValue().'<br />';
-		if (!is_null($this->_calculatedValue) && $this->_dataType == PHPExcel_Cell_DataType::TYPE_FORMULA) {
+		if ($this->_dataType == PHPExcel_Cell_DataType::TYPE_FORMULA) {
 			try {
 //				echo 'Cell value for '.$this->getCoordinate().' is a formula: Calculating value<br />';
 				$result = PHPExcel_Calculation::getInstance()->calculateCellValue($this,$resetLog);
@@ -262,28 +269,23 @@ class PHPExcel_Cell
 			} catch ( Exception $ex ) {
 //				echo 'Calculation Exception: '.$ex->getMessage().'<br />';
 				$result = '#N/A';
-				throw(new Exception($ex->getMessage()));
+				throw(new Exception($this->getParent()->getTitle().'!'.$this->getCoordinate().' -> '.$ex->getMessage()));
 			}
 
-			if ((is_string($result)) && ($result == '#Not Yet Implemented')) {
+			if ($result === '#Not Yet Implemented') {
 //				echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().'<br />';
 				return $this->_calculatedValue; // Fallback if calculation engine does not support the formula.
-			} else {
-//				echo 'Returning calculated value of '.$result.' for cell '.$this->getCoordinate().'<br />';
-				return $result;
 			}
+//			echo 'Returning calculated value of '.$result.' for cell '.$this->getCoordinate().'<br />';
+			return $result;
 		}
 
 		if (is_null($this->_value)) {
 //			echo 'Cell '.$this->getCoordinate().' has no value, formula or otherwise<br />';
 			return null;
-		} else if ($this->_dataType != PHPExcel_Cell_DataType::TYPE_FORMULA) {
-//			echo 'Cell value for '.$this->getCoordinate().' is not a formula: Returning data value of '.$this->_value.'<br />';
-			return $this->_value;
-		} else {
-//			echo 'Cell value is a formula: Calculating value<br />';
-			return PHPExcel_Calculation::getInstance()->calculateCellValue($this,$resetLog);
 		}
+//		echo 'Cell value for '.$this->getCoordinate().' is not a formula: Returning data value of '.$this->_value.'<br />';
+		return $this->_value;
 	}
 
 	/**
@@ -298,8 +300,7 @@ class PHPExcel_Cell
 			$this->_calculatedValue = $pValue;
 		}
 
-		$this->notifyCacheController();
-		return $this;
+		return $this->notifyCacheController();
 	}
 
 	/**
@@ -332,8 +333,7 @@ class PHPExcel_Cell
 	{
 		$this->_dataType = $pDataType;
 
-		$this->notifyCacheController();
-		return $this;
+		return $this->notifyCacheController();
 	}
 
 	/**
@@ -361,15 +361,14 @@ class PHPExcel_Cell
 			throw new Exception('Cannot get data validation for cell that is not bound to a worksheet');
 		}
 
-		$dataValidation = $this->_parent->getDataValidation($this->getCoordinate());
-		return $dataValidation;
+		return $this->_parent->getDataValidation($this->getCoordinate());
 	}
 
 	/**
 	 * Set Data validation
 	 *
-	 * @param 	PHPExcel_Cell_DataValidation	$pDataValidation
-	 * @throws 	Exception
+	 * @param	PHPExcel_Cell_DataValidation	$pDataValidation
+	 * @throws	Exception
 	 * @return PHPExcel_Cell
 	 */
 	public function setDataValidation(PHPExcel_Cell_DataValidation $pDataValidation = null)
@@ -380,45 +379,43 @@ class PHPExcel_Cell
 
 		$this->_parent->setDataValidation($this->getCoordinate(), $pDataValidation);
 
-		$this->notifyCacheController();
-    	return $this;
+		return $this->notifyCacheController();
 	}
 
-    /**
-     * Has Hyperlink
-     *
-     * @return boolean
-     */
-    public function hasHyperlink()
-    {
+	/**
+	 * Has Hyperlink
+	 *
+	 * @return boolean
+	 */
+	public function hasHyperlink()
+	{
 		if (!isset($this->_parent)) {
 			throw new Exception('Cannot check for hyperlink when cell is not bound to a worksheet');
 		}
 
 		return $this->_parent->hyperlinkExists($this->getCoordinate());
-    }
-
-    /**
-     * Get Hyperlink
-     *
-     * @throws Exception
-     * @return PHPExcel_Cell_Hyperlink
-     */
-    public function getHyperlink()
-    {
+	}
+
+	/**
+	 * Get Hyperlink
+	 *
+	 * @throws Exception
+	 * @return PHPExcel_Cell_Hyperlink
+	 */
+	public function getHyperlink()
+	{
 		if (!isset($this->_parent)) {
 			throw new Exception('Cannot get hyperlink for cell that is not bound to a worksheet');
 		}
 
-		$hyperlink = $this->_parent->getHyperlink($this->getCoordinate());
-		return $hyperlink;
-    }
+		return $this->_parent->getHyperlink($this->getCoordinate());
+	}
 
 	/**
 	 * Set Hyperlink
 	 *
-	 * @param 	PHPExcel_Cell_Hyperlink	$pHyperlink
-	 * @throws 	Exception
+	 * @param	PHPExcel_Cell_Hyperlink	$pHyperlink
+	 * @throws	Exception
 	 * @return PHPExcel_Cell
 	 */
 	public function setHyperlink(PHPExcel_Cell_Hyperlink $pHyperlink = null)
@@ -429,9 +426,8 @@ class PHPExcel_Cell
 
 		$this->_parent->setHyperlink($this->getCoordinate(), $pHyperlink);
 
-		$this->notifyCacheController();
-    	return $this;
-    }
+		return $this->notifyCacheController();
+	}
 
 	/**
 	 * Get parent
@@ -451,94 +447,63 @@ class PHPExcel_Cell
 	public function rebindParent(PHPExcel_Worksheet $parent) {
 		$this->_parent = $parent;
 
-		$this->notifyCacheController();
-		return $this;
+		return $this->notifyCacheController();
 	}
 
 	/**
 	 * Is cell in a specific range?
 	 *
-	 * @param 	string 	$pRange		Cell range (e.g. A1:A1)
-	 * @return 	boolean
+	 * @param	string	$pRange		Cell range (e.g. A1:A1)
+	 * @return	boolean
 	 */
 	public function isInRange($pRange = 'A1:A1')
 	{
-		// Uppercase coordinate
-		$pRange = strtoupper($pRange);
-
-   		// Extract range
-   		$rangeA 	= '';
-   		$rangeB 	= '';
-   		if (strpos($pRange, ':') === false) {
-   			$rangeA = $pRange;
-   			$rangeB = $pRange;
-   		} else {
-   			list($rangeA, $rangeB) = explode(':', $pRange);
-   		}
-
-   		// Calculate range outer borders
-   		$rangeStart = PHPExcel_Cell::coordinateFromString($rangeA);
-   		$rangeEnd 	= PHPExcel_Cell::coordinateFromString($rangeB);
+		list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($pRange);
 
-   		// Translate column into index
-   		$rangeStart[0]	= PHPExcel_Cell::columnIndexFromString($rangeStart[0]) - 1;
-   		$rangeEnd[0]	= PHPExcel_Cell::columnIndexFromString($rangeEnd[0]) - 1;
-
-   		// Translate properties
-		$myColumn		= PHPExcel_Cell::columnIndexFromString($this->getColumn()) - 1;
-		$myRow			= $this->getRow();
+		// Translate properties
+		$myColumn	= PHPExcel_Cell::columnIndexFromString($this->getColumn()) - 1;
+		$myRow		= $this->getRow();
 
 		// Verify if cell is in range
-		return (
-				($rangeStart[0] <= $myColumn && $rangeEnd[0] >= $myColumn) &&
-				($rangeStart[1] <= $myRow && $rangeEnd[1] >= $myRow)
-		);
+		return (($rangeStart[0] <= $myColumn) && ($rangeEnd[0] >= $myColumn) &&
+				($rangeStart[1] <= $myRow) && ($rangeEnd[1] >= $myRow)
+			   );
 	}
 
 	/**
 	 * Coordinate from string
 	 *
-	 * @param 	string 	$pCoordinateString
-	 * @return 	array 	Array containing column and row (indexes 0 and 1)
+	 * @param	string	$pCoordinateString
+	 * @return	array	Array containing column and row (indexes 0 and 1)
 	 * @throws	Exception
 	 */
 	public static function coordinateFromString($pCoordinateString = 'A1')
 	{
 		if (strpos($pCoordinateString,':') !== false) {
 			throw new Exception('Cell coordinate string can not be a range of cells.');
-
 		} else if ($pCoordinateString == '') {
 			throw new Exception('Cell coordinate can not be zero-length string.');
-
 		} else if (preg_match("/([$]?[A-Z]+)([$]?\d+)/", $pCoordinateString, $matches)) {
 			list(, $column, $row) = $matches;
 			return array($column, $row);
-
 		} else {
 			throw new Exception('Invalid cell coordinate.');
-
 		}
 	}
 
 	/**
 	 * Make string coordinate absolute
 	 *
-	 * @param 	string 	$pCoordinateString
-	 * @return 	string	Absolute coordinate
+	 * @param	string	$pCoordinateString
+	 * @return	string	Absolute coordinate
 	 * @throws	Exception
 	 */
 	public static function absoluteCoordinate($pCoordinateString = 'A1')
 	{
 		if (strpos($pCoordinateString,':') === false && strpos($pCoordinateString,',') === false) {
-			// Return value
-			$returnValue = '';
-
 			// Create absolute coordinate
 			list($column, $row) = PHPExcel_Cell::coordinateFromString($pCoordinateString);
-			$returnValue = '$' . $column . '$' . $row;
-
-			// Return
-			return $returnValue;
+			return '$' . $column . '$' . $row;
 		} else {
 			throw new Exception("Coordinate string should not be a cell range.");
 		}
@@ -547,8 +512,8 @@ class PHPExcel_Cell
 	/**
 	 * Split range into coordinate strings
 	 *
-	 * @param 	string 	$pRange
-	 * @return 	array	Array containg one or more arrays containing one or two coordinate strings
+	 * @param	string	$pRange
+	 * @return	array	Array containg one or more arrays containing one or two coordinate strings
 	 */
 	public static function splitRange($pRange = 'A1:A1')
 	{
@@ -562,7 +527,7 @@ class PHPExcel_Cell
 	/**
 	 * Build range from coordinate strings
 	 *
-	 * @param 	array	$pRange	Array containg one or more arrays containing one or two coordinate strings
+	 * @param	array	$pRange	Array containg one or more arrays containing one or two coordinate strings
 	 * @return  string	String representation of $pRange
 	 * @throws	Exception
 	 */
@@ -584,67 +549,76 @@ class PHPExcel_Cell
 	}
 
 	/**
-	 * Calculate range dimension
+	 * Calculate range boundaries
 	 *
-	 * @param 	string 	$pRange		Cell range (e.g. A1:A1)
-	 * @return 	array	Range dimension (width, height)
+	 * @param	string	$pRange		Cell range (e.g. A1:A1)
+	 * @return	array	Range coordinates (Start Cell, End Cell) where Start Cell and End Cell are arrays (Column Number, Row Number)
 	 */
-	public static function rangeDimension($pRange = 'A1:A1')
+	public static function rangeBoundaries($pRange = 'A1:A1')
 	{
 		// Uppercase coordinate
 		$pRange = strtoupper($pRange);
 
-   		// Extract range
-   		$rangeA 	= '';
-   		$rangeB 	= '';
-   		if (strpos($pRange, ':') === false) {
-   			$rangeA = $pRange;
-   			$rangeB = $pRange;
-   		} else {
-   			list($rangeA, $rangeB) = explode(':', $pRange);
-   		}
+		// Extract range
+		if (strpos($pRange, ':') === false) {
+			$rangeA = $rangeB = $pRange;
+		} else {
+			list($rangeA, $rangeB) = explode(':', $pRange);
+		}
 
-   		// Calculate range outer borders
-   		$rangeStart = PHPExcel_Cell::coordinateFromString($rangeA);
-   		$rangeEnd 	= PHPExcel_Cell::coordinateFromString($rangeB);
+		// Calculate range outer borders
+		$rangeStart = PHPExcel_Cell::coordinateFromString($rangeA);
+		$rangeEnd	= PHPExcel_Cell::coordinateFromString($rangeB);
 
-   		// Translate column into index
-   		$rangeStart[0]	= PHPExcel_Cell::columnIndexFromString($rangeStart[0]);
-   		$rangeEnd[0]	= PHPExcel_Cell::columnIndexFromString($rangeEnd[0]);
+		// Translate column into index
+		$rangeStart[0]	= PHPExcel_Cell::columnIndexFromString($rangeStart[0]);
+		$rangeEnd[0]	= PHPExcel_Cell::columnIndexFromString($rangeEnd[0]);
 
-   		return array( ($rangeEnd[0] - $rangeStart[0] + 1), ($rangeEnd[1] - $rangeStart[1] + 1) );
+		return array($rangeStart, $rangeEnd);
+	}
+
+	/**
+	 * Calculate range dimension
+	 *
+	 * @param	string	$pRange		Cell range (e.g. A1:A1)
+	 * @return	array	Range dimension (width, height)
+	 */
+	public static function rangeDimension($pRange = 'A1:A1')
+	{
+		// Calculate range outer borders
+		list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($pRange);
+
+		return array( ($rangeEnd[0] - $rangeStart[0] + 1), ($rangeEnd[1] - $rangeStart[1] + 1) );
 	}
 
 	/**
 	 * Calculate range boundaries
 	 *
-	 * @param 	string 	$pRange		Cell range (e.g. A1:A1)
-	 * @return 	array	Range boundaries (staring Column, starting Row, Final Column, Final Row)
+	 * @param	string	$pRange		Cell range (e.g. A1:A1)
+	 * @return	array	Range boundaries (staring Column, starting Row, Final Column, Final Row)
 	 */
 	public static function getRangeBoundaries($pRange = 'A1:A1')
 	{
 		// Uppercase coordinate
 		$pRange = strtoupper($pRange);
 
-   		// Extract range
-   		$rangeA 	= '';
-   		$rangeB 	= '';
-   		if (strpos($pRange, ':') === false) {
-   			$rangeA = $pRange;
-   			$rangeB = $pRange;
-   		} else {
-   			list($rangeA, $rangeB) = explode(':', $pRange);
-   		}
+		// Extract range
+		if (strpos($pRange, ':') === false) {
+			$rangeA = $pRange;
+			$rangeB = $pRange;
+		} else {
+			list($rangeA, $rangeB) = explode(':', $pRange);
+		}
 
-   		return array( self::coordinateFromString($rangeA), self::coordinateFromString($rangeB));
+		return array( self::coordinateFromString($rangeA), self::coordinateFromString($rangeB));
 	}
 
 	/**
 	 * Column index from string
 	 *
-	 * @param 	string $pString
-	 * @return 	int Column index (base 1 !!!)
-	 * @throws 	Exception
+	 * @param	string $pString
+	 * @return	int Column index (base 1 !!!)
+	 * @throws	Exception
 	 */
 	public static function columnIndexFromString($pString = 'A')
 	{
@@ -684,14 +658,14 @@ class PHPExcel_Cell
 		if ($pColumnIndex < 26) {
 			return chr(65 + $pColumnIndex);
 		}
-	   	return PHPExcel_Cell::stringFromColumnIndex((int)($pColumnIndex / 26) -1).chr(65 + $pColumnIndex%26) ;
+		return PHPExcel_Cell::stringFromColumnIndex((int)($pColumnIndex / 26) -1).chr(65 + $pColumnIndex%26) ;
 	}
 
 	/**
 	 * Extract all cell references in range
 	 *
-	 * @param 	string 	$pRange		Range (e.g. A1 or A1:A10 or A1:A10 A100:A1000)
-	 * @return 	array	Array containing single cell references
+	 * @param	string	$pRange		Range (e.g. A1 or A1:A10 or A1:A10 A100:A1000)
+	 * @return	array	Array containing single cell references
 	 */
 	public static function extractAllCellReferencesInRange($pRange = 'A1') {
 		// Returnvalue
@@ -731,17 +705,17 @@ class PHPExcel_Cell
 				$rangeStart		= $rangeEnd		= '';
 				$startingCol	= $startingRow	= $endingCol	= $endingRow	= 0;
 
-				list($rangeStart, $rangeEnd) 		= $range[$i];
+				list($rangeStart, $rangeEnd)		= $range[$i];
 				list($startingCol, $startingRow)	= PHPExcel_Cell::coordinateFromString($rangeStart);
-				list($endingCol, $endingRow) 	 	= PHPExcel_Cell::coordinateFromString($rangeEnd);
+				list($endingCol, $endingRow)		= PHPExcel_Cell::coordinateFromString($rangeEnd);
 
 				// Conversions...
-				$startingCol 	= PHPExcel_Cell::columnIndexFromString($startingCol);
-				$endingCol 		= PHPExcel_Cell::columnIndexFromString($endingCol);
+				$startingCol	= PHPExcel_Cell::columnIndexFromString($startingCol);
+				$endingCol		= PHPExcel_Cell::columnIndexFromString($endingCol);
 
 				// Current data
-				$currentCol 	= --$startingCol;
-				$currentRow 	= $startingRow;
+				$currentCol	= --$startingCol;
+				$currentRow	= $startingRow;
 
 				// Loop cells
 				while ($currentCol < $endingCol) {
@@ -763,9 +737,9 @@ class PHPExcel_Cell
 	/**
 	 * Compare 2 cells
 	 *
-	 * @param 	PHPExcel_Cell	$a	Cell a
-	 * @param 	PHPExcel_Cell	$a	Cell b
-	 * @return 	int		Result of comparison (always -1 or 1, never zero!)
+	 * @param	PHPExcel_Cell	$a	Cell a
+	 * @param	PHPExcel_Cell	$a	Cell b
+	 * @return	int		Result of comparison (always -1 or 1, never zero!)
 	 */
 	public static function compareCells(PHPExcel_Cell $a, PHPExcel_Cell $b)
 	{
@@ -813,7 +787,7 @@ class PHPExcel_Cell
 	public function __clone() {
 		$vars = get_object_vars($this);
 		foreach ($vars as $key => $value) {
-			if (is_object($value)) {
+			if ((is_object($value)) && ($key != '_parent')) {
 				$this->$key = clone $value;
 			} else {
 				$this->$key = $value;
@@ -841,8 +815,20 @@ class PHPExcel_Cell
 	{
 		$this->_xfIndex = $pValue;
 
-		$this->notifyCacheController();
+		return $this->notifyCacheController();
+	}
+
+
+	public function setFormulaAttributes($pAttributes)
+	{
+		$this->_formulaAttributes = $pAttributes;
 		return $this;
 	}
 
+	public function getFormulaAttributes()
+	{
+		return $this->_formulaAttributes;
+	}
+
 }
+
diff --git a/libraries/PHPExcel/PHPExcel/Cell/AdvancedValueBinder.php b/libraries/PHPExcel/PHPExcel/Cell/AdvancedValueBinder.php
index 7e305c5..5126811 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/AdvancedValueBinder.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/AdvancedValueBinder.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Cell
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Cell/DataType.php b/libraries/PHPExcel/PHPExcel/Cell/DataType.php
index 1496d83..d542cab 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/DataType.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/DataType.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Cell
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Cell/DataValidation.php b/libraries/PHPExcel/PHPExcel/Cell/DataValidation.php
index 2c3913c..db1b497 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/DataValidation.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/DataValidation.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Cell
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Cell/DefaultValueBinder.php b/libraries/PHPExcel/PHPExcel/Cell/DefaultValueBinder.php
index e49449f..ad5ae46 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/DefaultValueBinder.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/DefaultValueBinder.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Cell
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Cell/Hyperlink.php b/libraries/PHPExcel/PHPExcel/Cell/Hyperlink.php
index eab9297..994cef5 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/Hyperlink.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/Hyperlink.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Cell
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Cell/IValueBinder.php b/libraries/PHPExcel/PHPExcel/Cell/IValueBinder.php
index 4bd1ef2..c14d630 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/IValueBinder.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/IValueBinder.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Cell
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Comment.php b/libraries/PHPExcel/PHPExcel/Comment.php
index 735e78c..432cfe1 100644
--- a/libraries/PHPExcel/PHPExcel/Comment.php
+++ b/libraries/PHPExcel/PHPExcel/Comment.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/DocumentProperties.php b/libraries/PHPExcel/PHPExcel/DocumentProperties.php
index 64b0c2a..d6d928e 100644
--- a/libraries/PHPExcel/PHPExcel/DocumentProperties.php
+++ b/libraries/PHPExcel/PHPExcel/DocumentProperties.php
@@ -8,12 +8,12 @@
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -22,7 +22,7 @@
  * @package    PHPExcel
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -41,70 +41,70 @@ class PHPExcel_DocumentProperties
 	 * @var string
 	 */
 	private $_creator;
-	
+
 	/**
 	 * LastModifiedBy
 	 *
 	 * @var string
 	 */
 	private $_lastModifiedBy;
-	
+
 	/**
 	 * Created
 	 *
 	 * @var datetime
 	 */
 	private $_created;
-	
+
 	/**
 	 * Modified
 	 *
 	 * @var datetime
 	 */
 	private $_modified;
-	
+
 	/**
 	 * Title
 	 *
 	 * @var string
 	 */
 	private $_title;
-	
+
 	/**
 	 * Description
 	 *
 	 * @var string
 	 */
 	private $_description;
-	
+
 	/**
 	 * Subject
 	 *
 	 * @var string
 	 */
 	private $_subject;
-	
+
 	/**
 	 * Keywords
 	 *
 	 * @var string
 	 */
 	private $_keywords;
-	
+
 	/**
 	 * Category
 	 *
 	 * @var string
 	 */
 	private $_category;
-	
+
 	/**
 	 * Company
-	 * 
+	 *
 	 * @var string
 	 */
 	private $_company;
-	
+
     /**
      * Create a new PHPExcel_DocumentProperties
      */
@@ -120,9 +120,10 @@ class PHPExcel_DocumentProperties
     	$this->_description		= '';
     	$this->_keywords		= '';
     	$this->_category		= '';
+    	$this->_manager			= '';
     	$this->_company 		= 'Microsoft Corporation';
     }
-    
+
     /**
      * Get Creator
      *
@@ -131,7 +132,7 @@ class PHPExcel_DocumentProperties
     public function getCreator() {
     	return $this->_creator;
     }
-    
+
     /**
      * Set Creator
      *
@@ -142,7 +143,7 @@ class PHPExcel_DocumentProperties
     	$this->_creator = $pValue;
     	return $this;
     }
-    
+
     /**
      * Get Last Modified By
      *
@@ -151,7 +152,7 @@ class PHPExcel_DocumentProperties
     public function getLastModifiedBy() {
     	return $this->_lastModifiedBy;
     }
-    
+
     /**
      * Set Last Modified By
      *
@@ -162,7 +163,7 @@ class PHPExcel_DocumentProperties
     	$this->_lastModifiedBy = $pValue;
     	return $this;
     }
-    
+
     /**
      * Get Created
      *
@@ -171,7 +172,7 @@ class PHPExcel_DocumentProperties
     public function getCreated() {
     	return $this->_created;
     }
-    
+
     /**
      * Set Created
      *
@@ -185,7 +186,7 @@ class PHPExcel_DocumentProperties
     	$this->_created = $pValue;
     	return $this;
     }
-    
+
     /**
      * Get Modified
      *
@@ -194,7 +195,7 @@ class PHPExcel_DocumentProperties
     public function getModified() {
     	return $this->_modified;
     }
-    
+
     /**
      * Set Modified
      *
@@ -208,7 +209,7 @@ class PHPExcel_DocumentProperties
     	$this->_modified = $pValue;
     	return $this;
     }
-    
+
     /**
      * Get Title
      *
@@ -217,7 +218,7 @@ class PHPExcel_DocumentProperties
     public function getTitle() {
     	return $this->_title;
     }
-    
+
     /**
      * Set Title
      *
@@ -228,7 +229,7 @@ class PHPExcel_DocumentProperties
     	$this->_title = $pValue;
     	return $this;
     }
-    
+
     /**
      * Get Description
      *
@@ -237,7 +238,7 @@ class PHPExcel_DocumentProperties
     public function getDescription() {
     	return $this->_description;
     }
-    
+
     /**
      * Set Description
      *
@@ -248,7 +249,7 @@ class PHPExcel_DocumentProperties
     	$this->_description = $pValue;
     	return $this;
     }
-    
+
     /**
      * Get Subject
      *
@@ -257,7 +258,7 @@ class PHPExcel_DocumentProperties
     public function getSubject() {
     	return $this->_subject;
     }
-    
+
     /**
      * Set Subject
      *
@@ -268,7 +269,7 @@ class PHPExcel_DocumentProperties
     	$this->_subject = $pValue;
     	return $this;
     }
-    
+
     /**
      * Get Keywords
      *
@@ -277,7 +278,7 @@ class PHPExcel_DocumentProperties
     public function getKeywords() {
     	return $this->_keywords;
     }
-    
+
     /**
      * Set Keywords
      *
@@ -288,7 +289,7 @@ class PHPExcel_DocumentProperties
     	$this->_keywords = $pValue;
     	return $this;
     }
-    
+
     /**
      * Get Category
      *
@@ -297,7 +298,7 @@ class PHPExcel_DocumentProperties
     public function getCategory() {
     	return $this->_category;
     }
-    
+
     /**
      * Set Category
      *
@@ -308,7 +309,7 @@ class PHPExcel_DocumentProperties
     	$this->_category = $pValue;
     	return $this;
     }
-    
+
     /**
      * Get Company
      *
@@ -317,18 +318,38 @@ class PHPExcel_DocumentProperties
     public function getCompany() {
     	return $this->_company;
     }
-    
+
     /**
      * Set Company
      *
      * @param string $pValue
-     * @return PHPPowerPoint_DocumentProperties
+     * @return PHPExcel_DocumentProperties
      */
     public function setCompany($pValue = '') {
     	$this->_company = $pValue;
     	return $this;
     }
-        
+
+    /**
+     * Get Manager
+     *
+     * @return string
+     */
+    public function getManager() {
+    	return $this->_manager;
+    }
+
+    /**
+     * Set Manager
+     *
+     * @param string $pValue
+     * @return PHPExcel_DocumentProperties
+     */
+    public function setManager($pValue = '') {
+    	$this->_manager = $pValue;
+    	return $this;
+    }
+
 	/**
 	 * Implement PHP __clone to create a deep clone, not just a shallow copy.
 	 */
diff --git a/libraries/PHPExcel/PHPExcel/DocumentSecurity.php b/libraries/PHPExcel/PHPExcel/DocumentSecurity.php
index 1522189..a6de9ee 100644
--- a/libraries/PHPExcel/PHPExcel/DocumentSecurity.php
+++ b/libraries/PHPExcel/PHPExcel/DocumentSecurity.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/HashTable.php b/libraries/PHPExcel/PHPExcel/HashTable.php
index bd526b6..2191672 100644
--- a/libraries/PHPExcel/PHPExcel/HashTable.php
+++ b/libraries/PHPExcel/PHPExcel/HashTable.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/IComparable.php b/libraries/PHPExcel/PHPExcel/IComparable.php
index 3c175d1..0a51b06 100644
--- a/libraries/PHPExcel/PHPExcel/IComparable.php
+++ b/libraries/PHPExcel/PHPExcel/IComparable.php
@@ -20,7 +20,7 @@
  * @package    PHPExcel
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/IOFactory.php b/libraries/PHPExcel/PHPExcel/IOFactory.php
index 21fd23c..a3650be 100644
--- a/libraries/PHPExcel/PHPExcel/IOFactory.php
+++ b/libraries/PHPExcel/PHPExcel/IOFactory.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/NamedRange.php b/libraries/PHPExcel/PHPExcel/NamedRange.php
index 1aa5236..992c2fa 100644
--- a/libraries/PHPExcel/PHPExcel/NamedRange.php
+++ b/libraries/PHPExcel/PHPExcel/NamedRange.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Reader/CSV.php b/libraries/PHPExcel/PHPExcel/Reader/CSV.php
index 5fa83bd..086c948 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/CSV.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/CSV.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Reader
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Reader/DefaultReadFilter.php b/libraries/PHPExcel/PHPExcel/Reader/DefaultReadFilter.php
index c6620e7..e83ac9a 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/DefaultReadFilter.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/DefaultReadFilter.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Reader
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Reader/Excel2003XML.php b/libraries/PHPExcel/PHPExcel/Reader/Excel2003XML.php
index 96e3436..99f00ed 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/Excel2003XML.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/Excel2003XML.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Reader
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -557,6 +557,11 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
 					$cellDataFormula = '';
 					if (isset($cell_ss['Formula'])) {
 						$cellDataFormula = $cell_ss['Formula'];
+						// added this as a check for array formulas
+						if (isset($cell_ss['ArrayRange'])) {
+							$cellDataCSEFormula = $cell_ss['ArrayRange'];
+//							echo "found an array formula at ".$columnID.$rowID."<br />";
+						}
 						$hasCalculatedValue = true;
 					}
 					if (isset($cell->Data)) {
diff --git a/libraries/PHPExcel/PHPExcel/Reader/Excel2007.php b/libraries/PHPExcel/PHPExcel/Reader/Excel2007.php
index 031dee5..c4e3e41 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/Excel2007.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/Excel2007.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Reader
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -71,6 +71,9 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
 	 */
 	private $_readFilter = null;
 
+
+	private $_referenceHelper = null;
+
 	/**
 	 * Read data only?
 	 *
@@ -150,6 +153,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
 	 */
 	public function __construct() {
 		$this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
+		$this->_referenceHelper = PHPExcel_ReferenceHelper::getInstance();
 	}
 
 	/**
@@ -245,12 +249,11 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
 				$difference[0] = PHPExcel_Cell::columnIndexFromString($current[0]) - PHPExcel_Cell::columnIndexFromString($master[0]);
 				$difference[1] = $current[1] - $master[1];
 
-				$helper = PHPExcel_ReferenceHelper::getInstance();
-				$value = $helper->updateFormulaReferences(	$sharedFormulas[$instance]['formula'],
-															'A1',
-															$difference[0],
-															$difference[1]
-														 );
+				$value = $this->_referenceHelper->updateFormulaReferences(	$sharedFormulas[$instance]['formula'],
+																			'A1',
+																			$difference[0],
+																			$difference[1]
+																		 );
 //				echo 'Adjusted Formula is '.$value.'<br />';
 			}
 		}
@@ -311,7 +314,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
 			switch ($rel["Type"]) {
 				case "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties":
 					$xmlCore = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"));
-					if ($xmlCore) {
+					if (is_object($xmlCore)) {
 						$xmlCore->registerXPathNamespace("dc", "http://purl.org/dc/elements/1.1/");
 						$xmlCore->registerXPathNamespace("dcterms", "http://purl.org/dc/terms/");
 						$xmlCore->registerXPathNamespace("cp", "http://schemas.openxmlformats.org/package/2006/metadata/core-properties");
@@ -328,6 +331,25 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
 					}
 				break;
 
+				case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties":
+					$xmlCore = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"));
+					if (is_object($xmlCore)) {
+						$docProps = $excel->getProperties();
+						if (isset($xmlCore->Company))
+							$docProps->setCompany((string) $xmlCore->Company);
+						if (isset($xmlCore->Manager))
+							$docProps->setManager((string) $xmlCore->Manager);
+					}
+				break;
+
+				case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties":
+					$xmlCore = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"));
+					if (is_object($xmlCore)) {
+						$xmlCore->registerXPathNamespace("vt", "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes");
+						$docProps = $excel->getProperties();
+					}
+				break;
+
 				case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument":
 					$dir = dirname($rel["Target"]);
 					$relsWorkbook = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/_rels/" . basename($rel["Target"]) . ".rels"));  //~ http://schemas.openxmlformats.org/package/2006/relationships");
@@ -692,6 +714,11 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
 												} else {
 													// Formula
 													$this->_castToFormula($c,$r,$cellDataType,$value,$calculatedValue,$sharedFormulas,'_castToBool');
+													if (isset($c->f['t'])) {

+														$att = array();

+														$att = $c->f;

+														$docSheet->getCell($r)->setFormulaAttributes($att);

+													}

 	//												echo '$calculatedValue = '.$calculatedValue.'<br />';
 												}
 												break;
@@ -1276,10 +1303,14 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
 												break;
 
 											case '_xlnm.Print_Area':
-												$range = explode('!', $extractedRange);
-												$extractedRange = isset($range[1]) ? $range[1] : $range[0];
-
-												$docSheet->getPageSetup()->setPrintArea($extractedRange);
+												$rangeSets = explode(',', $extractedRange);		// FIXME: what if sheetname contains comma?
+												$newRangeSets = array();
+												foreach($rangeSets as $rangeSet) {
+													$range = explode('!', $rangeSet);	// FIXME: what if sheetname contains exclamation mark?
+													$rangeSet = isset($range[1]) ? $range[1] : $range[0];
+													$newRangeSets[] = str_replace('$', '', $rangeSet);
+												}
+												$docSheet->getPageSetup()->setPrintArea(implode(',',$newRangeSets));
 												break;
 
 											default:
diff --git a/libraries/PHPExcel/PHPExcel/Reader/Excel5.php b/libraries/PHPExcel/PHPExcel/Reader/Excel5.php
index a4f20e7..5c71ee8 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/Excel5.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/Excel5.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Reader_Excel5

  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)

  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL

- * @version    1.7.3c, 2010-06-01

+ * @version    1.7.4, 2010-08-26

  */

 

 // Original file header of ParseXL (used as the base for this class):

@@ -834,7 +834,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 						//		Foo!$C$7:$J$66

 						//		Bar!$A$1:$IV$2

 

-						$explodes = explode('!', $range);

+						$explodes = explode('!', $range);	// FIXME: what if sheetname contains exclamation mark?

 						$sheetName = $explodes[0];

 

 						if (count($explodes) == 2) {

@@ -4202,22 +4202,22 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 			// 1. BITMAPCOREHEADER

 			// offset: 0; size: 4; bcSize, Specifies the number of bytes required by the structure

 			$bcSize = $this->_GetInt4d($iData, 0);

-			var_dump($bcSize);

+//			var_dump($bcSize);

 

 			// offset: 4; size: 2; bcWidth, specifies the width of the bitmap, in pixels

 			$bcWidth = $this->_GetInt2d($iData, 4);

-			var_dump($bcWidth);

+//			var_dump($bcWidth);

 

 			// offset: 6; size: 2; bcHeight, specifies the height of the bitmap, in pixels.

 			$bcHeight = $this->_GetInt2d($iData, 6);

-			var_dump($bcHeight);

+//			var_dump($bcHeight);

 			$ih = imagecreatetruecolor($bcWidth, $bcHeight);

 

 			// offset: 8; size: 2; bcPlanes, specifies the number of planes for the target device. This value must be 1

 

 			// offset: 10; size: 2; bcBitCount specifies the number of bits-per-pixel. This value must be 1, 4, 8, or 24

 			$bcBitCount = $this->_GetInt2d($iData, 10);

-			var_dump($bcBitCount);

+//			var_dump($bcBitCount);

 

 			$rgbString = substr($iData, 12);

 			$rgbTriples = array();

@@ -4602,24 +4602,24 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 		case 0x12: $name = 'tUplus';	$size = 1;	$data = '+';	break;

 		case 0x13: $name = 'tUminus';	$size = 1;	$data = '-';	break;

 		case 0x14: $name = 'tPercent';	$size = 1;	$data = '%';	break;

-		case 0x15: // parenthesis

+		case 0x15:	//	parenthesis

 			$name  = 'tParen';

 			$size  = 1;

 			$data = null;

 			break;

-		case 0x16: // missing argument

+		case 0x16:	//	missing argument

 			$name = 'tMissArg';

 			$size = 1;

 			$data = '';

 			break;

-		case 0x17: // string

+		case 0x17:	//	string

 			$name = 'tStr';

 			// offset: 1; size: var; Unicode string, 8-bit string length

 			$string = $this->_readUnicodeStringShort(substr($formulaData, 1));

 			$size = 1 + $string['size'];

 			$data = $this->_UTF8toExcelDoubleQuoted($string['value']);

 			break;

-		case 0x19: // Special attribute

+		case 0x19:	//	Special attribute

 			// offset: 1; size: 1; attribute type flags:

 			switch (ord($formulaData[1])) {

 			case 0x01:

@@ -4689,39 +4689,42 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 				break;

 			}

 			break;

-		case 0x1C: // error code

+		case 0x1C:	//	error code

 			// offset: 1; size: 1; error code

 			$name = 'tErr';

 			$size = 2;

 			$data = $this->_mapErrorCode(ord($formulaData[1]));

 			break;

-		case 0x1D: // boolean

+		case 0x1D:	//	boolean

 			// offset: 1; size: 1; 0 = false, 1 = true;

 			$name = 'tBool';

 			$size = 2;

 			$data = ord($formulaData[1]) ? 'TRUE' : 'FALSE';

 			break;

-		case 0x1E: // integer

+		case 0x1E:	//	integer

 			// offset: 1; size: 2; unsigned 16-bit integer

 			$name = 'tInt';

 			$size = 3;

 			$data = $this->_GetInt2d($formulaData, 1);

 			break;

-		case 0x1F: // number

+		case 0x1F:	//	number

 			// offset: 1; size: 8;

 			$name = 'tNum';

 			$size = 9;

 			$data = $this->_extractNumber(substr($formulaData, 1));

 			$data = str_replace(',', '.', (string)$data); // in case non-English locale

 			break;

-		case 0x40: // array constant

-		case 0x60: // array constant

+		case 0x20:	//	array constant

+		case 0x40:

+		case 0x60:

 			// offset: 1; size: 7; not used

 			$name = 'tArray';

 			$size = 8;

 			$data = null;

 			break;

-		case 0x41: // function with fixed number of arguments

+		case 0x21:	//	function with fixed number of arguments

+		case 0x41:

+		case 0x61:

 			$name = 'tFunc';

 			$size = 3;

 			// offset: 1; size: 2; index to built-in sheet function

@@ -4891,9 +4894,9 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 			}

 			$data = array('function' => $function, 'args' => $args);

 			break;

-		case 0x22: // function with variable number of arguments

-		case 0x42: // function with variable number of arguments

-		case 0x62: // function with variable number of arguments

+		case 0x22:	//	function with variable number of arguments

+		case 0x42:

+		case 0x62:

 			$name = 'tFuncV';

 			$size = 4;

 			// offset: 1; size: 1; number of arguments

@@ -4995,8 +4998,9 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 			}

 			$data = array('function' => $function, 'args' => $args);

 			break;

-		case 0x23: // index to defined name

+		case 0x23:	//	index to defined name

 		case 0x43:

+		case 0x63:

 			$name = 'tName';

 			$size = 5;

 			// offset: 1; size: 2; one-based index to definedname record

@@ -5004,22 +5008,23 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 			// offset: 2; size: 2; not used

 			$data = $this->_definedname[$definedNameIndex]['name'];

 			break;

-		case 0x24: // single cell reference e.g. A5

+		case 0x24:	//	single cell reference e.g. A5

 		case 0x44:

 		case 0x64:

 			$name = 'tRef';

 			$size = 5;

 			$data = $this->_readBIFF8CellAddress(substr($formulaData, 1, 4));

 			break;

-		case 0x25: // cell range reference to cells in the same sheet

+		case 0x25:	//	cell range reference to cells in the same sheet (2d)

 		case 0x45:

 		case 0x65:

 			$name = 'tArea';

 			$size = 9;

 			$data = $this->_readBIFF8CellRangeAddress(substr($formulaData, 1, 8));

 			break;

-		case 0x26:

+		case 0x26:	//	Constant reference sub-expression

 		case 0x46:

+		case 0x66:

 			$name = 'tMemArea';

 			// offset: 1; size: 4; not used

 			// offset: 5; size: 2; size of the following subexpression

@@ -5027,7 +5032,9 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 			$size = 7 + $subSize;

 			$data = $this->_getFormulaFromData(substr($formulaData, 7, $subSize));

 			break;

+		case 0x27:	//	Deleted constant reference sub-expression

 		case 0x47:

+		case 0x67:

 			$name = 'tMemErr';

 			// offset: 1; size: 4; not used

 			// offset: 5; size: 2; size of the following subexpression

@@ -5035,16 +5042,17 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 			$size = 7 + $subSize;

 			$data = $this->_getFormulaFromData(substr($formulaData, 7, $subSize));

 			break;

-		case 0x29:

+		case 0x29:	//	Variable reference sub-expression

 		case 0x49:

+		case 0x69:

 			$name = 'tMemFunc';

-			// offset: 1; size: 2; size of the following subexpression

+			// offset: 1; size: 2; size of the following sub-expression

 			$subSize = $this->_GetInt2d($formulaData, 1);

 			$size = 3 + $subSize;

 			$data = $this->_getFormulaFromData(substr($formulaData, 3, $subSize));

 			break;

 

-		case 0x2C: // Relative reference, used in shared formulas and some other places

+		case 0x2C: // Relative 2d cell reference reference, used in shared formulas and some other places

 		case 0x4C:

 		case 0x6C:

 			$name = 'tRefN';

@@ -5052,7 +5060,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 			$data = $this->_readBIFF8CellAddressB(substr($formulaData, 1, 4), $baseCell);

 			break;

 

-		case 0x2D:

+		case 0x2D:	//	Relative 2d range reference

 		case 0x4D:

 		case 0x6D:

 			$name = 'tAreaN';

@@ -5060,7 +5068,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 			$data = $this->_readBIFF8CellRangeAddressB(substr($formulaData, 1, 8), $baseCell);

 			break;

 

-		case 0x39:

+		case 0x39:	//	External name

 		case 0x59:

 		case 0x79:

 			$name = 'tNameX';

@@ -5073,8 +5081,9 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 			// offset: 5; size: 2; not used

 			break;

 

-		case 0x3A: // 3d reference to cell

+		case 0x3A:	//	3d reference to cell

 		case 0x5A:

+		case 0x7A:

 			$name = 'tRef3d';

 			$size = 7;

 

@@ -5085,15 +5094,15 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 				$cellAddress = $this->_readBIFF8CellAddress(substr($formulaData, 3, 4));

 

 				$data = "$sheetRange!$cellAddress";

-

 			} catch (Exception $e) {

 				// deleted sheet reference

 				$data = '#REF!';

 			}

 

 			break;

-		case 0x3B: // 3d reference to cell range

+		case 0x3B:	//	3d reference to cell range

 		case 0x5B:

+		case 0x7B:

 			$name = 'tArea3d';

 			$size = 11;

 

@@ -5104,15 +5113,13 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
 				$cellRangeAddress = $this->_readBIFF8CellRangeAddress(substr($formulaData, 3, 8));

 

 				$data = "$sheetRange!$cellRangeAddress";

-

 			} catch (Exception $e) {

 				// deleted sheet reference

 				$data = '#REF!';

-

 			}

 

 			break;

-		// case 0x39: // don't know how to deal with

+		// Unknown cases	// don't know how to deal with

 		default:

 			throw new Exception('Unrecognized token ' . sprintf('%02X', $id) . ' in formula');

 			break;

diff --git a/libraries/PHPExcel/PHPExcel/Reader/Excel5/Escher.php b/libraries/PHPExcel/PHPExcel/Reader/Excel5/Escher.php
index 0418dd7..b7c67e9 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/Excel5/Escher.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/Excel5/Escher.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Reader_Excel5
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 /**
diff --git a/libraries/PHPExcel/PHPExcel/Reader/IReadFilter.php b/libraries/PHPExcel/PHPExcel/Reader/IReadFilter.php
index c397d56..00fa2e8 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/IReadFilter.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/IReadFilter.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Reader
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Reader/IReader.php b/libraries/PHPExcel/PHPExcel/Reader/IReader.php
index ef5beac..e1cdc43 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/IReader.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/IReader.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Reader
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Reader/OOCalc.php b/libraries/PHPExcel/PHPExcel/Reader/OOCalc.php
index 8a1407a..a1ddf91 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/OOCalc.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/OOCalc.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Reader
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -242,6 +242,9 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
 			throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
 		}
 
+		$timezoneObj = new DateTimeZone('Europe/London');
+		$GMT = new DateTimeZone('UTC');
+
 		$zip = new ZipArchive;
 		if ($zip->open($pFilename) === true) {
 //			echo '<h1>Meta Information</h1>';
@@ -338,6 +341,11 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
 					foreach($worksheetData as $key => $rowData) {
 //						echo '<b>'.$key.'</b><br />';
 						switch ($key) {
+							case 'table-header-rows':
+								foreach ($rowData as $key=>$cellData) {
+									$rowData = $cellData;
+									break;
+								}
 							case 'table-row' :
 								$columnID = 'A';
 								foreach($rowData as $key => $cellData) {
@@ -387,7 +395,8 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
 													break;
 											case 'date' :
 													$type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
-													$dateObj = date_create($cellDataOfficeAttributes['date-value']);
+												    $dateObj = new DateTime($cellDataOfficeAttributes['date-value'], $GMT);
+													$dateObj->setTimeZone($timezoneObj);
 													list($year,$month,$day,$hour,$minute,$second) = explode(' ',$dateObj->format('Y m d H i s'));
 													$dataValue = PHPExcel_Shared_Date::FormattedPHPToExcel($year,$month,$day,$hour,$minute,$second);
 													if ($dataValue != floor($dataValue)) {
@@ -418,7 +427,7 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
 											if (($key % 2) == 0) {
 												$value = preg_replace('/\[\.(.*):\.(.*)\]/Ui','$1:$2',$value);
 												$value = preg_replace('/\[\.(.*)\]/Ui','$1',$value);
-												$value = PHPExcel_Calculation::_translateSeparator(';',',',$value);
+												$value = PHPExcel_Calculation::_translateSeparator(';',',',$value,$inBraces);
 											}
 										}
 										unset($value);
diff --git a/libraries/PHPExcel/PHPExcel/Reader/SYLK.php b/libraries/PHPExcel/PHPExcel/Reader/SYLK.php
index ec8a4d4..790aa2f 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/SYLK.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/SYLK.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Reader
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Reader/Serialized.php b/libraries/PHPExcel/PHPExcel/Reader/Serialized.php
index 88f2892..04b14f2 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/Serialized.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/Serialized.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Reader
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/ReferenceHelper.php b/libraries/PHPExcel/PHPExcel/ReferenceHelper.php
index cb9673c..7a37ed0 100644
--- a/libraries/PHPExcel/PHPExcel/ReferenceHelper.php
+++ b/libraries/PHPExcel/PHPExcel/ReferenceHelper.php
@@ -22,7 +22,7 @@
  * @package	PHPExcel
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license	http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version	1.7.3c, 2010-06-01
+ * @version	1.7.4, 2010-08-26
  */
 
 
@@ -35,6 +35,13 @@
  */
 class PHPExcel_ReferenceHelper
 {
+	/**	Constants				*/
+	/**	Regular Expressions		*/
+	const REFHELPER_REGEXP_CELLREF		= '((\w*|\'[^!]*\')!)?(?<![:a-z\$])(\$?[a-z]{1,3}\$?\d+)(?=[^:!\d\'])';
+	const REFHELPER_REGEXP_CELLRANGE	= '((\w*|\'[^!]*\')!)?(\$?[a-z]{1,3}\$?\d+):(\$?[a-z]{1,3}\$?\d+)';
+	const REFHELPER_REGEXP_ROWRANGE		= '((\w*|\'[^!]*\')!)?(\$?\d+):(\$?\d+)';
+	const REFHELPER_REGEXP_COLRANGE		= '((\w*|\'[^!]*\')!)?(\$?[a-z]{1,3}):(\$?[a-z]{1,3})';
+
 	/**
 	 * Instance of this class
 	 *
@@ -119,10 +126,8 @@ class PHPExcel_ReferenceHelper
 			$newCoordinates = PHPExcel_Cell::stringFromColumnIndex( PHPExcel_Cell::columnIndexFromString($cell->getColumn()) - 1 + $pNumCols ) . ($cell->getRow() + $pNumRows);
 
 			// Should the cell be updated? Move value and cellXf index from one cell to another.
-			if (
-					(PHPExcel_Cell::columnIndexFromString( $cell->getColumn() ) >= PHPExcel_Cell::columnIndexFromString($beforeColumn)) &&
-					($cell->getRow() >= $beforeRow)
-				 ) {
+			if ((PHPExcel_Cell::columnIndexFromString( $cell->getColumn() ) >= PHPExcel_Cell::columnIndexFromString($beforeColumn)) &&
+				($cell->getRow() >= $beforeRow)) {
 
 				// Update cell styles
 				$pSheet->getCell($newCoordinates)->setXfIndex($cell->getXfIndex());
@@ -132,7 +137,7 @@ class PHPExcel_ReferenceHelper
 				if ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_FORMULA) {
 					// Formula should be adjusted
 					$pSheet->getCell($newCoordinates)
-						->setValue($this->updateFormulaReferences($cell->getValue(), $pBefore, $pNumCols, $pNumRows));
+						   ->setValue($this->updateFormulaReferences($cell->getValue(), $pBefore, $pNumCols, $pNumRows, $pSheet->getTitle()));
 				} else {
 					// Formula should not be adjusted
 					$pSheet->getCell($newCoordinates)->setValue($cell->getValue());
@@ -340,43 +345,121 @@ class PHPExcel_ReferenceHelper
 	 * @return	string	Updated formula
 	 * @throws	Exception
 	 */
-	public function updateFormulaReferences($pFormula = '', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0) {
-		// Parse formula into a tree of tokens
-		$tokenisedFormula = PHPExcel_Calculation::getInstance()->parseFormula($pFormula);
-
-		$newCellTokens = $cellTokens = array();
-		$adjustCount = 0;
-		//	Build the translation table of cell tokens
-		foreach($tokenisedFormula as $token) {
-			$token = $token['value'];
-			if (preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $token, $matches)) {
-				list($column,$row) = PHPExcel_Cell::coordinateFromString($token);
-				//	Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more
-				$column = PHPExcel_Cell::columnIndexFromString($column) + 100000;
-				$row += 10000000;
-				$cellIndex = $column.$row;
-				if (!isset($cellTokens[$cellIndex])) {
-					$newReference = $this->updateCellReference($token, $pBefore, $pNumCols, $pNumRows);
-					if ($newReference !== $token) {
-						$newCellTokens[$cellIndex] = preg_quote($newReference);
-						$cellTokens[$cellIndex] = '/(?<![A-Z])'.preg_quote($token).'(?!\d)/i';
-						++$adjustCount;
-					}
-				}
-			}
-		}
-		if ($adjustCount == 0) {
-			return $pFormula;
-		}
-		krsort($cellTokens);
-		krsort($newCellTokens);
-
+	public function updateFormulaReferences($pFormula = '', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0, $sheetName = '') {
 		//	Update cell references in the formula
 		$formulaBlocks = explode('"',$pFormula);
 		foreach($formulaBlocks as $i => &$formulaBlock) {
-			//	Only count/replace in alternate array entries
+			//	Ignore blocks that were enclosed in quotes (even entries in the $formulaBlocks array after the explode)
 			if (($i % 2) == 0) {
-				$formulaBlock = preg_replace($cellTokens,$newCellTokens,$formulaBlock);
+				$adjustCount = 0;
+				$newCellTokens = $cellTokens = array();
+				//	Search for row ranges (e.g. 'Sheet1'!3:5 or 3:5) with or without $ absolutes (e.g. $3:5)
+				$matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_ROWRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER);
+				if ($matchCount > 0) {
+					foreach($matches as $match) {
+						$fromString = ($match[2] > '') ? $match[2].'!' : '';
+						$fromString .= $match[3].':'.$match[4];
+						$modified3 = substr($this->updateCellReference('$A'.$match[3],$pBefore,$pNumCols,$pNumRows),2);
+						$modified4 = substr($this->updateCellReference('$A'.$match[4],$pBefore,$pNumCols,$pNumRows),2);
+
+						if ($match[3].':'.$match[4] !== $modified3.':'.$modified4) {
+							if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) {
+								$toString = ($match[2] > '') ? $match[2].'!' : '';
+								$toString .= $modified3.':'.$modified4;
+								//	Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more
+								$column = 100000;
+								$row = 10000000+trim($match[3],'$');
+								$cellIndex = $column.$row;
+
+								$newCellTokens[$cellIndex] = preg_quote($toString);
+								$cellTokens[$cellIndex] = '/(?<!\d)'.preg_quote($fromString).'(?!\d)/i';
+								++$adjustCount;
+							}
+						}
+					}
+				}
+				//	Search for column ranges (e.g. 'Sheet1'!C:E or C:E) with or without $ absolutes (e.g. $C:E)
+				$matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_COLRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER);
+				if ($matchCount > 0) {
+					foreach($matches as $match) {
+						$fromString = ($match[2] > '') ? $match[2].'!' : '';
+						$fromString .= $match[3].':'.$match[4];
+						$modified3 = substr($this->updateCellReference($match[3].'$1',$pBefore,$pNumCols,$pNumRows),0,-2);
+						$modified4 = substr($this->updateCellReference($match[4].'$1',$pBefore,$pNumCols,$pNumRows),0,-2);
+
+						if ($match[3].':'.$match[4] !== $modified3.':'.$modified4) {
+							if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) {
+								$toString = ($match[2] > '') ? $match[2].'!' : '';
+								$toString .= $modified3.':'.$modified4;
+								//	Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more
+								$column = PHPExcel_Cell::columnIndexFromString(trim($match[3],'$')) + 100000;
+								$row = 10000000;
+								$cellIndex = $column.$row;
+
+								$newCellTokens[$cellIndex] = preg_quote($toString);
+								$cellTokens[$cellIndex] = '/(?<![A-Z])'.preg_quote($fromString).'(?![A-Z])/i';
+								++$adjustCount;
+							}
+						}
+					}
+				}
+				//	Search for cell ranges (e.g. 'Sheet1'!A3:C5 or A3:C5) with or without $ absolutes (e.g. $A1:C$5)
+				$matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_CELLRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER);
+				if ($matchCount > 0) {
+					foreach($matches as $match) {
+						$fromString = ($match[2] > '') ? $match[2].'!' : '';
+						$fromString .= $match[3].':'.$match[4];
+						$modified3 = $this->updateCellReference($match[3],$pBefore,$pNumCols,$pNumRows);
+						$modified4 = $this->updateCellReference($match[4],$pBefore,$pNumCols,$pNumRows);
+
+						if ($match[3].$match[4] !== $modified3.$modified4) {
+							if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) {
+								$toString = ($match[2] > '') ? $match[2].'!' : '';
+								$toString .= $modified3.':'.$modified4;
+								list($column,$row) = PHPExcel_Cell::coordinateFromString($match[3]);
+								//	Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more
+								$column = PHPExcel_Cell::columnIndexFromString(trim($column,'$')) + 100000;
+								$row = trim($row,'$') + 10000000;
+								$cellIndex = $column.$row;
+
+								$newCellTokens[$cellIndex] = preg_quote($toString);
+								$cellTokens[$cellIndex] = '/(?<![A-Z])'.preg_quote($fromString).'(?!\d)/i';
+								++$adjustCount;
+							}
+						}
+					}
+				}
+				//	Search for cell references (e.g. 'Sheet1'!A3 or C5) with or without $ absolutes (e.g. $A1 or C$5)
+				$matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_CELLREF.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER);
+				if ($matchCount > 0) {
+					foreach($matches as $match) {
+						$fromString = ($match[2] > '') ? $match[2].'!' : '';
+						$fromString .= $match[3];
+						$modified3 = $this->updateCellReference($match[3],$pBefore,$pNumCols,$pNumRows);
+
+						if ($match[3] !== $modified3) {
+							if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) {
+								$toString = ($match[2] > '') ? $match[2].'!' : '';
+								$toString .= $modified3;
+								list($column,$row) = PHPExcel_Cell::coordinateFromString($match[3]);
+								//	Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more
+								$column = PHPExcel_Cell::columnIndexFromString(trim($column,'$')) + 100000;
+								$row = trim($row,'$') + 10000000;
+								$cellIndex = $column.$row;
+
+								$newCellTokens[$cellIndex] = preg_quote($toString);
+								$cellTokens[$cellIndex] = '/(?<![A-Z])'.preg_quote($fromString).'(?!\d)/i';
+								++$adjustCount;
+							}
+						}
+					}
+				}
+				if ($adjustCount > 0) {
+					krsort($cellTokens);
+					krsort($newCellTokens);
+					//	Update cell references in the formula
+					$formulaBlock = str_replace('\\','',preg_replace($cellTokens,$newCellTokens,$formulaBlock));
+				}
 			}
 		}
 		unset($formulaBlock);
diff --git a/libraries/PHPExcel/PHPExcel/RichText.php b/libraries/PHPExcel/PHPExcel/RichText.php
index c938c62..588e643 100644
--- a/libraries/PHPExcel/PHPExcel/RichText.php
+++ b/libraries/PHPExcel/PHPExcel/RichText.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_RichText
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/RichText/ITextElement.php b/libraries/PHPExcel/PHPExcel/RichText/ITextElement.php
index 613028f..3f1aa7a 100644
--- a/libraries/PHPExcel/PHPExcel/RichText/ITextElement.php
+++ b/libraries/PHPExcel/PHPExcel/RichText/ITextElement.php
@@ -20,7 +20,7 @@
  * @package    PHPExcel_RichText
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/RichText/Run.php b/libraries/PHPExcel/PHPExcel/RichText/Run.php
index 209af21..aac7676 100644
--- a/libraries/PHPExcel/PHPExcel/RichText/Run.php
+++ b/libraries/PHPExcel/PHPExcel/RichText/Run.php
@@ -20,7 +20,7 @@
  * @package    PHPExcel_RichText
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/RichText/TextElement.php b/libraries/PHPExcel/PHPExcel/RichText/TextElement.php
index 3a24482..f5ce8e0 100644
--- a/libraries/PHPExcel/PHPExcel/RichText/TextElement.php
+++ b/libraries/PHPExcel/PHPExcel/RichText/TextElement.php
@@ -20,7 +20,7 @@
  * @package    PHPExcel_RichText
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Settings.php b/libraries/PHPExcel/PHPExcel/Settings.php
index 7a1d57e..52d7880 100644
--- a/libraries/PHPExcel/PHPExcel/Settings.php
+++ b/libraries/PHPExcel/PHPExcel/Settings.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Settings
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 /** PHPExcel root directory */
diff --git a/libraries/PHPExcel/PHPExcel/Shared/CodePage.php b/libraries/PHPExcel/PHPExcel/Shared/CodePage.php
index 10f82e4..f209838 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/CodePage.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/CodePage.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Date.php b/libraries/PHPExcel/PHPExcel/Shared/Date.php
index c45c23f..334e8df 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Date.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Date.php
@@ -23,7 +23,7 @@
  * @package	PHPExcel_Shared
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license	http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version	1.7.3c, 2010-06-01
+ * @version	1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Drawing.php b/libraries/PHPExcel/PHPExcel/Shared/Drawing.php
index a89c94e..a24f963 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Drawing.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Drawing.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher.php b/libraries/PHPExcel/PHPExcel/Shared/Escher.php
index c230d99..11c19b2 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Escher
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 /**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer.php
index c78485b..6cbd2f0 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Escher
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 /**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php
index c659fd5..919cf1a 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Escher
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 /**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php
index 83e3193..454b7ee 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Escher
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 /**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer.php
index 59d34cf..61eab5d 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Escher
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 /**
@@ -70,6 +70,13 @@ class PHPExcel_Shared_Escher_DggContainer
 	private $_OPT = array();
 
 	/**
+	 * Array of identifier clusters containg information about the maximum shape identifiers
+	 *
+	 * @var array
+	 */
+	private $_IDCLs = array();
+
+	/**
 	 * Get maximum shape index of all shapes in all drawings (plus one)
 	 *
 	 * @return int
@@ -174,4 +181,23 @@ class PHPExcel_Shared_Escher_DggContainer
 		return null;
 	}
 
+	/**
+	 * Get identifier clusters
+	 *
+	 * @return array
+	 */
+	public function getIDCLs()
+	{
+		return $this->_IDCLs;
+	}
+
+	/**
+	 * Set identifier clusters. array(<drawingId> => <max shape id>, ...)
+	 *
+	 * @param array $pValue
+	 */
+	public function setIDCLs($pValue)
+	{
+		$this->_IDCLs = $pValue;
+	}
 }
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php
index 9292f2d..6040fb2 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Escher
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 /**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php
index 820e703..00ccb6d 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Escher
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 /**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php
index 35003dd..7f13632 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Escher
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 /**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Excel5.php b/libraries/PHPExcel/PHPExcel/Shared/Excel5.php
index 05af633..6469c52 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Excel5.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Excel5.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 /**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/File.php b/libraries/PHPExcel/PHPExcel/Shared/File.php
index dc2c3fd..23169ce 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/File.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/File.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -75,7 +75,9 @@ class PHPExcel_Shared_File
 		$returnValue = '';
 
 		// Try using realpath()
-		$returnValue = realpath($pFilename);
+		if (file_exists($pFilename)) {
+			$returnValue = realpath($pFilename);
+		}
 
 		// Found something?
 		if ($returnValue == '' || is_null($returnValue)) {
@@ -107,14 +109,14 @@ class PHPExcel_Shared_File
 		// http://php.net/manual/en/function.sys-get-temp-dir.php#94119
 
 		if ( !function_exists('sys_get_temp_dir')) {
-			if( $temp = getenv('TMP') ) {
-				return realpath($temp);
+			if ($temp = getenv('TMP') ) {
+				if (file_exists($temp)) { return realpath($temp); }
 			}
-			if( $temp = getenv('TEMP') ) {
-				return realpath($temp);
+			if ($temp = getenv('TEMP') ) {
+				if (file_exists($temp)) { return realpath($temp); }
 			}
-			if( $temp = getenv('TMPDIR') ) {
-				return realpath($temp);
+			if ($temp = getenv('TMPDIR') ) {
+				if (file_exists($temp)) { return realpath($temp); }
 			}
 
 			// trick for creating a file in system's temporary dir
@@ -126,10 +128,11 @@ class PHPExcel_Shared_File
 			}
 
 			return null;
-
 		}
 
 		// use ordinary built-in PHP function
+		//	There should be no problem with the 5.2.4 Suhosin realpath() bug, because this line should only
+		//		be called if we're running 5.2.1 or earlier
 		return realpath(sys_get_temp_dir());
 	}
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Font.php b/libraries/PHPExcel/PHPExcel/Shared/Font.php
index 1759e87..24d78be 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Font.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Font.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/OLE/ChainedBlockStream.php b/libraries/PHPExcel/PHPExcel/Shared/OLE/ChainedBlockStream.php
index 7b6f845..af757d0 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/OLE/ChainedBlockStream.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/OLE/ChainedBlockStream.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_OLE
  * @copyright  Copyright (c) 2006 - 2007 Christian Schmidt
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version 1.7.3c, 2010-06-01
+ * @version 1.7.4, 2010-08-26
  */
 
 /**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/OLERead.php b/libraries/PHPExcel/PHPExcel/Shared/OLERead.php
index b747e13..6aebbf0 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/OLERead.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/OLERead.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 define('IDENTIFIER_OLE', pack('CCCCCCCC', 0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1));
diff --git a/libraries/PHPExcel/PHPExcel/Shared/PasswordHasher.php b/libraries/PHPExcel/PHPExcel/Shared/PasswordHasher.php
index 6b7b312..7fb4934 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/PasswordHasher.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/PasswordHasher.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/String.php b/libraries/PHPExcel/PHPExcel/Shared/String.php
index 32766df..c033b9a 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/String.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/String.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -507,7 +507,7 @@ class PHPExcel_Shared_String
 	 * @author  Rasmus Andersson {@link http://rasmusandersson.se/}
 	 * @author vadik56
 	 */
-	function utf16_decode( $str, $bom_be=true ) {
+	public static function utf16_decode( $str, $bom_be=true ) {
 		if( strlen($str) < 2 ) return $str;
 		$c0 = ord($str{0});
 		$c1 = ord($str{1});
diff --git a/libraries/PHPExcel/PHPExcel/Shared/XMLWriter.php b/libraries/PHPExcel/PHPExcel/Shared/XMLWriter.php
index 223d3dd..8514847 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/XMLWriter.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/XMLWriter.php
@@ -22,13 +22,18 @@
  * @package    PHPExcel_Shared
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 if (!defined('DATE_W3C')) {
   define('DATE_W3C', 'Y-m-d\TH:i:sP');
 }
 
+if (!defined('DEBUGMODE_ENABLED')) {
+  define('DEBUGMODE_ENABLED', false);
+}
+
+
 /**
  * PHPExcel_Shared_XMLWriter
  *
@@ -80,7 +85,9 @@ class PHPExcel_Shared_XMLWriter {
     	}
 
     	// Set default values
-    	$this->_xmlWriter->setIndent(true);
+		if (DEBUGMODE_ENABLED) {
+	    	$this->_xmlWriter->setIndent(true);
+	    }
     }
 
     /**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/ZipStreamWrapper.php b/libraries/PHPExcel/PHPExcel/Shared/ZipStreamWrapper.php
index 77661c6..b79bfc8 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/ZipStreamWrapper.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/ZipStreamWrapper.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/bestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/bestFitClass.php
index 27fecd5..28fe725 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/bestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/bestFitClass.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Best_Fit
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/exponentialBestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/exponentialBestFitClass.php
index a0717ea..0ff98cc 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/exponentialBestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/exponentialBestFitClass.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Best_Fit
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/linearBestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/linearBestFitClass.php
index 99f358c..71219a0 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/linearBestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/linearBestFitClass.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Best_Fit
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/logarithmicBestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/logarithmicBestFitClass.php
index a59c879..03c7dc3 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/logarithmicBestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/logarithmicBestFitClass.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Best_Fit
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/polynomialBestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/polynomialBestFitClass.php
index 02ff0a5..6947c11 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/polynomialBestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/polynomialBestFitClass.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Best_Fit
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/powerBestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/powerBestFitClass.php
index 9328fcb..6d2281c 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/powerBestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/powerBestFitClass.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Shared_Best_Fit
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Style.php b/libraries/PHPExcel/PHPExcel/Style.php
index d0cbcb0..3e84f9f 100644
--- a/libraries/PHPExcel/PHPExcel/Style.php
+++ b/libraries/PHPExcel/PHPExcel/Style.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Style
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -675,7 +675,7 @@ class PHPExcel_Style implements PHPExcel_IComparable
 	public function __clone() {
 		$vars = get_object_vars($this);
 		foreach ($vars as $key => $value) {
-			if (is_object($value)) {
+			if ((is_object($value)) && ($key != '_parent')) {
 				$this->$key = clone $value;
 			} else {
 				$this->$key = $value;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Alignment.php b/libraries/PHPExcel/PHPExcel/Style/Alignment.php
index 412c603..15b6c87 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Alignment.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Alignment.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Style
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -479,7 +479,7 @@ class PHPExcel_Style_Alignment implements PHPExcel_IComparable
 	public function __clone() {
 		$vars = get_object_vars($this);
 		foreach ($vars as $key => $value) {
-			if (is_object($value)) {
+			if ((is_object($value)) && ($key != '_parent')) {
 				$this->$key = clone $value;
 			} else {
 				$this->$key = $value;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Border.php b/libraries/PHPExcel/PHPExcel/Style/Border.php
index 1af31d6..166ccb2 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Border.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Border.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Style
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -372,7 +372,7 @@ class PHPExcel_Style_Border implements PHPExcel_IComparable
 	public function __clone() {
 		$vars = get_object_vars($this);
 		foreach ($vars as $key => $value) {
-			if (is_object($value)) {
+			if ((is_object($value)) && ($key != '_parent')) {
 				$this->$key = clone $value;
 			} else {
 				$this->$key = $value;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Borders.php b/libraries/PHPExcel/PHPExcel/Style/Borders.php
index ffd66af..dc32c50 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Borders.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Borders.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Style
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -489,7 +489,7 @@ class PHPExcel_Style_Borders implements PHPExcel_IComparable
 	public function __clone() {
 		$vars = get_object_vars($this);
 		foreach ($vars as $key => $value) {
-			if (is_object($value)) {
+			if ((is_object($value)) && ($key != '_parent')) {
 				$this->$key = clone $value;
 			} else {
 				$this->$key = $value;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Color.php b/libraries/PHPExcel/PHPExcel/Style/Color.php
index 8a25af0..9734d62 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Color.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Color.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Style
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -398,7 +398,7 @@ class PHPExcel_Style_Color implements PHPExcel_IComparable
 	public function __clone() {
 		$vars = get_object_vars($this);
 		foreach ($vars as $key => $value) {
-			if (is_object($value)) {
+			if ((is_object($value)) && ($key != '_parent')) {
 				$this->$key = clone $value;
 			} else {
 				$this->$key = $value;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Conditional.php b/libraries/PHPExcel/PHPExcel/Style/Conditional.php
index 8ec5f92..4602b53 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Conditional.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Conditional.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Style
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Style/Fill.php b/libraries/PHPExcel/PHPExcel/Style/Fill.php
index 3ebf380..1357e47 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Fill.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Fill.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Style
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -391,7 +391,7 @@ class PHPExcel_Style_Fill implements PHPExcel_IComparable
 	public function __clone() {
 		$vars = get_object_vars($this);
 		foreach ($vars as $key => $value) {
-			if (is_object($value)) {
+			if ((is_object($value)) && ($key != '_parent')) {
 				$this->$key = clone $value;
 			} else {
 				$this->$key = $value;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Font.php b/libraries/PHPExcel/PHPExcel/Style/Font.php
index de39cf2..b58dbf5 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Font.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Font.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Style
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -609,7 +609,7 @@ class PHPExcel_Style_Font implements PHPExcel_IComparable
 	public function __clone() {
 		$vars = get_object_vars($this);
 		foreach ($vars as $key => $value) {
-			if (is_object($value)) {
+			if ((is_object($value)) && ($key != '_parent')) {
 				$this->$key = clone $value;
 			} else {
 				$this->$key = $value;
diff --git a/libraries/PHPExcel/PHPExcel/Style/NumberFormat.php b/libraries/PHPExcel/PHPExcel/Style/NumberFormat.php
index 9ff1a97..0f0dcdc 100644
--- a/libraries/PHPExcel/PHPExcel/Style/NumberFormat.php
+++ b/libraries/PHPExcel/PHPExcel/Style/NumberFormat.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Style
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -443,7 +443,7 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
 	{
 		$vars = get_object_vars($this);
 		foreach ($vars as $key => $value) {
-			if (is_object($value)) {
+			if ((is_object($value)) && ($key != '_parent')) {
 				$this->$key = clone $value;
 			} else {
 				$this->$key = $value;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Protection.php b/libraries/PHPExcel/PHPExcel/Style/Protection.php
index 1c70702..29832da 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Protection.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Protection.php
@@ -271,7 +271,7 @@ class PHPExcel_Style_Protection implements PHPExcel_IComparable
 	public function __clone() {
 		$vars = get_object_vars($this);
 		foreach ($vars as $key => $value) {
-			if (is_object($value)) {
+			if ((is_object($value)) && ($key != '_parent')) {
 				$this->$key = clone $value;
 			} else {
 				$this->$key = $value;
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet.php b/libraries/PHPExcel/PHPExcel/Worksheet.php
index dc401fd..fb7cc0a 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -2180,9 +2180,8 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
 		$highestRow    = 1;
 
     	// Find cells that can be cleaned
-    	foreach ($this->_cellCollection->getCellList() as $coordinate) {
-			preg_match('/^(\w+)(\d+)$/U',$coordinate,$matches);
-			list(,$col,$row) = $matches;
+    	foreach ($this->_cellCollection->getCellList() as $coord) {
+			list($col,$row) = sscanf($coord,'%[A-Z]%d');
 			$column = PHPExcel_Cell::columnIndexFromString($col);
 
 			// Determine highest column and row
@@ -2468,7 +2467,13 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
 			}
 
 			if (is_object($val) || (is_array($val))) {
-				$this->{$key} = unserialize(serialize($val));
+				if ($key == '_cellCollection') {
+					$newCollection = clone $this->_cellCollection;
+					$newCollection->copyCellCollection($this);
+					$this->_cellCollection = $newCollection;
+				} else {
+					$this->{$key} = unserialize(serialize($val));
+				}
 			}
 		}
 	}
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/BaseDrawing.php b/libraries/PHPExcel/PHPExcel/Worksheet/BaseDrawing.php
index e2c65c3..511643b 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/BaseDrawing.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/BaseDrawing.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/CellIterator.php b/libraries/PHPExcel/PHPExcel/Worksheet/CellIterator.php
index 4a6589f..630e089 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/CellIterator.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/CellIterator.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/ColumnDimension.php b/libraries/PHPExcel/PHPExcel/Worksheet/ColumnDimension.php
index f42ef31..30b0035 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/ColumnDimension.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/ColumnDimension.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/Drawing.php b/libraries/PHPExcel/PHPExcel/Worksheet/Drawing.php
index 7d362c0..537f9f3 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/Drawing.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/Drawing.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet_Drawing
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/Drawing/Shadow.php b/libraries/PHPExcel/PHPExcel/Worksheet/Drawing/Shadow.php
index f83c26d..053ab0d 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/Drawing/Shadow.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/Drawing/Shadow.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet_Drawing
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooter.php b/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooter.php
index 4e39339..9d2708d 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooter.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooter.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooterDrawing.php b/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooterDrawing.php
index 9f2b25d..f614261 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooterDrawing.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooterDrawing.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/MemoryDrawing.php b/libraries/PHPExcel/PHPExcel/Worksheet/MemoryDrawing.php
index 0bd37f5..a43e6a9 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/MemoryDrawing.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/MemoryDrawing.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/PageMargins.php b/libraries/PHPExcel/PHPExcel/Worksheet/PageMargins.php
index 6fc8f1a..155b976 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/PageMargins.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/PageMargins.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/PageSetup.php b/libraries/PHPExcel/PHPExcel/Worksheet/PageSetup.php
index ffbd573..8e615f7 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/PageSetup.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/PageSetup.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -179,6 +179,11 @@ class PHPExcel_Worksheet_PageSetup
 	const ORIENTATION_LANDSCAPE	= 'landscape';
 	const ORIENTATION_PORTRAIT	= 'portrait';
 
+	/* Print Range Set Method */
+	const SETPRINTRANGE_OVERWRITE	= 'O';
+	const SETPRINTRANGE_INSERT		= 'I';
+
+
 	/**
 	 * Paper size
 	 *
@@ -261,7 +266,7 @@ class PHPExcel_Worksheet_PageSetup
 	 * @var string
 	 */
 	private $_printArea = null;
-	
+
 	/**
 	 * First page number
 	 *
@@ -570,55 +575,197 @@ class PHPExcel_Worksheet_PageSetup
 	}
 
 	/**
-	 * Get print area
+	 *	Get print area
 	 *
-	 * @return string
+	 *	@param	int		$index	Identifier for a specific print area range if several ranges have been set
+	 *							Default behaviour, or a index value of 0, will return all ranges as a comma-separated string
+	 *							Otherwise, the specific range identified by the value of $index will be returned
+	 *							Print areas are numbered from 1
+	 *	@throws	Exception
+	 *	@return	string
 	 */
-	public function getPrintArea() {
-		return $this->_printArea;
+	public function getPrintArea($index = 0) {
+		if ($index == 0) {
+			return $this->_printArea;
+		}
+		$printAreas = explode(',',$this->_printArea);
+		if (isset($printAreas[$index-1])) {
+			return $printAreas[$index-1];
+		}
+		throw new Exception("Requested Print Area does not exist");
 	}
 
 	/**
-	 * Is print area set?
+	 *	Is print area set?
 	 *
-	 * @return boolean
+	 *	@param	int		$index	Identifier for a specific print area range if several ranges have been set
+	 *							Default behaviour, or an index value of 0, will identify whether any print range is set
+	 *							Otherwise, existence of the range identified by the value of $index will be returned
+	 *							Print areas are numbered from 1
+	 *	@return	boolean
 	 */
-	public function isPrintAreaSet() {
-		return !is_null($this->_printArea);
+	public function isPrintAreaSet($index = 0) {
+		if ($index == 0) {
+			return !is_null($this->_printArea);
+		}
+		$printAreas = explode(',',$this->_printArea);
+		return isset($printAreas[$index-1]);
 	}
 
 	/**
-	 * Set print area. E.g. 'A1:D10' or 'A1:D10,G5:M20'
+	 *	Clear a print area
 	 *
-	 * @param string $value
-	 * @throws Exception
-	 * @return PHPExcel_Worksheet_PageSetup
+	 *	@param	int		$index	Identifier for a specific print area range if several ranges have been set
+	 *							Default behaviour, or an index value of 0, will clear all print ranges that are set
+	 *							Otherwise, the range identified by the value of $index will be removed from the series
+	 *							Print areas are numbered from 1
+	 *	@return	PHPExcel_Worksheet_PageSetup
 	 */
-	public function setPrintArea($value) {
-    	if (strpos($value,':') === false) {
-    		throw new Exception('Cell coordinate must be a range of cells.');
-    	} elseif (strpos($value,'$') !== false) {
-    		throw new Exception('Cell coordinate must not be absolute.');
-    	} else {
-			$this->_printArea = strtoupper($value);
-    	}
+	public function clearPrintArea($index = 0) {
+		if ($index == 0) {
+			$this->_printArea = NULL;
+		} else {
+			$printAreas = explode(',',$this->_printArea);
+			if (isset($printAreas[$index-1])) {
+				unset($printAreas[$index-1]);
+				$this->_printArea = implode(',',$printAreas);
+			}
+		}
+
+    	return $this;
+	}
+
+	/**
+	 *	Set print area. e.g. 'A1:D10' or 'A1:D10,G5:M20'
+	 *
+	 *	@param	string	$value
+	 *	@param	int		$index	Identifier for a specific print area range allowing several ranges to be set
+	 *							When the method is "O"verwrite, then a positive integer index will overwrite that indexed
+	 *								entry in the print areas list; a negative index value will identify which entry to
+	 *								overwrite working bacward through the print area to the list, with the last entry as -1.
+	 *								Specifying an index value of 0, will overwrite <b>all</b> existing print ranges.
+	 *							When the method is "I"nsert, then a positive index will insert after that indexed entry in
+	 *								the print areas list, while a negative index will insert before the indexed entry.
+	 *								Specifying an index value of 0, will always append the new print range at the end of the
+	 *								list.
+	 *							Print areas are numbered from 1
+	 *	@param	string	$method	Determines the method used when setting multiple print areas
+	 *							Default behaviour, or the "O" method, overwrites existing print area
+	 *							The "I" method, inserts the new print area before any specified index, or at the end of the list
+	 *	@throws	Exception
+	 *	@return	PHPExcel_Worksheet_PageSetup
+	 */
+	public function setPrintArea($value, $index = 0, $method = self::SETPRINTRANGE_OVERWRITE) {
+		if (strpos($value,'!') !== false) {
+			throw new Exception('Cell coordinate must not specify a worksheet.');
+		} elseif (strpos($value,':') === false) {
+			throw new Exception('Cell coordinate must be a range of cells.');
+		} elseif (strpos($value,'$') !== false) {
+			throw new Exception('Cell coordinate must not be absolute.');
+		}
+		$value = strtoupper($value);
+
+		if ($method == self::SETPRINTRANGE_OVERWRITE) {
+			if ($index == 0) {
+				$this->_printArea = $value;
+			} else {
+				$printAreas = explode(',',$this->_printArea);
+				if($index < 0) {
+					$index = count($printAreas) - abs($index) + 1;
+				}
+				if (($index <= 0) || ($index > count($printAreas))) {
+		    		throw new Exception('Invalid index for setting print range.');
+				}
+				$printAreas[$index-1] = $value;
+				$this->_printArea = implode(',',$printAreas);
+			}
+		} elseif($method == self::SETPRINTRANGE_INSERT) {
+			if ($index == 0) {
+				$this->_printArea .= ($this->_printArea == '') ? $value : ','.$value;
+			} else {
+				$printAreas = explode(',',$this->_printArea);
+				if($index < 0) {
+					$index = abs($index) - 1;
+				}
+				if ($index > count($printAreas)) {
+		    		throw new Exception('Invalid index for setting print range.');
+				}
+				$printAreas = array_merge(array_slice($printAreas,0,$index),array($value),array_slice($printAreas,$index));
+				$this->_printArea = implode(',',$printAreas);
+			}
+		} else {
+    		throw new Exception('Invalid method for setting print range.');
+		}
+
     	return $this;
 	}
 
 	/**
-	 * Set print area
+	 *	Add a new print area (e.g. 'A1:D10' or 'A1:D10,G5:M20') to the list of print areas
 	 *
-	 * @param int $column1		Column 1
-	 * @param int $row1			Row 1
-	 * @param int $column2		Column 2
-	 * @param int $row2			Row 2
-	 * @return PHPExcel_Worksheet_PageSetup
+	 *	@param	string	$value
+	 *	@param	int		$index	Identifier for a specific print area range allowing several ranges to be set
+	 *							A positive index will insert after that indexed entry in the print areas list, while a
+	 *								negative index will insert before the indexed entry.
+	 *								Specifying an index value of 0, will always append the new print range at the end of the
+	 *								list.
+	 *							Print areas are numbered from 1
+	 *	@throws	Exception
+	 *	@return	PHPExcel_Worksheet_PageSetup
 	 */
-    public function setPrintAreaByColumnAndRow($column1, $row1, $column2, $row2)
+	public function addPrintArea($value, $index = -1) {
+		return $this->setPrintArea($value, $index, self::SETPRINTRANGE_INSERT);
+	}
+
+	/**
+	 *	Set print area
+	 *
+	 *	@param	int		$column1	Column 1
+	 *	@param	int		$row1		Row 1
+	 *	@param	int		$column2	Column 2
+	 *	@param	int		$row2		Row 2
+	 *	@param	int		$index	Identifier for a specific print area range allowing several ranges to be set
+	 *							When the method is "O"verwrite, then a positive integer index will overwrite that indexed
+	 *								entry in the print areas list; a negative index value will identify which entry to
+	 *								overwrite working bacward through the print area to the list, with the last entry as -1.
+	 *								Specifying an index value of 0, will overwrite <b>all</b> existing print ranges.
+	 *							When the method is "I"nsert, then a positive index will insert after that indexed entry in
+	 *								the print areas list, while a negative index will insert before the indexed entry.
+	 *								Specifying an index value of 0, will always append the new print range at the end of the
+	 *								list.
+	 *							Print areas are numbered from 1
+	 *	@param	string	$method	Determines the method used when setting multiple print areas
+	 *							Default behaviour, or the "O" method, overwrites existing print area
+	 *							The "I" method, inserts the new print area before any specified index, or at the end of the list
+	 *	@throws	Exception
+	 *	@return	PHPExcel_Worksheet_PageSetup
+	 */
+    public function setPrintAreaByColumnAndRow($column1, $row1, $column2, $row2, $index = 0, $method = self::SETPRINTRANGE_OVERWRITE)
     {
-    	return $this->setPrintArea(PHPExcel_Cell::stringFromColumnIndex($column1) . $row1 . ':' . PHPExcel_Cell::stringFromColumnIndex($column2) . $row2);
+    	return $this->setPrintArea(PHPExcel_Cell::stringFromColumnIndex($column1) . $row1 . ':' . PHPExcel_Cell::stringFromColumnIndex($column2) . $row2, $index, $method);
     }
-    
+
+	/**
+	 *	Add a new print area to the list of print areas
+	 *
+	 *	@param	int		$column1	Column 1
+	 *	@param	int		$row1		Row 1
+	 *	@param	int		$column2	Column 2
+	 *	@param	int		$row2		Row 2
+	 *	@param	int		$index		Identifier for a specific print area range allowing several ranges to be set
+	 *								A positive index will insert after that indexed entry in the print areas list, while a
+	 *									negative index will insert before the indexed entry.
+	 *									Specifying an index value of 0, will always append the new print range at the end of the
+	 *									list.
+	 *								Print areas are numbered from 1
+	 *	@throws	Exception
+	 *	@return	PHPExcel_Worksheet_PageSetup
+	 */
+    public function addPrintAreaByColumnAndRow($column1, $row1, $column2, $row2, $index = -1)
+    {
+    	return $this->setPrintArea(PHPExcel_Cell::stringFromColumnIndex($column1) . $row1 . ':' . PHPExcel_Cell::stringFromColumnIndex($column2) . $row2, $index, self::SETPRINTRANGE_INSERT);
+	}
+
 	/**
 	 * Get first page number
 	 *
@@ -627,7 +774,7 @@ class PHPExcel_Worksheet_PageSetup
     public function getFirstPageNumber() {
 		return $this->_firstPageNumber;
     }
-    
+
     /**
      * Set first page number
      *
@@ -638,7 +785,7 @@ class PHPExcel_Worksheet_PageSetup
 		$this->_firstPageNumber = $value;
 		return $this;
     }
-    
+
     /**
      * Reset first page number
      *
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/Protection.php b/libraries/PHPExcel/PHPExcel/Worksheet/Protection.php
index 0e7bc4f..f60a265 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/Protection.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/Protection.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/Row.php b/libraries/PHPExcel/PHPExcel/Worksheet/Row.php
index c5cb33a..7311721 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/Row.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/Row.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/RowDimension.php b/libraries/PHPExcel/PHPExcel/Worksheet/RowDimension.php
index 8b1277d..153024f 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/RowDimension.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/RowDimension.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/RowIterator.php b/libraries/PHPExcel/PHPExcel/Worksheet/RowIterator.php
index d21bd51..e0f91fc 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/RowIterator.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/RowIterator.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/SheetView.php b/libraries/PHPExcel/PHPExcel/Worksheet/SheetView.php
index c7e04ae..fdfe001 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/SheetView.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/SheetView.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Worksheet
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/WorksheetIterator.php b/libraries/PHPExcel/PHPExcel/WorksheetIterator.php
index f6f6a6f..87f8b29 100644
--- a/libraries/PHPExcel/PHPExcel/WorksheetIterator.php
+++ b/libraries/PHPExcel/PHPExcel/WorksheetIterator.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/CSV.php b/libraries/PHPExcel/PHPExcel/Writer/CSV.php
index 03e1a6e..765244d 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/CSV.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/CSV.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -106,6 +106,8 @@ class PHPExcel_Writer_CSV implements PHPExcel_Writer_IWriter {
 		// Fetch sheet
 		$sheet = $this->_phpExcel->getSheet($this->_sheetIndex);
 
+		$saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
+		PHPExcel_Calculation::getInstance()->writeDebugLog = false;
 		$saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType();
 		PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE);
 
@@ -132,6 +134,7 @@ class PHPExcel_Writer_CSV implements PHPExcel_Writer_IWriter {
 		fclose($fileHandle);
 
 		PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType);
+		PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
 	}
 
 	/**
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007.php
index 1963ab9..b9f7464 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel2007
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -201,6 +201,8 @@ class PHPExcel_Writer_Excel2007 implements PHPExcel_Writer_IWriter
 				}
 			}
 
+			$saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
+			PHPExcel_Calculation::getInstance()->writeDebugLog = false;
 			$saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType();
 			PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
 
@@ -331,6 +333,7 @@ class PHPExcel_Writer_Excel2007 implements PHPExcel_Writer_IWriter
 			}
 
 			PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType);
+			PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
 
 			// Close file
 			if ($objZip->close() === false) {
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Comments.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Comments.php
index ddb7958..3a6ad37 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Comments.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Comments.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel2007
  * @copyrigh   PHPExcel_Writer_Excel2007  cel2007/Comments.php  s.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Comments.php  ($column2) . $row2, $index, self::SETPRINTRANGE_INSERT);  ships");  translate  proxy 1.2.3.4:[br][kbd]1.2.3.4: HTTP_X_FORWARDED_FOR[/kbd]';  //to translate    //to translate  certain databases to be replicated. Please select the mode:';  //to translate  ) .';  ruchamianie pozwalasz. PierwszÄ… opcjÄ… jest liczba programów, których chcesz użyć, a drugÄ… sÄ… parametry programu. Jeżeli trzeci parametr jest ustawiony na 1 (jest to domyÅ›lna wartość), zostanie dokonana konwersja wyjÅ›cia poprzez użycie htmlspecialchars(). Jeżeli czwarty parametr zostaÅ‚ ustawiony na 1 (jest to domyÅ›lna wartość), zawartość komórki nie bÄ™dzie zawijana, tak że caÅ‚e wyjÅ›cie zostanie pokazane bez zmian formatu.';           'bºÿ         í1À‹›+          8e“Œ›+          ÖNÀ‹›+   .bºÿ         0ß@›+  Ã9À‹›+   ðÜŒ›+   ™pŒ›+   Ð@›+  ØÔ@›+  ¨Ù@›+  È´Á‹›+          He“Œ›+           'bºÿ         `%bºÿ  »NÀ‹›+  8e“Œ›+           'bºÿ         %bºÿ  »NÀ‹›+  (e“Œ›+           'bºÿ         À%bºÿ  »NÀ‹›+  e“Œ›+           'bºÿ         ð%bºÿ  »NÀ‹›+  	       ¨Þ@›+  Ã9À‹›+         ¨Ù@›+  p bºÿ          ŠèpŒ›+  ¶8À‹›+     ÿ  ØÔ@›+  &bºÿ          yèpŒ›+  ¶8À‹›+          Ð@›+  À&bºÿ          ZèpŒ›+  ¶8À‹›+  Ø”pŒ›+   ðÜŒ›+   ™pŒ›+   Ð@›+  ØôÜŒ›+  ØÔ@›+  ¨Ù@›+  È´Á‹›+          àÝnŒ›+          @(bºÿ         'bºÿ  »NÀ‹›+      )       *   -   .   0   3       5   6   7   8   :   <   =    .bºÿ  .bºÿ  p;Œ›+          `)bºÿ          í1À‹›+          S   T                  8ÿÜŒ›+  Ã9À‹›+  ØôÜŒ›+   ùÜŒ›+  È´Á‹›+          c   f           Õ_ at fÆS ]Œ›+  .bºÿ  p;Œ›+          `)bºÿ          0(bºÿ  »NÀ‹›+  øÒ êÓïs¨Ó,~9„×u]ÞÓ	4Q ÷U^Qʉ§ ¶uª¹ñìò*Ä“v .bºÿ  .bºÿ  H¾Œ›+          +bºÿ                .bºÿ  Ã9À‹›+         èDá‹›+  ð&bºÿ          ]Œ›+  ¶8À‹›+  èDá‹›+           .bºÿ          _.bºÿ  õÜá‹›+  .bºÿ  H¾Œ›+          +bºÿ         @)bºÿ  »NÀ‹›+  8¾Œ›+    t  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/ContentTypes.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/ContentTypes.php
index d27e386..84de96d 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/ContentTypes.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/ContentTypes.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel2007
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/DocProps.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/DocProps.php
index 68e0f04..21fc3a4 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/DocProps.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/DocProps.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel2007
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Drawing.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Drawing.php
index 670b835..f1551da 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Drawing.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Drawing.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel2007
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Rels.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Rels.php
index d133621..7ffdd6d 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Rels.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Rels.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel2007
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/StringTable.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/StringTable.php
index 8ab1c52..98a3c45 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/StringTable.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/StringTable.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel2007
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Style.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Style.php
index dd7621d..5354936 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Style.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Style.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel2007
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Theme.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Theme.php
index 9dbee16..e8ffe7b 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Theme.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Theme.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel2007
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Workbook.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Workbook.php
index 245fb87..d2c51fb 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Workbook.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Workbook.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel2007
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Worksheet.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Worksheet.php
index 411b42a..327e542 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Worksheet.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Worksheet.php
@@ -22,7 +22,7 @@
  * @package	PHPExcel_Writer_Excel2007
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license	http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version	1.7.3c, 2010-06-01
+ * @version	1.7.4, 2010-08-26
  */
 
 
@@ -1002,7 +1002,18 @@ class PHPExcel_Writer_Excel2007_Worksheet extends PHPExcel_Writer_Excel2007_Writ
 
 						break;
 					case 'f':			// Formula
-						$objWriter->writeElement('f', substr($pCell->getValue(), 1));
+						$attributes = $pCell->getFormulaAttributes();
+						if($attributes['t'] == 'array') {
+							$objWriter->startElement('f');
+							$objWriter->writeAttribute('t', 'array');
+							$objWriter->writeAttribute('ref', $pCell->getCoordinate());
+							$objWriter->writeAttribute('aca', '1');
+							$objWriter->writeAttribute('ca', '1');
+							$objWriter->text(substr($pCell->getValue(), 1));
+							$objWriter->endElement();
+						} else {
+							$objWriter->writeElement('f', substr($pCell->getValue(), 1));
+						}
 						if ($this->getParentWriter()->getOffice2003Compatibility() === false) {
 							if ($this->getParentWriter()->getPreCalculateFormulas()) {
 								$calculatedValue = $pCell->getCalculatedValue();
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/WriterPart.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/WriterPart.php
index c153237..97d56e1 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/WriterPart.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/WriterPart.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel2007
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5.php
index 0bb5571..4d69d91 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel5
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license	http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version	1.7.3c, 2010-06-01
+ * @version	1.7.4, 2010-08-26
  */
 
 
@@ -91,6 +91,13 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
 	 */
 	private $_parser;
 
+	/**
+	 * Identifier clusters for drawings. Used in MSODRAWINGGROUP record.
+	 *
+	 * @var array
+	 */
+	private $_IDCLs;
+
 
 	/**
 	 * Create a new PHPExcel_Writer_Excel5
@@ -120,6 +127,8 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
 		// garbage collect
 		$this->_phpExcel->garbageCollect();
 
+		$saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
+		PHPExcel_Calculation::getInstance()->writeDebugLog = false;
 		$saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType();
 		PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
 
@@ -130,6 +139,21 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
 		$this->_writerWorkbook = new PHPExcel_Writer_Excel5_Workbook($this->_phpExcel, $this->_BIFF_version,
 					$this->_str_total, $this->_str_unique, $this->_str_table, $this->_colors, $this->_parser);
 
+		// Initialise worksheet writers
+		$countSheets = $this->_phpExcel->getSheetCount();
+		for ($i = 0; $i < $countSheets; ++$i) {
+			$this->_writerWorksheets[$i] = new PHPExcel_Writer_Excel5_Worksheet($this->_BIFF_version,
+									   $this->_str_total, $this->_str_unique,
+									   $this->_str_table, $this->_colors,
+									   $this->_parser,
+									   $this->_preCalculateFormulas,
+									   $this->_phpExcel->getSheet($i));
+		}
+
+		// build Escher objects. Escher objects for workbooks needs to be build before Escher object for workbook.
+		$this->_buildWorksheetEschers();
+		$this->_buildWorkbookEscher();
+
 		// add 15 identical cell style Xfs
 		// for now, we use the first cellXf instead of cellStyleXf
 		$cellXfCollection = $this->_phpExcel->getCellXfCollection();
@@ -146,19 +170,10 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
 		$workbookStreamName = ($this->_BIFF_version == 0x0600) ? 'Workbook' : 'Book';
 		$OLE = new PHPExcel_Shared_OLE_PPS_File(PHPExcel_Shared_OLE::Asc2Ucs($workbookStreamName));
 
-		// Initialise worksheet writers
-		$countSheets = $this->_phpExcel->getSheetCount();
 		// Write the worksheet streams before the global workbook stream,
 		// because the byte sizes of these are needed in the global workbook stream
 		$worksheetSizes = array();
 		for ($i = 0; $i < $countSheets; ++$i) {
-			$this->_writerWorksheets[$i] = new PHPExcel_Writer_Excel5_Worksheet($this->_BIFF_version,
-									   $this->_str_total, $this->_str_unique,
-									   $this->_str_table, $this->_colors,
-									   $this->_parser,
-									   $this->_preCalculateFormulas,
-									   $this->_phpExcel->getSheet($i));
-
 			$this->_writerWorksheets[$i]->close();
 			$worksheetSizes[] = $this->_writerWorksheets[$i]->_datasize;
 		}
@@ -176,6 +191,7 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
 		$res = $root->save($pFilename);
 
 		PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType);
+		PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
 	}
 
 	/**
@@ -208,4 +224,253 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
 		$this->_preCalculateFormulas = $pValue;
 	}
 
+	private function _buildWorksheetEschers()
+	{
+		// 1-based index to BstoreContainer
+		$blipIndex = 0;
+
+		foreach ($this->_phpExcel->getAllsheets() as $sheet) {
+			// sheet index
+			$sheetIndex = $sheet->getParent()->getIndex($sheet);
+
+			$escher = null;
+
+			// check if there are any shapes for this sheet
+			if (count($sheet->getDrawingCollection()) == 0) {
+				continue;
+			}
+
+			// create intermediate Escher object
+			$escher = new PHPExcel_Shared_Escher();
+
+			// dgContainer
+			$dgContainer = new PHPExcel_Shared_Escher_DgContainer();
+
+			// set the drawing index (we use sheet index + 1)
+			$dgId = $sheet->getParent()->getIndex($sheet) + 1;
+			$dgContainer->setDgId($dgId);
+			$escher->setDgContainer($dgContainer);
+
+			// spgrContainer
+			$spgrContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer();
+			$dgContainer->setSpgrContainer($spgrContainer);
+
+			// add one shape which is the group shape
+			$spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
+			$spContainer->setSpgr(true);
+			$spContainer->setSpType(0);
+			$spContainer->setSpId(($sheet->getParent()->getIndex($sheet) + 1) << 10);
+			$spgrContainer->addChild($spContainer);
+
+			// add the shapes
+
+			$countShapes[$sheetIndex] = 0; // count number of shapes (minus group shape), in sheet
+
+			foreach ($sheet->getDrawingCollection() as $drawing) {
+				++$blipIndex;
+
+				++$countShapes[$sheetIndex];
+
+				// add the shape
+				$spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
+
+				// set the shape type
+				$spContainer->setSpType(0x004B);
+
+				// set the shape index (we combine 1-based sheet index and $countShapes to create unique shape index)
+				$reducedSpId = $countShapes[$sheetIndex];
+				$spId = $reducedSpId
+					| ($sheet->getParent()->getIndex($sheet) + 1) << 10;
+				$spContainer->setSpId($spId);
+
+				// keep track of last reducedSpId
+				$lastReducedSpId = $reducedSpId;
+
+				// keep track of last spId
+				$lastSpId = $spId;
+
+				// set the BLIP index
+				$spContainer->setOPT(0x4104, $blipIndex);
+
+				// set coordinates and offsets, client anchor
+				$coordinates = $drawing->getCoordinates();
+				$offsetX = $drawing->getOffsetX();
+				$offsetY = $drawing->getOffsetY();
+				$width = $drawing->getWidth();
+				$height = $drawing->getHeight();
+
+				$twoAnchor = PHPExcel_Shared_Excel5::oneAnchor2twoAnchor($sheet, $coordinates, $offsetX, $offsetY, $width, $height);
+
+				$spContainer->setStartCoordinates($twoAnchor['startCoordinates']);
+				$spContainer->setStartOffsetX($twoAnchor['startOffsetX']);
+				$spContainer->setStartOffsetY($twoAnchor['startOffsetY']);
+				$spContainer->setEndCoordinates($twoAnchor['endCoordinates']);
+				$spContainer->setEndOffsetX($twoAnchor['endOffsetX']);
+				$spContainer->setEndOffsetY($twoAnchor['endOffsetY']);
+
+				$spgrContainer->addChild($spContainer);
+			}
+
+			// identifier clusters, used for workbook Escher object
+			$this->_IDCLs[$dgId] = $lastReducedSpId;
+
+			// set last shape index
+			$dgContainer->setLastSpId($lastSpId);
+
+			// set the Escher object
+			$this->_writerWorksheets[$sheetIndex]->setEscher($escher);
+		}
+	}
+
+	/**
+	 * Build the Escher object corresponding to the MSODRAWINGGROUP record
+	 */
+	private function _buildWorkbookEscher()
+	{
+		$escher = null;
+
+		// any drawings in this workbook?
+		$found = false;
+		foreach ($this->_phpExcel->getAllSheets() as $sheet) {
+			if (count($sheet->getDrawingCollection()) > 0) {
+				$found = true;
+			}
+		}
+
+		// nothing to do if there are no drawings
+		if (!$found) {
+			return;
+		}
+
+		// if we reach here, then there are drawings in the workbook
+		$escher = new PHPExcel_Shared_Escher();
+
+		// dggContainer
+		$dggContainer = new PHPExcel_Shared_Escher_DggContainer();
+		$escher->setDggContainer($dggContainer);
+
+		// set IDCLs (identifier clusters)
+		$dggContainer->setIDCLs($this->_IDCLs);
+
+		// this loop is for determining maximum shape identifier of all drawing
+		$spIdMax = 0;
+		$totalCountShapes = 0;
+		$countDrawings = 0;
+
+		foreach ($this->_phpExcel->getAllsheets() as $sheet) {
+			$sheetCountShapes = 0; // count number of shapes (minus group shape), in sheet
+
+			if (count($sheet->getDrawingCollection()) > 0) {
+				++$countDrawings;
+
+				foreach ($sheet->getDrawingCollection() as $drawing) {
+					++$sheetCountShapes;
+					++$totalCountShapes;
+
+					$spId = $sheetCountShapes
+						| ($this->_phpExcel->getIndex($sheet) + 1) << 10;
+					$spIdMax = max($spId, $spIdMax);
+				}
+			}
+		}
+
+		$dggContainer->setSpIdMax($spIdMax + 1);
+		$dggContainer->setCDgSaved($countDrawings);
+		$dggContainer->setCSpSaved($totalCountShapes + $countDrawings); // total number of shapes incl. one group shapes per drawing
+
+		// bstoreContainer
+		$bstoreContainer = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer();
+		$dggContainer->setBstoreContainer($bstoreContainer);
+
+		// the BSE's (all the images)
+		foreach ($this->_phpExcel->getAllsheets() as $sheet) {
+			foreach ($sheet->getDrawingCollection() as $drawing) {
+				if ($drawing instanceof PHPExcel_Worksheet_Drawing) {
+
+					$filename = $drawing->getPath();
+
+					list($imagesx, $imagesy, $imageFormat) = getimagesize($filename);
+
+					switch ($imageFormat) {
+
+					case 1: // GIF, not supported by BIFF8, we convert to PNG
+						$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
+						$imageResource = imagecreatefromgif($filename);
+						ob_start();
+						imagepng($imageResource);
+						$blipData = ob_get_contents();
+						ob_end_clean();
+						break;
+
+					case 2: // JPEG
+						$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG;
+						$blipData = file_get_contents($filename);
+						break;
+
+					case 3: // PNG
+						$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
+						$blipData = file_get_contents($filename);
+						break;
+
+					case 6: // Windows DIB (BMP), we convert to PNG
+						$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
+						$imageResource = PHPExcel_Shared_Drawing::imagecreatefrombmp($filename);
+						ob_start();
+						imagepng($imageResource);
+						$blipData = ob_get_contents();
+						ob_end_clean();
+						break;
+
+					default: continue 2;
+
+					}
+
+					$blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
+					$blip->setData($blipData);
+
+					$BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE();
+					$BSE->setBlipType($blipType);
+					$BSE->setBlip($blip);
+
+					$bstoreContainer->addBSE($BSE);
+
+				} else if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
+
+					switch ($drawing->getRenderingFunction()) {
+
+					case PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG:
+						$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG;
+						$renderingFunction = 'imagejpeg';
+						break;
+
+					case PHPExcel_Worksheet_MemoryDrawing::RENDERING_GIF:
+					case PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG:
+					case PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT:
+						$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
+						$renderingFunction = 'imagepng';
+						break;
+
+					}
+
+					ob_start();
+					call_user_func($renderingFunction, $drawing->getImageResource());
+					$blipData = ob_get_contents();
+					ob_end_clean();
+
+					$blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
+					$blip->setData($blipData);
+
+					$BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE();
+					$BSE->setBlipType($blipType);
+					$BSE->setBlip($blip);
+
+					$bstoreContainer->addBSE($BSE);
+				}
+			}
+		}
+
+		// Set the Escher object
+		$this->_writerWorkbook->setEscher($escher);
+	}
+
 }
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/BIFFwriter.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/BIFFwriter.php
index 2c0a2d1..e758aeb 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/BIFFwriter.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/BIFFwriter.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel5
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 // Original file header of PEAR::Spreadsheet_Excel_Writer_BIFFwriter (used as the base for this class):
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Escher.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Escher.php
index 402bd19..3c9c29f 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Escher.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Escher.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel5
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
  
@@ -106,9 +106,12 @@ class PHPExcel_Writer_Excel5_Escher
 					, $this->_object->getCSpSaved()
 					, $this->_object->getCDgSaved() // count total number of drawings saved
 				);
+
 			// add file identifier clusters (one per drawing)
-			for ($i = 0; $i < $this->_object->getCDgSaved(); ++$i) {
-				$dggData .= pack('VV', 0, 0);
+			$IDCLs = $this->_object->getIDCLs();
+
+			foreach ($IDCLs as $dgId => $maxReducedSpId) {
+				$dggData .= pack('VV', $dgId, $maxReducedSpId + 1);
 			}
 
 			$header = pack('vvV', $recVerInstance, $recType, strlen($dggData));
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Font.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Font.php
index bb4d201..2928070 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Font.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Font.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel5
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Parser.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Parser.php
index cef650f..eb9891e 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Parser.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Parser.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel5
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 // Original file header of PEAR::Spreadsheet_Excel_Writer_Parser (used as the base for this class):
@@ -1148,6 +1148,9 @@ class PHPExcel_Writer_Excel5_Parser
 			case "<>":
 				return $token;
 				break;
+			case "^":
+				return $token;
+				break;
 			default:
 				// if it's a reference A1 or $A$1 or $A1 or A$1
 				if (preg_match('/^\$?[A-Ia-i]?[A-Za-z]\$?[0-9]+$/',$token) and
@@ -1288,19 +1291,30 @@ class PHPExcel_Writer_Excel5_Parser
 			$result2 = $this->_expression();
 			$result = $this->_createTree('ptgUminus', $result2, '');
 			return $result;
+		} elseif ($this->_current_token == "+") {
+			// catch "+" Term
+			$this->_advance();
+			$result2 = $this->_expression();
+			$result = $this->_createTree('ptgUplus', $result2, '');
+			return $result;
 		}
 		$result = $this->_term();
 		while (($this->_current_token == "+") or
-			   ($this->_current_token == "-")) {
+			   ($this->_current_token == "-") or
+			   ($this->_current_token == "^")) {
 		/**/
 			if ($this->_current_token == "+") {
 				$this->_advance();
 				$result2 = $this->_term();
 				$result = $this->_createTree('ptgAdd', $result, $result2);
-			} else {
+			} elseif ($this->_current_token == "-") {
 				$this->_advance();
 				$result2 = $this->_term();
 				$result = $this->_createTree('ptgSub', $result, $result2);
+			} else {
+				$this->_advance();
+				$result2 = $this->_term();
+				$result = $this->_createTree('ptgPower', $result, $result2);
 			}
 		}
 		return $result;
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Workbook.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Workbook.php
index d26ddee..6e517e6 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Workbook.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Workbook.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel5
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 // Original file header of PEAR::Spreadsheet_Excel_Writer_Workbook (used as the base for this class):
@@ -182,6 +182,13 @@ class PHPExcel_Writer_Excel5_Workbook extends PHPExcel_Writer_Excel5_BIFFwriter
 	 */
 	private $_colors;
 
+	/**
+	 * Escher object corresponding to MSODRAWINGGROUP
+	 *
+	 * @var PHPExcel_Shared_Escher
+	 */
+	private $_escher;
+
 
 	/**
 	 * Class constructor
@@ -1400,143 +1407,9 @@ class PHPExcel_Writer_Excel5_Workbook extends PHPExcel_Writer_Excel5_BIFFwriter
 	 */
 	private function _writeMsoDrawingGroup()
 	{
-		// any drawings in this workbook?
-		$found = false;
-		foreach ($this->_phpExcel->getAllSheets() as $sheet) {
-			if (count($sheet->getDrawingCollection()) > 0) {
-				$found = true;
-			}
-		}
-
-		// if there are drawings, then we need to write MSODRAWINGGROUP record
-		if ($found) {
-
-			// create intermediate Escher object
-			$escher = new PHPExcel_Shared_Escher();
-
-			// dggContainer
-			$dggContainer = new PHPExcel_Shared_Escher_DggContainer();
-			$escher->setDggContainer($dggContainer);
-
-			// this loop is for determining maximum shape identifier of all drawing
-			$spIdMax = 0;
-			$totalCountShapes = 0;
-			$countDrawings = 0;
-
-			foreach ($this->_phpExcel->getAllsheets() as $sheet) {
-				$sheetCountShapes = 0; // count number of shapes (minus group shape), in sheet
-
-				if (count($sheet->getDrawingCollection()) > 0) {
-					++$countDrawings;
-
-					foreach ($sheet->getDrawingCollection() as $drawing) {
-						++$sheetCountShapes;
-						++$totalCountShapes;
-
-						$spId = $sheetCountShapes
-							| ($this->_phpExcel->getIndex($sheet) + 1) << 10;
-						$spIdMax = max($spId, $spIdMax);
-					}
-				}
-			}
-
-			$dggContainer->setSpIdMax($spIdMax + 1);
-			$dggContainer->setCDgSaved($countDrawings);
-			$dggContainer->setCSpSaved($totalCountShapes + $countDrawings); // total number of shapes incl. one group shapes per drawing
-
-			// bstoreContainer
-			$bstoreContainer = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer();
-			$dggContainer->setBstoreContainer($bstoreContainer);
-
-			// the BSE's (all the images)
-			foreach ($this->_phpExcel->getAllsheets() as $sheet) {
-				foreach ($sheet->getDrawingCollection() as $drawing) {
-					if ($drawing instanceof PHPExcel_Worksheet_Drawing) {
-
-						$filename = $drawing->getPath();
-
-						list($imagesx, $imagesy, $imageFormat) = getimagesize($filename);
-
-						switch ($imageFormat) {
-
-						case 1: // GIF, not supported by BIFF8, we convert to PNG
-							$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
-							$imageResource = imagecreatefromgif($filename);
-							ob_start();
-							imagepng($imageResource);
-							$blipData = ob_get_contents();
-							ob_end_clean();
-							break;
-
-						case 2: // JPEG
-							$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG;
-							$blipData = file_get_contents($filename);
-							break;
-
-						case 3: // PNG
-							$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
-							$blipData = file_get_contents($filename);
-							break;
-
-						case 6: // Windows DIB (BMP), we convert to PNG
-							$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
-							$imageResource = PHPExcel_Shared_Drawing::imagecreatefrombmp($filename);
-							ob_start();
-							imagepng($imageResource);
-							$blipData = ob_get_contents();
-							ob_end_clean();
-							break;
-
-						default: continue 2;
-
-						}
-
-						$blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
-						$blip->setData($blipData);
-
-						$BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE();
-						$BSE->setBlipType($blipType);
-						$BSE->setBlip($blip);
-
-						$bstoreContainer->addBSE($BSE);
-
-					} else if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
-
-						switch ($drawing->getRenderingFunction()) {
-
-						case PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG:
-							$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG;
-							$renderingFunction = 'imagejpeg';
-							break;
-
-						case PHPExcel_Worksheet_MemoryDrawing::RENDERING_GIF:
-						case PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG:
-						case PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT:
-							$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
-							$renderingFunction = 'imagepng';
-							break;
-
-						}
-
-						ob_start();
-						call_user_func($renderingFunction, $drawing->getImageResource());
-						$blipData = ob_get_contents();
-						ob_end_clean();
-
-						$blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
-						$blip->setData($blipData);
-
-						$BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE();
-						$BSE->setBlipType($blipType);
-						$BSE->setBlip($blip);
-
-						$bstoreContainer->addBSE($BSE);
-					}
-				}
-			}
-
-			// write the Escher stream from the intermediate Escher object
-			$writer = new PHPExcel_Writer_Excel5_Escher($escher);
+		// write the Escher stream if necessary
+		if (isset($this->_escher)) {
+			$writer = new PHPExcel_Writer_Excel5_Escher($this->_escher);
 			$data = $writer->close();
 
 			$record = 0x00EB;
@@ -1544,7 +1417,30 @@ class PHPExcel_Writer_Excel5_Workbook extends PHPExcel_Writer_Excel5_BIFFwriter
 			$header = pack("vv",  $record, $length);
 
 			return $this->writeData($header . $data);
+
+		} else {
+			return '';
 		}
 	}
 
+	/**
+	 * Get Escher object
+	 *
+	 * @return PHPExcel_Shared_Escher
+	 */
+	public function getEscher()
+	{
+		return $this->_escher;
+	}
+
+	/**
+	 * Set Escher object
+	 *
+	 * @param PHPExcel_Shared_Escher $pValue
+	 */
+	public function setEscher(PHPExcel_Shared_Escher $pValue = null)
+	{
+		$this->_escher = $pValue;
+	}
+
 }
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Worksheet.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Worksheet.php
index 646101a..0dd2b00 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Worksheet.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Worksheet.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel5
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 // Original file header of PEAR::Spreadsheet_Excel_Writer_Worksheet (used as the base for this class):
@@ -186,6 +186,13 @@ class PHPExcel_Writer_Excel5_Worksheet extends PHPExcel_Writer_Excel5_BIFFwriter
 	private $_countCellStyleXfs;
 
 	/**
+	 * Escher object corresponding to MSODRAWING
+	 *
+	 * @var PHPExcel_Shared_Escher
+	 */
+	private $_escher;
+
+	/**
 	 * Constructor
 	 *
 	 * @param int  $BIFF_version		 BIFF version
@@ -2694,142 +2701,82 @@ class PHPExcel_Writer_Excel5_Worksheet extends PHPExcel_Writer_Excel5_BIFFwriter
 	}
 
 	/**
-	 * Write MSODRAWING record
+	 * Get Escher object
+	 *
+	 * @return PHPExcel_Shared_Escher
 	 */
-	private function _writeMsoDrawing()
+	public function getEscher()
 	{
-		// check if there are any shapes for this sheet
-		if (count($this->_phpSheet->getDrawingCollection()) == 0) {
-			return;
-		}
-
-		// create intermediate Escher object
-		$escher = new PHPExcel_Shared_Escher();
-
-		// dgContainer
-		$dgContainer = new PHPExcel_Shared_Escher_DgContainer();
-
-		// set the drawing index (we use sheet index + 1)
-		$dgContainer->setDgId($this->_phpSheet->getParent()->getIndex($this->_phpSheet) + 1);
-		$escher->setDgContainer($dgContainer);
-
-		// spgrContainer
-		$spgrContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer();
-		$dgContainer->setSpgrContainer($spgrContainer);
-
-		// add one shape which is the group shape
-		$spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
-		$spContainer->setSpgr(true);
-		$spContainer->setSpType(0);
-		$spContainer->setSpId(($this->_phpSheet->getParent()->getIndex($this->_phpSheet) + 1) << 10);
-		$spgrContainer->addChild($spContainer);
-
-		// add the shapes
-
-		// outer loop is for determining BSE index
-		$blipIndex = 0; // 1-based index to BstoreContainer
-
-		$countShapes = 0; // count number of shapes (minus group shape), in this sheet
-
-		foreach ($this->_phpSheet->getParent()->getAllsheets() as $sheet) {
-			foreach ($sheet->getDrawingCollection() as $drawing) {
-				++$blipIndex;
-
-				if ($sheet === $this->_phpSheet) {
-					++$countShapes;
-
-					// add the shape
-					$spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
-
-					// set the shape type
-					$spContainer->setSpType(0x004B);
-
-					// set the shape index (we combine 1-based sheet index and $countShapes to create unique shape index)
-					$spId = $countShapes
-						| ($this->_phpSheet->getParent()->getIndex($this->_phpSheet) + 1) << 10;
-					$spContainer->setSpId($spId);
-
-					// keep track of last spId
-					$lastSpId = $spId;
-
-					// set the BLIP index
-					$spContainer->setOPT(0x4104, $blipIndex);
-
-					// set coordinates and offsets, client anchor
-					$coordinates = $drawing->getCoordinates();
-					$offsetX = $drawing->getOffsetX();
-					$offsetY = $drawing->getOffsetY();
-					$width = $drawing->getWidth();
-					$height = $drawing->getHeight();
-
-					$twoAnchor = PHPExcel_Shared_Excel5::oneAnchor2twoAnchor($this->_phpSheet, $coordinates, $offsetX, $offsetY, $width, $height);
+		return $this->_escher;
+	}
 
-					$spContainer->setStartCoordinates($twoAnchor['startCoordinates']);
-					$spContainer->setStartOffsetX($twoAnchor['startOffsetX']);
-					$spContainer->setStartOffsetY($twoAnchor['startOffsetY']);
-					$spContainer->setEndCoordinates($twoAnchor['endCoordinates']);
-					$spContainer->setEndOffsetX($twoAnchor['endOffsetX']);
-					$spContainer->setEndOffsetY($twoAnchor['endOffsetY']);
+	/**
+	 * Set Escher object
+	 *
+	 * @param PHPExcel_Shared_Escher $pValue
+	 */
+	public function setEscher(PHPExcel_Shared_Escher $pValue = null)
+	{
+		$this->_escher = $pValue;
+	}
 
-					$spgrContainer->addChild($spContainer);
-				}
+	/**
+	 * Write MSODRAWING record
+	 */
+	private function _writeMsoDrawing()
+	{
+		// write the Escher stream if necessary
+		if (isset($this->_escher)) {
+			$writer = new PHPExcel_Writer_Excel5_Escher($this->_escher);
+			$data = $writer->close();
+			$spOffsets = $writer->getSpOffsets();
+
+			// write the neccesary MSODRAWING, OBJ records
+
+			// split the Escher stream
+			$spOffsets[0] = 0;
+			$nm = count($spOffsets) - 1; // number of shapes excluding first shape
+			for ($i = 1; $i <= $nm; ++$i) {
+				// MSODRAWING record
+				$record = 0x00EC;			// Record identifier
+
+				// chunk of Escher stream for one shape
+
+				$dataChunk = substr($data, $spOffsets[$i -1], $spOffsets[$i] - $spOffsets[$i - 1]);
+
+				$length = strlen($dataChunk);
+				$header = pack("vv", $record, $length);
+
+				$this->_append($header . $dataChunk);
+
+				// OBJ record
+				$record = 0x005D; // record identifier
+				$objData = '';
+
+				// ftCmo
+				$objData .=
+					pack('vvvvvVVV'
+						, 0x0015	// 0x0015 = ftCmo
+						, 0x0012	// length of ftCmo data
+						, 0x0008	// object type, 0x0008 = picture
+						, $i		// object id number, Excel seems to use 1-based index, local for the sheet
+						, 0x6011	// option flags, 0x6011 is what OpenOffice.org uses
+						, 0			// reserved
+						, 0			// reserved
+						, 0			// reserved
+					);
+				// ftEnd
+				$objData .=
+					pack('vv'
+						, 0x0000	// 0x0000 = ftEnd
+						, 0x0000	// length of ftEnd data
+					);
+
+				$length = strlen($objData);
+				$header = pack('vv', $record, $length);
+				$this->_append($header . $objData);
 			}
 		}
-
-		// set last shape index
-		$dgContainer->setLastSpId($lastSpId);
-
-		// write the Escher stream
-		$writer = new PHPExcel_Writer_Excel5_Escher($escher);
-		$data = $writer->close();
-		$spOffsets = $writer->getSpOffsets();
-
-		// write the neccesary MSODRAWING, OBJ records
-
-		// split the Escher stream
-		$spOffsets[0] = 0;
-		$nm = count($spOffsets) - 1; // number of shapes excluding first shape
-		for ($i = 1; $i <= $nm; ++$i) {
-			// MSODRAWING record
-			$record = 0x00EC;			// Record identifier
-
-			// chunk of Escher stream for one shape
-
-			$dataChunk = substr($data, $spOffsets[$i -1], $spOffsets[$i] - $spOffsets[$i - 1]);
-
-			$length = strlen($dataChunk);
-			$header = pack("vv", $record, $length);
-
-			$this->_append($header . $dataChunk);
-
-			// OBJ record
-			$record = 0x005D; // record identifier
-			$objData = '';
-
-			// ftCmo
-			$objData .=
-				pack('vvvvvVVV'
-					, 0x0015	// 0x0015 = ftCmo
-					, 0x0012	// length of ftCmo data
-					, 0x0008	// object type, 0x0008 = picture
-					, $i		// object id number, Excel seems to use 1-based index, local for the sheet
-					, 0x6011	// option flags, 0x6011 is what OpenOffice.org uses
-					, 0			// reserved
-					, 0			// reserved
-					, 0			// reserved
-				);
-			// ftEnd
-			$objData .=
-				pack('vv'
-					, 0x0000	// 0x0000 = ftEnd
-					, 0x0000	// length of ftEnd data
-				);
-
-			$length = strlen($objData);
-			$header = pack('vv', $record, $length);
-			$this->_append($header . $objData);
-		}
-
 	}
 
 	/**
@@ -3006,4 +2953,4 @@ class PHPExcel_Writer_Excel5_Worksheet extends PHPExcel_Writer_Excel5_BIFFwriter
 		return 0;
 	}
 
-}
+}
\ No newline at end of file
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Xf.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Xf.php
index 9246a34..27632f3 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Xf.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Xf.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer_Excel5
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 // Original file header of PEAR::Spreadsheet_Excel_Writer_Format (used as the base for this class):
diff --git a/libraries/PHPExcel/PHPExcel/Writer/HTML.php b/libraries/PHPExcel/PHPExcel/Writer/HTML.php
index 3c892cf..b6667f5 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/HTML.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/HTML.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -152,6 +152,8 @@ class PHPExcel_Writer_HTML implements PHPExcel_Writer_IWriter {
 		// garbage collect
 		$this->_phpExcel->garbageCollect();
 
+		$saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
+		PHPExcel_Calculation::getInstance()->writeDebugLog = false;
 		$saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType();
 		PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE);
 
@@ -182,6 +184,7 @@ class PHPExcel_Writer_HTML implements PHPExcel_Writer_IWriter {
 		fclose($fileHandle);
 
 		PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType);
+		PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
 	}
 
 	/**
@@ -330,7 +333,7 @@ class PHPExcel_Writer_HTML implements PHPExcel_Writer_IWriter {
 	    	// row min,max
 			$rowMin = $dimension[0][1];
 			$rowMax = $dimension[1][1];
-			
+
 			// calculate start of <tbody>, <thead>
 			$tbodyStart = $rowMin;
 	    	$tbodyEnd   = $rowMax;
@@ -338,7 +341,7 @@ class PHPExcel_Writer_HTML implements PHPExcel_Writer_IWriter {
 			$theadEnd   = 0; // default: no </thead>
 			if ($sheet->getPageSetup()->isRowsToRepeatAtTopSet()) {
 				$rowsToRepeatAtTop = $sheet->getPageSetup()->getRowsToRepeatAtTop();
-				
+
 				// we can only support repeating rows that start at top row
 				if ($rowsToRepeatAtTop[0] == 1) {
 					$theadStart = $rowsToRepeatAtTop[0];
@@ -346,7 +349,7 @@ class PHPExcel_Writer_HTML implements PHPExcel_Writer_IWriter {
 					$tbodyStart = $rowsToRepeatAtTop[1] + 1;
 				}
 			}
-			
+
 			// Loop through cells
 	    	$rowData = null;
 	    	for ($row = $rowMin; $row <= $rowMax; ++$row) {
diff --git a/libraries/PHPExcel/PHPExcel/Writer/IWriter.php b/libraries/PHPExcel/PHPExcel/Writer/IWriter.php
index ec5331e..35fd689 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/IWriter.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/IWriter.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/PDF.php b/libraries/PHPExcel/PHPExcel/Writer/PDF.php
index 570ce9d..f588635 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/PDF.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/PDF.php
@@ -22,7 +22,7 @@
  * @package		PHPExcel_Writer
  * @copyright	Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license		http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version		1.7.3c, 2010-06-01
+ * @version		1.7.4, 2010-08-26
  */
 
 
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Serialized.php b/libraries/PHPExcel/PHPExcel/Writer/Serialized.php
index 603c4f7..51616b4 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Serialized.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Serialized.php
@@ -22,7 +22,7 @@
  * @package    PHPExcel_Writer
  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
- * @version    1.7.3c, 2010-06-01
+ * @version    1.7.4, 2010-08-26
  */
 
 
@@ -163,10 +163,10 @@ class PHPExcel_Writer_Serialized implements PHPExcel_Writer_IWriter
 
 		// PHPExcel
 		$objWriter->startElement('PHPExcel');
-		$objWriter->writeAttribute('version', '1.7.3c');
+		$objWriter->writeAttribute('version', '1.7.4');
 
 			// Comment
-			$objWriter->writeComment('This file has been generated using PHPExcel v1.7.3c (http://www.codeplex.com/PHPExcel). It contains a base64 encoded serialized version of the PHPExcel internal object.');
+			$objWriter->writeComment('This file has been generated using PHPExcel v1.7.4 (http://www.codeplex.com/PHPExcel). It contains a base64 encoded serialized version of the PHPExcel internal object.');
 
 			// Data
 			$objWriter->startElement('data');
diff --git a/libraries/db_events.inc.php b/libraries/db_events.inc.php
index 9ff5f76..d386170 100644
--- a/libraries/db_events.inc.php
+++ b/libraries/db_events.inc.php
@@ -9,11 +9,6 @@ if (! defined('PHPMYADMIN')) {
     exit;
 }
 
-/**
- * Append goto to ulr_query.
- */
-$url_query .= '&goto=db_structure.php';
-
 $events = PMA_DBI_fetch_result('SELECT EVENT_NAME, EVENT_TYPE FROM information_schema.EVENTS WHERE EVENT_SCHEMA= \'' . PMA_sqlAddslashes($db,true) . '\';');
 
 if ($events) {
@@ -50,7 +45,7 @@ if ($events) {
                      </tr>',
                      ($ct%2 == 0) ? 'even' : 'odd',
                      $event['EVENT_NAME'],
-                     ! empty($definition) ? PMA_linkOrButton('db_sql.php?' . $url_query . '&sql_query=' . urlencode($definition) . '&show_query=1&delimiter=' . urlencode($delimiter), $titles['Structure']) : ' ',
+                     ! empty($definition) ? PMA_linkOrButton('db_sql.php?' . $url_query . '&sql_query=' . urlencode($definition) . '&show_query=1&db_query_force=1&delimiter=' . urlencode($delimiter), $titles['Structure']) : ' ',
                      '<a href="sql.php?' . $url_query . '&sql_query=' . urlencode($sqlDrop) . '" onclick="return confirmLink(this, \'' . PMA_jsFormat($sqlDrop, false) . '\')">' . $titles['Drop'] . '</a>',
                      $event['EVENT_TYPE']);
         $ct++;
diff --git a/libraries/db_routines.inc.php b/libraries/db_routines.inc.php
index 29c1ccd..f912ae0 100644
--- a/libraries/db_routines.inc.php
+++ b/libraries/db_routines.inc.php
@@ -19,11 +19,6 @@ if (! defined('PHPMYADMIN')) {
     exit;
 }
 
-/**
- * Append goto to ulr_query.
- */
-$url_query .= '&goto=db_structure.php';
-
 $routines = PMA_DBI_fetch_result('SELECT SPECIFIC_NAME,ROUTINE_NAME,ROUTINE_TYPE,DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA= \'' . PMA_sqlAddslashes($db,true) . '\';');
 
 if ($routines) {
@@ -79,7 +74,7 @@ if ($routines) {
                      </tr>',
                      ($ct%2 == 0) ? 'even' : 'odd',
                      $routine['ROUTINE_NAME'],
-                     ! empty($definition) ? PMA_linkOrButton('db_sql.php?' . $url_query . '&sql_query=' . urlencode($definition) . '&show_query=1&delimiter=' . urlencode($delimiter), $titles['Structure']) : ' ',
+                     ! empty($definition) ? PMA_linkOrButton('db_sql.php?' . $url_query . '&sql_query=' . urlencode($definition) . '&show_query=1&db_query_force=1&delimiter=' . urlencode($delimiter), $titles['Structure']) : ' ',
                      '<a href="sql.php?' . $url_query . '&sql_query=' . urlencode($sqlDropProc) . '" onclick="return confirmLink(this, \'' . PMA_jsFormat($sqlDropProc, false) . '\')">' . $titles['Drop'] . '</a>',
                      $routine['ROUTINE_TYPE'],
                      $routine['DTD_IDENTIFIER']);
diff --git a/libraries/dbi/mysqli.dbi.lib.php b/libraries/dbi/mysqli.dbi.lib.php
index 2c00bcd..b064953 100644
--- a/libraries/dbi/mysqli.dbi.lib.php
+++ b/libraries/dbi/mysqli.dbi.lib.php
@@ -529,7 +529,7 @@ function PMA_DBI_get_fields_meta($result)
     // so this would override TINYINT and mark all TINYINT as string
     // https://sf.net/tracker/?func=detail&aid=1532111&group_id=23067&atid=377408
     //$typeAr[MYSQLI_TYPE_CHAR]        = 'string';
-    $typeAr[MYSQLI_TYPE_GEOMETRY]    = 'unknown';
+    $typeAr[MYSQLI_TYPE_GEOMETRY]    = 'geometry';
     $typeAr[MYSQLI_TYPE_BIT]         = 'bit';
 
     $fields = mysqli_fetch_fields($result);
diff --git a/libraries/display_tbl.lib.php b/libraries/display_tbl.lib.php
index d6d93b0..7ef333d 100644
--- a/libraries/display_tbl.lib.php
+++ b/libraries/display_tbl.lib.php
@@ -1343,6 +1343,12 @@ function PMA_displayTableBody(&$dt_result, &$is_display, $map, $analyzed_sql) {
                         $vertical_display['data'][$row_no][$i] = '    <td' . $mouse_events . ' class="' . $class . ($condition_field ? ' condition' : '') . '"> </td>' . "\n";
                     }
                 }
+            // g e o m e t r y
+            } elseif ($meta->type == 'geometry') {
+                $geometry_text = PMA_handle_non_printable_contents('GEOMETRY', (isset($row[$i]) ? $row[$i] : ''), $transform_function, $transform_options, $default_function, $meta);
+                $vertical_display['data'][$row_no][$i]      = '    <td align="left"' . $mouse_events . ' class="' . $class . ($condition_field ? ' condition' : '') . '">' . $geometry_text . '</td>';
+                unset($geometry_text);
+
             // n o t   n u m e r i c   a n d   n o t   B L O B 
             } else {
                 if (!isset($row[$i]) || is_null($row[$i])) {
@@ -2246,7 +2252,7 @@ function PMA_displayResultsOperations($the_disp_mode, $analyzed_sql) {
  * @uses    PMA_formatByteDown()
  * @uses    strpos()
  * @uses    str_replace()
- * @param   string  $category BLOB|BINARY
+ * @param   string  $category BLOB|BINARY|GEOMETRY
  * @param   string  $content  the binary content
  * @param   string  $transform_function
  * @param   string  $transform_options
diff --git a/libraries/export/sql.php b/libraries/export/sql.php
index 9c177b4..d026f2c 100644
--- a/libraries/export/sql.php
+++ b/libraries/export/sql.php
@@ -307,9 +307,60 @@ function PMA_exportDBCreate($db)
         return FALSE;
     }
     if (isset($GLOBALS['sql_backquotes']) && isset($GLOBALS['sql_compatibility']) && $GLOBALS['sql_compatibility'] == 'NONE') {
-        return PMA_exportOutputHandler('USE ' . PMA_backquote($db) . ';' . $crlf);
+        $result = PMA_exportOutputHandler('USE ' . PMA_backquote($db) . ';' . $crlf);
+    } else {
+        $result = PMA_exportOutputHandler('USE ' . $db . ';' . $crlf);
+    }
+
+    if ($result && isset($GLOBALS['sql_structure']) && isset($GLOBALS['sql_procedure_function'])) {
+        $text = '';
+        $delimiter = '$$';
+
+        $procedure_names = PMA_DBI_get_procedures_or_functions($db, 'PROCEDURE');
+        $function_names = PMA_DBI_get_procedures_or_functions($db, 'FUNCTION');
+
+        if ($procedure_names || $function_names) {
+            $text .= $crlf
+              . 'DELIMITER ' . $delimiter . $crlf;
+        }
+
+        if ($procedure_names) {
+            $text .=
+                PMA_exportComment()
+              . PMA_exportComment($GLOBALS['strProcedures'])
+              . PMA_exportComment();
+
+            foreach($procedure_names as $procedure_name) {
+                if (! empty($GLOBALS['sql_drop_table'])) {
+		    $text .= 'DROP PROCEDURE IF EXISTS ' . PMA_backquote($procedure_name) . $delimiter . $crlf;
+                }
+                $text .= PMA_DBI_get_definition($db, 'PROCEDURE', $procedure_name) . $delimiter . $crlf . $crlf;
+            }
+        }
+
+        if ($function_names) {
+            $text .=
+                PMA_exportComment()
+              . PMA_exportComment($GLOBALS['strFunctions'])
+              . PMA_exportComment();
+
+            foreach($function_names as $function_name) {
+                if (! empty($GLOBALS['sql_drop_table'])) {
+		    $text .= 'DROP FUNCTION IF EXISTS ' . PMA_backquote($function_name) . $delimiter . $crlf;
+                }
+                $text .= PMA_DBI_get_definition($db, 'FUNCTION', $function_name) . $delimiter . $crlf . $crlf;
+            }
+        }
+
+        if ($procedure_names || $function_names) {
+            $text .= 'DELIMITER ;' . $crlf;
+        }
+
+        if (! empty($text)) {
+            $result = PMA_exportOutputHandler($text);
+        }
     }
-    return PMA_exportOutputHandler('USE ' . $db . ';' . $crlf);
+    return $result;
 }
 
 /**
@@ -352,49 +403,16 @@ function PMA_exportDBFooter($db)
         $text = '';
         $delimiter = '$$';
 
-        $procedure_names = PMA_DBI_get_procedures_or_functions($db, 'PROCEDURE');
-        $function_names = PMA_DBI_get_procedures_or_functions($db, 'FUNCTION');
-
         if (PMA_MYSQL_INT_VERSION > 50100) {
             $event_names = PMA_DBI_fetch_result('SELECT EVENT_NAME FROM information_schema.EVENTS WHERE EVENT_SCHEMA= \'' . PMA_sqlAddslashes($db,true) . '\';');
         } else {
             $event_names = array();
         }
 
-        if ($procedure_names || $function_names || $event_names) {
+        if ($event_names) {
             $text .= $crlf
               . 'DELIMITER ' . $delimiter . $crlf;
-        }
-
-        if ($procedure_names) {
-            $text .=
-                PMA_exportComment()
-              . PMA_exportComment($GLOBALS['strProcedures'])
-              . PMA_exportComment();
-
-            foreach($procedure_names as $procedure_name) {
-                if (! empty($GLOBALS['sql_drop_table'])) {
-		    $text .= 'DROP PROCEDURE IF EXISTS ' . PMA_backquote($procedure_name) . $delimiter . $crlf;
-                }
-                $text .= PMA_DBI_get_definition($db, 'PROCEDURE', $procedure_name) . $delimiter . $crlf . $crlf;
-            }
-        }
 
-        if ($function_names) {
-            $text .=
-                PMA_exportComment()
-              . PMA_exportComment($GLOBALS['strFunctions'])
-              . PMA_exportComment();
-
-            foreach($function_names as $function_name) {
-                if (! empty($GLOBALS['sql_drop_table'])) {
-		    $text .= 'DROP FUNCTION IF EXISTS ' . PMA_backquote($function_name) . $delimiter . $crlf;
-                }
-                $text .= PMA_DBI_get_definition($db, 'FUNCTION', $function_name) . $delimiter . $crlf . $crlf;
-            }
-        }
-
-        if ($event_names) {
             $text .=
                 PMA_exportComment()
               . PMA_exportComment($GLOBALS['strEvents'])
@@ -406,8 +424,7 @@ function PMA_exportDBFooter($db)
                 }
                 $text .= PMA_DBI_get_definition($db, 'EVENT', $event_name) . $delimiter . $crlf . $crlf;
             }
-        }
-        if ($procedure_names || $function_names || $event_names) {
+
             $text .= 'DELIMITER ;' . $crlf;
         }
 
diff --git a/libraries/import.lib.php b/libraries/import.lib.php
index 6c039bd..12dfbf6 100644
--- a/libraries/import.lib.php
+++ b/libraries/import.lib.php
@@ -118,6 +118,8 @@ function PMA_importRunQuery($sql = '', $full = '', $controluser = false)
                             $display_query = '';
                         }
                         $sql_query = $import_run_buffer['sql'];
+                        // If a 'USE <db>' SQL-clause was found, set our current $db to the new one
+                        list($db, $reload) = PMA_lookForUse($import_run_buffer['sql'], $db, $reload);
                     } elseif ($run_query) {
                         if ($controluser) {
                             $result = PMA_query_as_controluser($import_run_buffer['sql']);
@@ -156,10 +158,8 @@ function PMA_importRunQuery($sql = '', $full = '', $controluser = false)
                         }
                         
                         // If a 'USE <db>' SQL-clause was found and the query succeeded, set our current $db to the new one
-                        if ($result != FALSE && preg_match('@^[\s]*USE[[:space:]]*([\S]+)@i', $import_run_buffer['sql'], $match)) {
-                            $db = trim($match[1]);
-                            $db = trim($db,';'); // for example, USE abc;
-                            $reload = TRUE;
+                        if ($result != FALSE) {
+                            list($db, $reload) = PMA_lookForUse($import_run_buffer['sql'], $db, $reload);
                         }
                         
                         if ($result != FALSE && preg_match('@^[\s]*(DROP|CREATE)[\s]+(IF EXISTS[[:space:]]+)?(TABLE|DATABASE)[[:space:]]+(.+)@im', $import_run_buffer['sql'])) {
@@ -205,6 +205,25 @@ function PMA_importRunQuery($sql = '', $full = '', $controluser = false)
     }
 }
 
+/**
+ * Looks for the presence of USE to possibly change current db  
+ *
+ * @param  string buffer to examine 
+ * @param  string current db 
+ * @param  boolean reload 
+ * @return array (current or new db, whether to reload) 
+ * @access public
+ */
+function PMA_lookForUse($buffer, $db, $reload)
+{ 
+    if (preg_match('@^[\s]*USE[[:space:]]*([\S]+)@i', $buffer, $match)) {
+        $db = trim($match[1]);
+        $db = trim($db,';'); // for example, USE abc;
+        $reload = TRUE;
+    }
+    return(array($db, $reload));
+}
+
 
 /**
  * Returns next part of imported file/buffer
@@ -408,6 +427,7 @@ define("NONE",      0);
 define("VARCHAR",   1);
 define("INT",       2);
 define("DECIMAL",   3);
+define("BIGINT",    4);
 
 /* Decimal size defs */
 define("M",         0);
@@ -493,6 +513,7 @@ function PMA_getDecimalSize(&$cell) {
  * @uses    FULL
  * @uses    VARCHAR
  * @uses    DECIMAL
+ * @uses    BIGINT
  * @uses    INT
  * @uses    NONE
  * @uses    strcmp()
@@ -501,8 +522,8 @@ function PMA_getDecimalSize(&$cell) {
  * @uses    PMA_getD()
  * @uses    PMA_getDecimalSize()
  * @param   string $last_cumulative_size    Last cumulative column size
- * @param   int    $last_cumulative_type    Last cumulative column type  (NONE or VARCHAR or DECIMAL or INT)
- * @param   int    $curr_type               Type of the current cell     (NONE or VARCHAR or DECIMAL or INT)
+ * @param   int    $last_cumulative_type    Last cumulative column type  (NONE or VARCHAR or DECIMAL or INT or BIGINT)
+ * @param   int    $curr_type               Type of the current cell     (NONE or VARCHAR or DECIMAL or INT or BIGINT)
  * @param   string &$cell                   The current cell
  * @return  string                          Size of the given cell in the type-appropriate format
  */
@@ -520,7 +541,7 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type
      */
 	elseif ($curr_type == VARCHAR) {
         /**
-         * The last cumlative type was VARCHAR
+         * The last cumulative type was VARCHAR
          */
 		if ($last_cumulative_type == VARCHAR) {
 			if ($curr_size >= $last_cumulative_size) {
@@ -530,7 +551,7 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type
             }
 		}
         /**
-         * The last cumlative type was DECIMAL
+         * The last cumulative type was DECIMAL
          */
         elseif ($last_cumulative_type == DECIMAL) {
             $oldM = PMA_getM($last_cumulative_size);
@@ -542,9 +563,9 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type
             }
 		}
         /**
-         * The last cumlative type was INT
+         * The last cumulative type was BIGINT or INT
          */
-        elseif ($last_cumulative_type == INT) {
+        elseif ($last_cumulative_type == BIGINT || $last_cumulative_type == INT) {
             if ($curr_size >= $last_cumulative_size) {
                 return $curr_size;
             } else {
@@ -573,7 +594,7 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type
      */
     elseif ($curr_type == DECIMAL) {
         /**
-         * The last cumlative type was VARCHAR
+         * The last cumulative type was VARCHAR
          */
 		if ($last_cumulative_type == VARCHAR) {
             /* Convert $last_cumulative_size from varchar to decimal format */
@@ -586,7 +607,7 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type
             }
 		}
         /**
-         * The last cumlative type was DECIMAL
+         * The last cumulative type was DECIMAL
          */
         elseif ($last_cumulative_type == DECIMAL) {
 		    $size = PMA_getDecimalSize($cell);
@@ -603,9 +624,9 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type
             }
 		}
         /**
-         * The last cumlative type was INT
+         * The last cumulative type was BIGINT or INT
          */
-        elseif ($last_cumulative_type == INT) {
+        elseif ($last_cumulative_type == BIGINT || $last_cumulative_type == INT) {
 		    /* Convert $last_cumulative_size from int to decimal format */
 		    $size = PMA_getDecimalSize($cell);
 		    
@@ -636,11 +657,11 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type
         }
 	}
     /**
-     * What to do if the current cell is of type INT
+     * What to do if the current cell is of type BIGINT or INT
      */
-    elseif ($curr_type == INT) {
+    elseif ($curr_type == BIGINT || $curr_type == INT) {
         /**
-         * The last cumlative type was VARCHAR
+         * The last cumulative type was VARCHAR
          */
 		if ($last_cumulative_type == VARCHAR) {
 		    if ($curr_size >= $last_cumulative_size) {
@@ -650,7 +671,7 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type
             }
 		}
         /**
-         * The last cumlative type was DECIMAL
+         * The last cumulative type was DECIMAL
          */
         elseif ($last_cumulative_type == DECIMAL) {
             $oldM = PMA_getM($last_cumulative_size);
@@ -668,9 +689,9 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type
             }
 	    }
         /**
-         * The last cumlative type was INT
+         * The last cumulative type was BIGINT or INT
          */
-        elseif ($last_cumulative_type == INT) {
+        elseif ($last_cumulative_type == BIGINT || $last_cumulative_type == INT) {
 		    if ($curr_size >= $last_cumulative_size) {
 		        return $curr_size;
             } else {
@@ -714,6 +735,7 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type
  * @access  public
  *
  * @uses    DECIMAL
+ * @uses    BIGINT
  * @uses    INT
  * @uses    VARCHAR
  * @uses    NONE
@@ -721,13 +743,13 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type
  * @uses    strcmp()
  * @uses    strpos()
  * @uses    substr_count()
- * @param   int    $last_cumulative_type  Last cumulative column type  (VARCHAR or INT or DECIMAL or NONE)
+ * @param   int    $last_cumulative_type  Last cumulative column type  (VARCHAR or INT or BIGINT or DECIMAL or NONE)
  * @param   string &$cell                 String representation of the cell for which a best-fit type is to be determined
- * @return  int                           The MySQL type representation (VARCHAR or INT or DECIMAL or NONE)
+ * @return  int                           The MySQL type representation (VARCHAR or INT or BIGINT or DECIMAL or NONE)
  */
 function PMA_detectType($last_cumulative_type, &$cell) {
     /**
-     * If numeric, determine if decimal or int
+     * If numeric, determine if decimal, int or bigint
      * Else, we call it varchar for simplicity
      */
     
@@ -741,7 +763,11 @@ function PMA_detectType($last_cumulative_type, &$cell) {
         if ($cell == (string)(float)$cell && strpos($cell, ".") !== false && substr_count($cell, ".") == 1) {
             return DECIMAL;
         } else {
-            return INT;
+		if (abs($cell) > 2147483647) {
+			return BIGINT;
+		} else {
+			return INT;
+		}
         }
     } else {
         return VARCHAR;
@@ -764,6 +790,7 @@ function PMA_detectType($last_cumulative_type, &$cell) {
  * @uses    ROWS
  * @uses    VARCHAR
  * @uses    DECIMAL
+ * @uses    BIGINT
  * @uses    INT
  * @uses    NONE
  * @uses    count()
@@ -808,21 +835,25 @@ function PMA_analyzeTable(&$table) {
 				$sizes[$i] = PMA_detectSize($sizes[$i], $types[$i], $curr_type, $table[ROWS][$j][$i]);
 				
 				/**
-                 * If a type for this column has alreday been delcared,
+				 * If a type for this column has already been declared,
 				 * only alter it if it was a number and a varchar was found
-                 */
-                if ($curr_type != NONE) {
+				 */
+				if ($curr_type != NONE) {
 					if ($curr_type == VARCHAR) {
 						$types[$i] = VARCHAR;
 					} else if ($curr_type == DECIMAL) {
 						if ($types[$i] != VARCHAR) {
 							$types[$i] = DECIMAL;
 						}
+					} else if ($curr_type == BIGINT) {
+						if ($types[$i] != VARCHAR && $types[$i] != DECIMAL) {
+							$types[$i] = BIGINT;
+						}
 					} else if ($curr_type == INT) {
-                        if ($types[$i] != VARCHAR && $types[$i] != DECIMAL) {
-                            $types[$i] = INT;
-                        }
-                    }
+						if ($types[$i] != VARCHAR && $types[$i] != DECIMAL && $types[$i] != BIGINT) {
+							$types[$i] = INT;
+						}
+					}
 				}
 			}
 		}
@@ -952,7 +983,7 @@ function PMA_buildSQL($db_name, &$tables, &$analyses = NULL, &$additional_sql =
     }
 
     if ($analyses != NULL) {
-        $type_array = array(NONE => "NULL", VARCHAR => "varchar", INT => "int", DECIMAL => "decimal");
+        $type_array = array(NONE => "NULL", VARCHAR => "varchar", INT => "int", DECIMAL => "decimal", BIGINT => "bigint");
         
         /* TODO: Do more checking here to make sure they really are matched */
         if (count($tables) != count($analyses)) {
diff --git a/tbl_change.php b/tbl_change.php
index aa1a74f..f419bb1 100644
--- a/tbl_change.php
+++ b/tbl_change.php
@@ -497,7 +497,7 @@ foreach ($rows as $row_id => $vrow) {
             if (($cfg['ProtectBinary'] && $field['is_blob'] && !$is_upload)
              || ($cfg['ProtectBinary'] == 'all' && $field['is_binary'])) {
                 echo '        <td align="center">' . $strBinary . '</td>' . "\n";
-            } elseif (strstr($field['True_Type'], 'enum') || strstr($field['True_Type'], 'set')) {
+            } elseif (strstr($field['True_Type'], 'enum') || strstr($field['True_Type'], 'set') || 'geometry' == $field['pma_type']) {
                 echo '        <td align="center">--</td>' . "\n";
             } else {
                 ?>
@@ -1027,6 +1027,10 @@ foreach ($rows as $row_id => $vrow) {
                 }
             } // end if (web-server upload directory)
         } // end elseif (binary or blob)
+
+        elseif ('geometry' == $field['pma_type']) {
+            // ignore this column to avoid changing it
+        }
         else {
             // field size should be at least 4 and max 40
             $fieldsize = min(max($field['len'], 4), 40);
diff --git a/tbl_operations.php b/tbl_operations.php
index 98e5f1b..10d7cd3 100644
--- a/tbl_operations.php
+++ b/tbl_operations.php
@@ -49,11 +49,11 @@ PMA_DBI_select_db($GLOBALS['db']);
 require './libraries/tbl_info.inc.php';
 
 // define some globals here, for improved syntax in the conditionals
-$is_myisam_or_maria = $is_isam = $is_innodb = $is_berkeleydb = $is_maria = $is_pbxt = false;
+$is_myisam_or_aria = $is_isam = $is_innodb = $is_berkeleydb = $is_aria = $is_pbxt = false;
 // set initial value of these globals, based on the current table engine
 PMA_set_global_variables_for_engine($tbl_type);
 
-if ($is_maria) {
+if ($is_aria) {
     // the value for transactional can be implicit
     // (no create option found, in this case it means 1)
     // or explicit (option found with a value of 0 or 1)
@@ -95,7 +95,7 @@ if (isset($_REQUEST['submitoptions'])) {
         $tbl_type = $_REQUEST['new_tbl_type'];
         // reset the globals for the new engine
         PMA_set_global_variables_for_engine($tbl_type);
-        if ($is_maria) {
+        if ($is_aria) {
             $transactional = (isset($transactional) && $transactional == '0') ? '0' : '1';
             $page_checksum = (isset($page_checksum)) ? $page_checksum : '';
         }
@@ -106,7 +106,7 @@ if (isset($_REQUEST['submitoptions'])) {
         $table_alters[] = 'DEFAULT ' . PMA_generateCharsetQueryPart($_REQUEST['tbl_collation']);
     }
 
-    if (($is_myisam_or_maria || $is_isam)
+    if (($is_myisam_or_aria || $is_isam)
       && isset($_REQUEST['new_pack_keys'])
       && $_REQUEST['new_pack_keys'] != (string)$pack_keys) {
         $table_alters[] = 'pack_keys = ' . $_REQUEST['new_pack_keys'];
@@ -114,37 +114,37 @@ if (isset($_REQUEST['submitoptions'])) {
 
     $checksum = empty($checksum) ? '0' : '1';
     $_REQUEST['new_checksum'] = empty($_REQUEST['new_checksum']) ? '0' : '1';
-    if ($is_myisam_or_maria
+    if ($is_myisam_or_aria
       && $_REQUEST['new_checksum'] !== $checksum) {
         $table_alters[] = 'checksum = ' . $_REQUEST['new_checksum'];
     }
 
     $_REQUEST['new_transactional'] = empty($_REQUEST['new_transactional']) ? '0' : '1';
-    if ($is_maria
+    if ($is_aria
       && $_REQUEST['new_transactional'] !== $transactional) {
         $table_alters[] = 'TRANSACTIONAL = ' . $_REQUEST['new_transactional'];
     }
 
     $_REQUEST['new_page_checksum'] = empty($_REQUEST['new_page_checksum']) ? '0' : '1';
-    if ($is_maria
+    if ($is_aria
       && $_REQUEST['new_page_checksum'] !== $page_checksum) {
         $table_alters[] = 'PAGE_CHECKSUM = ' . $_REQUEST['new_page_checksum'];
     }
 
     $delay_key_write = empty($delay_key_write) ? '0' : '1';
     $_REQUEST['new_delay_key_write'] = empty($_REQUEST['new_delay_key_write']) ? '0' : '1';
-    if ($is_myisam_or_maria
+    if ($is_myisam_or_aria
       && $_REQUEST['new_delay_key_write'] !== $delay_key_write) {
         $table_alters[] = 'delay_key_write = ' . $_REQUEST['new_delay_key_write'];
     }
 
-    if (($is_myisam_or_maria || $is_innodb || $is_pbxt)
+    if (($is_myisam_or_aria || $is_innodb || $is_pbxt)
       &&  ! empty($_REQUEST['new_auto_increment'])
       && (! isset($auto_increment) || $_REQUEST['new_auto_increment'] !== $auto_increment)) {
         $table_alters[] = 'auto_increment = ' . PMA_sqlAddslashes($_REQUEST['new_auto_increment']);
     }
 
-    if (($is_myisam_or_maria || $is_innodb || $is_pbxt)
+    if (($is_myisam_or_aria || $is_innodb || $is_pbxt)
       &&  ! empty($_REQUEST['new_row_format'])
       && (! isset($row_format) || strtolower($_REQUEST['new_row_format']) !== strtolower($row_format))) {
         $table_alters[] = 'ROW_FORMAT = ' . PMA_sqlAddslashes($_REQUEST['new_row_format']);
@@ -364,7 +364,7 @@ if (strstr($show_comment, '; InnoDB free') === false) {
         </td>
     </tr>
 <?php
-if ($is_myisam_or_maria || $is_isam) {
+if ($is_myisam_or_aria || $is_isam) {
     ?>
     <tr>
         <td><label for="new_pack_keys">PACK_KEYS</label></td>
@@ -384,7 +384,7 @@ if ($is_myisam_or_maria || $is_isam) {
     <?php
 } // end if (MYISAM|ISAM)
 
-if ($is_myisam_or_maria) {
+if ($is_myisam_or_aria) {
     ?>
     <tr><td><label for="new_checksum">CHECKSUM</label></td>
         <td><input type="checkbox" name="new_checksum" id="new_checksum"
@@ -407,7 +407,7 @@ if ($is_myisam_or_maria) {
     <?php
 } // end if (MYISAM)
 
-if ($is_maria) {
+if ($is_aria) {
     ?>
     <tr><td><label for="new_transactional">TRANSACTIONAL</label></td>
         <td><input type="checkbox" name="new_transactional" id="new_transactional"
@@ -428,10 +428,10 @@ if ($is_maria) {
     </tr>
 
     <?php
-} // end if (MARIA)
+} // end if (ARIA)
 
 if (isset($auto_increment) && strlen($auto_increment) > 0
-  && ($is_myisam_or_maria || $is_innodb || $is_pbxt)) {
+  && ($is_myisam_or_aria || $is_innodb || $is_pbxt)) {
     ?>
     <tr><td><label for="auto_increment_opt">AUTO_INCREMENT</label></td>
         <td><input type="text" name="new_auto_increment" id="auto_increment_opt"
@@ -444,6 +444,11 @@ if (isset($auto_increment) && strlen($auto_increment) > 0
 // option values as keys then the dropdown option labels
 
 $possible_row_formats = array(
+     'ARIA'  => array(
+        'FIXED'     => 'FIXED',
+        'DYNAMIC'   => 'DYNAMIC',
+        'PAGE'      => 'PAGE'
+            ),
      'MARIA'  => array(
         'FIXED'     => 'FIXED',
         'DYNAMIC'   => 'DYNAMIC',
@@ -570,8 +575,8 @@ if (isset($possible_row_formats[$tbl_type])) {
 <ul>
 <?php
 // Note: BERKELEY (BDB) is no longer supported, starting with MySQL 5.1
-if ($is_myisam_or_maria || $is_innodb || $is_berkeleydb) {
-    if ($is_myisam_or_maria || $is_innodb) {
+if ($is_myisam_or_aria || $is_innodb || $is_berkeleydb) {
+    if ($is_myisam_or_aria || $is_innodb) {
         $this_url_params = array_merge($url_params,
             array('sql_query' => 'CHECK TABLE ' . PMA_backquote($GLOBALS['table'])));
         ?>
@@ -591,7 +596,7 @@ if ($is_myisam_or_maria || $is_innodb || $is_berkeleydb) {
     </li>
         <?php
     }
-    if ($is_myisam_or_maria || $is_berkeleydb) {
+    if ($is_myisam_or_aria || $is_berkeleydb) {
         $this_url_params = array_merge($url_params,
             array('sql_query' => 'ANALYZE TABLE ' . PMA_backquote($GLOBALS['table'])));
         ?>
@@ -601,7 +606,7 @@ if ($is_myisam_or_maria || $is_innodb || $is_berkeleydb) {
     </li>
         <?php
     }
-    if ($is_myisam_or_maria) {
+    if ($is_myisam_or_aria) {
         $this_url_params = array_merge($url_params,
             array('sql_query' => 'REPAIR TABLE ' . PMA_backquote($GLOBALS['table'])));
         ?>
@@ -611,7 +616,7 @@ if ($is_myisam_or_maria || $is_innodb || $is_berkeleydb) {
     </li>
         <?php
     }
-    if ($is_myisam_or_maria || $is_innodb || $is_berkeleydb) {
+    if ($is_myisam_or_aria || $is_innodb || $is_berkeleydb) {
         $this_url_params = array_merge($url_params,
             array('sql_query' => 'OPTIMIZE TABLE ' . PMA_backquote($GLOBALS['table'])));
         ?>
@@ -748,14 +753,14 @@ require_once './libraries/footer.inc.php';
 
 function PMA_set_global_variables_for_engine($tbl_type)
 {
-    global $is_myisam_or_maria, $is_innodb, $is_isam, $is_berkeleydb, $is_maria, $is_pbxt;
+    global $is_myisam_or_aria, $is_innodb, $is_isam, $is_berkeleydb, $is_aria, $is_pbxt;
 
-    $is_myisam_or_maria = $is_isam = $is_innodb = $is_berkeleydb = $is_maria = $is_pbxt = false;
+    $is_myisam_or_aria = $is_isam = $is_innodb = $is_berkeleydb = $is_aria = $is_pbxt = false;
     $upper_tbl_type = strtoupper($tbl_type);
 
-    //Options that apply to MYISAM usually apply to MARIA
-    $is_myisam_or_maria = ($upper_tbl_type == 'MYISAM' || $upper_tbl_type == 'MARIA');
-    $is_maria = ($upper_tbl_type == 'MARIA');
+    //Options that apply to MYISAM usually apply to ARIA
+    $is_myisam_or_aria = ($upper_tbl_type == 'MYISAM' || $upper_tbl_type == 'ARIA' || $upper_tbl_type == 'MARIA');
+    $is_aria = ($upper_tbl_type == 'ARIA');
 
     $is_isam = ($upper_tbl_type == 'ISAM');
     $is_innodb = ($upper_tbl_type == 'INNODB');
diff --git a/tbl_structure.php b/tbl_structure.php
index fbe844d..3242d48 100644
--- a/tbl_structure.php
+++ b/tbl_structure.php
@@ -405,7 +405,7 @@ while ($row = PMA_DBI_fetch_assoc($fields_rs)) {
         ?>
     </td>
     <?php
-        if (! empty($tbl_type) && ($tbl_type == 'MYISAM' || $tbl_type == 'MARIA')
+        if (! empty($tbl_type) && ($tbl_type == 'MYISAM' || $tbl_type == 'ARIA' || $tbl_type == 'MARIA')
             // FULLTEXT is possible on TEXT, CHAR and VARCHAR
             && (strpos(' ' . $type, 'text') || strpos(' ' . $type, 'char'))) {
             echo "\n";
@@ -460,7 +460,7 @@ if (! $tbl_is_view && ! $db_is_information_schema) {
         PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_unique', $strUnique, 'b_unique.png');
         PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_index', $strIndex, 'b_index.png');
     }
-    if (! empty($tbl_type) && ($tbl_type == 'MYISAM' || $tbl_type == 'MARIA')) {
+    if (! empty($tbl_type) && ($tbl_type == 'MYISAM' || $tbl_type == 'ARIA' || $tbl_type == 'MARIA')) {
         PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_fulltext', $strIdxFulltext, 'b_ftext.png');
     }
 }
@@ -688,7 +688,7 @@ if ($cfg['ShowStats']) {
             <?php
         }
         // Optimize link if overhead
-        if (isset($free_size) && ($tbl_type == 'MYISAM' || $tbl_type == 'MARIA' || $tbl_type == 'BDB')) {
+        if (isset($free_size) && ($tbl_type == 'MYISAM' || $tbl_type == 'ARIA' || $tbl_type == 'MARIA' || $tbl_type == 'BDB')) {
             ?>
     <tr class="tblFooters">
         <td colspan="3" align="center">
diff --git a/translators.html b/translators.html
index 37ad26b..a292bd1 100644
--- a/translators.html
+++ b/translators.html
@@ -11,7 +11,7 @@
     <link rel="icon" href="./favicon.ico" type="image/x-icon" />
     <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>phpMyAdmin 3.3.7 - Official translators</title>
+    <title>phpMyAdmin 3.3.8-rc1 - Official translators</title>
     <link rel="stylesheet" type="text/css" href="docs.css" />
 </head>
 
@@ -19,7 +19,7 @@
 <div id="header">
     <h1>
         <a href="http://www.phpmyadmin.net/">php<span class="myadmin">MyAdmin</span></a>
-        3.3.7 
+        3.3.8-rc1 
         official translators list
     </h1>
 </div>


hooks/post-receive
-- 
phpMyAdmin




More information about the Git mailing list