Merge lp:~stewart/percona-server/bug1012488 into lp:percona-server/5.5

Proposed by Stewart Smith on 2012-06-27
Status: Work in progress
Proposed branch: lp:~stewart/percona-server/bug1012488
Merge into: lp:percona-server/5.5
Diff against target: 12645 lines (+10373/-1867)
59 files modified
Percona-Server/plugin/percona-pam-for-mysql/.bzrignore (+1/-0)
Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt (+2/-0)
Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile (+9/-0)
Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html (+0/-499)
Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html (+0/-22)
Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t (+0/-469)
Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js (+0/-154)
Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css (+0/-271)
Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js (+0/-269)
Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js (+0/-151)
Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf (+0/-32)
Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h (+4/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/bootstrap.sh (+122/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/conf.py (+216/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/dbqp.rst (+21/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/index.rst (+34/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/kewpie.rst (+498/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/make.bat (+170/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/randgen.rst (+202/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sql-bench.rst (+182/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sysbench.rst (+123/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/test-run.rst (+494/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/writing_tests.rst (+100/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/kewpie.py (+131/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_execution.py (+139/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_management.py (+495/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/native/native_test_execution.py (+100/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/native/native_test_management.py (+201/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/sysbench/sysbench_test_execution.py (+162/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/sysbench/sysbench_test_management.py (+159/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/test_mode.py (+68/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/opts/defaults.py (+119/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/opts/matrix_manager.py (+51/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/opts/test_run_options.py (+575/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/drizzled.py (+236/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/galera.py (+359/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/mysqld.py (+506/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/percona.py (+287/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/server.py (+382/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/server_management.py (+507/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/codeTree.py (+489/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/code_management.py (+116/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/environment_management.py (+99/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/logging_management.py (+157/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/port_management.py (+196/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/system_management.py (+555/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/time_management.py (+118/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/test_mgmt/execution_management.py (+142/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/test_mgmt/test_execution.py (+325/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/test_mgmt/test_management.py (+300/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/crashme_methods.py (+127/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/mysqlBaseTestCase.py (+377/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/mysql_methods.py (+258/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/randgen_methods.py (+55/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/sqlbench_methods.py (+70/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/xtrabackup_methods.py (+109/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/percona_tests/percona_pam/pam_basic_test.py (+112/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/percona_tests/percona_pam/pam_negative_test.py (+112/-0)
Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/qp_data/uuid (+1/-0)
To merge this branch: bzr merge lp:~stewart/percona-server/bug1012488
Reviewer Review Type Date Requested Status
Alexey Kopytov (community) 2012-06-27 Needs Fixing on 2012-06-27
Review via email: mp+112280@code.launchpad.net

Description of the change

Update the bundled PAM plugin to latest PAM plugin BZR tree.

basically this adds the test suite and an OSX build fix.

http://jenkins.percona.com/job/percona-server-5.5-param/443/

To post a comment you must log in.
Alexey Kopytov (akopytov) wrote :

Sigh, kewpie again. Thanks to wonderful the idea of merging kewpie to every individual project, we now have a bunch of sysbench-related code, randgen-related code, xtrabackup-related code in plugin/percona-pam-for-mysql/test.

All of that is because of 2 rudementary tests pam_negative_test.py and pam_basic_test.py. There's absolutely no reason to base them on kewpie. Apparently there was also an attempt to use the XtraBackup test suite, because there's also plugin/percona-pam-for-mysql/test/bootstrap.sh which is a verbatim copy from the XtraBackup tree and is unused in PAM plugin tests.

There's also the following WTF thing:

=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/qp_data'
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/qp_data/uuid'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/qp_data/uuid 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/qp_data/uuid 2012-02-22 21:56:10 +0000
@@ -0,0 +1 @@
+e5f64ede-8707-4589-9c7a-fc598c0e2f6f
\ No newline at end of file

=== added symlink 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/workdir'
=== target is u'/dev/shm/qp_workdir_root_e5f64ede-8707-4589-9c7a-fc598c0e2f6f'

This has to be fixed 'upstream' before merging this into the server tree.

review: Needs Fixing
Stewart Smith (stewart) wrote :

Alexey Kopytov <email address hidden> writes:
> All of that is because of 2 rudementary tests pam_negative_test.py and
> pam_basic_test.py. There's absolutely no reason to base them on
> kewpie. Apparently there was also an attempt to use the XtraBackup
> test suite, because there's also
> plugin/percona-pam-for-mysql/test/bootstrap.sh which is a verbatim
> copy from the XtraBackup tree and is unused in PAM plugin tests.

Kewpie still needs a server to run, and bootstrap.sh is used to fetch it
(unless you're building a PS tree, in which case you can use that).

> There's also the following WTF thing:
>
> === added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/qp_data'
> === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/qp_data/uuid'
> --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/qp_data/uuid 1970-01-01 00:00:00 +0000
> +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/qp_data/uuid 2012-02-22 21:56:10 +0000
> @@ -0,0 +1 @@
> +e5f64ede-8707-4589-9c7a-fc598c0e2f6f
> \ No newline at end of file
>
> === added symlink 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/workdir'
> === target is u'/dev/shm/qp_workdir_root_e5f64ede-8707-4589-9c7a-fc598c0e2f6f'
>
> This has to be fixed 'upstream' before merging this into the server tree.

Yep, these shouldn't be there.

--
Stewart Smith

Alexey Kopytov (akopytov) wrote :

On 09.07.12 9:28, Stewart Smith wrote:
> Alexey Kopytov <email address hidden> writes:
>> All of that is because of 2 rudementary tests pam_negative_test.py and
>> pam_basic_test.py. There's absolutely no reason to base them on
>> kewpie. Apparently there was also an attempt to use the XtraBackup
>> test suite, because there's also
>> plugin/percona-pam-for-mysql/test/bootstrap.sh which is a verbatim
>> copy from the XtraBackup tree and is unused in PAM plugin tests.
>
> Kewpie still needs a server to run, and bootstrap.sh is used to fetch it
> (unless you're building a PS tree, in which case you can use that).

Well, in this case we do build in a PS tree.

Besides, bootstrap.sh is a verbatim copy from the XB tree, so I wonder
how it's arguments (innodb51, xtradb51, etc.) apply here.

Unmerged revisions

275. By Stewart Smith on 2012-06-27

merge latest PAM plugin sources

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Percona-Server/plugin/percona-pam-for-mysql/.bzrignore'
2--- Percona-Server/plugin/percona-pam-for-mysql/.bzrignore 2012-03-15 14:43:05 +0000
3+++ Percona-Server/plugin/percona-pam-for-mysql/.bzrignore 2012-06-27 07:03:19 +0000
4@@ -19,3 +19,4 @@
5 *.tar.gz
6 m4/*.m4
7 doc/build
8+doc/source/percona-theme
9
10=== modified file 'Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt'
11--- Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt 2012-05-08 05:19:39 +0000
12+++ Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt 2012-06-27 07:03:19 +0000
13@@ -18,6 +18,8 @@
14 CHECK_LIBRARY_EXISTS(mysqlclient mysql_init "" HAVE_MYSQLCLIENT)
15 CHECK_SYMBOL_EXISTS(getpwnam_r "pwd.h" HAVE_GETPWNAM_R)
16 CHECK_SYMBOL_EXISTS(getgrgid_r "grp.h" HAVE_GETGRGID_R)
17+CHECK_INCLUDE_FILES (security/pam_misc.h HAVE_SECURITY_PAM_MISC_H)
18+CHECK_INCLUDE_FILES (security/openpam.h HAVE_SECURITY_OPENPAM_H)
19 IF(HAVE_PAM AND HAVE_MYSQLCLIENT AND HAVE_GETPWNAM_R AND HAVE_GETGRGID_R)
20 SET(AUTH_PAM_COMMON_SOURCES
21 src/auth_pam_common.c src/lib_auth_pam_client.c src/lib_auth_pam_client.h
22
23=== modified file 'Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile'
24--- Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile 2011-10-25 10:51:19 +0000
25+++ Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile 2012-06-27 07:03:19 +0000
26@@ -37,6 +37,15 @@
27 -rm -rf $(BUILDDIR)/*
28
29 html:
30+ @echo "Downloading percona-theme ..."
31+ @wget -O percona-theme.tar.gz http://percona.com/docs/theme/percona-pam-for-mysql
32+ @echo "Extracting theme."
33+ @tar -zxf percona-theme.tar.gz
34+ @rm -rf source/percona-theme
35+ @mv percona-theme source/percona-theme
36+ @rm percona-theme.tar.gz
37+ @echo "Building html doc"
38+
39 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
40 @echo
41 @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
42
43=== removed directory 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme'
44=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html'
45--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html 2012-03-26 17:43:02 +0000
46+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html 1970-01-01 00:00:00 +0000
47@@ -1,499 +0,0 @@
48-{#
49- basic/layout.html
50- ~~~~~~~~~~~~~~~~~
51-
52- Master layout template for Sphinx themes.
53-
54- :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
55- :license: BSD, see LICENSE for details.
56-#}
57-{%- block doctype -%}
58-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
59- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
60-{%- endblock %}
61-{%- set reldelim1 = reldelim1 is not defined and ' &raquo;' or reldelim1 %}
62-{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
63-{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and
64- (sidebars != []) %}
65-{%- set url_root = pathto('', 1) %}
66-{# XXX necessary? #}
67-{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
68-{%- if not embedded and docstitle %}
69- {%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
70-{%- else %}
71- {%- set titlesuffix = "" %}
72-{%- endif %}
73-
74-{%- macro relbar() %}
75- <div class="related">
76- <h3>{{ _('Navigation') }}</h3>
77- <ul>
78- {%- for rellink in rellinks %}
79- <li class="right" {% if loop.first %}style="margin-right: 10px"{% endif %}>
80- <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}"
81- {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
82- {%- if not loop.first %}{{ reldelim2 }}{% endif %}</li>
83- {%- endfor %}
84- {%- block rootrellink %}
85- <li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>{{ reldelim1 }}</li>
86- {%- endblock %}
87- {%- for parent in parents %}
88- <li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li>
89- {%- endfor %}
90- {%- block relbaritems %} {% endblock %}
91- </ul>
92- </div>
93-{%- endmacro %}
94-
95-{%- macro sidebar() %}
96- {%- if render_sidebar %}
97- <div class="sphinxsidebar">
98- <div class="sphinxsidebarwrapper">
99- {%- block sidebarlogo %}
100- {%- if logo %}
101- <p class="logo"><a href="{{ pathto(master_doc) }}">
102- <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
103- </a></p>
104- {%- endif %}
105-
106-<div class="noborder" id="sidenavi">
107-
108- <div class="sidebanner" id="sidebanner">
109- <div class="header"><a href="/contact/sales">Call Us</a></div>
110- <div class="numbers">
111- <div style="padding-bottom: 4px">
112- +1-888-316-9775 (USA - Sales)<br>
113- +1-208-473-2904 (USA - Sales)
114- </div>
115- <div>
116- +44-208-133-0309 (UK - Sales)
117- </div>
118- <div>
119- +1-877-862-4316 (Emergency)
120- </div>
121- </div>
122- </div>
123- <div id="sidefloater"></div>
124-</div>
125-
126- {%- endblock %}
127- {%- if sidebars != None %}
128- {#- new style sidebar: explicitly include/exclude templates #}
129- {%- for sidebartemplate in sidebars %}
130- {%- include sidebartemplate %}
131- {%- endfor %}
132- {%- else %}
133- {#- old style sidebars: using blocks -- should be deprecated #}
134- {%- block serverseries %}
135- {%- endblock %}
136- {%- block sidebartoc %}
137- {%- include "localtoc.html" %}
138- {%- endblock %}
139- {%- block sidebarrel %}
140- {%- include "relations.html" %}
141- {%- endblock %}
142- {%- block sidebarsourcelink %}
143- {%- include "sourcelink.html" %}
144- {%- endblock %}
145- {%- if customsidebar %}
146- {%- include customsidebar %}
147- {%- endif %}
148- {%- block sidebarsearch %}
149- {%- include "searchbox.html" %}
150- {%- endblock %}
151- {%- endif %}
152-
153- </div>
154- </div>
155- {%- endif %}
156-{%- endmacro %}
157-
158-{%- macro script() %}
159- <script type="text/javascript">
160- var DOCUMENTATION_OPTIONS = {
161- URL_ROOT: '{{ url_root }}',
162- VERSION: '{{ release|e }}',
163- COLLAPSE_INDEX: false,
164- FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}',
165- HAS_SOURCE: {{ has_source|lower }}
166- };
167- </script>
168- {%- for scriptfile in script_files %}
169- <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
170- {%- endfor %}
171-{%- endmacro %}
172-
173-{%- macro css() %}
174- <link rel="stylesheet" href="{{ pathto('_static/percona.com.css', 1) }}" type="text/css" />
175- <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
176- <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
177- {%- for cssfile in css_files %}
178- <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
179- {%- endfor %}
180-{%- endmacro %}
181-
182-<html xmlns="http://www.w3.org/1999/xhtml">
183- <head>
184- <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" />
185- {{ metatags }}
186- {%- block htmltitle %}
187- <title>{{ title|striptags|e }}{{ titlesuffix }}</title>
188- {%- endblock %}
189-
190- {{ css() }}
191- {%- if not embedded %}
192- {{ script() }}
193- {%- if use_opensearch %}
194- <link rel="search" type="application/opensearchdescription+xml"
195- title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
196- href="{{ pathto('_static/opensearch.xml', 1) }}"/>
197- {%- endif %}
198-
199-<script src="{{ pathto('_static/percona.com.js', 1)}}" type="text/javascript"></script>
200-
201- {%- if favicon %}
202- <link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
203- {%- endif %}
204- {%- endif %}
205-{%- block linktags %}
206- {%- if hasdoc('about') %}
207- <link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
208- {%- endif %}
209- {%- if hasdoc('genindex') %}
210- <link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
211- {%- endif %}
212- {%- if hasdoc('search') %}
213- <link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
214- {%- endif %}
215- {%- if hasdoc('copyright') %}
216- <link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
217- {%- endif %}
218- <link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
219- {%- if parents %}
220- <link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}" />
221- {%- endif %}
222- {%- if next %}
223- <link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
224- {%- endif %}
225- {%- if prev %}
226- <link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
227- {%- endif %}
228-{%- endblock %}
229-{%- block extrahead %} {% endblock %}
230- </head>
231- <body>
232-
233-{%- block header %}
234-
235- <!-- <div id="stickywrapper"> -->
236- <!-- <div id="stickycontent"> -->
237- <div id="header"><div class="header">
238- <div class="logo"><a href="http://www.percona.com/" onfocus="this.blur()"><img src="http://s3.percona.com/ui-logo.png" alt="Percona Performance Consulting Experts" width="240" height="55" /></a></div>
239- <div class="right">
240- <div class="searchlink"><a onmouseover="SEARCH.Open()"><img id="searchlink-anchor" src="http://s2.percona.com/ui-search.png" alt="" /></a></div>
241- <span class="inv"><![CDATA[<noindex>]]></span>
242- <div class="navicontainer"><div class="navi">
243- <span id="navilink-span-about-us" ><a id="navilink-a-about-us" href="http://www.percona.com/about-us/">About Us</a></span><span id="navilink-span-mysql-consulting" ><a id="navilink-a-mysql-consulting" href="http://www.percona.com/mysql-consulting/">Consulting</a></span><span id="navilink-span-support" ><a id="navilink-a-support" href="http://www.percona.com/mysql-support/">Support</a></span><span id="navilink-span-training" ><a id="navilink-a-training" href="http://www.percona.com/training/">Training</a></span><span id="navilink-span-development" ><a id="navilink-a-development" href="http://www.percona.com/development/">Development</a></span><span id="navilink-span-software" class="selected"><a class="selected" id="navilink-a-software" href="http://www.percona.com/software/">Software</a></span><span id="navilink-span-events" ><a id="navilink-a-events" href="http://www.percona.com/live/">Events</a></span><span id="navilink-span-contact" ><a id="navilink-a-contact" href="http://www.percona.com/contact/">Contact Us</a></span> </div></div>
244-
245- <span class="inv"><![CDATA[</noindex>]]></span>
246- <span class="inv"><![CDATA[</noindex>]]></span>
247- </div>
248- </div></div>
249- <div id="stripe"></div>
250-
251-{% endblock %}
252-
253- <!-- <div id="stripe"></div> -->
254-
255-{%- block content %}
256-
257-
258-
259- {%- block sidebar1 %} {# possible location for sidebar #} {% endblock %}
260-
261- <div class="document">
262-
263-
264-
265- {%- block document %}
266- <div class="documentwrapper">
267- {%- if render_sidebar %}
268- <div class="bodywrapper">
269- {%- endif %}
270-
271- {%- block relbar1 %}{{ relbar() }}{% endblock %}
272-
273- <div class="body">
274- {% block body %} {% endblock %}
275- </div>
276-
277- {%- block relbar2 %}{{ relbar() }}
278-
279- {%- if render_sidebar %}
280- </div>
281- {%- endif %}
282-
283-
284-
285- </div>
286-
287- {%- endblock %}
288-
289- {%- block sidebar2 %}{{ sidebar() }}{% endblock %}
290-
291- <div class="clearer"></div>
292-
293- {%- if last_updated %}
294- {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
295- {%- endif %}
296-
297- <div class="license">
298-
299- {%- if show_copyright %}
300- {%- if hasdoc('copyright') %}
301- {% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
302- {%- else %}
303- {% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}.{% endtrans %}
304- {%- endif %}
305- {%- endif %}
306-
307- <br />
308- Except where otherwise noted, this documentation is licensed under the following license:
309- <br />
310- <a class="urlextern" rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/">
311- CC Attribution-ShareAlike 2.0 Generic</a><br />
312-
313- {%- if show_sphinx %}
314- {% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
315- {%- endif %}
316-
317- </div>
318-
319- </div>
320- {%- endblock %}
321-
322- {% endblock %}
323-
324-{%- block footer %}
325-
326- <div class="file-bugs">
327- This documentation is developed in Launchpad as part of the <a href="https://code.launchpad.net/percona-toolkit">Percona Toolkit source code</a>.<br/>
328- If you spotted innacuracies, errors, don't understood it or you think something is missing or should be improved, please <a href="https://bugs.launchpad.net/percona-toolkit/+filebug?field.tags=doc&amp;field.comment=[In:Percona Toolkit Documentation]&amp;?field.tags=doc&amp;field.title=[DOC] ">file a bug</a>.
329-
330- </div>
331-
332- <div id="support-ribbon" class="vertical" style="z-index: 1;">
333- <div id="support-suboptions">
334- <ul>
335- <li><a title="Contact Me" href="http://form.percona.com/ContactMe.html" style="background: url('http://s2.percona.com/buttons/btn_contact-us.png?1');"><span>Contact Us</span></a></li>
336- <li><a title="Customer Portal Log In" href="https://customers.percona.com/" style="background: url('http://s2.percona.com/buttons/btn_customer.png?1');"><span>Customer Portal Log In</span></a></li>
337- <li><a title="Attend a Webinar" href="http://percona.com/webinars/" style="background: url('http://s2.percona.com/buttons/btn_attend-a-webinar.png?1');"><span>Attend a Webinar</span></a></li>
338- <li><a title="Download Software" href="http://percona.com/downloads/" style="background:url('http://s2.percona.com/buttons/btn_download.png?1');"><span>Download Software</span></a></li>
339- <li><a title="Register for Newsletters" href="http://percona.com/subscribe/" style="background: url('http://s2.percona.com/buttons/btn_register.png?1');"><span>Register for Newsletters</span></a></li>
340-
341- </ul>
342- </div>
343- </div>
344-
345- <div id="footer">
346-
347- <div class="footer">
348- <div class="logo"><img width="110" height="25" alt="" src="{{ pathto('_static/ui-footer-logo.png', 1) }}">
349- </div>
350-
351- <div class="text">
352- <span class="inv"><!--[CDATA[<noindex-->]]&gt;</span>
353- Call us: 1-888-316-9775 • <a href="/contact">Contact Us</a><br>
354- MySQL and InnoDB are trademarks of Oracle Corp.<br>
355- Proudly running <a href="/software/percona-server/">Percona Server<span id="recentServerVersion"></span></a><br>
356- Copyright &copy; 2006-2011 Percona Inc.<br>
357- <a href="/about-us/policies/">Copyright, Trademark, and Privacy Policy</a> • <a href="/sitemap/">Sitemap</a>
358- <span class="inv"><!--[CDATA[</noindex-->]]&gt;</span>
359- </div>
360- </div>
361-
362- </div>
363-{%- endblock %}
364-<span class="inv"><!--[CDATA[<noindex-->]]&gt;</span>
365-<div id="submenus">
366- <div class="navi-dropdown" id="navi-dropdown-about-us">
367- <div class="navi-dropdown-header-l"><!-- //--></div>
368- <div class="navi-dropdown-content">
369- <div class="item"><a href="http://www.percona.com/about-us/our-mission/">Our Mission</a></div>
370- <div class="item"><a href="http://www.percona.com/about-us/why-percona/">Why Percona?</a></div>
371- <div class="item"><a href="http://www.percona.com/about-us/procedures/">Coordinating with Percona</a></div>
372- <div class="item"><a href="http://www.percona.com/about-us/customers/">Customers</a></div>
373- <div class="item"><a href="http://www.percona.com/webinars/">Webinars</a></div>
374- <div class="item"><a href="http://www.percona.com/about-us/mysql-case-studies/">MySQL Case Studies</a></div>
375- <div class="item"><a href="http://www.percona.com/about-us/our-team/">Our Team</a></div>
376-
377- <div class="item"><a href="http://www.percona.com/about-us/books/">Our Books</a></div>
378- <div class="item"><a href="http://www.percona.com/about-us/blogs/">Our Blogs</a></div>
379- <div class="item"><a href="http://www.percona.com/about-us/mysql-white-papers/">MySQL White Papers</a></div>
380- <div class="item"><a href="http://www.percona.com/about-us/conferences/">Conferences</a></div>
381- <div class="item"><a href="http://www.percona.com/about-us/presentations/">Presentations</a></div>
382- <div class="item"><a href="http://www.percona.com/about-us/newsletters/">Newsletters</a></div>
383- <div class="item"><a href="http://www.percona.com/about-us/pressreleases/">Press Releases</a></div>
384- <div class="item"><a href="http://www.percona.com/about-us/percona-in-the-news/">In The News</a></div>
385- <div class="item"><a href="http://www.percona.com/about-us/careers/">Careers</a></div>
386-
387- </div>
388- <div class="navi-dropdown-footer"><!-- //--></div>
389- </div>
390- <div class="navi-dropdown" id="navi-dropdown-mysql-consulting">
391- <div class="navi-dropdown-header-l"><!-- //--></div>
392- <div class="navi-dropdown-content">
393- <div class="item"><a href="http://www.percona.com/mysql-consulting/overview/">MySQL Consulting Overview</a></div>
394- <div class="item"><a href="http://www.percona.com/mysql-consulting/prices/">MySQL Consulting Prices</a></div>
395- <div class="item"><a href="http://www.percona.com/mysql-consulting/architecture/">MySQL Architecture &amp; Design</a></div>
396- <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-backups/">MySQL Backups</a></div>
397- <div class="item"><a href="http://www.percona.com/mysql-consulting/cloud-computing/">MySQL Cloud Solutions</a></div>
398-
399- <div class="item"><a href="http://www.percona.com/mysql-consulting/cluster/">MySQL Cluster Consulting</a></div>
400- <div class="item"><a href="http://www.percona.com/mysql-consulting/data-warehousing/">MySQL Data Warehousing</a></div>
401- <div class="item"><a href="http://www.percona.com/mysql-consulting/data-recovery/">MySQL Data Recovery</a></div>
402- <div class="item"><a href="http://www.percona.com/mysql-consulting/high-availability/">MySQL High Availability</a></div>
403- <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-monitoring-graphing/">MySQL Monitoring &amp; Graphing</a></div>
404- <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-onsite-consulting/">MySQL Onsite Consulting</a></div>
405- <div class="item"><a href="http://www.percona.com/mysql-consulting/performance-audit/">MySQL Performance Audit</a></div>
406- <div class="item"><a href="http://www.percona.com/mysql-consulting/remote-dba/">MySQL Remote DBA</a></div>
407-
408- <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-replication/">MySQL Replication</a></div>
409- <div class="item"><a href="http://www.percona.com/mysql-consulting/upgrade/">MySQL Version Upgrades</a></div>
410- <div class="item"><a href="http://www.percona.com/mysql-consulting/24x7-emergency/">Emergency 24&times;7 Consulting</a></div>
411- <div class="item"><a href="http://www.percona.com/mysql-consulting/migration/">Migration to MySQL</a></div>
412- <div class="item"><a href="http://www.percona.com/drizzle-consulting/">Drizzle Consulting</a></div>
413- <div class="item"><a href="http://www.percona.com/mysql-consulting/sphinx/">Sphinx Consulting</a></div>
414- <div class="item"><a href="http://www.percona.com/mysql-consulting/drbd/">DRBD Consulting</a></div>
415- <div class="item"><a href="http://www.percona.com/mysql-consulting/memcached/">Memcached Consulting</a></div>
416-
417- <div class="item"><a href="http://www.percona.com/mysql-consulting/other-services/">Other Consulting Services</a></div>
418- </div>
419- <div class="navi-dropdown-footer"><!-- //--></div>
420- </div>
421- <div class="navi-dropdown" id="navi-dropdown-support">
422- <div class="navi-dropdown-header-l"><!-- //--></div>
423- <div class="navi-dropdown-content">
424- <div class="item"><a href="http://www.percona.com/mysql-support/">MySQL Support Overview</a></div>
425- <div class="item"><a href="http://www.percona.com/prices/mysql-support/">MySQL Support Prices</a></div>
426- <div class="item"><a href="http://www.percona.com/mysql-support/policies/">MySQL Support Policies</a></div>
427- <div class="item"><a href="http://www.percona.com/mysql-support/consulting-vs-support/">Consulting vs. Support</a></div>
428- <div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div>
429-
430- </div>
431- <div class="navi-dropdown-footer"><!-- //--></div>
432- </div>
433- <div class="navi-dropdown" id="navi-dropdown-training">
434- <div class="navi-dropdown-header-l"><!-- //--></div>
435- <div class="navi-dropdown-content">
436- <div class="item"><a href="http://www.percona.com/training/">MySQL Training Overview</a></div>
437- <div class="item"><a href="http://www.percona.com/prices/training/">MySQL Training Prices</a></div>
438- <div class="item"><a href="http://www.percona.com/training/classes/dba/">MySQL DBA Training</a></div>
439- <div class="item"><a href="http://www.percona.com/training/classes/developers/">MySQL Developer Training</a></div>
440- <div class="item"><a href="http://www.percona.com/training/classes/operations/">MySQL Operations Training</a></div>
441- <div class="item"><a href="http://www.percona.com/training/classes/innodb/">InnoDB &amp; XtraDB Training</a></div>
442-
443- <div class="item"><a href="http://www.percona.com/training/classes/custom-onsite/">Custom Onsite Training</a></div>
444- </div>
445- <div class="navi-dropdown-footer"><!-- //--></div>
446- </div>
447- <div class="navi-dropdown" id="navi-dropdown-development">
448- <div class="navi-dropdown-header-l"><!-- //--></div>
449- <div class="navi-dropdown-content">
450- <div class="item"><a href="http://www.percona.com/development/mysql/">MySQL Development Overview</a></div>
451- <div class="item"><a href="http://www.percona.com/development/prices/">Custom Development Prices</a></div>
452- <div class="item"><a href="http://www.percona.com/development/maintenance/">MySQL Support Overview</a></div>
453- <div class="item"><a href="http://www.percona.com/development/benchmarking/">Custom Product Evaluation</a></div>
454- <div class="item"><a href="http://www.percona.com/development/maatkit/">Custom Maatkit Development</a></div>
455-
456- <div class="item"><a href="http://www.percona.com/development/custom-tools/">Custom Tools Development</a></div>
457- </div>
458- <div class="navi-dropdown-footer"><!-- //--></div>
459- </div>
460- <div class="navi-dropdown" id="navi-dropdown-software">
461- <div class="navi-dropdown-header-l"><!-- //--></div>
462- <div class="navi-dropdown-content">
463- <div class="item"><a href="http://www.percona.com/software/">Percona Software for MySQL</a></div>
464- <div class="item"><a href="http://www.percona.com/software/percona-server/">Percona Server with XtraDB</a></div>
465- <div class="item"><a href="http://www.percona.com/software/percona-xtradb-cluster/">Percona XtraDB Cluster</a></div>
466- <div class="item"><a href="http://www.percona.com/software/percona-xtrabackup/">Percona XtraBackup</a></div>
467- <div class="item"><a href="http://www.percona.com/software/mysql-innodb-data-recovery-tools/">Data Recovery Toolkit</a></div>
468-
469- <div class="item"><a href="http://www.percona.com/software/percona-xtradb/">Percona XtraDB</a></div>
470- <div class="item"><a href="http://www.percona.com/software/percona-toolkit/">Percona Toolkit</a></div>
471- <div class="item"><a href="http://www.percona.com/prices/software/">Software Prices</a></div>
472- <div class="item"><a href="http://www.percona.com/downloads/">Downloads</a></div>
473- <div class="item"><a href="http://www.percona.com/software/repositories/">Repositories</a></div>
474- <div class="item"><a href="http://www.percona.com/software/documentation/">Documentation</a></div>
475- <div class="item"><a href="http://forum.percona.com">Forum</a></div>
476- <div class="item"><a href="http://groups.google.com/group/percona-discussion">Google Discussion</a></div>
477- <div class="item"><a href="https://launchpad.net/percona-server">Launchpad</a></div>
478-
479- </div>
480- <div class="navi-dropdown-footer"><!-- //--></div>
481- </div>
482- <div class="navi-dropdown" id="navi-dropdown-events">
483- <div class="navi-dropdown-header-r"><!-- //--></div>
484- <div class="navi-dropdown-content">
485- <div class="item"><a href="http://www.percona.com/live/mysql-conference-2012/">MySQL Conference &amp; Expo 2012</a></div>
486- <div class="item"><a href="http://www.percona.com/live/">Previous Percona Live Events</a></div>
487- </div>
488- <div class="navi-dropdown-footer"><!-- //--></div>
489- </div>
490-
491- <div class="navi-dropdown" id="navi-dropdown-contact">
492- <div class="navi-dropdown-header-r"><!-- //--></div>
493- <div class="navi-dropdown-content">
494- <div class="item"><a href="http://www.percona.com/contact/24x7-emergency/">24&times;7 Emergency</a></div>
495- <div class="item"><a href="http://www.percona.com/contact/sales/">Sales &amp; General Inquiries</a></div>
496- <div class="item"><a href="http://www.percona.com/contact/billing/">Billing Inquiries</a></div>
497- <div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div>
498- <div class="item"><a href="http://www.percona.com/contact/phone-directory/">Phone Directory</a></div>
499- <div class="item"><a href="http://www.percona.com/subscribe/">Subscribe to Newsletter</a></div>
500-
501- </div>
502- <div class="navi-dropdown-footer"><!-- //--></div>
503- </div>
504- <div id="search-dropdown" class="search-dropdown">
505- <div class="search-dropdown-header"><!-- //--></div>
506- <div class="search-dropdown-content">
507- <div class="search-info">Search Percona.com:</div>
508- <form method="get" action="http://search.percona.com/search/" id="search-form">
509- <div class="form"><input type="text" id="search-input" name="q" maxlength="100"></div>
510- </form>
511- </div>
512- <div class="search-dropdown-footer"><!-- //--></div>
513- </div>
514-</div>
515-<div id="stats">
516-<!-- GA //-->
517- <script src="http://www.percona.com/static/js/urchin.js" type="text/javascript"></script>
518- <script type="text/javascript">
519- _uacct = "UA-343802-3";
520- urchinTracker();
521- </script>
522-<!-- /GA //-->
523-<!-- NAVI //-->
524-<script type="text/javascript">//<![CDATA[
525-var navi = [{id:"about-us", direction: "l"},{id:"mysql-consulting", direction: "l"},{id:"support", direction: "l"},{id:"training", direction: "l"},{id:"development", direction: "l"},{id:"software", direction: "l"},{id:"events", direction: "r"},{id:"contact", direction: "r"}];
526-for(var i = 0, c = navi.length; i < c; i++) {
527-window.jQuery('#navilink-a-' + navi[i].id).bind('mouseover',{id: navi[i].id, direction:navi[i].direction}, function(e) { NAVI.Open(e.data.id, e.data.direction); } );
528-}
529-window.jQuery('#search-form').bind('submit', function() { window.location.href = jQuery('#search-form').attr('action') + jQuery('#search-input').val(); return false; });
530-//]]></script>
531-<!-- /NAVI //-->
532-<script type="text/javascript">
533-//<![CDATA[
534-Percona.host = 'www.percona.com';
535-Percona.getRecentServerVersion('#recentServerVersion');
536-//]]>
537-</script>
538-</div>
539- </body>
540-</html>
541-
542-
543-
544-{% if theme_collapsiblesidebar|tobool %}
545-{% set script_files = script_files + ['_static/sidebar.js'] %}
546-{% endif %}
547
548=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html'
549--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html 2011-10-25 10:51:19 +0000
550+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html 1970-01-01 00:00:00 +0000
551@@ -1,22 +0,0 @@
552-{#
553- basic/searchbox.html
554- ~~~~~~~~~~~~~~~~~~~~
555-
556- Sphinx sidebar template: quick search box.
557-
558- :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
559- :license: BSD, see LICENSE for details.
560-#}
561-{%- if pagename != "search" %}
562-<div id="searchbox" style="display: none; padding: 3px;">
563- <h3>{{ _('Quick search') }}</h3>
564- <form class="search" action="{{ pathto('search') }}" method="get">
565- <input type="text" name="q" size="18" />
566- <input type="submit" value="{{ _('Go') }}" />
567- <input type="hidden" name="check_keywords" value="yes" />
568- <input type="hidden" name="area" value="default" />
569- </form>
570-
571-</div>
572-<script type="text/javascript">$('#searchbox').show(0);</script>
573-{%- endif %}
574
575=== removed directory 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static'
576=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t'
577--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t 2011-10-25 10:51:19 +0000
578+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t 1970-01-01 00:00:00 +0000
579@@ -1,469 +0,0 @@
580-/*
581- * default.css_t
582- * ~~~~~~~~~~~~~
583- *
584- * Sphinx stylesheet -- default theme.
585- *
586- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
587- * :license: BSD, see LICENSE for details.
588- *
589- */
590-
591-@import url("basic.css");
592-
593-/* -- page layout ----------------------------------------------------------- */
594-
595-body {
596- font-family: Arial,Helvetica,sans-serif;
597- font-size: 14px;
598- background-color: #fff;
599- color: #333333;
600- line-height: 20px;
601- margin: 0;
602- padding: 0;
603-
604-}
605-
606-div.document {
607- background-color: #fff;
608- margin: 0 auto;
609- overflow: hidden;
610- padding: 30px 0;
611- width: 960px;
612-}
613-
614-div.documentwrapper {
615- /* float: left; */
616- /* width: 100%; */
617-
618-}
619-
620-div.bodywrapper {
621- margin: 10 0 0 0px;
622- width: 660px;
623- float:right;
624-}
625-
626-div.body {
627- background-color: #fff;
628- color: #333333;
629- padding: 0 0 20px;
630-}
631-
632-{%- if theme_rightsidebar|tobool %}
633-div.bodywrapper {
634- margin: 0 {{ theme_sidebarwidth }}px 0 0;
635-}
636-{%- endif %}
637-
638-div.footer {
639- /* color: {{ theme_footertextcolor }}; */
640- /* width: 100%; */
641- /* padding: 9px 0 9px 0; */
642- /* text-align: center; */
643- /* font-size: 75%; */
644- font: 80% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif;
645- background: none repeat scroll 0 0 #333333;
646- border-top: 2px solid #D95200;
647- overflow: hidden;
648-}
649-
650-div.footer a {
651- color: {{ theme_footertextcolor }};
652- text-decoration: underline;
653-}
654-
655-div.related {
656- background-color: #ccc;
657- line-height: 30px;
658- color: #333;
659- background: none repeat scroll 0 0 #F8F8F8;
660- border: 1px solid #E0E0E0;
661- clear: both;
662- padding: 10px;
663- width: 635px;
664- margin-bottom: 5px;
665-}
666-
667-div.related a {
668- color: #999;
669-}
670-
671-div.sphinxsidebar {
672- margin-left: 0px;
673- margin-right: 30px;
674- color: #eee;
675- font-family: Arial,Helvetica,sans-serif;
676- width: 260px;
677- {%- if theme_stickysidebar|tobool %}
678- top: 30px;
679- bottom: 0;
680- margin: 0;
681- position: fixed;
682- overflow: auto;
683- height: auto;
684- {%- endif %}
685- {%- if theme_rightsidebar|tobool %}
686- float: right;
687- {%- if theme_stickysidebar|tobool %}
688- right: 0;
689- {%- endif %}
690- {%- endif %}
691-}
692-
693-{%- if theme_stickysidebar|tobool %}
694-/* this is nice, but it it leads to hidden headings when jumping
695- to an anchor */
696-/*
697-div.related {
698- position: fixed;
699-}
700-
701-div.documentwrapper {
702- margin-top: 30px;
703-}
704-*/
705-{%- endif %}
706-
707-div.sphinxsidebar h3 {
708- /* font-family: {{ theme_headfont }}; */
709- color: #999;
710- font-size: 18px;
711- line-height: 15px;
712- font-weight: 400;
713- margin-left: 5px;
714- padding: 0;
715-}
716-
717-div.sphinxsidebar h3 a {
718- color: #333;
719-}
720-
721-div.sphinxsidebar a:hover {
722- /* color: #333; */
723-}
724-
725-div.sphinxsidebar h4 {
726- /* font-family: {{ theme_headfont }}; */
727- color: #666;
728- font-size: 18px;
729- font-weight: normal;
730- margin: 5px 0 0 5px;
731- padding: 0;
732-}
733-
734-div.sphinxsidebar p {
735- color: #333;
736- margin-bottom: 5px;
737- margin-left: 5px;
738-}
739-
740-div.sphinxsidebar p.topless {
741- margin: 5px 10px 10px 10px;
742-}
743-
744-div.sphinxsidebar ul {
745- margin: 10px;
746- padding-left: 5px;
747- color: #333;
748-}
749-
750-div.sphinxsidebar a {
751- color: #D12907;
752-}
753-
754-div.sphinxsidebar input {
755- border: 1px solid #999;
756- font-family: sans-serif;
757- font-size: 1em;
758-}
759-
760-{% if theme_collapsiblesidebar|tobool %}
761-/* for collapsible sidebar */
762-div#sidebarbutton {
763- background-color: {{ theme_sidebarbtncolor }};
764-}
765-{% endif %}
766-
767-/* -- hyperlink styles ------------------------------------------------------ */
768-
769-a {
770- color: #D12907;
771- text-decoration: underline;
772- border: medium none;
773- cursor: pointer;
774-}
775-
776-a:visited {
777- color: #D12907;
778- text-decoration: underline;
779-}
780-
781-a:hover {
782- color: #D12907;
783- text-decoration: underline;
784-}
785-
786-{% if theme_externalrefs|tobool %}
787-a.external {
788- text-decoration: none;
789- border-bottom: 1px dashed {{ theme_linkcolor }};
790-}
791-
792-a.external:hover {
793- text-decoration: none;
794- border-bottom: none;
795-}
796-
797-a.external:visited {
798- text-decoration: none;
799- border-bottom: 1px dashed {{ theme_visitedlinkcolor }};
800-}
801-{% endif %}
802-
803-/* -- body styles ----------------------------------------------------------- */
804-
805-div.body h1,
806-div.body h2,
807-div.body h3,
808-div.body h4,
809-div.body h5,
810-div.body h6 {
811- font-family: Arial,Helvetica,sans-serif;
812- background-color: #fff;
813- font-weight: 400;
814-
815- /* border-bottom: 1px solid #ccc; */
816- /* margin: 20px -20px 10px -20px; */
817- /* padding: 0; */
818- /* padding: 3px 0 3px 10px; */
819- text-decoration: none !important;
820-
821- border-bottom: 1px solid #E0E0E0;
822- font-size: 20px;
823- line-height: 20px;
824- margin: 30px 0 15px;
825- padding: 0 0 3px;
826- color: #000;
827-}
828-
829-div.body h1 {
830- font-size: 32px;
831- color: #D12907;
832- line-height: 40px;
833- margin: 10px 0 20px 0;
834- text-decoration: none !important;
835- border-bottom: none;
836- margin-top: 35px;
837-}
838-
839-div.body h2 { font-size: 150%; }
840-div.body h3 { font-size: 140%; }
841-div.body h4 { font-size: 120%; }
842-div.body h5 { font-size: 110%; }
843-div.body h6 { font-size: 100%; }
844-
845-a.headerlink {
846- color: {{ theme_headlinkcolor }};
847- font-size: 0.8em;
848- padding: 0 4px 0 4px;
849- text-decoration: none;
850-}
851-
852-a.headerlink:hover {
853- background-color: {{ theme_headlinkcolor }};
854- color: white;
855-}
856-
857-div.body dd, div.body li {
858- text-align: justify;
859-}
860-
861-div.body dt {
862- list-style-type: square;
863- /* margin: 8px 0 8px 30px; */
864- padding: 0 4px 0 5px;
865-
866-}
867-
868-div.body p {
869- text-align: justify;
870-/* line-height: 130%;*/
871- margin: 10px 0;
872-}
873-
874-/* div.body ul, */
875-div.body li {
876- list-style-type: square;
877- margin: 8px 0 8px 30px;
878- padding: 0 4px 0 5px;
879-}
880-
881-.reference em {
882- font-style: normal;
883-}
884-
885-.std-term {
886- font-style: normal;
887- font-weight: 400;
888- color: #FF7400
889-}
890-
891-div.admonition p.admonition-title + p {
892- display: inline;
893-}
894-
895-div.admonition p {
896- margin-bottom: 5px;
897-}
898-
899-div.admonition pre {
900- margin-bottom: 5px;
901-}
902-
903-div.admonition ul, div.admonition ol {
904- margin-bottom: 5px;
905-}
906-
907-div.note {
908- background-color: #eee;
909- border: 1px solid #ccc;
910-}
911-
912-div.seealso {
913- background-color: #ffc;
914- border: 1px solid #ff6;
915-}
916-
917-div.topic {
918- background-color: #eee;
919-}
920-
921-div.warning {
922- background-color: #ffe4e4;
923- border: 1px solid #f66;
924-}
925-
926-p.admonition-title {
927- display: inline;
928-}
929-
930-p.admonition-title:after {
931- content: ":";
932-}
933-
934-pre {
935- padding: 10px;
936- background-color: #F0E6D9/* {{ theme_codebgcolor }} */;
937- color: {{ theme_codetextcolor }};
938- line-height: 120%;
939- border: 1px dashed #ED9821;
940- font-size: 80%;
941- overflow: auto;
942- /* border-left: none; */
943- /* border-right: none; */
944-}
945-
946-tt {
947-/* background-color: #ecf0f3;
948- padding: 0 1px 0 1px;
949- font-size: 0.95em;*/
950- font-weight: 400;
951-}
952-
953-div.body td {
954- text-align: none;
955-}
956-
957-table.docutils th {
958- background-color: #DEE7EC;
959- border: 1px solid #8CACBB;
960- padding: 3px;
961- text-align: center;
962- font-style: normal;
963- font-weight: 400;
964-}
965-
966-table.docutils td {
967- border: 1px solid #8CACBB;
968- padding: 3px;
969- line-height: 16px;
970- vertical-align: middle;
971-}
972-
973-.warning tt {
974- background: #efc2c2;
975-}
976-
977-.note tt {
978- background: #d6d6d6;
979-}
980-
981-.viewcode-back {
982- font-family: {{ theme_bodyfont }};
983-}
984-
985-div.viewcode-block:target {
986- background-color: #f4debf;
987- border-top: 1px solid #ac9;
988- border-bottom: 1px solid #ac9;
989-}
990-
991-.file-bugs {
992- background: none repeat scroll 0 0 #E8E8E8;
993- border: 1px solid #E0E0E0;
994- clear: both;
995- color: #333333;
996- padding: 10px;
997- text-align: center;
998- font-size: 90%;
999-}
1000-
1001-div.footer .footer {
1002- margin: 0 auto;
1003- overflow: hidden;
1004- padding: 10px 0;
1005- width: 960px;
1006- border-top: none;
1007-}
1008-
1009-div.footer .footer .logo {
1010- float: left;
1011- overflow: hidden;
1012- padding: 17px 0 0;
1013-}
1014-
1015-div.footer .footer .text {
1016- color: #E0E0E0;
1017- float: right;
1018- font-family: Arial,Helvetica,sans-serif;
1019- font-size: 11px;
1020- line-height: 15px;
1021- overflow: hidden;
1022- text-align: right;
1023-}
1024-
1025-div.license {
1026- font-size: 80%;
1027- /* padding: 0.5em; */
1028- text-align: center;
1029- margin: 13px 0 -15px;
1030-}
1031-
1032-#sidenavi.noborder {
1033- border-right: medium none;
1034- border-top: medium none;
1035- margin: 0;
1036-}
1037-
1038-#sidenavi {
1039- color: #333333;
1040- /* float: left; */
1041- font-family: Arial,Helvetica,sans-serif;
1042- font-size: 18px;
1043- line-height: 25px;
1044- overflow: hidden;
1045- padding: 10px 0 8px 0px;
1046- width: 255px;
1047-}
1048-
1049
1050=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/email-small.png'
1051Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/email-small.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/email-small.png 1970-01-01 00:00:00 +0000 differ
1052=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js'
1053--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js 2011-10-25 10:51:19 +0000
1054+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js 1970-01-01 00:00:00 +0000
1055@@ -1,154 +0,0 @@
1056-/*!
1057- * jQuery JavaScript Library v1.4.2
1058- * http://jquery.com/
1059- *
1060- * Copyright 2010, John Resig
1061- * Dual licensed under the MIT or GPL Version 2 licenses.
1062- * http://jquery.org/license
1063- *
1064- * Includes Sizzle.js
1065- * http://sizzlejs.com/
1066- * Copyright 2010, The Dojo Foundation
1067- * Released under the MIT, BSD, and GPL Licenses.
1068- *
1069- * Date: Sat Feb 13 22:33:48 2010 -0500
1070- */
1071-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
1072-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
1073-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
1074-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
1075-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
1076-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
1077-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
1078-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
1079-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
1080-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
1081-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
1082-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
1083-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
1084-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
1085-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
1086-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
1087-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
1088-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
1089-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
1090-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
1091-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
1092-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
1093-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
1094-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
1095-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
1096-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
1097-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
1098-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
1099-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
1100-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
1101-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
1102-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
1103-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
1104-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
1105-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
1106-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
1107-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
1108-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
1109-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
1110-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
1111-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
1112-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
1113-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
1114-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
1115-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
1116-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
1117-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
1118-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
1119-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
1120-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
1121-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
1122-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
1123-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
1124-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
1125-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
1126-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
1127-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
1128-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
1129-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1130-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
1131-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
1132-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
1133-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
1134-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
1135-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
1136-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
1137-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
1138-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
1139-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
1140-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
1141-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
1142-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
1143-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
1144-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
1145-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
1146-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
1147-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
1148-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
1149-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
1150-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
1151-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
1152-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
1153-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
1154-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1155-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
1156-a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
1157-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
1158-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
1159-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
1160-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
1161-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
1162-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
1163-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
1164-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1165-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
1166-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
1167-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
1168-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
1169-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
1170-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
1171-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
1172-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
1173-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
1174-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
1175-"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
1176-serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
1177-function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
1178-global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
1179-e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
1180-"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
1181-false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
1182-false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
1183-c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
1184-d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
1185-g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1186-1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
1187-"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
1188-if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
1189-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
1190-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
1191-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
1192-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
1193-this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
1194-"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
1195-c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
1196-this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
1197-this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
1198-e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
1199-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
1200-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
1201-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
1202-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
1203-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
1204-a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
1205-c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
1206-d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
1207-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
1208-"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
1209-e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
1210
1211=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css'
1212--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css 2012-03-26 17:43:02 +0000
1213+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css 1970-01-01 00:00:00 +0000
1214@@ -1,271 +0,0 @@
1215-@charset "utf-8";
1216-/**
1217- * Support ribbon
1218- */
1219-#support-ribbon.vertical
1220-{
1221- position: fixed;
1222- right:-3px;
1223- top:145px;
1224- color: #ffffff;
1225- width: 153px;
1226- height: 130px;
1227- z-index: 1;
1228-}
1229-#support-ribbon.vertical #support-suboptions {
1230- display: block;
1231- position:relative;
1232- right:0px;
1233- top: 0px;
1234- width:155px;
1235- border-bottom: 0;
1236- z-index: -10;
1237-
1238-}
1239-#support-ribbon.vertical #support-suboptions a {
1240- margin-bottom:5px;
1241- display: block;
1242- opacity: 0.9;
1243- text-align: center;
1244- color: #fff;
1245- height: 33px;
1246- line-height:33px;
1247-}
1248-#support-suboptions a:hover {
1249- opacity: 1;
1250-}
1251-#support-suboptions a span { display:none;}
1252-/**
1253-horizontal ribbon
1254-*/
1255-#support-ribbon.horizontal
1256-{
1257- position: fixed;
1258- bottom:0;
1259- left:0;
1260- color: #ffffff;
1261- height: 38px;
1262- z-index: 1;
1263-}
1264- #support-ribbon.horizontal #support-suboptions {
1265-
1266- position:relative;
1267- top: 0px;
1268- border-bottom: 0;
1269- z-index: -10;
1270- margin:auto;
1271-}
1272-#support-ribbon.horizontal #support-suboptions li {
1273- float: left;
1274- list-style-type: none;
1275-}
1276-#support-ribbon.horizontal #support-suboptions li a {
1277- margin-bottom:5px;
1278- display: block;
1279- opacity: 0.9;
1280- text-align: center;
1281- color: #fff;
1282- height: 38px;
1283- line-height:38px;
1284- width: 145px;
1285- margin-right:5px;
1286-}
1287-
1288-html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-weight:inherit;font-size:100%;}legend{color:#000;}del,ins{text-decoration:none;}body,html{height:100%;margin:0;padding:0}form{display:inline}a{border:none;cursor:pointer}img{border:none}div,img{behavior:url(/static/css/iepngfix.htc)}em{font-style:italic;}del{text-decoration:line-through;}.hidden{display:none}#header{background:#333;height:95px;overflow:hidden;zoom:1}#header .header{height:95px;margin:0 auto;overflow:hidden;width:960px;zoom:1}#header .header .logo{float:left;overflow:hidden;padding:20px 0;width:240px;zoom:1}#header .header .logo{overflow:hidden;zoom:1;float:left;width:240px;padding:20px 0px;}#header .header .right{overflow:hidden;zoom:1;float:left;width:720px;height:35px;padding:30px 0px;}#header .header .right .searchlink{overflow:hidden;zoom:1;width:35px;height:35px;float:right;padding:0px 0px 0px 10px;}#header .header .right .navicontainer{overflow:hidden;zoom:1;float:right;height:35px;background:#ffffff url(ui-navi-l.png) top left no-repeat;}#header .header .right .navi{overflow:hidden;zoom:1;height:27px;padding:4px 10px;background:url(ui-navi-r.png) top right no-repeat;}#header .header .right .navicontainer .navi span{overflow:hidden;zoom:1;height:27px;float:left;margin:0px;}#header .header .right .navicontainer .navi span:hover{background:#f0f0f0 url(ui-navi-hover-l.png) top left no-repeat;}#header .header .right .navicontainer .navi span.selected,#header .header .right .navicontainer .navi span.selected:hover{background:#d5390b url(ui-navi-sel-l.png) top left no-repeat;}#header .header .right .navicontainer .navi span a,#header .header .right .navicontainer .navi span a:visited{display:block;padding:6px 10px 4px 10px;height:17px;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:14px;color:#000000;text-decoration:none;}#header .header .right .navicontainer .navi span a:hover{background:url(ui-navi-hover-r.png) top right no-repeat;}#header .header .right .navicontainer .navi span.selected a.selected,#header .header .right .navicontainer .navi span.selected a.selected:visited,#header .header .right .navicontainer .navi span.selected a.selected:hover{background:url(ui-navi-sel-r.png) top right no-repeat;color:#ffffff;}#slogan{overflow:hidden;zoom:1;height:125px;background:#d24300 urk(ui-orange-front.png) bottom center no-repeat;text-align:center;}#stripe{overflow:hidden;zoom:1;height:20px;background:#d24300 url(ui-orange-content.png) top center no-repeat;}#footer{overflow:hidden;zoom:1;background:#333333;border-top:2px #d95200 solid;}#footer .footer{overflow:hidden;zoom:1;width:960px;margin:0px auto;padding:10px 0px;}#footer .footer .logo{overflow:hidden;zoom:1;float:left;padding:17px 0px 0px 0px;}#footer .footer .text{overflow:hidden;zoom:1;float:right;text-align:right;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:15px;color:#e0e0e0;}#footer .footer .text a,#footer .footer .text a:visited{color:#e0e0e0;text-decoration:none;}#footer .footer .text a:hover{color:#ffffff;text-decoration:underline;}div.navi-dropdown{display:none;position:absolute;overflow:hidden;zoom:1;width:255px;z-index:900;}div.navi-dropdown .navi-dropdown-header-l{overflow:hidden;zoom:1;width:255px;height:20px;background:url(ui-dropdown-header-l.png) top left no-repeat;}div.navi-dropdown .navi-dropdown-header-r{overflow:hidden;zoom:1;width:255px;height:20px;background:url(ui-dropdown-header-r.png) top left no-repeat;}div.navi-dropdown .navi-dropdown-content{overflow:hidden;zoom:1;width:225px;padding:0px 15px 5px 15px;background:#ffffff url(ui-dropdown-bg.png) repeat-y;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:20px;color:#333333;}div.navi-dropdown .navi-dropdown-content .item{padding:3px 0px 1px 0px;}div.navi-dropdown .navi-dropdown-content a,div.navi-dropdown .navi-dropdown-content a:visited{display:block;color:#333333;text-decoration:none;}div.navi-dropdown .navi-dropdown-content a:hover{color:#d12907;text-decoration:underline;}div.navi-dropdown .navi-dropdown-footer{overflow:hidden;zoom:1;width:255px;height:10px;background:url(ui-dropdown-footer.png) top left no-repeat;}div.search-dropdown{display:none;position:absolute;overflow:hidden;zoom:1;width:255px;}div.search-dropdown .search-dropdown-header{overflow:hidden;zoom:1;width:255px;height:20px;background:url(ui-dropdown-header-search.png) top left no-repeat;}div.search-dropdown .search-dropdown-content{overflow:hidden;zoom:1;width:225px;padding:0px 15px 5px 15px;background:#ffffff url(ui-dropdown-bg.png) repeat-y;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:20px;color:#333333;}div.search-dropdown .search-dropdown-content .form{padding-top:2px;}div.search-dropdown .search-dropdown-content .form input{border:1px #c0c0c0 solid;padding:4px;width:210px;outline:none;}div.search-dropdown .search-dropdown-content .form input:focus{border:1px #707070 solid;outline:none;}div.search-dropdown .search-dropdown-footer{overflow:hidden;zoom:1;width:255px;height:10px;background:url(ui-dropdown-footer.png) top left no-repeat;}#sidenavi{overflow:hidden;zoom:1;float:left;width:260px;border-top:1px #e0e0e0 solid;border-right:1px #e0e0e0 solid;margin:0px 30px 0px 0px;padding:0px 0px 20px 0px;font-family:Arial,Helvetica,sans-serif;font-size:18px;line-height:25px;color:#333333;}#sidenavi.noborder{border-top:none;border-right:none;margin:0px 31px 0px 0px;}#sidenavi .sidebanner{border-left:1px #e0e0e0 solid;border-bottom:1px #e0e0e0 solid;text-align:center;padding:15px 10px;}#sidenavi.noborder .sidebanner{border-top:1px #e0e0e0 solid;border-right:1px #e0e0e0 solid;}#sidenavi .sidebanner .header{padding:0px 0px 10px 0px;line-height:18px;text-align:center;}#sidenavi .sidebanner .numbers{padding:0px 0px 0px 58px;background:url(phone.png) 5px center no-repeat;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;text-align:left;}#sidenavi #sidefloater{padding-top:10px;}#sidenavi .item{padding:10px 10px 8px 10px;}#sidenavi > .item.selected{background:url(ui-leftnavi-sel.png) top left no-repeat;}#sidenavi a,#sidenavi a:visited{display:block;color:#333333;text-decoration:none;}#sidenavi a:hover{color:#d12907;text-decoration:none;}#sidenavi > .item.selected > a,#sidenavi > .item.selected > a:visited{color:#d12907;text-decoration:none;}#sidenavi .sidesubnavi{overflow:hidden;zoom:1;font-family:Arial,Helvetica,sans-serif;font-size:13px;line-height:17px;color:#333333;}#sidenavi .sidesubnavi .subitem{padding:7px 10px 0px 10px;}#sidenavi .sidesubnavi .subitem.selected a,#sidenavi .sidesubnavi .subitem.selected a:visited{color:#d12907;text-decoration:none;}#contentcontainer{overflow:hidden;zoom:1;width:960px;padding:30px 0px;margin:0px auto;}#content{overflow:hidden;zoom:1;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:20px;color:#333333;}#content p{margin:10px 0px;}#content a,#content a:visited{color:#d12907;text-decoration:underline;}#content a:hover{color:#712000;text-decoration:underline;}#content h1{font-family:Arial,Helvetica,sans-serif;font-size:32px;line-height:40px;margin:5px 0px 20px 0px;color:#d12907;}#content h2{font-family:Arial,Helvetica,sans-serif;font-size:20px;line-height:20px;padding:0px 0px 3px 0px;margin:30px 0px 15px 0px;color:#000000;border-bottom:1px #e0e0e0 solid;}#content h3{font-family:Arial,Helvetica,sans-serif;font-weight:bold;font-size:16px;line-height:22px;margin:20px 0px 10px 0px;color:#000000;}#content h4{font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:14px;font-weight:bold;padding:5px 0px 0px 0px;margin:-16px 0px 20px 0px;color:#000000;border-top:1px #e0e0e0 solid;}#content h4 a,#content h4 a:visited{color:#000000;text-decoration:none;}#content h4 a:hover{color:#d12907;text-decoration:none;}#content dl dt{font-weight:bold;margin-top:10px;margin-bottom:10px;}#content dl dd{padding:0px 0px 0px 30px;}#content ul{list-style-type:square;padding:0px 0px 0px 30px;}#content ul li{list-style-type:square;margin:8px 0px;}#content ol{list-style-type:decimal;padding:0px 0px 0px 30px;}#content ol li{list-style-type:decimal;margin:8px 0px;}#content div.pagecontent{overflow:hidden;zoom:1;}div.contentbox{border:1px #e0e0e0 solid;}div.contentbox div.title{font-size:16px;line-height:20px;font-weight:bold;padding:8px 15px 2px 15px;background:url(ui-leftnavi-sel.png) repeat-x;}div.contentbox div.content{padding:15px;}div.frontpage-p{overflow:hidden;zoom:1;width:960px;margin:0px;margin-bottom:20px;padding:0px;}div.frontpage-p div.frontpage-p-container{overflow:hidden;zoom:1;width:960px;height:200px;padding-bottom:30px;z-index:100;}div.frontpage-p a.nivo-imageLink{position:absolute;top:0px;left:0px;width:960px;height:200px;border:0;padding:0;margin:0;z-index:20;display:none;}div.frontpage-p div.frontpage-p-container div.nivo-directionNav{width:1px;height:1px;display:none !important;z-index:18 !important;}div.frontpage-p div.frontpage-p-container div.nivo-controlNav{position:absolute;top:200px;width:960px;text-align:center;font-size:28px;line-height:25px;}div.frontpage-p div.frontpage-p-container div.nivo-controlNav a{padding:0px 3px;text-decoration:none !important;color:#919191 !important;}div.frontpage-p div.frontpage-p-container div.nivo-controlNav a.active{color:#d12907 !important;}div.frontpage-p div.frontpage-p-selector{overflow:hidden;zoom:1;height:20px;text-align:center;}div.frontpage-main{overflow:hidden;zoom:1;width:960px;margin:20px 0px;padding:0px;}div.frontpage-main div.frontpage-left{overflow:hidden;zoom:1;width:645px;float:left;padding:0px;}div.frontpage-boxes{overflow:hidden;zoom:1;width:645px;margin:25px 0px 0px 0px;padding:0px;}div.frontpage-boxes div.frontpage-boxes-selector{overflow:hidden;zoom:1;width:645px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item{overflow:hidden;zoom:1;width:160px;float:left;margin-left:-1px;border-top:1px #cccccc solid;border-left:1px #cccccc solid;border-right:1px #cccccc solid;border-bottom:1px #cccccc solid;text-align:center;margin-top:10px;padding:0px 0px 0px 0px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item:first-child{margin-left:0px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item.selected{background:url(ui-tab-bg.png) repeat-x;margin-top:0px;border-bottom:none;padding:5px 0px 6px 0px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item a{display:block;font-size:20px;line-height:20px;color:#444444 !important;text-decoration:none !important;padding:9px 0px 8px 0px;}div.frontpage-boxes div.frontpage-boxes-container{overflow:hidden;zoom:1;width:603px;height:150px;padding:20px;border-left:1px #cccccc solid;border-right:1px #cccccc solid;border-bottom:1px #cccccc solid;}div.frontpage-boxes div.frontpage-boxes-container div.frontpage-box img{padding:0px 15px 15px 5px;}div.frontpage-main div.frontpage-right{overflow:hidden;zoom:1;width:295px;float:right;margin-left:20px;padding:0px;}div.frontpage-block{overflow:hidden;zoom:1;border:1px #cccccc solid;width:288px;margin:0 0 20px 5px;}div.frontpage-block div.header{text-align:left;padding:15px 15px 0px 15px;background:url(ui-tab-bg.png) repeat-x;font-family:Arial,Helvetica,sans-serif;font-size:20px;line-height:20px;}div.frontpage-block div.content{overflow:hidden;zoom:1;padding:10px 15px 15px 15px;}div.frontpage-block div.content div.call-us{font-size:12px;line-height:17px;}div.frontpage-block div.content div.training{padding:20px;overflow:hidden;zoom:1;font-size:12px;line-height:17px;}div.frontpage-block div.content div.training ul.training-short-list{list-style-type:none !important;margin:0 !important;padding:0 !important;}div.frontpage-block div.content div.training ul.training-short-list li{list-style-type:none !important;}div.frontpage-block div.content div.more{overflow:hidden;zoom:1;text-align:right;padding:15px 0px 0px 0px;font-size:12px;line-height:17px;}.our-team-page h2{clear:both;}div.our-team-item{overflow:hidden;zoom:1;width:162px;margin-left:5px;height:230px;float:left;}div.our-team-item .img img{border:1px #e0e0e0 solid;padding:2px;}table.phonetable{margin-top:1em;border-collapse:collapse;}.phonetable{margin-left:2em;}table.phonetable th,table.phonetable tr{text-align:center;}table.phonetable th{border:1px #e0e0e0 solid;background:#f8f8f8;padding:7px;font-weight:bold;}table.phonetable td{border:1px #e0e0e0 solid;padding:7px;}table.phonetable .label{text-align:left;}table.phonetable td.label{padding-left:2em;}.form-item{clear:both;margin-top:1em;position:relative;}.form-item label{display:block;font-weight:bold;position:absolute;top:0;left:0;width:13em;}.form-required{color:#fa0;font-weight:bold;}.form-item .description{color:#888;font-size:0.85em;line-height:150%;position:relative;left:14em;}#edit-submitbutton{position:relative;left:12em;margin:1em 0;}.form-item input[type=text],.form-item select,.form-item textarea{border:1px solid #CCC;width:493px;position:relative;top:0;left:12em;}.form-item textarea{height:12em;padding:3px;}.form-item-spacer{padding-top:1em;}.form-item #captcha{position:relative;top:0;left:12em;}#edit-submitted-captcha{margin-top:0.5em;width:154px;}fieldset.form-item-set{border:1px solid #ccc;display:block;margin:12px 0;padding:12px;}fieldset.form-item-set legend{border:none;display:block;padding:0 2px;}div.error{background:#fff;border:solid 1px #c52020;color:#C52020;padding:5px;}div.messages{margin:5px 20px;font-size:11px;}div.messages ul,div.messages ul li{list-style-image:none;list-style-type:none;}div.messages ul li{padding:0 0 0.2em 0;}.form-item .error{background-color :#fdd;}#emergency-contacts .node-field-name{text-align:right;font-weight:bold;padding-right:1em;}#emergency-contacts .node-field-value-phone{font-weight:bold;color:#137F00;}#emergency-contacts .node-field-help{font-weight:bold;}#compact_footer{width:auto !important;}#compact_contentcontainer{overflow:hidden;zoom:1;width:auto;padding:30px 0px;margin:0px 20px;}.custlogo img{padding:20px;border:1px solid white;}.custlogo img:hover{border:1px solid gray;}table.formtable{border-collapse:collapse;}table.formtable th{font-weight:normal;white-space:nowrap;padding:4px 20px 4px 0px;}table.formtable td{padding:4px 0px 4px 0px;}table.formtable td input[type='text'],table.formtable td select{border:1px #e0e0e0 solid;padding:4px;width:400px;}table.formtable td.submit{padding:10px 0px 0px 0px;text-align:center;}table.datatable{margin-top:1em;border-collapse:collapse;}.datatable{margin-left:2em;}table.datatable th,table.datatable tr{text-align:center;}table.datatable th{border:1px #e0e0e0 solid;background:#f8f8f8;padding:7px;font-weight:bold;}table.datatable td{border:1px #e0e0e0 solid;padding:7px;}table.datatable .label{text-align:left;}table.datatable td.label{padding-left:2em;}.frontpage-sidebar .header{padding:0px 0px 10px 0px;font-size:18px;font-weight:normal;text-align:center;}.frontpage-sidebar .header.link{padding:13px 0px 10px 4px;text-align:left;}.frontpage-sidebar .header a,.frontpage-sidebar .header a:visited{color:#333333 !important;text-decoration:none !important;}.frontpage-sidebar .header a:hover{color:#d12907 !important;text-decoration:none !important;}.frontpage-sidebar .header.bloglink{font-size:16px;padding:0px 0px 10px 10px;text-align:center;}.frontpage-sidebar .header.blogheader{font-weight:normal;text-align:center;font-size:15px;padding:13px 10px 10px 0px;}.frontpage-sidebar .header a.email{padding:13px 10px 10px 40px;background:url(email-small.png) left center no-repeat;}.frontpage-sidebar .call-us .numbers{padding:0px 0px 0px 38px;background:url(phone-small.png) 2px center no-repeat;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:18px;text-align:left;}.frontpage-sidebar .eventum a,.frontpage-sidebar .eventum a:visited{padding:0px 2px 0px 55px;font-size:12px;line-height:18px;text-align:left;background:url(support-small.png) left center no-repeat;display:block;color:#333333 !important;text-decoration:none !important;}.frontpage-sidebar .eventum a:hover{color:#d12907 !important;text-decoration:underline !important;}div.presentation{border-top:1px #e0e0e0 dotted;padding:15px 0px;}div.presentation:first-child{margin-top:0;border:none;}div.presentation table.presentation{border-collapse:collapse;}div.presentation table.presentation td div.bordered-image-screenshot{border:1px #e0e0e0 solid;background:#f8f8f8;padding:5px;}div.presentation table.presentation td.presentations-descr{padding-left:15px;}div.presentation table.presentation td.presentations-descr h4{font-size:18px;font-weight:bold;}.customer-vote{width:412px;text-align:justify;}strong{font-weight:bold;}html,body{height:100%;}#stickywrapper{position:relative;min-height:100%;}* html #stickywrapper{height:100%;}#stickycontent{padding-bottom:102px;}#stickyfooter{position:relative;margin:-97px auto 0 auto;}a.links{font-style:oblique;text-decoration:underline;}span.subpart{font-weight:bold;}div.software-info-container{overflow:hidden;zoom:1;float:right;padding:0px 0px 25px 25px;}table.software-info-container{width:240px;border-collapse:collapse;}table.software-info-container td{border:1px #e0e0e0 solid;padding:10px 10px 10px 10px;}table.software-info-container td.latest{padding:10px 10px 10px 62px;background:url(software-latest.png) 15px center no-repeat;min-height:32px;font-size:16px;line-height:24px;}table.software-info-container td.download a{font-weight:bold;}table.software-info-container td.download{padding:15px 62px 15px 20px;background:url(software-download.png) 195px center no-repeat;min-height:32px;font-size:18px;line-height:24px;}table.software-info-container td.links{text-align:left;padding:4px 10px 4px 20px;}table.software-info-container td.links div{margin:10px 0px;}.inv{display:none;}table.downloadstable{margin-top:20px;border-collapse:collapse;}table.downloadstable th{border:1px #e0e0e0 solid;background:#f8f8f8;padding:7px;font-weight:bold;}table.downloadstable td{border:1px #e0e0e0 solid;padding:7px;}table.downloadstable td.file{width:90%;text-align:left;}table.downloadstable td.modified{width:5%;text-align:center;white-space:nowrap;}table.downloadstable td.size{width:5%;text-align:right;white-space:nowrap;}div.downloads-maintenance-promo,div.downloads-warning{border:1px #e0e0e0 solid;padding:15px 20px 15px 150px;margin:30px 0px;background:url(shield.png) 35px center no-repeat;}div.downloads-maintenance-promo > .close-button{float:right;clear:right;margin-top:-10px;margin-right:-15px;cursor:pointer;cursor:hand;}div.downloads-warning{background:url(warning.png) 35px center no-repeat;}div.downloads-version{border-top:1px #e0e0e0 solid;margin-top:-10px;padding-top:10px;text-align:right;font-size:14px;line-height:14px;font-weight:bold;}div.downloads-anchors{font-size:12px;line-height:15px;margin:20px 0px;}div.downloads-backtotop{font-size:12px;line-height:15px;padding-top:8px;}.downloadsignupdialog .ui-dialog-titlebar{display:none;}#downloadsignup h2{font-family:Arial,Helvetica,sans-serif;font-size:22px;line-height:22px;margin:10px 0px 20px 0px;color:#d12907;}#downloadsignup .intro{margin:10px 0px 15px 0px;}#downloadsignup .form .field{overflow:hidden;zoom:1;margin:10px 0px;}#downloadsignup .form .field .label{overflow:hidden;zoom:1;width:150px;float:left;padding-top:5px;}#downloadsignup .form .field .element{overflow:hidden;zoom:1;width:410px;float:left;}#downloadsignup .form .field .element input,#downloadsignup .form .field .element select{width:400px;border:1px #cccccc solid;padding:3px;outline:none;}#downloadsignup .form .field .element input:focus,#downloadsignup .form .field .element select:focus{border:1px #333333 solid;background:#f8f8f8;outline:none;}#downloadsignup .form .field .radiolist{overflow:hidden;zoom:1;display:block;padding:0;margin:0;}#downloadsignup .form .field table.radiolist{width:100%;}#downloadsignup .form .field .radiolist td{width:25%;}#downloadsignup .form .field div.radiolist label{display:block;min-width:55px;float:left;zoom:1;padding:8px 10px 2px 24px !important;text-indent:-24px;overflow:auto;}#downloadsignup .form .field table.radiolist label{padding:8px 15px 2px 0px !important;zoom:1;display:block;}#downloadsignup .form .field .radiolist label input{margin:0px 7px 0px 3px !important;}.schedule td{padding:3px;border:1px solid #eeeeee;padding-left:10px;font-size:16px;}.tdmini{font-weight:bold;font-size:10px !important;}.tdbreak{background-color:#ffeeee;text-align:center;}.trhead td{background-color:#d12907;color:#ffffff;font-weight:bold;}.speaker{font-size:10px;}table.left-headers th{font-weight:bold;text-align:right;padding:5px 12px;vertical-align:top;border-right:1px solid black;}table.left-headers td{padding:5px 12px;}.training-list tr th{font-weight:bold;}.training-list tr td{padding-right:15px;}a.interwiki{background:transparent url(/docs/wiki/lib/images/interwiki.png) 0px 1px no-repeat;padding-left:16px;}a.iw_wp{background-image:url(/docs/wiki/lib/images/interwiki/wp.gif)}a.iw_wpfr{background-image:url(/docs/wiki/lib/images/interwiki/wpfr.gif)}a.iw_wpde{background-image:url(/docs/wiki/lib/images/interwiki/wpde.gif)}a.iw_wpes{background-image:url(/docs/wiki/lib/images/interwiki/wpes.gif)}a.iw_wppl{background-image:url(/docs/wiki/lib/images/interwiki/wppl.gif)}a.iw_wpjp{background-image:url(/docs/wiki/lib/images/interwiki/wpjp.gif)}a.iw_wpmeta{background-image:url(/docs/wiki/lib/images/interwiki/wpmeta.gif)}a.iw_doku{background-image:url(/docs/wiki/lib/images/interwiki/doku.gif)}a.iw_dokubug{background-image:url(/docs/wiki/lib/images/interwiki/dokubug.gif)}a.iw_amazon{background-image:url(/docs/wiki/lib/images/interwiki/amazon.gif)}a.iw_amazon_de{background-image:url(/docs/wiki/lib/images/interwiki/amazon.de.gif)}a.iw_amazon_uk{background-image:url(/docs/wiki/lib/images/interwiki/amazon.uk.gif)}a.iw_phpfn{background-image:url(/docs/wiki/lib/images/interwiki/phpfn.gif)}a.iw_coral{background-image:url(/docs/wiki/lib/images/interwiki/coral.gif)}a.iw_sb{background-image:url(/docs/wiki/lib/images/interwiki/sb.gif)}a.iw_google{background-image:url(/docs/wiki/lib/images/interwiki/google.gif)}a.iw_meatball{background-image:url(/docs/wiki/lib/images/interwiki/meatball.gif)}a.iw_wiki{background-image:url(/docs/wiki/lib/images/interwiki/wiki.gif)}a.mediafile{background:transparent url(/docs/wiki/lib/images/fileicons/file.png) 0px 1px no-repeat;padding-left:18px;padding-bottom:1px;}a.mf_txt{background-image:url(/docs/wiki/lib/images/fileicons/txt.png)}a.mf_sxi{background-image:url(/docs/wiki/lib/images/fileicons/sxi.png)}a.mf_tgz{background-image:url(/docs/wiki/lib/images/fileicons/tgz.png)}a.mf_wav{background-image:url(/docs/wiki/lib/images/fileicons/wav.png)}a.mf_jpg{background-image:url(/docs/wiki/lib/images/fileicons/jpg.png)}a.mf_sxd{background-image:url(/docs/wiki/lib/images/fileicons/sxd.png)}a.mf_js{background-image:url(/docs/wiki/lib/images/fileicons/js.png)}a.mf_ps{background-image:url(/docs/wiki/lib/images/fileicons/ps.png)}a.mf_conf{background-image:url(/docs/wiki/lib/images/fileicons/conf.png)}a.mf_swf{background-image:url(/docs/wiki/lib/images/fileicons/swf.png)}a.mf_xml{background-image:url(/docs/wiki/lib/images/fileicons/xml.png)}a.mf_py{background-image:url(/docs/wiki/lib/images/fileicons/py.png)}a.mf_cpp{background-image:url(/docs/wiki/lib/images/fileicons/cpp.png)}a.mf_css{background-image:url(/docs/wiki/lib/images/fileicons/css.png)}a.mf_jpeg{background-image:url(/docs/wiki/lib/images/fileicons/jpeg.png)}a.mf_odi{background-image:url(/docs/wiki/lib/images/fileicons/odi.png)}a.mf_pptx{background-image:url(/docs/wiki/lib/images/fileicons/pptx.png)}a.mf_doc{background-image:url(/docs/wiki/lib/images/fileicons/doc.png)}a.mf_bz2{background-image:url(/docs/wiki/lib/images/fileicons/bz2.png)}a.mf_png{background-image:url(/docs/wiki/lib/images/fileicons/png.png)}a.mf_ogg{background-image:url(/docs/wiki/lib/images/fileicons/ogg.png)}a.mf_xls{background-image:url(/docs/wiki/lib/images/fileicons/xls.png)}a.mf_tar{background-image:url(/docs/wiki/lib/images/fileicons/tar.png)}a.mf_pl{background-image:url(/docs/wiki/lib/images/fileicons/pl.png)}a.mf_mp3{background-image:url(/docs/wiki/lib/images/fileicons/mp3.png)}a.mf_pdf{background-image:url(/docs/wiki/lib/images/fileicons/pdf.png)}a.mf_audio{background-image:url(/docs/wiki/lib/images/fileicons/audio.png)}a.mf_rtf{background-image:url(/docs/wiki/lib/images/fileicons/rtf.png)}a.mf_java{background-image:url(/docs/wiki/lib/images/fileicons/java.png)}a.mf_cs{background-image:url(/docs/wiki/lib/images/fileicons/cs.png)}a.mf_odt{background-image:url(/docs/wiki/lib/images/fileicons/odt.png)}a.mf_c{background-image:url(/docs/wiki/lib/images/fileicons/c.png)}a.mf_rpm{background-image:url(/docs/wiki/lib/images/fileicons/rpm.png)}a.mf_docx{background-image:url(/docs/wiki/lib/images/fileicons/docx.png)}a.mf_ppt{background-image:url(/docs/wiki/lib/images/fileicons/ppt.png)}a.mf_odp{background-image:url(/docs/wiki/lib/images/fileicons/odp.png)}a.mf_html{background-image:url(/docs/wiki/lib/images/fileicons/html.png)}a.mf_gz{background-image:url(/docs/wiki/lib/images/fileicons/gz.png)}a.mf_zip{background-image:url(/docs/wiki/lib/images/fileicons/zip.png)}a.mf_gif{background-image:url(/docs/wiki/lib/images/fileicons/gif.png)}a.mf_htm{background-image:url(/docs/wiki/lib/images/fileicons/htm.png)}a.mf_sql{background-image:url(/docs/wiki/lib/images/fileicons/sql.png)}a.mf_rar{background-image:url(/docs/wiki/lib/images/fileicons/rar.png)}a.mf_rb{background-image:url(/docs/wiki/lib/images/fileicons/rb.png)}a.mf_csv{background-image:url(/docs/wiki/lib/images/fileicons/csv.png)}a.mf_odc{background-image:url(/docs/wiki/lib/images/fileicons/odc.png)}a.mf_odf{background-image:url(/docs/wiki/lib/images/fileicons/odf.png)}a.mf_deb{background-image:url(/docs/wiki/lib/images/fileicons/deb.png)}a.mf_ods{background-image:url(/docs/wiki/lib/images/fileicons/ods.png)}a.mf_xlsx{background-image:url(/docs/wiki/lib/images/fileicons/xlsx.png)}a.mf_lua{background-image:url(/docs/wiki/lib/images/fileicons/lua.png)}a.mf_sxc{background-image:url(/docs/wiki/lib/images/fileicons/sxc.png)}a.mf_odg{background-image:url(/docs/wiki/lib/images/fileicons/odg.png)}a.mf_7z{background-image:url(/docs/wiki/lib/images/fileicons/7z.png)}a.mf_sxw{background-image:url(/docs/wiki/lib/images/fileicons/sxw.png)}a.mf_php{background-image:url(/docs/wiki/lib/images/fileicons/php.png)}div.clearer{clear:both;line-height:0;height:0;overflow:hidden;}div.no{display:inline;margin:0;padding:0;}.hidden{display:none;}div.error{background:#fcc url(/docs/wiki/lib/styles/../images/error.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #faa;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}div.info{background:#ccf url(/docs/wiki/lib/styles/../images/info.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #aaf;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}div.success{background:#cfc url(/docs/wiki/lib/styles/../images/success.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #afa;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}div.notify{background:#ffc url(/docs/wiki/lib/styles/../images/notify.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #ffa;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}.medialeft{float:left;}.mediaright{float:right;}.mediacenter{display:block;margin-left:auto;margin-right:auto;}.leftalign{text-align:left;}.centeralign{text-align:center;}.rightalign{text-align:right;}em.u{font-style:normal;text-decoration:underline;}em em.u{font-style:italic;}.code .br0{color:#6c6;}.code .co0{color:#808080;font-style:italic;}.code .co1{color:#808080;font-style:italic;}.code .co2{color:#808080;font-style:italic;}.code .co3{color:#808080;}.code .coMULTI{color:#808080;font-style:italic;}.code .es0{color:#009;font-weight:bold;}.code .kw1{color:#b1b100;}.code .kw2{color:#000;font-weight:bold;}.code .kw3{color:#006;}.code .kw4{color:#933;}.code .kw5{color:#00f;}.code .me1{color:#060;}.code .me2{color:#060;}.code .nu0{color:#c6c;}.code .re0{color:#00f;}.code .re1{color:#00f;}.code .re2{color:#00f;}.code .re3{color:#f33;font-weight:bold;}.code .re4{color:#099;}.code .st0{color:#f00;}.code .sy0{color:#6c6;}div#acl_manager div#acl__tree{font-size:90%;width:25%;height:300px;float:left;overflow:auto;border:1px solid #8cacbb;text-align:left;}div#acl_manager div#acl__tree a.cur{background-color:#ff9;font-weight:bold;}div#acl_manager div#acl__tree ul{list-style-type:none;margin:0;padding:0;}div#acl_manager div#acl__tree li{padding-left:1em;}div#acl_manager div#acl__tree ul img{margin-right:0.25em;cursor:pointer;}div#acl_manager div#acl__detail{width:73%;height:300px;float:right;overflow:auto;}div#acl_manager div#acl__detail fieldset{width:90%;}div#acl_manager div#acl__detail div#acl__user{border:1px solid #8cacbb;padding:0.5em;margin-bottom:0.6em;}div#acl_manager table.inline{width:100%;margin:0;}div#acl_manager .aclgroup{background:transparent url(/docs/wiki/lib/plugins/acl/pix/group.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager .acluser{background:transparent url(/docs/wiki/lib/plugins/acl/pix/user.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager .aclpage{background:transparent url(/docs/wiki/lib/plugins/acl/pix/page.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager .aclns{background:transparent url(/docs/wiki/lib/plugins/acl/pix/ns.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager label.disabled{color:#666!important;}#acl_manager label{text-align:left;font-weight:normal;display:inline;}#acl_manager table{margin-left:10%;width:80%;}#acl_manager table tr{background-color:inherit;}#acl_manager table tr:hover{background-color:#dee7ec;}div.toolbar #tool__bar_table button.selected{background:#fff url(/docs/wiki/lib/plugins/edittable/images/buttonshadow_toggled.png) repeat-x bottom;}div.toolbar #tool__bar_table button.disabled{background:#fff url(/docs/wiki/lib/plugins/edittable/images/buttonshadow_toggled2.png) repeat-x bottom;opacity:0.4;}div.toolbar #tool__bar_table button.separator{margin-left:0.5em;}div.toolbar #tool__bar_table{margin-bottom:0.5em;}#dw__editform #edit__wrap{margin-top:1.5em;overflow:auto;border:1px solid #8cacbb;}div.dokuwiki table.edit{margin:-1px;}div.dokuwiki table.edit th,div.dokuwiki table.edit td{min-width:5em;}div.dokuwiki table.edit input{border:none;background:transparent;font:inherit;width:100%;}html>body div.dokuwiki table.edit th,html>body div.dokuwiki table.edit td{background-image:url(/docs/wiki/lib/plugins/edittable/images/inputshadow.png);background-repeat:repeat-x;background-position:top;}div.dokuwiki table.edit td.handle{color:#666;background-color:#f5f5f5;padding:0;vertical-align:bottom;position:relative;}div.dokuwiki table.edit td.rowhandle{width:3em;}div.dokuwiki table.edit td.handle{cursor:move;}div.dokuwiki table.edit td.curhandle{background-color:#dee7ec;}div.dokuwiki table.edit td.disabledhandle{background-image:none;background-color:#c0c0c0;cursor:no-drop;}html>body div.dokuwiki table.edit td.handle{background-image:url(/docs/wiki/lib/plugins/edittable/images/buttonshadow.png);background-repeat:repeat-x;background-position:bottom;}#table__dragmarker{display:block;height:100%;width:100%;position:relative;}#table__dragmarker .dragmarker_topright{position:absolute;top:-0.5em;right:0px;}#table__dragmarker .dragmarker_bottomright{position:absolute;top:0.5em;right:0px;}#table__dragmarker .dragmarker_bottomleft{position:absolute;top:0.5em;left:0px;}.handle .handle_dropdown{float:right;margin-top:3px;}.handle .handle_dropdown img{padding:4px 2px 1px;cursor:pointer;}#dw__editform .handle .handle_dropdown div{position:absolute;z-index:25;}#dw__editform .handle .handle_dropdown div ul{background:#fff none repeat scroll 0 0;border:1px solid;list-style-image:none;list-style-position:outside;list-style-type:none;opacity:0.9;padding:0.3em;margin:0;cursor:auto;font-size:0.9em;}#dw__editform .handle .handle_dropdown div ul li{width:100%;text-align:left;}#dw__editform .handle .handle_dropdown div ul li a{width:100%;display:block;cursor:pointer;}#dw__editform .handle .handle_dropdown div ul li a:hover{background:#dee7ec;}div.dokuwiki div.editbutton_table{margin-top:-1em;}div.dokuwiki div.editbutton_table form input.button{float:none;margin-left:0.6em;padding:0 0.3em;background-image:none;border-top:none;border-bottom-right-radius:0.5em;-moz-border-radius-bottomright:0.5em;-webkit-border-bottom-right-radius:0.5em;border-bottom-left-radius:0.5em;-moz-border-radius-bottomleft:0.5em;-webkit-border-bottom-left-radius:0.5em;}div.dokuwiki div.section_highlight table{background-color:#dee7ec;}div.dokuwiki div.table.section_highlight{background-color:transparent !important;}.noteredirect{margin:1em;margin-left:auto;margin-right:auto;width:70% !important;min-height:18px;clear:both;text-align:justify;vertical-align:middle;border-collapse:collapse;padding:7px 10px 5px 32px;background-position:10px 50%;background-repeat:no-repeat;-moz-border-radius:10px;-khtml-border-radius:10px;border-radius:10px;background-color:#B5E0FF;background-image:url(/docs/wiki/lib/plugins/pageredirect/images/important_small.png);}#user__manager tr.disabled{color:#6f6f6f;background:#e4e4e4;}#user__manager tr.user_info{vertical-align:top;}#user__manager div.edit_user{width:46%;float:left;}#user__manager table{margin-bottom:1em;}#user__manager input.button[disabled]{color:#ccc!important;border-color:#ccc!important;}#plugin__manager h2{margin-left:0;}#plugin__manager form{display:block;margin:0;padding:0;}#plugin__manager legend{display:none;}#plugin__manager fieldset{width:auto;}#plugin__manager .button{margin:0;}#plugin__manager p,#plugin__manager label{text-align:left;}#plugin__manager .hidden{display:none;}#plugin__manager .new{background:#dee7ec;}#plugin__manager input[disabled]{color:#ccc;border-color:#ccc;}#plugin__manager .pm_menu,#plugin__manager .pm_info{margin-left:0;text-align:left;}#plugin__manager .pm_menu{float:left;width:48%;}#plugin__manager .pm_info{float:right;width:50%;}#plugin__manager .common fieldset{margin:0;padding:0 0 1.0em 0;text-align:left;border:none;}#plugin__manager .common label{padding:0 0 0.5em 0;}#plugin__manager .common input.edit{width:24em;margin:0.5em;}#plugin__manager .plugins fieldset{color:#000;background:#fff;text-align:right;border-top:none;border-right:none;border-left:none;}#plugin__manager .plugins fieldset.protected{background:#fdd;color:#000;}#plugin__manager .plugins fieldset.disabled{background:#e0e0e0;color:#a8a8a8;}#plugin__manager .plugins .legend{color:#000;background:inherit;display:block;margin:0;padding:0;font-size:1em;line-height:1.4em;font-weight:normal;text-align:left;float:left;padding:0;clear:none;}#plugin__manager .plugins .button{font-size:95%;}#plugin__manager .plugins fieldset.buttons{border:none;}#plugin__manager .plugins fieldset.buttons .button{float:left;}#plugin__manager .pm_info h3{margin-left:0;}#plugin__manager .pm_info dl{margin:1em 0;padding:0;}#plugin__manager .pm_info dt{width:6em;float:left;clear:left;margin:0;padding:0;}#plugin__manager .pm_info dd{margin:0 0 0 7em;padding:0;background:none;}#plugin__manager .plugins .enable{float:left;width:auto;margin-right:0.5em;}.dokuwiki #plugin__captcha_wrapper img{margin:1px;vertical-align:bottom;border:1px solid #8cacbb;}#config__manager div.success,#config__manager div.error,#config__manager div.info{background-position:0.5em;padding:0.5em;text-align:center;}#config__manager fieldset{margin:1em;width:auto;margin-bottom:2em;background-color:#dee7ec;color:#000;padding:0 1em;}#config__manager legend{font-size:1.25em;}#config__manager form{}#config__manager table{margin:1em 0;width:100%;}#config__manager fieldset td{text-align:left;}#config__manager fieldset td.value{width:31em;}#config__manager td.label{padding:0.8em 0 0.6em 1em;vertical-align:top;}#config__manager td.label label{clear:left;display:block;}#config__manager td.label img{padding:0 10px;vertical-align:middle;float:right;}#config__manager td.label span.outkey{font-size:70%;margin-top:-1.7em;margin-left:-1em;display:block;background-color:#fff;color:#666;float:left;padding:0 0.1em;position:relative;z-index:1;}#config__manager td input.edit{width:30em;}#config__manager td .input{width:30.8em;}#config__manager td select.edit{}#config__manager td textarea.edit{width:27.5em;height:4em;}#config__manager tr .input,#config__manager tr input,#config__manager tr textarea,#config__manager tr select{background-color:#fff;color:#000;}#config__manager tr.default .input,#config__manager tr.default input,#config__manager tr.default textarea,#config__manager tr.default select,#config__manager .selectiondefault{background-color:#cdf;color:#000;}#config__manager tr.protected .input,#config__manager tr.protected input,#config__manager tr.protected textarea,#config__manager tr.protected select,#config__manager tr.protected .selection{background-color:#fcc!important;color:#000 !important;}#config__manager td.error{background-color:red;color:#000;}#config__manager .selection{width:14.8em;float:left;margin:0 0.3em 2px 0;}#config__manager .selection label{float:right;width:14em;font-size:90%;}* html #config__manager .selection label{padding-top:2px;}#config__manager .selection input.checkbox{padding-left:0.7em;}#config__manager .other{clear:both;padding-top:0.5em;}#config__manager .other label{padding-left:2px;font-size:90%;}div.noteclassic,div.noteimportant,div.notewarning,div.notetip{margin:2em;margin-left:auto;margin-right:auto;width:70% !important;min-height:40px;clear:both;text-align:justify;vertical-align:middle;border-collapse:collapse;padding:15px 20px 15px 80px;background-position:20px 50%;background-repeat:no-repeat;-moz-border-radius:20px;-khtml-border-radius:20px;border-radius:20px;}div.noteclassic{background-color:#eef;background-image:url(/docs/wiki/lib/plugins/note/images/note.png);}div.noteimportant{background-color:#ffc;background-image:url(/docs/wiki/lib/plugins/note/images/important.png);}div.notewarning{background-color:#fdd;background-image:url(/docs/wiki/lib/plugins/note/images/warning.png);}div.notetip{background-color:#dfd;background-image:url(/docs/wiki/lib/plugins/note/images/tip.png);}.dtree{font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;font-size:11px;color:#000;white-space:nowrap;line-height:normal;}.dtree img{border:0px;vertical-align:top;}.dtree a{color:#090;text-decoration:none;}.dtree a.node,.dtree a.nodeSel a.navSel{white-space:nowrap;padding:1px 2px 1px 2px;}.dtree a.nodeSel{background-color:#dee7ec;}.dtree a.navSel{background-color:#ff9;}.indexmenu_nojs{display:block;}div.li a.indexmenu_idx{color:#f30 !important;text-decoration:none !important;font-weight:bold;}div.li a.indexmenu_idx_head{font-weight:bold;}div.dokuwiki div.indexmenu_list_themes{clear:both;border-top:2px solid #8cacbb;padding-left:1em;}.dtree a.nodeFdUrl:hover,.dtree a.nodeSel:hover,a.navSel:hover,.dtree a.nodeUrl:hover{color:#090;text-decoration:underline;background-color:#dee7ec;}.dtree a.node:hover{text-decoration:none;}.dtree .indexmenu_tocbullet{position:absolute;background:transparent url(/docs/wiki/lib/plugins/indexmenu/images/toc_bullet.gif) no-repeat scroll;vertical-align:middle;width:11px;height:11px;}.dtree .indexmenu_larrow{position:absolute;filter:alpha(opacity=60);-moz-opacity:.60;opacity:.60;background:transparent url(/docs/wiki/lib/plugins/indexmenu/images/larrow.gif) repeat-y scroll;padding-left:22px;z-index:100;}.indexmenu_toc{font-size:80%;line-height:1.2em;white-space:normal;overflow:hidden;width:200px !important;z-index:100 !important;word-wrap:break-word;}.indexmenu_toc .indexmenu_toc_inside{border:1px solid #8cacbb;background-color:#fff;text-align:left;padding:0.5em 0 0.7em 0;max-height:300px;height:expression( this.scrollHeight > 300 ? "300px":"auto" );overflow:auto;}.dtree .indexmenu_rarrow{position:absolute;background:white url(/docs/wiki/lib/plugins/indexmenu/images/rarrow.gif) no-repeat scroll;width:11px;height:15px;}.indexmenu_rmenu{position:absolute;z-index:100;background-color:#fff;border:1px solid black;font-size:80%;line-height:100%;padding-bottom:5px;}.indexmenu_rmenuhead{background:#CFC url(/docs/wiki/lib/plugins/indexmenu/images/close.gif) no-repeat scroll;border-bottom:1px solid #000;color:#000;font-size:90%;margin:0pt;text-align:left;padding:1px 15px;vertical-align:middle;overflow:hidden;width:80px;}.indexmenu_rmenu ul,.indexmenu_rmenu li{list-style-type:none !important;list-style-image:none !important;color:#000 !important;margin:2px !important;text-align:center;}.indexmenu_rmenu a:hover{background-color:#000 !important;color:#fff !important;}.indexmenu_opts{font-size:80%;}.dtree .emptynode{background:transparent url(/docs/wiki/lib/plugins/indexmenu/images/empty.gif) no-repeat scroll;display:inline;padding:1px 8px;width:16px;height:16px;vertical-align:top;zoom:1;}div.dokuwiki .header{padding:3px 0 0 2px;}div.dokuwiki .pagename{float:left;font-size:200%;font-weight:bolder;color:#dee7ec;text-align:left;vertical-align:middle;}div.dokuwiki .pagename a{color:#436976 !important;text-decoration:none !important;}div.dokuwiki .logo{float:right;font-size:220%;font-weight:bolder;text-align:right;vertical-align:middle;}div.dokuwiki .logo a{color:#dee7ec !important;text-decoration:none !important;font-variant:small-caps;letter-spacing:2pt;}div.dokuwiki .bar{border:1px #e0e0e0 solid;background:#f8f8f8;padding:10px;clear:both;}div.dokuwiki .bar-left{float:left;}div.dokuwiki .bar-right{float:right;text-align:right;}div.dokuwiki #bar__bottom{margin-bottom:3px;}div.dokuwiki .bar-tools{display:none;border-left:1px #e0e0e0 solid;border-right:1px #e0e0e0 solid;border-bottom:1px #e0e0e0 solid;background:#f8f8f8;padding:10px;clear:both;}div.dokuwiki div.meta{clear:both;margin:20px 0px 0px 0px;color:#638c9c;font-size:70%;}div.dokuwiki div.meta div.user{float:left;}div.dokuwiki div.meta div.doc{text-align:right;}*{padding:0;margin:0;}body{font:80% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif;background-color:#fff;color:#000;}div.dokuwiki div.page{text-align:justify;}div.dokuwiki table{font-size:100%;}div.dokuwiki tr,div.dokuwiki td,div.dokuwiki th{}div.dokuwiki img{border:0;}div.dokuwiki p,div.dokuwiki blockquote,div.dokuwiki table,div.dokuwiki pre{margin:0 0 1.0em 0;}div.dokuwiki hr{border:0px;border-top:1px solid #8cacbb;text-align:center;height:0px;}div.dokuwiki div.nothing{text-align:center;margin:2em;}div.dokuwiki form{border:none;display:inline;}div.dokuwiki label.block{display:block;text-align:right;font-weight:bold;}div.dokuwiki label.simple{display:block;text-align:left;font-weight:normal;}div.dokuwiki label.block input.edit{width:50%;}div.dokuwiki fieldset{width:300px;text-align:center;border:1px solid #8cacbb;padding:0.5em;margin:auto;}div.dokuwiki textarea.edit{font-family:monospace;font-size:14px;color:#000;background-color:#fff;border:1px solid #8cacbb;padding:0.3em 0 0 0.3em;width:100%;}html>body div.dokuwiki textarea.edit{background:#fff url(/docs/wiki/lib/tpl/default/images/inputshadow.png) repeat-x top;}div.dokuwiki input.edit,div.dokuwiki select.edit{font-size:100%;border:1px solid #8cacbb;color:#000;background-color:#fff;vertical-align:middle;margin:1px;padding:0.20em 0.3em;display:inline;}html>body div.dokuwiki input.edit,html>body div.dokuwiki select.edit{background:#fff url(/docs/wiki/lib/tpl/default/images/inputshadow.png) repeat-x top;}div.dokuwiki select.edit{padding:0.1em 0;}div.dokuwiki input.missing{font-size:100%;border:1px solid #8cacbb;color:#000;background-color:#fcc;vertical-align:middle;margin:1px;padding:0.20em 0.3em;display:inline;}div.dokuwiki textarea.edit[disabled],div.dokuwiki textarea.edit[readonly],div.dokuwiki input.edit[disabled],div.dokuwiki input.edit[readonly],div.dokuwiki input.button[disabled],div.dokuwiki select.edit[disabled]{background-color:#f5f5f5!important;color:#666!important;}div.dokuwiki div.toolbar,div.dokuwiki div#wiki__editbar{margin:2px 0;text-align:left;}div.dokuwiki div#size__ctl{float:right;width:60px;height:2.7em;}div.dokuwiki #size__ctl img{cursor:pointer;}div.dokuwiki div#wiki__editbar div.editButtons{float:left;padding:0 1.0em 0.7em 0;}div.dokuwiki div#wiki__editbar div.summary{float:left;}div.dokuwiki .nowrap{white-space:nowrap;}div.dokuwiki div#draft__status{float:right;color:#638c9c;}div.dokuwiki div.license{padding:0.5em;font-size:90%;text-align:center;}div.dokuwiki form#dw__editform div.license{clear:left;font-size:90%;}div.dokuwiki input.button,div.dokuwiki button.button{border:1px solid #8cacbb;color:#000;background-color:#fff;vertical-align:middle;text-decoration:none;font-size:100%;cursor:pointer;margin:1px;padding:0.125em 0.4em;}html>body div.dokuwiki input.button,html>body div.dokuwiki button.button{background:#fff url(/docs/wiki/lib/tpl/default/images/buttonshadow.png) repeat-x bottom;}* html div.dokuwiki input.button,* html div.dokuwiki button.button{height:1.8em;}div.dokuwiki div.secedit input.button{border:1px solid #8cacbb;color:#000;background-color:#fff;vertical-align:middle;text-decoration:none;margin:0;padding:0;font-size:10px;cursor:pointer;float:right;display:inline;}div.dokuwiki div.pagenav{margin:1em 0 0 0;}div.dokuwiki div.pagenav-prev{text-align:right;float:left;width:49%}div.dokuwiki div.pagenav-next{text-align:left;float:right;width:49%}div.dokuwiki a:link,div.dokuwiki a:visited{color:#436976;text-decoration:none;}div.dokuwiki a:hover,div.dokuwiki a:active{color:#000;text-decoration:underline;}div.dokuwiki h1 a{text-decoration:none !important;}div.dokuwiki h2 a,div.dokuwiki h3 a,div.dokuwiki h4 a,div.dokuwiki h5 a,div.dokuwiki a.nolink{color:#000 !important;text-decoration:none !important;}div.dokuwiki a.interwiki{}div.dokuwiki a.media{}div.dokuwiki a.mail{background:transparent url(/docs/wiki/lib/tpl/default/images/mail_icon.gif) 0px 1px no-repeat;padding:1px 0px 1px 16px;}div.dokuwiki a.wikilink2{text-decoration:none !important;border-bottom:dashed 1px #f30 !important;}div.dokuwiki div.preview{background-color:#f5f5f5;margin:0 0 0 2em;padding:4px;border:1px dashed #000;}div.dokuwiki div.breadcrumbs{background:url(http://s0.percona.com/ui-tab-bg.png) -14px left repeat-x;color:#999;font-size:11px;font-style:italic;padding:7px 0 15px 12px;}div.dokuwiki div.breadcrumbs a,div.dokuwiki div.breadcrumbs a:visited{color:#999 !important;border-color:#999 !important;}div.dokuwiki div.breadcrumbs a:hover{color:#d12907 !important;border-color:#d12907 !important;}div.dokuwiki span.user{color:#ccc;font-size:90%;}div.dokuwiki li.minor{color:#666;font-style:italic;}div.dokuwiki img.media{margin:3px;}div.dokuwiki img.medialeft{border:0;float:left;margin:0 1.5em 0 0;}div.dokuwiki img.mediaright{border:0;float:right;margin:0 0 0 1.5em;}div.dokuwiki img.mediacenter{border:0;display:block;margin:0 auto;}div.dokuwiki img.middle{vertical-align:middle;}div.dokuwiki acronym{cursor:help;border-bottom:1px dotted #000;}div.dokuwiki li.open{list-style-image:url(/docs/wiki/lib/tpl/default/images/open.gif);}div.dokuwiki li.closed{list-style-image:url(/docs/wiki/lib/tpl/default/images/closed.gif);}div.dokuwiki blockquote{border-left:2px solid #8cacbb;padding-left:3px;}div.dokuwiki pre{font-size:80%;padding:10px;border:1px dashed #8cacbb;color:#000;overflow:auto;}div.dokuwiki pre.pre{background-color:#f7f9fa;}div.dokuwiki pre.code{background-color:#f7f9fa;}div.dokuwiki pre.file{background-color:#dee7ec;}div.dokuwiki dl.file,div.dokuwiki dl.code{margin-top:2em;margin-bottom:2.5em;}div.dokuwiki dl.file dt,div.dokuwiki dl.code dt{border:1px dashed #8cacbb;display:inline;padding:0.1em 1em;margin-left:2em;}div.dokuwiki dl.code dt a,div.dokuwiki dl.file dt a{color:#000;}div.dokuwiki dl.code dt{background-color:#f7f9fa;border-bottom:1px solid #f7f9fa;}div.dokuwiki dl.file dt{background-color:#dee7ec;border-bottom:1px solid #dee7ec;}div.dokuwiki table.inline{background-color:#fff;border-spacing:0px;border-collapse:collapse;}div.dokuwiki table.inline th{padding:3px;border:1px solid #8cacbb;background-color:#dee7ec;}div.dokuwiki table.inline td{padding:3px;border:1px solid #8cacbb;}#toc{width:258px;font-size:12px;line-height:16px;clear:both;border:1px #e0e0e0 solid;background:#fff url(http://s1.percona.com/ui-tab-bg.png) top left repeat-x;}#toc div.tocheader{text-align:left;font-weight:bold;padding:7px 10px;margin-bottom:2px;font-size:16px;}#toc div.tocheader a,#toc div.tocheader a:visited{color:#000 !important;text-decoration:none !important;}#toc div.tocheader a:hover{color:#d12907 !important;text-decoration:none !important;}#toc span.toc_open,#toc span.toc_close{float:right;display:block;margin:0.4em 3px 0 0;}#toc span.toc_open span,#toc span.toc_close span{display:none;}#toc span.toc_open{margin-top:0.4em;border-top:0.4em solid #000;}#toc span.toc_close{margin-top:0;border-bottom:0.4em solid #000;}#toc #toc__inside{text-align:left;padding:1px 15px 15px 13px;}#toc ul.toc{list-style-type:none;padding-left:0px !important;margin:0;}#toc ul.toc ul{padding-left:15px !important;}#toc ul.toc li{margin:5px 0px !important;}#toc ul.toc li.clear{padding-left:0;}#toc a.toc:link,#toc a.toc:visited{color:#d12907;text-decoration:underline;}#toc a.toc:hover,#toc a.toc:active{color:#712000;text-decoration:underline;}div.dokuwiki table.diff{background-color:#fff;width:100%;}div.dokuwiki td.diff-blockheader{font-weight:bold;}div.dokuwiki table.diff th{border-bottom:1px solid #8cacbb;font-size:110%;width:50%;font-weight:normal;text-align:left;}div.dokuwiki table.diff th a{font-weight:bold;}div.dokuwiki table.diff th span.user{color:#000;font-size:80%;}div.dokuwiki table.diff th span.sum{font-size:80%;font-weight:bold;}div.dokuwiki table.diff th.minor{font-style:italic;}div.dokuwiki table.diff td{font-family:monospace;font-size:100%;}div.dokuwiki td.diff-addedline{background-color:#dfd;}div.dokuwiki td.diff-deletedline{background-color:#ffb;}div.dokuwiki td.diff-context{background-color:#f5f5f5;}div.dokuwiki table.diff td.diff-addedline strong,div.dokuwiki table.diff td.diff-deletedline strong{color:red;}div.dokuwiki div.footnotes{clear:both;border-top:1px solid #8cacbb;padding-left:1em;margin-top:1em;}div.dokuwiki div.fn{font-size:90%;}div.dokuwiki a.fn_bot{font-weight:bold;}div.insitu-footnote{font-size:80%;line-height:1.2em;border:1px solid #8cacbb;background-color:#f7f9fa;text-align:left;padding:4px;max-width:40%;}* html .insitu-footnote pre.code,* html .insitu-footnote pre.file{padding-bottom:18px;}div.dokuwiki .search_result{margin-bottom:6px;padding:0 10px 0 30px;}div.dokuwiki .search_snippet{color:#ccc;font-size:12px;margin-left:20px;}div.dokuwiki .search_sep{color:#000;}div.dokuwiki .search_hit{color:#000;background-color:#ff9;}div.dokuwiki strong.search_hit{font-weight:normal;}div.dokuwiki div.search_quickresult{margin:0 0 15px 30px;padding:0 10px 10px 0;border-bottom:1px dashed #8cacbb;}div.dokuwiki div.search_quickresult h3{margin:0 0 1.0em 0;font-size:1em;font-weight:bold;}div.dokuwiki ul.search_quickhits{margin:0 0 0.5em 1.0em;}div.dokuwiki ul.search_quickhits li{margin:0 1.0em 0 1.0em;float:left;width:30%;}div.dokuwiki div.section_highlight{background-color:#dee7ec;}div.footerinc{text-align:center;}.footerinc a img{opacity:0.5;border:0;}.footerinc a:hover img{opacity:1;}div.dokuwiki div.ajax_qsearch{position:absolute;right:237px;;width:200px;opacity:0.9;display:none;font-size:80%;line-height:1.2em;border:1px solid #8cacbb;background-color:#f7f9fa;text-align:left;padding:4px;}button.toolbutton{background-color:#fff;padding:0px;margin:0 1px 0 0;border:1px solid #8cacbb;cursor:pointer;}html>body button.toolbutton{background:#fff url(/docs/wiki/lib/tpl/default/images/buttonshadow.png) repeat-x bottom;}div.picker{width:250px;border:1px solid #8cacbb;background-color:#dee7ec;}div.pk_hl{width:125px;}button.pickerbutton{padding:0px;margin:0 1px 1px 0;border:0;background-color:transparent;font-size:80%;cursor:pointer;}div.dokuwiki div.img_big{float:left;margin-right:0.5em;}div.dokuwiki dl.img_tags dt{font-weight:bold;background-color:#dee7ec;}div.dokuwiki dl.img_tags dd{background-color:#f5f5f5;}div.dokuwiki div.imagemeta{color:#666;font-size:70%;line-height:95%;}div.dokuwiki div.imagemeta img.thumb{float:left;margin-right:0.1em;}div.dokuwiki h4{border-top:none !important;margin:20px 0px 20px 0px !important;}#media__manager{height:100%;overflow:hidden;}#media__left{width:30%;border-right:solid 1px #8cacbb;height:100%;overflow:auto;position:absolute;left:0;}#media__right{width:69.7%;height:100%;overflow:auto;position:absolute;right:0;}#media__manager h1{margin:0;padding:0;margin-bottom:0.5em;}#media__tree img{float:left;padding:0.5em 0.3em 0 0;}#media__tree ul{list-style-type:none;list-style-image:none;margin-left:1.5em;}#media__tree li{clear:left;list-style-type:none;list-style-image:none;}*+html #media__tree li,* html #media__tree li{border:1px solid #fff;}#media__opts{padding-left:1em;margin-bottom:0.5em;}#media__opts input{float:left;display:block;margin-top:4px;position:absolute;}*+html #media__opts input,* html #media__opts input{position:static;}#media__opts label{display:block;float:left;margin-left:20px;margin-bottom:4px;}*+html #media__opts label,* html #media__opts label{margin-left:10px;}#media__opts br{clear:left;}#media__content img.load{margin:1em auto;}#media__content #scroll__here{border:1px dashed #8cacbb;}#media__content .odd{background-color:#f7f9fa;padding:0.4em;}#media__content .even{padding:0.4em;}#media__content a.mediafile{margin-right:1.5em;font-weight:bold;}#media__content div.detail{padding:0.3em 0 0.3em 2em;}#media__content div.detail div.thumb{float:left;width:130px;text-align:center;margin-right:0.4em;}#media__content img.btn{vertical-align:text-bottom;}#media__content div.example{color:#666;margin-left:1em;}#media__content div.upload{font-size:90%;padding:0 0.5em 0.5em 0.5em;}#media__content form#dw__upload,#media__content div#dw__flashupload{display:block;border-bottom:solid 1px #8cacbb;padding:0 0.5em 1em 0.5em;}#media__content form#dw__upload fieldset{padding:0;margin:0;border:none;width:auto;}#media__content form#dw__upload p{text-align:left;padding:0.25em 0;margin:0;line-height:1.0em;}#media__content form#dw__upload label.check{float:none;width:auto;margin-left:11.5em;}#media__content form.meta{display:block;padding:0 0 1em 0;}#media__content form.meta label{display:block;width:25%;float:left;font-weight:bold;margin-left:1em;clear:left;}#media__content form.meta .edit{font:100% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif;float:left;width:70%;padding-right:0;padding-left:0.2em;margin:2px;}#media__content form.meta textarea.edit{height:8em;}#media__content form.meta div.metafield{clear:left;}#media__content form.meta div.buttons{clear:left;margin-left:20%;padding-left:1em;}#media__popup{background-color:#fff;display:none;border:1px solid #8cacbb;position:absolute;width:270px;}#media__popup h1{text-align:center;font-weight:normal;background-color:#dee7ec;height:16px;margin-bottom:5px;font-size:12px;border-bottom:0;}#media__popup p{display:block;line-height:14pt;margin:0.5em;}#media_nolink{padding:4px 0;}#media__popup label{float:left;width:9em;}#media__popup .button{margin-left:auto;margin-right:auto;}#media__popup .btnlbl{text-align:center;}#media__popup .btnlbl input{margin:0 1em;}#media__closeimg{float:right;}#media__linkopts label,#media__nolnk{width:80px;float:left;margin-left:10px;}#media__linkopts label{line-height:20px;}#media__nolnk,#media__linkopts label.long{margin-bottom:8px;line-height:12px;}#media__linkopts label.long{width:150px;float:none;}#media__linkopts br{clear:both;}#media__linkopts select{width:60px;margin-left:10px;}#media__linkopts input.edit{width:50px;margin-left:10px;}#media__linkopts #media__title{width:150px;}#admin__version{clear:left;float:right;color:#666;}.dokuwiki ul.admin_tasks{font-size:115%;float:left;width:40%;list-style-type:none;}.dokuwiki ul.admin_tasks li{line-height:22px;padding-left:35px;margin:1em 0;background:transparent none no-repeat scroll 0 0;text-align:left;}.dokuwiki ul.admin_tasks li div.li{font-weight:bold;}.dokuwiki ul.admin_tasks li.admin_acl{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/acl.png);}.dokuwiki ul.admin_tasks li.admin_usermanager{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/usermanager.png);}.dokuwiki ul.admin_tasks li.admin_plugin{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/plugin.png);}.dokuwiki ul.admin_tasks li.admin_config{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/config.png);}.dokuwiki ul.admin_tasks li.admin_revert{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/revert.png);}.dokuwiki ul.admin_tasks li.admin_popularity{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/popularity.png);}#link__wiz{position:absolute;display:block;z-index:99;width:300px;height:250px;padding:0;margin:0;overflow:hidden;border:1px solid #8cacbb;background-color:#f5f5f5;text-align:center;}#link__wiz_header{background-color:#dee7ec;height:16px;margin-bottom:5px;}#link__wiz_close{cursor:pointer;margin:0;}#link__wiz_result{background-color:#fff;width:293px;height:193px;overflow:auto;border:1px solid #8cacbb;margin:3px auto;text-align:left;}#link__wiz_result div.type_u{padding:3px 3px 3px 22px;background:transparent url(/docs/wiki/lib/tpl/default/../../images/up.png) 3px 3px no-repeat;}#link__wiz_result div.type_f{padding:3px 3px 3px 22px;background:transparent url(/docs/wiki/lib/tpl/default/../../images/page.png) 3px 3px no-repeat;}#link__wiz_result div.type_d{padding:3px 3px 3px 22px;background:transparent url(/docs/wiki/lib/tpl/default/../../images/ns.png) 3px 3px no-repeat;}#link__wiz_result div.even{background-color:#f5f5f5;}#link__wiz_result div.selected{background-color:#dee7ec;}#link__wiz_result span{display:block;color:#666;}.ondrag{cursor:move;opacity:0.8;}form#subscribe__form{display:block;width:300px;text-align:center;}form#subscribe__form fieldset{text-align:left;margin:0.5em 0;}form#subscribe__form label{display:block;margin:0 0.5em 0.5em;}
1289-
1290-
1291-
1292-/***
1293- * side style buttons
1294-*/
1295-.a-btn-container {
1296- overflow:hidden;
1297- border-radius:4px;
1298-}
1299-.a-btn, .a-btn-green, .a-btn-red{
1300-
1301- width: 245px;
1302- background:#f2aa2e;
1303- background:-webkit-gradient(linear,left top,left bottom,color-stop(##f2aa2e,0),color-stop(##c7401e,1));
1304- background:-webkit-linear-gradient(top, #f2aa2e 0%, #c7401e 100%);
1305- background:-moz-linear-gradient(top, #f2aa2e 0%, #c7401e 100%);
1306- background:-o-linear-gradient(top, #f2aa2e 0%, #c7401e 100%);
1307- background:linear-gradient(top, #f2aa2e 0%, #c7401e 100%);
1308- filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#f2aa2e', endColorstr='#c7401e',GradientType=0 );
1309- border:1px solid #f5b74e;
1310- border-color:#f5b74e #e5a73e #d6982f;
1311- -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395;
1312- -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395;
1313- box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395;
1314- padding:0px;
1315- height:65px;
1316- display:inline-block;
1317- position:relative;
1318- -webkit-border-radius:4px;
1319- -moz-border-radius:4px;
1320- border-radius:4px;
1321- float:left;
1322- overflow:hidden;
1323- -webkit-transition:all 0.3s linear;
1324- -moz-transition:all 0.3s linear;
1325- -o-transition:all 0.3s linear;
1326- transition:all 0.3s linear;
1327- text-decoration: none !important;
1328-}
1329-.a-btn-green{
1330- background:#a1de78;
1331- background:-webkit-gradient(linear,left top,left bottom,color-stop(##a1de78,0),color-stop(##a1de78,1));
1332- background:-webkit-linear-gradient(top, #00e05a 0%, #006127 100%);
1333- background:-moz-linear-gradient(center top , #00e05a 0%, #006127 130%);
1334- background:-o-linear-gradient(top, #00e05a 0%, #006127 100%);
1335- background:linear-gradient(top, #00e05a 0%, #006127 100%);
1336- filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#00e05a', endColorstr='#444444',GradientType=0 );
1337- border:1px solid #f5b74e;
1338- border-color:#00ba4b #009A00 #007A31;
1339- -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F;
1340- -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F;
1341- box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F;
1342-}
1343-
1344-.a-btn-red{
1345- background:#e31300;
1346- background:-webkit-gradient(linear,left top,left bottom,color-stop(##e31300,0),color-stop(##6b0900,1));
1347- background:-webkit-linear-gradient(top, #e31300 0%, #6b0900 100%);
1348- background:-moz-linear-gradient(center top , #e31300 0%, #6b0900 130%);
1349- background:-o-linear-gradient(top, #e31300 0%, #6b0900 100%);
1350- background:linear-gradient(top, #e31300 0%, #6b0900 100%);
1351- filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#e31300', endColorstr='#444444',GradientType=0 );
1352- border:1px solid #ff2d19;
1353- border-color:#e85345 #b00f00 #63241e;
1354- -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c;
1355- -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c;
1356- box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c;
1357-}
1358-
1359-
1360-.a-btn-text{
1361- padding-left:15px;
1362- padding-top:10px;
1363- display:block;
1364- font-size:18px;
1365- white-space:nowrap;
1366- color: #f5f1ea;
1367- text-shadow:0 1px 0 #000;
1368- -webkit-transition:all 0.3s linear;
1369- -moz-transition:all 0.3s linear;
1370- -o-transition:all 0.3s linear;
1371- transition:all 0.3s linear;
1372-
1373-}
1374-.a-btn-green .a-btn-text {
1375- color: #fff;
1376-}
1377-
1378-.a-btn-slide-text, .a-btn-fixed-slide-text {
1379- position:absolute;
1380- top:35px;
1381- left:0px;
1382- width:auto;
1383- right:52px;
1384- height:0px;
1385- background:#fff;
1386- color:#996633;
1387- font-size:13px;
1388- white-space:nowrap;
1389- font-family:Georgia, serif;
1390- font-style:italic;
1391- text-indent:15px;
1392- overflow:hidden;
1393- line-height:30px;
1394- -webkit-box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset;
1395- -moz-box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset;
1396- box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset;
1397- -webkit-transition:height 0.3s linear;
1398- -moz-transition:height 0.3s linear;
1399- -o-transition:height 0.3s linear;
1400- transition:height 0.3s linear;
1401-}
1402-.a-btn-fixed-slide-text{
1403- height: 30px;
1404-}
1405-
1406-.a-btn-icon-right{
1407- position:absolute;
1408-
1409- right:0px;
1410- top:0px;
1411- height:100%;
1412- width:52px;
1413- border-left:1px solid #f5b74e;
1414- -webkit-box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset;
1415- -moz-box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset;
1416- box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset;
1417-}
1418-.a-btn-red .a-btn-icon-right {
1419- border-left: 1px solid #fa430c;
1420-}
1421-.a-btn-icon-right span{
1422- width:38px;
1423- height:38px;
1424-
1425- position:absolute;
1426- left:50%;
1427- top:50%;
1428- margin:-20px 0px 0px -20px;
1429- background:transparent url(/static/images/software-download-white-brdr.png) no-repeat 50% 55%;
1430- -webkit-transition:all 0.3s linear;
1431- -moz-transition:all 0.3s linear;
1432- -o-transition:all 0.3s linear;
1433- transition:all 0.3s linear;
1434-
1435-}
1436-.a-btn-green .a-btn-icon-right span {
1437- background:transparent url(/static/images/software-download-white-brdr-green3.png) no-repeat 50% 55%;
1438-}
1439-.a-btn-red .a-btn-icon-right span {
1440-
1441- background:transparent url(/static/images/software-download-white-brdr-red.png) no-repeat 50% 55%;
1442-}
1443-.a-btn:hover{
1444- height:65px;
1445- -webkit-box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4);
1446- -moz-box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4);
1447- box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4);
1448-}
1449-.a-btn:hover .a-btn-text{
1450-
1451- text-shadow:0 1px 0 #000;
1452- color:#fff;
1453-}
1454-.a-btn:hover .a-btn-slide-text:hover{
1455- height:30px;
1456-}
1457-.a-btn:hover .a-btn-icon-right span{
1458- opacity:1;
1459- /**
1460- -webkit-transform:rotate(-45deg);
1461- -moz-transform:rotate(-45deg);
1462- -ms-transform:rotate(-45deg);
1463- -o-transform:rotate(-45deg);
1464- transform:rotate(-45deg);
1465- */
1466-}
1467-.a-btn:active{
1468- position:relative;
1469- top:1px;
1470- background:#fec354;
1471- background:-webkit-gradient(linear,left top,left bottom,color-stop(#fec354,0),color-stop(#fecd61,1));
1472- background:-webkit-linear-gradient(top, #fec354 0%, #fecd61 100%);
1473- background:-moz-linear-gradient(top, #fec354 0%, #fecd61 100%);
1474- background:-o-linear-gradient(top, #fec354 0%, #fecd61 100%);
1475- background:linear-gradient(top, #fec354 0%, #fecd61 100%);
1476- filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fec354', endColorstr='#fecd61',GradientType=0 );
1477- border-color:#d29a3a #cc9436 #c89133;
1478- text-shadow:0 1px 0 #fee1a0;
1479- -webkit-box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e;
1480- -moz-box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e;
1481- box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e;
1482-}
1483-.body .section blockquote {
1484- margin-left: 25px;
1485-}
1486
1487=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js'
1488--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js 2012-03-26 17:43:02 +0000
1489+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js 1970-01-01 00:00:00 +0000
1490@@ -1,269 +0,0 @@
1491-window.jQuery(function($) {
1492-
1493-
1494-
1495-function setCookie(c_name, value, expiredays)
1496-{
1497- var exdate = new Date();
1498- exdate.setDate(exdate.getDate() + expiredays);
1499- document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";path=/;expires=" + exdate.toUTCString());
1500-}
1501-
1502-function getCookie(c_name)
1503-{
1504- if (document.cookie.length > 0)
1505- {
1506- c_start = document.cookie.indexOf(c_name + "=");
1507- if (c_start != -1)
1508- {
1509- c_start = c_start + c_name.length+1;
1510- c_end = document.cookie.indexOf(";",c_start);
1511- if (c_end == -1)
1512- {
1513- c_end = document.cookie.length;
1514- }
1515- return unescape(document.cookie.substring(c_start, c_end));
1516- }
1517- }
1518- return "";
1519-}
1520-
1521-
1522-NAVI = new Object();
1523-
1524-NAVI.CloseTimer = null;
1525-
1526-NAVI.Open = function ( menu_tag, dir )
1527-{
1528- NAVI_CancelTimer();
1529- NAVI_Close();
1530- SEARCH_CancelTimer();
1531- SEARCH_Close();
1532- if ('h' == dir)
1533- {
1534- return;
1535- }
1536- var pos = $("#navilink-span-"+menu_tag).offset();
1537- if (dir=='r')
1538- {
1539- $("#navi-dropdown-"+menu_tag).css( { "position": "absolute", "left": (pos.left + ($("#navilink-span-"+menu_tag).width()) + 2 - ($("#navi-dropdown-"+menu_tag).width())) + "px", "top": (pos.top + 32) + "px" } );
1540- }
1541- else
1542- {
1543- $("#navi-dropdown-"+menu_tag).css( { "position": "absolute", "left": (pos.left) + "px", "top": (pos.top + 32) + "px" } );
1544- }
1545- $("#navi-dropdown-"+menu_tag).show();
1546- $("#navilink-span-"+menu_tag).bind('mouseover',NAVI_CancelTimer);
1547- $("#navilink-span-"+menu_tag).bind('mouseout',NAVI_Timer);
1548- $("#navi-dropdown-"+menu_tag).bind('mouseover',NAVI_CancelTimer);
1549- $("#navi-dropdown-"+menu_tag).bind('mouseout',NAVI_Timer);
1550-};
1551-
1552-function NAVI_Close()
1553-{
1554- $(".navi-dropdown").hide();
1555- $("#menu div").unbind('mouseover');
1556- $(".dropdown").unbind('mouseover');
1557- $(".dropdown").unbind('mouseout');
1558-
1559- $("#search-dropdown").hide();
1560- $("#searchlink-anchor").unbind('mouseover');
1561- $("#searchlink-anchor").unbind('mouseout');
1562- $("#search-dropdown").unbind('mouseover');
1563- $("#search-dropdown").unbind('mouseout');
1564-}
1565-
1566-function NAVI_CancelTimer()
1567-{
1568- if (NAVI.CloseTimer!=null)
1569- {
1570- window.clearTimeout(NAVI.CloseTimer);
1571- NAVI.CloseTimer = null;
1572- }
1573-}
1574-
1575-function NAVI_Timer()
1576-{
1577- if (NAVI.CloseTimer==null)
1578- {
1579- NAVI.CloseTimer = window.setTimeout(NAVI_Close, 300);
1580- }
1581-}
1582-
1583-
1584-SUBNAVI = new Object();
1585-
1586-SUBNAVI.Open = function ( menu_tag )
1587-{
1588- if ($("#sidesubnavi-" + menu_tag + ':hidden').length)
1589- {
1590- $(".sidesubnavi").hide();
1591- $("#sidesubnavi-"+menu_tag).show();
1592- return false;
1593- } else {
1594- return true;
1595- }
1596-};
1597-
1598-
1599-SEARCH = new Object();
1600-
1601-SEARCH.CloseTimer = null;
1602-
1603-SEARCH.Open = function()
1604-{
1605- NAVI_CancelTimer();
1606- NAVI_Close();
1607- SEARCH_CancelTimer();
1608- SEARCH_Close();
1609- var pos = $("#searchlink-anchor").offset();
1610- $("#search-dropdown").css( { "position": "absolute", "left": (pos.left - ($("#search-dropdown").width()) + 40) + "px", "top": (pos.top + 36) + "px" } );
1611- $("#search-dropdown").show();
1612- $("#searchlink-anchor").bind('mouseover',NAVI_CancelTimer);
1613- $("#searchlink-anchor").bind('mouseout',NAVI_Timer);
1614- $("#search-dropdown").bind('mouseover',NAVI_CancelTimer);
1615- $("#search-dropdown").bind('mouseout',NAVI_Timer);
1616- $("#search-input")[0].focus();
1617-};
1618-
1619-function SEARCH_Close()
1620-{
1621- $(".navi-dropdown").hide();
1622- $("#menu div").unbind('mouseover');
1623- $(".dropdown").unbind('mouseover');
1624- $(".dropdown").unbind('mouseout');
1625-
1626- $("#search-dropdown").hide();
1627- $("#searchlink-anchor").unbind('mouseover');
1628- $("#searchlink-anchor").unbind('mouseout');
1629- $("#search-dropdown").unbind('mouseover');
1630- $("#search-dropdown").unbind('mouseout');
1631-}
1632-
1633-
1634-function SEARCH_CancelTimer()
1635-{
1636- if (SEARCH.CloseTimer!=null)
1637- {
1638- window.clearTimeout(SEARCH.CloseTimer);
1639- SEARCH.CloseTimer = null;
1640- }
1641-}
1642-
1643-function SEARCH_Timer()
1644-{
1645- if (SEARCH.CloseTimer==null)
1646- {
1647- SEARCH.CloseTimer = window.setTimeout(SEARCH_Close, 300);
1648- }
1649-}
1650-
1651-menuImg1 = new Image(); menuImg1.src = 'http://s1.percona.com/ui-dropdown-header-l.png';
1652-menuImg2 = new Image(); menuImg2.src = 'http://s2.percona.com/ui-dropdown-header-r.png';
1653-menuImg3 = new Image(); menuImg3.src = 'http://s3.percona.com/ui-dropdown-header-search.png';
1654-menuImg4 = new Image(); menuImg4.src = 'http://s0.percona.com/ui-dropdown-bg.png';
1655-menuImg5 = new Image(); menuImg5.src = 'http://s1.percona.com/ui-dropdown-footer.png';
1656-
1657-
1658-});
1659-
1660-
1661-var Percona = {
1662- ssl: false,
1663- host: 'www.percona.com'
1664-};
1665-/**
1666- * @param string selector jQuery selector string
1667- */
1668-Percona.getRecentServerVersion = function(selector)
1669-{
1670- if ('string' != typeof(selector))
1671- {
1672- alert('Percona.getRecentServerVersion: missed or wrong selector!');
1673- }
1674- /* Localize jQuery variable */
1675- var jQuery;
1676- /******** Load jQuery if not present *********/
1677- if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.4.2')
1678- {
1679- var script_tag = document.createElement('script');
1680- script_tag.setAttribute("type","text/javascript");
1681- script_tag.setAttribute('src', 'http' + (Percona.ssl ? 's' : '') + ':/' + '/ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');
1682- script_tag.onload = scriptLoadHandler;
1683- script_tag.onreadystatechange = function () /* Same thing but for IE */
1684- {
1685- if (this.readyState == 'complete' || this.readyState == 'loaded')
1686- {
1687- scriptLoadHandler();
1688- }
1689- };
1690- /* Try to find the head, otherwise default to the documentElement */
1691- (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
1692- } else {
1693- /* The jQuery version on the window is the one we want to use */
1694- jQuery = window.jQuery;
1695- main();
1696- }
1697- var scriptLoadHandler_counter = 0;
1698- /******** Called once jQuery has loaded ******/
1699- function scriptLoadHandler()
1700- {
1701- if (++scriptLoadHandler_counter > 1)
1702- {
1703- return;
1704- }
1705- /* Restore $ and window.jQuery to their previous values and store the
1706- new jQuery in our local jQuery variable */
1707- jQuery = window.jQuery.noConflict(true);
1708- /* Call our main function */
1709- main(jQuery);
1710- }
1711- /******** Our main function ********/
1712- function main($)
1713- {
1714- var fillRecentServerVersion = function($)
1715- {
1716- if ($(selector).get(0))
1717- {
1718- $.get('http' + (Percona.ssl ? 's' : '') + ':/' + '/' + Percona.host + '/ajax/server-version/?callback=?', {}, function(json)
1719- {
1720- if ('object' == typeof(json) && 'string' == typeof(json.recentServerVersion))
1721- {
1722- $(selector).text(' ' + json.recentServerVersion);
1723- }
1724- }, 'jsonp');
1725- }
1726- };
1727- $(document).ready(function()
1728- {
1729- fillRecentServerVersion(jQuery);
1730- });
1731- }
1732-};
1733-
1734-$(document).ready(function(){
1735- $(window).bind("resize", resizeWindow);
1736- resizeWindow();
1737- function resizeWindow() {
1738- var win_w = $(window).width();
1739- var ribon = $("#support-ribbon");
1740- if(win_w < 1265){
1741- if(/mobile/i.test(navigator.userAgent)){
1742- ribon.hide();
1743- }else{
1744- if(ribon.hasClass("vertical")){
1745- ribon.removeClass("vertical");
1746- ribon.addClass("horizontal");
1747- }
1748- ribon.css({"left":'50%', "margin-left": '-'+(ribon.width() / 2)+'px'});
1749- }
1750- }else{
1751- if(ribon.hasClass("horizontal")){
1752- ribon.addClass("vertical");
1753- ribon.removeClass("horizontal");
1754- ribon.removeAttr("style");
1755- }
1756-
1757- }
1758- }
1759-});
1760\ No newline at end of file
1761
1762=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone-small.png'
1763Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone-small.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone-small.png 1970-01-01 00:00:00 +0000 differ
1764=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone.png'
1765Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone.png 1970-01-01 00:00:00 +0000 differ
1766=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/shield.png'
1767Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/shield.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/shield.png 1970-01-01 00:00:00 +0000 differ
1768=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js'
1769--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js 2011-10-25 10:51:19 +0000
1770+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js 1970-01-01 00:00:00 +0000
1771@@ -1,151 +0,0 @@
1772-/*
1773- * sidebar.js
1774- * ~~~~~~~~~~
1775- *
1776- * This script makes the Sphinx sidebar collapsible.
1777- *
1778- * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds
1779- * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton
1780- * used to collapse and expand the sidebar.
1781- *
1782- * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden
1783- * and the width of the sidebar and the margin-left of the document
1784- * are decreased. When the sidebar is expanded the opposite happens.
1785- * This script saves a per-browser/per-session cookie used to
1786- * remember the position of the sidebar among the pages.
1787- * Once the browser is closed the cookie is deleted and the position
1788- * reset to the default (expanded).
1789- *
1790- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
1791- * :license: BSD, see LICENSE for details.
1792- *
1793- */
1794-
1795-$(function() {
1796- // global elements used by the functions.
1797- // the 'sidebarbutton' element is defined as global after its
1798- // creation, in the add_sidebar_button function
1799- var bodywrapper = $('.bodywrapper');
1800- var sidebar = $('.sphinxsidebar');
1801- var sidebarwrapper = $('.sphinxsidebarwrapper');
1802-
1803- // for some reason, the document has no sidebar; do not run into errors
1804- if (!sidebar.length) return;
1805-
1806- // original margin-left of the bodywrapper and width of the sidebar
1807- // with the sidebar expanded
1808- var bw_margin_expanded = bodywrapper.css('margin-left');
1809- var ssb_width_expanded = sidebar.width();
1810-
1811- // margin-left of the bodywrapper and width of the sidebar
1812- // with the sidebar collapsed
1813- var bw_margin_collapsed = '.8em';
1814- var ssb_width_collapsed = '.8em';
1815-
1816- // colors used by the current theme
1817- var dark_color = $('.related').css('background-color');
1818- var light_color = $('.document').css('background-color');
1819-
1820- function sidebar_is_collapsed() {
1821- return sidebarwrapper.is(':not(:visible)');
1822- }
1823-
1824- function toggle_sidebar() {
1825- if (sidebar_is_collapsed())
1826- expand_sidebar();
1827- else
1828- collapse_sidebar();
1829- }
1830-
1831- function collapse_sidebar() {
1832- sidebarwrapper.hide();
1833- sidebar.css('width', ssb_width_collapsed);
1834- bodywrapper.css('margin-left', bw_margin_collapsed);
1835- sidebarbutton.css({
1836- 'margin-left': '0',
1837- 'height': bodywrapper.height()
1838- });
1839- sidebarbutton.find('span').text('»');
1840- sidebarbutton.attr('title', _('Expand sidebar'));
1841- document.cookie = 'sidebar=collapsed';
1842- }
1843-
1844- function expand_sidebar() {
1845- bodywrapper.css('margin-left', bw_margin_expanded);
1846- sidebar.css('width', ssb_width_expanded);
1847- sidebarwrapper.show();
1848- sidebarbutton.css({
1849- 'margin-left': ssb_width_expanded-12,
1850- 'height': bodywrapper.height()
1851- });
1852- sidebarbutton.find('span').text('«');
1853- sidebarbutton.attr('title', _('Collapse sidebar'));
1854- document.cookie = 'sidebar=expanded';
1855- }
1856-
1857- function add_sidebar_button() {
1858- sidebarwrapper.css({
1859- 'float': 'left',
1860- 'margin-right': '0',
1861- 'width': ssb_width_expanded - 28
1862- });
1863- // create the button
1864- sidebar.append(
1865- '<div id="sidebarbutton"><span>&laquo;</span></div>'
1866- );
1867- var sidebarbutton = $('#sidebarbutton');
1868- light_color = sidebarbutton.css('background-color');
1869- // find the height of the viewport to center the '<<' in the page
1870- var viewport_height;
1871- if (window.innerHeight)
1872- viewport_height = window.innerHeight;
1873- else
1874- viewport_height = $(window).height();
1875- sidebarbutton.find('span').css({
1876- 'display': 'block',
1877- 'margin-top': (viewport_height - sidebar.position().top - 20) / 2
1878- });
1879-
1880- sidebarbutton.click(toggle_sidebar);
1881- sidebarbutton.attr('title', _('Collapse sidebar'));
1882- sidebarbutton.css({
1883- 'color': '#FFFFFF',
1884- 'border-left': '1px solid ' + dark_color,
1885- 'font-size': '1.2em',
1886- 'cursor': 'pointer',
1887- 'height': bodywrapper.height(),
1888- 'padding-top': '1px',
1889- 'margin-left': ssb_width_expanded - 12
1890- });
1891-
1892- sidebarbutton.hover(
1893- function () {
1894- $(this).css('background-color', dark_color);
1895- },
1896- function () {
1897- $(this).css('background-color', light_color);
1898- }
1899- );
1900- }
1901-
1902- function set_position_from_cookie() {
1903- if (!document.cookie)
1904- return;
1905- var items = document.cookie.split(';');
1906- for(var k=0; k<items.length; k++) {
1907- var key_val = items[k].split('=');
1908- var key = key_val[0];
1909- if (key == 'sidebar') {
1910- var value = key_val[1];
1911- if ((value == 'collapsed') && (!sidebar_is_collapsed()))
1912- collapse_sidebar();
1913- else if ((value == 'expanded') && (sidebar_is_collapsed()))
1914- expand_sidebar();
1915- }
1916- }
1917- }
1918-
1919- add_sidebar_button();
1920- var sidebarbutton = $('#sidebarbutton');
1921- set_position_from_cookie();
1922-});
1923
1924=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-download.png'
1925Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-download.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-download.png 1970-01-01 00:00:00 +0000 differ
1926=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-latest.png'
1927Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-latest.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-latest.png 1970-01-01 00:00:00 +0000 differ
1928=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/support-small.png'
1929Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/support-small.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/support-small.png 1970-01-01 00:00:00 +0000 differ
1930=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-bg.png'
1931Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-bg.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-bg.png 1970-01-01 00:00:00 +0000 differ
1932=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-footer.png'
1933Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-footer.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-footer.png 1970-01-01 00:00:00 +0000 differ
1934=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-l.png'
1935Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-l.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-l.png 1970-01-01 00:00:00 +0000 differ
1936=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-r.png'
1937Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-r.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-r.png 1970-01-01 00:00:00 +0000 differ
1938=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-search.png'
1939Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-search.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-search.png 1970-01-01 00:00:00 +0000 differ
1940=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-footer-logo.png'
1941Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-footer-logo.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-footer-logo.png 1970-01-01 00:00:00 +0000 differ
1942=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-leftnavi-sel.png'
1943Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-leftnavi-sel.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-leftnavi-sel.png 1970-01-01 00:00:00 +0000 differ
1944=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-logo.png'
1945Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-logo.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-logo.png 1970-01-01 00:00:00 +0000 differ
1946=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-l.png'
1947Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-l.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-l.png 1970-01-01 00:00:00 +0000 differ
1948=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-r.png'
1949Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-r.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-r.png 1970-01-01 00:00:00 +0000 differ
1950=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-l.png'
1951Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-l.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-l.png 1970-01-01 00:00:00 +0000 differ
1952=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-r.png'
1953Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-r.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-r.png 1970-01-01 00:00:00 +0000 differ
1954=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-l.png'
1955Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-l.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-l.png 1970-01-01 00:00:00 +0000 differ
1956=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-r.png'
1957Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-r.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-r.png 1970-01-01 00:00:00 +0000 differ
1958=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-content.png'
1959Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-content.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-content.png 1970-01-01 00:00:00 +0000 differ
1960=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-front.png'
1961Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-front.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-front.png 1970-01-01 00:00:00 +0000 differ
1962=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-search.png'
1963Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-search.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-search.png 1970-01-01 00:00:00 +0000 differ
1964=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-tab-bg.png'
1965Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-tab-bg.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-tab-bg.png 1970-01-01 00:00:00 +0000 differ
1966=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/warning.png'
1967Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/warning.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/warning.png 1970-01-01 00:00:00 +0000 differ
1968=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf'
1969--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf 2011-10-25 10:51:19 +0000
1970+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf 1970-01-01 00:00:00 +0000
1971@@ -1,32 +0,0 @@
1972-[theme]
1973-inherit = default
1974-stylesheet = default.css
1975-pygments_style = sphinx
1976-
1977-[options]
1978-rightsidebar = false
1979-stickysidebar = false
1980-collapsiblesidebar = false
1981-externalrefs = false
1982-
1983-footerbgcolor = #11303d
1984-footertextcolor = #ffffff
1985-sidebarbgcolor = #1c4e63
1986-sidebarbtncolor = #3c6e83
1987-sidebartextcolor = #ffffff
1988-sidebarlinkcolor = #98dbcc
1989-relbarbgcolor = #133f52
1990-relbartextcolor = #ffffff
1991-relbarlinkcolor = #ffffff
1992-bgcolor = #ffffff
1993-textcolor = #000000
1994-headbgcolor = #f2f2f2
1995-headtextcolor = #20435c
1996-headlinkcolor = #c60f0f
1997-linkcolor = #355f7c
1998-visitedlinkcolor = #355f7c
1999-codebgcolor = #eeffcc
2000-codetextcolor = #333333
2001-
2002-bodyfont = sans-serif
2003-headfont = 'Arial', 'Helvetica' sans-serif
2004
2005=== modified file 'Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h'
2006--- Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h 2012-02-13 06:19:11 +0000
2007+++ Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h 2012-06-27 07:03:19 +0000
2008@@ -31,7 +31,11 @@
2009
2010 #include <security/pam_appl.h>
2011 #include <security/pam_modules.h>
2012+#if HAVE_SECURITY_PAM_MISC_H
2013 #include <security/pam_misc.h>
2014+#elif HAVE_SECURITY_OPENPAM_H
2015+#include <security/openpam.h>
2016+#endif
2017
2018 #include <mysql/plugin.h>
2019 #include <mysql/plugin_auth.h>
2020
2021=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test'
2022=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/bootstrap.sh'
2023--- Percona-Server/plugin/percona-pam-for-mysql/test/bootstrap.sh 1970-01-01 00:00:00 +0000
2024+++ Percona-Server/plugin/percona-pam-for-mysql/test/bootstrap.sh 2012-06-27 07:03:19 +0000
2025@@ -0,0 +1,122 @@
2026+#!/bin/bash
2027+
2028+set -e
2029+
2030+function usage()
2031+{
2032+ cat <<EOF
2033+Usage:
2034+$0 xtrabackup_target [installation_directory]
2035+$0 path_to_server_tarball [installation_directory]
2036+
2037+Prepares a server binary directory to be used by run.sh when running XtraBackup
2038+tests.
2039+
2040+If the argument is one of the build targets passed to build.sh
2041+(i.e. innodb51_builtin innodb51 innodb55 xtradb51 xtradb55) then the
2042+appropriate Linux tarball is downloaded from a pre-defined location and
2043+unpacked into the specified installation directory ('./server' by default).
2044+
2045+Otherwise the argument is assumed to be a path to a server binary tarball.
2046+EOF
2047+}
2048+
2049+if [ -z "$1" ]
2050+then
2051+ usage
2052+fi
2053+
2054+arch="`uname -m`"
2055+if [ "$arch" = "i386" ]
2056+then
2057+ arch="i686"
2058+fi
2059+
2060+case "$1" in
2061+ innodb51_builtin | innodb51)
2062+ url="http://s3.amazonaws.com/percona.com/downloads/community"
2063+ tarball="mysql-5.1.49-linux-$arch-glibc23.tar.gz"
2064+ ;;
2065+ innodb55)
2066+ url="http://s3.amazonaws.com/percona.com/downloads/community"
2067+ tarball="mysql-5.5.16-linux2.6-$arch.tar.gz"
2068+ ;;
2069+ xtradb51)
2070+ url="http://www.percona.com/redir/downloads/Percona-Server-5.1/Percona-Server-5.1.60-13.1/binary/linux/$arch"
2071+ tarball="Percona-Server-5.1.60-rel13.1-413.Linux.$arch.tar.gz"
2072+ ;;
2073+ xtradb55)
2074+ url="http://s3.amazonaws.com/percona.com/downloads/Percona-Server-5.5/Percona-Server-5.5.11-20.2/Linux/binary"
2075+ tarball="Percona-Server-5.5.11-rel20.2-116.Linux.$arch.tar.gz"
2076+ ;;
2077+ galera55)
2078+ galera=1
2079+ ;;
2080+ *)
2081+ if ! test -r "$1"
2082+ then
2083+ echo "$1 does not exist"
2084+ exit 1
2085+ fi
2086+ tarball="$1"
2087+ ;;
2088+esac
2089+
2090+if test -n "$2"
2091+then
2092+ destdir="$2"
2093+else
2094+ destdir="./server"
2095+fi
2096+
2097+if test -d "$destdir"
2098+then
2099+ rm -rf "$destdir"
2100+fi
2101+mkdir "$destdir"
2102+
2103+if test ! $galera
2104+then
2105+ if test -n "$url"
2106+ then
2107+ echo "Downloading $tarball"
2108+ wget -qc "$url/$tarball"
2109+ fi
2110+
2111+ echo "Unpacking $tarball into $destdir"
2112+ tar zxf $tarball -C $destdir
2113+ sourcedir="$destdir/`ls $destdir`"
2114+ if test -n "$sourcedir"
2115+ then
2116+ mv $sourcedir/* $destdir
2117+ rm -rf $sourcedir
2118+ fi
2119+else
2120+ if test ! -d galerabuild
2121+ then
2122+ bzr init-repo galerabuild
2123+ fi
2124+ cd galerabuild
2125+
2126+ rm -rf percona-xtradb-cluster
2127+ bzr branch lp:percona-xtradb-cluster percona-xtradb-cluster
2128+ rm -rf galera2x
2129+ bzr branch lp:galera/2.x galera2x
2130+ cd percona-xtradb-cluster
2131+ cmake -DENABLE_DTRACE=0 -DWITH_WSREP:BOOL="1" -DCMAKE_INSTALL_PREFIX="../../server"
2132+
2133+ if test -f /proc/cpuinfo
2134+ then
2135+ MAKE_J=`grep '^processor' /proc/cpuinfo | wc -l`
2136+ else
2137+ MAKE_J=4
2138+ fi
2139+
2140+ make -j$MAKE_J
2141+ make install
2142+
2143+ cd ../galera2x
2144+ ./scripts/build.sh
2145+ cp libgalera_smm.so ../../server/
2146+ cd ..
2147+fi
2148
2149=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp'
2150=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs'
2151=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/_build'
2152=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/_static'
2153=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/_templates'
2154=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/conf.py'
2155--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/conf.py 1970-01-01 00:00:00 +0000
2156+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/conf.py 2012-06-27 07:03:19 +0000
2157@@ -0,0 +1,216 @@
2158+# -*- coding: utf-8 -*-
2159+#
2160+# kewpie documentation build configuration file, created by
2161+# sphinx-quickstart on Mon Dec 5 12:35:13 2011.
2162+#
2163+# This file is execfile()d with the current directory set to its containing dir.
2164+#
2165+# Note that not all possible configuration values are present in this
2166+# autogenerated file.
2167+#
2168+# All configuration values have a default; values that are commented out
2169+# serve to show the default.
2170+
2171+import sys, os
2172+
2173+# If extensions (or modules to document with autodoc) are in another directory,
2174+# add these directories to sys.path here. If the directory is relative to the
2175+# documentation root, use os.path.abspath to make it absolute, like shown here.
2176+#sys.path.insert(0, os.path.abspath('.'))
2177+
2178+# -- General configuration -----------------------------------------------------
2179+
2180+# If your documentation needs a minimal Sphinx version, state it here.
2181+#needs_sphinx = '1.0'
2182+
2183+# Add any Sphinx extension module names here, as strings. They can be extensions
2184+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
2185+extensions = ['sphinx.ext.autodoc']
2186+
2187+# Add any paths that contain templates here, relative to this directory.
2188+templates_path = ['_templates']
2189+
2190+# The suffix of source filenames.
2191+source_suffix = '.rst'
2192+
2193+# The encoding of source files.
2194+#source_encoding = 'utf-8-sig'
2195+
2196+# The master toctree document.
2197+master_doc = 'index'
2198+
2199+# General information about the project.
2200+project = u'kewpie'
2201+copyright = u'2011, pcrews'
2202+
2203+# The version info for the project you're documenting, acts as replacement for
2204+# |version| and |release|, also used in various other places throughout the
2205+# built documents.
2206+#
2207+# The short X.Y version.
2208+version = '1.2.1'
2209+# The full version, including alpha/beta/rc tags.
2210+release = '1.2.1'
2211+
2212+# The language for content autogenerated by Sphinx. Refer to documentation
2213+# for a list of supported languages.
2214+#language = None
2215+
2216+# There are two options for replacing |today|: either, you set today to some
2217+# non-false value, then it is used:
2218+#today = ''
2219+# Else, today_fmt is used as the format for a strftime call.
2220+#today_fmt = '%B %d, %Y'
2221+
2222+# List of patterns, relative to source directory, that match files and
2223+# directories to ignore when looking for source files.
2224+exclude_patterns = ['_build']
2225+
2226+# The reST default role (used for this markup: `text`) to use for all documents.
2227+#default_role = None
2228+
2229+# If true, '()' will be appended to :func: etc. cross-reference text.
2230+#add_function_parentheses = True
2231+
2232+# If true, the current module name will be prepended to all description
2233+# unit titles (such as .. function::).
2234+#add_module_names = True
2235+
2236+# If true, sectionauthor and moduleauthor directives will be shown in the
2237+# output. They are ignored by default.
2238+#show_authors = False
2239+
2240+# The name of the Pygments (syntax highlighting) style to use.
2241+pygments_style = 'sphinx'
2242+
2243+# A list of ignored prefixes for module index sorting.
2244+#modindex_common_prefix = []
2245+
2246+
2247+# -- Options for HTML output ---------------------------------------------------
2248+
2249+# The theme to use for HTML and HTML Help pages. See the documentation for
2250+# a list of builtin themes.
2251+html_theme = 'default'
2252+
2253+# Theme options are theme-specific and customize the look and feel of a theme
2254+# further. For a list of options available for each theme, see the
2255+# documentation.
2256+#html_theme_options = {}
2257+
2258+# Add any paths that contain custom themes here, relative to this directory.
2259+#html_theme_path = []
2260+
2261+# The name for this set of Sphinx documents. If None, it defaults to
2262+# "<project> v<release> documentation".
2263+#html_title = None
2264+
2265+# A shorter title for the navigation bar. Default is the same as html_title.
2266+#html_short_title = None
2267+
2268+# The name of an image file (relative to this directory) to place at the top
2269+# of the sidebar.
2270+#html_logo = None
2271+
2272+# The name of an image file (within the static path) to use as favicon of the
2273+# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
2274+# pixels large.
2275+#html_favicon = None
2276+
2277+# Add any paths that contain custom static files (such as style sheets) here,
2278+# relative to this directory. They are copied after the builtin static files,
2279+# so a file named "default.css" will overwrite the builtin "default.css".
2280+html_static_path = ['_static']
2281+
2282+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
2283+# using the given strftime format.
2284+#html_last_updated_fmt = '%b %d, %Y'
2285+
2286+# If true, SmartyPants will be used to convert quotes and dashes to
2287+# typographically correct entities.
2288+#html_use_smartypants = True
2289+
2290+# Custom sidebar templates, maps document names to template names.
2291+#html_sidebars = {}
2292+
2293+# Additional templates that should be rendered to pages, maps page names to
2294+# template names.
2295+#html_additional_pages = {}
2296+
2297+# If false, no module index is generated.
2298+#html_domain_indices = True
2299+
2300+# If false, no index is generated.
2301+#html_use_index = True
2302+
2303+# If true, the index is split into individual pages for each letter.
2304+#html_split_index = False
2305+
2306+# If true, links to the reST sources are added to the pages.
2307+#html_show_sourcelink = True
2308+
2309+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
2310+#html_show_sphinx = True
2311+
2312+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
2313+#html_show_copyright = True
2314+
2315+# If true, an OpenSearch description file will be output, and all pages will
2316+# contain a <link> tag referring to it. The value of this option must be the
2317+# base URL from which the finished HTML is served.
2318+#html_use_opensearch = ''
2319+
2320+# This is the file name suffix for HTML files (e.g. ".xhtml").
2321+#html_file_suffix = None
2322+
2323+# Output file base name for HTML help builder.
2324+htmlhelp_basename = 'kewpiedoc'
2325+
2326+
2327+# -- Options for LaTeX output --------------------------------------------------
2328+
2329+# The paper size ('letter' or 'a4').
2330+#latex_paper_size = 'letter'
2331+
2332+# The font size ('10pt', '11pt' or '12pt').
2333+#latex_font_size = '10pt'
2334+
2335+# Grouping the document tree into LaTeX files. List of tuples
2336+# (source start file, target name, title, author, documentclass [howto/manual]).
2337+latex_documents = [
2338+ ('index', 'kewpie.tex', u'kewpie Documentation',
2339+ u'pcrews', 'manual'),
2340+]
2341+
2342+# The name of an image file (relative to this directory) to place at the top of
2343+# the title page.
2344+#latex_logo = None
2345+
2346+# For "manual" documents, if this is true, then toplevel headings are parts,
2347+# not chapters.
2348+#latex_use_parts = False
2349+
2350+# If true, show page references after internal links.
2351+#latex_show_pagerefs = False
2352+
2353+# If true, show URL addresses after external links.
2354+#latex_show_urls = False
2355+
2356+# Additional stuff for the LaTeX preamble.
2357+#latex_preamble = ''
2358+
2359+# Documents to append as an appendix to all manuals.
2360+#latex_appendices = []
2361+
2362+# If false, no module index is generated.
2363+#latex_domain_indices = True
2364+
2365+
2366+# -- Options for manual page output --------------------------------------------
2367+
2368+# One entry per manual page. List of tuples
2369+# (source start file, name, description, authors, manual section).
2370+man_pages = [
2371+ ('index', 'kewpie', u'kewpie Documentation',
2372+ [u'pcrews'], 1)
2373+]
2374
2375=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/dbqp.rst'
2376--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/dbqp.rst 1970-01-01 00:00:00 +0000
2377+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/dbqp.rst 2012-06-27 07:03:19 +0000
2378@@ -0,0 +1,21 @@
2379+**********************************
2380+dbqp
2381+**********************************
2382+
2383+Synopsis
2384+========
2385+Database Quality Platform. Versatile, pluggable test runner for MySQL-based databases
2386+
2387+**./kewpie** [ *OPTIONS* ] [ TESTCASE ]
2388+
2389+Description
2390+===========
2391+
2392+:program:`kewpie.py` is intended to provide a standardized
2393+platform to facilitate testing MySQL databases. Currently a number of MySQL variants are supported and include:
2394+* Drizzle
2395+* MySQL
2396+* Percona Server
2397+* MySQL using Galera replication
2398+
2399+NOTE: dbqp has been renamed to kewpie and you should refer to this page for documentation: :doc:`kewpie`
2400
2401=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/index.rst'
2402--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/index.rst 1970-01-01 00:00:00 +0000
2403+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/index.rst 2012-06-27 07:03:19 +0000
2404@@ -0,0 +1,34 @@
2405+.. kewpie documentation master file, created by
2406+ sphinx-quickstart on Mon Dec 5 12:35:13 2011.
2407+ You can adapt this file completely to your liking, but it should at least
2408+ contain the root `toctree` directive.
2409+
2410+Welcome to kewpie's documentation!
2411+===================================
2412+
2413+kewpie ((database) Quality Platform) is designed to facilitate testing of MySQL-based database systems. Its aim is to provide a pluggable system that can run a variety of testing tools via standard helper code (server allocation and management / test result reporting / etc)
2414+
2415+Introduction:
2416+-------------
2417+.. toctree::
2418+ :maxdepth: 2
2419+
2420+Testing:
2421+--------
2422+.. toctree::
2423+ :maxdepth: 2
2424+
2425+ kewpie.rst
2426+ writing_tests.rst
2427+ randgen.rst
2428+ test-run.rst
2429+ sql-bench.rst
2430+ sysbench.rst
2431+ writing_tests.rst
2432+
2433+Indices and tables
2434+==================
2435+
2436+* :ref:`genindex`
2437+* :ref:`search`
2438+
2439
2440=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/kewpie.rst'
2441--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/kewpie.rst 1970-01-01 00:00:00 +0000
2442+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/kewpie.rst 2012-06-27 07:03:19 +0000
2443@@ -0,0 +1,498 @@
2444+**********************************
2445+kewpie
2446+**********************************
2447+
2448+Synopsis
2449+========
2450+Database Quality Platform. Versatile, pluggable test runner for MySQL-based databases
2451+
2452+**./kewpie** [ *OPTIONS* ] [ TESTCASE ]
2453+
2454+Description
2455+===========
2456+
2457+:program:`kewpie.py` is intended to provide a standardized
2458+platform to facilitate testing MySQL databases. Currently a number of MySQL variants are supported and include:
2459+* Drizzle
2460+* MySQL
2461+* Percona Server
2462+* MySQL using Galera replication
2463+
2464+Designed as a response to the sometimes painfully diverse ecosystem of testing tools, the intent is to provide a system that standardizes common testing tasks while providing a variety of ways to analyze the behavior of database systems.
2465+
2466+Long experience with MySQL testing has shown that a number of tasks are common to all tests:
2467+* Allocation and management of test servers
2468+* Test collection and management
2469+* Reporting of test results
2470+
2471+Kewpie combines this with the flexibity of Python's unittest framework. By allowing users to write tests as Python modules, we have great flexibility in how we start and set up servers, what we do to them, and how we assess their performance of our test tasks. Some of the tasks kewpie test cases cover:
2472+* randgen tests
2473+* running sql-bench comprehensive tests
2474+* running sql-bench crashme
2475+* running sysbench
2476+* running drizzle-test-run test cases
2477+* more direct tests using python code and helper libraries
2478+
2479+Provided test suites
2480+=======================
2481+
2482+* MySQL / Percona Server / Galera tests:
2483+
2484+ * randgen_basic - basic randgen tests of the server (optimizer stress, etc)
2485+ * randgen_bugs - holder suite for failing tests
2486+ * crashme - sql-bench's crashme suite (may take some time to run)
2487+ * sqlbench - sql-bench comprehensive suite. (may take ~45 min. to execute)
2488+ * cluster_basic - small, atomic tests of replication functionality. Tests are written in such a way as to be portable across server types (!)
2489+ * cluster_bugs - holder suite for failing tests
2490+ * cluster_randgen - tests of replication functionality using the random query generator and relevant test loads
2491+ * xtrabackup_basic - tests of the Percona Xtrabackup tool
2492+ * xtrabackup_bugs - hoder suite for failing tests
2493+
2494+* Drizzle tests:
2495+
2496+ * randgen_basic - basic tests of the server (optimizer stress, etc)
2497+ * The following all use the same transaction tests, but validate different functionality:
2498+
2499+ * randgen_trxLog - tests the file-based replication log
2500+ * randgen_innoTrxLog - tests the innodb-table-based replication log
2501+ * randgen_slavePlugin - tests the functionality of the replication / slave plugin
2502+
2503+ * crashme - sql-bench's crashme suite (may take some time to run)
2504+ * sqlbench - sql-bench comprehensive suite. (may take ~45 min. to execute)
2505+
2506+
2507+Running tests
2508+=========================
2509+
2510+There are several different ways to run tests using :program:`kewpie.py`.
2511+
2512+It should be noted that unless :option:`--force` is used, the program will
2513+stop execution upon encountering the first failing test.
2514+:option:`--force` is recommended if you are running several tests - it will
2515+allow you to view all successes and failures in one run.
2516+
2517+Running individual tests
2518+------------------------
2519+If one only wants to run a few, specific tests, they may do so this way::
2520+
2521+ ./kewpie.py [OPTIONS] test1 [test2 ... testN]
2522+
2523+Running all tests within a suite
2524+--------------------------------
2525+Many of the tests supplied with Drizzle are organized into suites.
2526+
2527+The tests within drizzle/tests/t are considered the 'main' suite.
2528+Other suites are located in either drizzle/tests/suite or within the various
2529+directories in drizzle/plugin. Tests for a specific plugin should live in
2530+the plugin's directory - drizzle/plugin/example_plugin/tests
2531+
2532+To run the tests in a specific suite::
2533+
2534+ ./kewpie.py [OPTIONS] --suite=SUITENAME
2535+
2536+Running specific tests within a suite
2537+--------------------------------------
2538+To run a specific set of tests within a suite::
2539+
2540+ ./kewpie.py [OPTIONS] --suite=SUITENAME TEST1 [TEST2..TESTN]
2541+
2542+Calling tests using <suitename>.<testname> currently does not work.
2543+One must specify the test suite via the :option:`--suite` option.
2544+
2545+
2546+Running all available tests
2547+---------------------------
2548+Currently, the quickest way to execute all tests in all suites is
2549+to use 'make test-kewpie' from the drizzle root.
2550+
2551+Otherwise, one should simply name all suites::
2552+
2553+ ./kewpie.py [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN
2554+
2555+Interpreting test results
2556+=========================
2557+The output of the test runner is quite simple. Every test should pass.
2558+In the event of a test failure, please take the time to file a bug here:
2559+*https://bugs.launchpad.net/drizzle*
2560+
2561+During a run, the program will provide the user with:
2562+ * test name (suite + name)
2563+ * test status (pass/fail/skipped)
2564+ * time spent executing each test
2565+
2566+At the end of a run, the program will provide the user with a listing of:
2567+ * how many tests were run
2568+ * counts and percentages of total exectuted for all test statuses
2569+ * a listing of failing, skipped, or disabled tests
2570+ * total time spent executing the tests
2571+
2572+Example output::
2573+
2574+ <snip>
2575+ 30 Jan 2011 16:26:31 : main.small_tmp_table [ pass ] 38
2576+ 30 Jan 2011 16:26:31 : main.snowman [ pass ] 42
2577+ 30 Jan 2011 16:26:31 : main.statement_boundaries [ pass ] 47
2578+ 30 Jan 2011 16:26:31 : main.status [ pass ] 51
2579+ 30 Jan 2011 16:26:31 : main.strict [ pass ] 138
2580+ 30 Jan 2011 16:26:43 : main.subselect [ fail ] 12361
2581+ 30 Jan 2011 16:26:43 : --- drizzle/tests/r/subselect.result 2011-01-30 16:23:54.975776148 -0500
2582+ 30 Jan 2011 16:26:43 : +++ drizzle/tests/r/subselect.reject 2011-01-30 16:26:43.835519303 -0500
2583+ 30 Jan 2011 16:26:43 : @@ -5,7 +5,7 @@
2584+ 30 Jan 2011 16:26:43 : 2
2585+ 30 Jan 2011 16:26:43 : explain extended select (select 2);
2586+ 30 Jan 2011 16:26:43 : id select_type table type possible_keys key key_len ref rows filtered Extra
2587+ 30 Jan 2011 16:26:43 : -9 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL No tables used
2588+ 30 Jan 2011 16:26:43 : +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL No tables used
2589+ <snip>
2590+ 30 Jan 2011 16:30:20 : ================================================================================
2591+ 30 Jan 2011 16:30:20 INFO: Test execution complete in 314 seconds
2592+ 30 Jan 2011 16:30:20 INFO: Summary report:
2593+ 30 Jan 2011 16:30:20 INFO: Executed 552/552 test cases, 100.00 percent
2594+ 30 Jan 2011 16:30:20 INFO: STATUS: FAIL, 1/552 test cases, 0.18 percent executed
2595+ 30 Jan 2011 16:30:20 INFO: STATUS: PASS, 551/552 test cases, 99.82 percent executed
2596+ 30 Jan 2011 16:30:20 INFO: FAIL tests: main.subselect
2597+ 30 Jan 2011 16:30:20 INFO: Spent 308 / 314 seconds on: TEST(s)
2598+ 30 Jan 2011 16:30:20 INFO: Test execution complete
2599+ 30 Jan 2011 16:30:20 INFO: Stopping all running servers...
2600+
2601+
2602+Additional uses
2603+===============
2604+Starting a server for manual testing
2605+------------------------------------
2606+
2607+:program:`kewpie.py` allows a user to get a Drizzle server up and running
2608+quickly. This can be useful for fast ad-hoc testing.
2609+
2610+To do so call::
2611+
2612+ ./kewpie.py --start-and-exit [*OPTIONS*]
2613+
2614+This will start a Drizzle server that you can connect to and query
2615+
2616+Starting a server against a pre-populated DATADIR
2617+--------------------------------------------------
2618+
2619+Using :option:`--start-dirty` prevents :program:`kewpie.py` from attempting
2620+to initialize (clean) the datadir. This can be useful if you want to use
2621+an already-populated datadir for testing.
2622+
2623+NOTE: This feature is still being tested, use caution with your data!!!
2624+
2625+Cleanup mode
2626+-------------
2627+A cleanup mode is provided for user convenience. This simply shuts down
2628+any servers whose pid files are detected in the kewpie workdir. It is mainly
2629+intended as a quick cleanup for post-testing with :option:`--start-and-exit`::
2630+
2631+ ./kewpie.py --mode=cleanup
2632+
2633+ Setting --start-dirty=True for cleanup mode...
2634+ 23 Feb 2011 11:35:59 INFO: Using Drizzle source tree:
2635+ 23 Feb 2011 11:35:59 INFO: basedir: drizzle
2636+ 23 Feb 2011 11:35:59 INFO: clientbindir: drizzle/client
2637+ 23 Feb 2011 11:35:59 INFO: testdir: drizzle/tests
2638+ 23 Feb 2011 11:35:59 INFO: server_version: 2011.02.2188
2639+ 23 Feb 2011 11:35:59 INFO: server_compile_os: unknown-linux-gnu
2640+ 23 Feb 2011 11:35:59 INFO: server_platform: x86_64
2641+ 23 Feb 2011 11:35:59 INFO: server_comment: (Source distribution (kewpie_randgen))
2642+ 23 Feb 2011 11:35:59 INFO: Using --start-dirty, not attempting to touch directories
2643+ 23 Feb 2011 11:35:59 INFO: Using default-storage-engine: innodb
2644+ 23 Feb 2011 11:35:59 INFO: Using testing mode: cleanup
2645+ 23 Feb 2011 11:35:59 INFO: Killing pid 10484 from drizzle/tests/workdir/testbot0/server0/var/run/server0.pid
2646+ 23 Feb 2011 11:35:59 INFO: Stopping all running servers...
2647+
2648+Program architecture
2649+====================
2650+
2651+:program:`kewpie.py`'s 'dtr' mode uses a simple diff-based mechanism for testing.
2652+This is the default mode and where the majority of Drizzle testing occurs.
2653+It will execute the statements contained in a test and compare the results
2654+to pre-recorded expected results. In the event of a test failure, you
2655+will be presented with a diff::
2656+
2657+ main.exp1 [ fail ]
2658+ --- drizzle/tests/r/exp1.result 2010-11-02 02:10:25.107013998 +0300
2659+ +++ drizzle/tests/r/exp1.reject 2010-11-02 02:10:32.017013999 +0300
2660+ @@ -5,4 +5,5 @@
2661+ a
2662+ 1
2663+ 2
2664+ +3
2665+ DROP TABLE t1;
2666+
2667+A test case consists of a .test and a .result file. The .test file includes
2668+the various statements to be executed for a test. The .result file lists
2669+the expected results for a given test file. These files live in tests/t
2670+and tests/r, respectively. This structure is the same for all test suites.
2671+
2672+kewpie.py options
2673+===================
2674+
2675+The :program:`kewpie.py` tool has several available options:
2676+
2677+./kewpie.py [ OPTIONS ] [ TESTCASE ]
2678+
2679+
2680+Options
2681+-------
2682+
2683+.. program:: kewpie.py
2684+
2685+.. option:: -h, --help
2686+
2687+ show this help message and exit
2688+
2689+Configuration controls - kewpie can read config files with certain options pre-set:
2690+---------------------------------------------------------------------------------------------------
2691+
2692+.. option:: --sys_config_file=SYSCONFIGFILEPATH
2693+
2694+ The file that specifies system configuration specs for
2695+ kewpie to execute tests (not yet implemented)
2696+
2697+Options for the test-runner itself
2698+----------------------------------
2699+
2700+.. program:: kewpie.py
2701+
2702+.. option:: --force
2703+
2704+ Set this to continue test execution beyond the first failed test
2705+
2706+.. option:: --start-and-exit
2707+
2708+ Spin up the server(s) for the first specified test then exit
2709+ (will leave servers running)
2710+
2711+.. option:: --verbose
2712+
2713+ Produces extensive output about test-runner state.
2714+ Distinct from --debug
2715+
2716+.. option:: --debug
2717+
2718+ Provide internal-level debugging output.
2719+ Distinct from --verbose
2720+
2721+.. option:: --mode=MODE
2722+
2723+ Testing mode.
2724+ Currently supporting dtr, sysbench, and native (unittest) modes. The goal is to remove this and have all tests operate via unittest"
2725+ [native]
2726+
2727+.. option:: --record
2728+
2729+ Record a testcase result
2730+ (if the testing mode supports it - MTR / DTR specific)
2731+ [False]
2732+
2733+.. option:: --fast
2734+
2735+ Don't try to cleanup from earlier runs
2736+ (currently just a placeholder) [False]
2737+
2738+
2739+Options for controlling which tests are executed
2740+------------------------------------------------
2741+
2742+.. program:: kewpie.py
2743+
2744+.. option:: --suite=SUITELIST
2745+
2746+ The name of the suite containing tests we want.
2747+ Can accept comma-separated list (with no spaces).
2748+ Additional --suite args are appended to existing list
2749+ [autosearch]
2750+
2751+.. option:: --suitepath=SUITEPATHS
2752+
2753+ The path containing the suite(s) you wish to execute.
2754+ Use on --suitepath for each suite you want to use.
2755+
2756+.. option:: --do-test=DOTEST
2757+
2758+ input can either be a prefix or a regex.
2759+ Will only execute tests that match the provided pattern
2760+
2761+.. option:: --skip-test=SKIPTEST
2762+
2763+ input can either be a prefix or a regex.
2764+ Will exclude tests that match the provided pattern
2765+
2766+.. option:: --reorder
2767+
2768+ sort the testcases so that they are executed optimally
2769+ for the given mode [False]
2770+
2771+.. option:: --repeat=REPEAT
2772+
2773+ Run each test case the specified number of times. For
2774+ a given sequence, the first test will be run n times,
2775+ then the second, etc [1]
2776+
2777+Options for defining the code that will be under test
2778+-----------------------------------------------------
2779+
2780+.. program:: kewpie.py
2781+
2782+.. option:: --basedir=BASEDIR
2783+
2784+ Pass this argument to signal to the test-runner
2785+ that this is an in-tree test (not required).
2786+ We automatically set a number of variables
2787+ relative to the argument (client-bindir,
2788+ serverdir, testdir) [../]
2789+
2790+.. option:: --serverdir=SERVERPATH
2791+
2792+ Path to the server executable. [auto-search]
2793+
2794+.. option:: --client-bindir=CLIENTBINDIR
2795+
2796+ Path to the directory containing client program
2797+ binaries for use in testing [auto-search]
2798+
2799+.. option:: --default-storage-engine=DEFAULTENGINE
2800+
2801+ Start drizzled using the specified engine [innodb]
2802+
2803+Options for defining the testing environment
2804+--------------------------------------------
2805+
2806+.. program:: kewpie.py
2807+
2808+.. option:: --testdir=TESTDIR
2809+
2810+ Path to the test dir, containing additional files for
2811+ test execution. [pwd]
2812+
2813+.. option:: --workdir=WORKDIR
2814+
2815+ Path to the directory test-run will use to store
2816+ generated files and directories.
2817+ [basedir/tests/kewpie_work]
2818+
2819+.. option:: --top-srcdir=TOPSRCDIR
2820+
2821+ build option [basedir_default]
2822+
2823+.. option:: --top-builddir=TOPBUILDDIR
2824+
2825+ build option [basedir_default]
2826+
2827+.. option:: --no-shm
2828+
2829+ By default, we symlink workdir to a location in shm.
2830+ Use this flag to not symlink [False]
2831+
2832+.. option:: --libeatmydata
2833+
2834+ We use libeatmydata (if available) to disable fsyncs
2835+ and speed up test execution. Implies --no-shm
2836+
2837+.. option:: --libeatmydata-path=LIBEATMYDATAPATH
2838+
2839+ Path to the libeatmydata install you want to use
2840+ [/usr/local/lib/libeatmydata.so]
2841+
2842+.. option:: --start-dirty
2843+
2844+ Don't try to clean up working directories before test
2845+ execution [False]
2846+
2847+.. option:: --no-secure-file-priv
2848+
2849+ Turn off the use of --secure-file-priv=vardir for
2850+ started servers
2851+
2852+.. option:: --randgen-path=RANDGENPATH
2853+
2854+ The path to a randgen installation that can be used to
2855+ execute randgen-based tests [kewpie/randgen]
2856+
2857+.. option:: --innobackupex-path=INNOBACKUPEXPATH
2858+
2859+ The path to the innobackupex script that facilitates
2860+ the use of Xtrabackup
2861+
2862+.. option:: --xtrabackup-path=XTRABACKUPPATH
2863+
2864+ The path the xtrabackup binary to be tested
2865+
2866+.. option:: --tar4ibd-path=TAR4IBDPATH
2867+
2868+ The path to the tar4ibd binary that will be used for any applicable tests
2869+
2870+.. option:: --wsrep-provider-path=WSREPPROVIDER
2871+
2872+ The path to a wsrep provider library for use with
2873+ mysql
2874+
2875+.. option:: --subunit-outfile=SUBUNITOUTFILE
2876+
2877+ File path where subunit output will be logged
2878+ [/kewpie/workdir/test_results.subunit]
2879+
2880+Options to pass options on to the server
2881+-----------------------------------------
2882+
2883+.. program:: kewpie.py
2884+
2885+.. option:: --drizzled=DRIZZLEDOPTIONS
2886+
2887+ Pass additional options to the server. Will be passed
2888+ to all servers for all tests (mostly for --start-and-
2889+ exit)
2890+
2891+
2892+Options for defining the tools we use for code analysis (valgrind, gprof, gcov, etc)
2893+------------------------------------------------------------------------------------
2894+
2895+.. program:: kewpie.py
2896+
2897+.. option:: --valgrind
2898+
2899+ Run drizzletest and drizzled executables using
2900+ valgrind with default options [False]
2901+
2902+.. option:: --valgrind-option=VALGRINDARGLIST
2903+
2904+ Pass an option to valgrind (overrides/removes default
2905+ valgrind options)
2906+
2907+.. option:: --valgrind-suppressions=VALGRINDSUPPRESSIONS
2908+
2909+ Point at a valgrind suppression file
2910+ [kewpie/valgrind.supp]
2911+
2912+.. option:: --helgrind
2913+
2914+ Use the helgrind tool for valgrind. Implies / will
2915+ auto-use --valgrind
2916+
2917+Options for controlling the use of debuggers with test execution
2918+----------------------------------------------------------------
2919+
2920+.. program:: kewpie.py
2921+
2922+.. option:: --gdb
2923+
2924+ Start the drizzled server(s) in gdb
2925+
2926+.. option:: --manual-gdb
2927+
2928+ Allows you to start the drizzled server(s) in gdb
2929+ manually (in another window, etc
2930+
2931+Options to call additional utilities such as datagen
2932+------------------------------------------------------
2933+
2934+.. program:: kewpie.py
2935+
2936+.. option:: --gendata=GENDATAFILE
2937+
2938+ Call the randgen's gendata utility to use the
2939+ specified configuration file. This will populate the
2940+ server prior to any test execution
2941+
2942
2943=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/make.bat'
2944--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/make.bat 1970-01-01 00:00:00 +0000
2945+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/make.bat 2012-06-27 07:03:19 +0000
2946@@ -0,0 +1,170 @@
2947+@ECHO OFF
2948+
2949+REM Command file for Sphinx documentation
2950+
2951+if "%SPHINXBUILD%" == "" (
2952+ set SPHINXBUILD=sphinx-build
2953+)
2954+set BUILDDIR=_build
2955+set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
2956+if NOT "%PAPER%" == "" (
2957+ set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
2958+)
2959+
2960+if "%1" == "" goto help
2961+
2962+if "%1" == "help" (
2963+ :help
2964+ echo.Please use `make ^<target^>` where ^<target^> is one of
2965+ echo. html to make standalone HTML files
2966+ echo. dirhtml to make HTML files named index.html in directories
2967+ echo. singlehtml to make a single large HTML file
2968+ echo. pickle to make pickle files
2969+ echo. json to make JSON files
2970+ echo. htmlhelp to make HTML files and a HTML help project
2971+ echo. qthelp to make HTML files and a qthelp project
2972+ echo. devhelp to make HTML files and a Devhelp project
2973+ echo. epub to make an epub
2974+ echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
2975+ echo. text to make text files
2976+ echo. man to make manual pages
2977+ echo. changes to make an overview over all changed/added/deprecated items
2978+ echo. linkcheck to check all external links for integrity
2979+ echo. doctest to run all doctests embedded in the documentation if enabled
2980+ goto end
2981+)
2982+
2983+if "%1" == "clean" (
2984+ for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
2985+ del /q /s %BUILDDIR%\*
2986+ goto end
2987+)
2988+
2989+if "%1" == "html" (
2990+ %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
2991+ if errorlevel 1 exit /b 1
2992+ echo.
2993+ echo.Build finished. The HTML pages are in %BUILDDIR%/html.
2994+ goto end
2995+)
2996+
2997+if "%1" == "dirhtml" (
2998+ %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
2999+ if errorlevel 1 exit /b 1
3000+ echo.
3001+ echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
3002+ goto end
3003+)
3004+
3005+if "%1" == "singlehtml" (
3006+ %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
3007+ if errorlevel 1 exit /b 1
3008+ echo.
3009+ echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
3010+ goto end
3011+)
3012+
3013+if "%1" == "pickle" (
3014+ %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
3015+ if errorlevel 1 exit /b 1
3016+ echo.
3017+ echo.Build finished; now you can process the pickle files.
3018+ goto end
3019+)
3020+
3021+if "%1" == "json" (
3022+ %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
3023+ if errorlevel 1 exit /b 1
3024+ echo.
3025+ echo.Build finished; now you can process the JSON files.
3026+ goto end
3027+)
3028+
3029+if "%1" == "htmlhelp" (
3030+ %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
3031+ if errorlevel 1 exit /b 1
3032+ echo.
3033+ echo.Build finished; now you can run HTML Help Workshop with the ^
3034+.hhp project file in %BUILDDIR%/htmlhelp.
3035+ goto end
3036+)
3037+
3038+if "%1" == "qthelp" (
3039+ %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
3040+ if errorlevel 1 exit /b 1
3041+ echo.
3042+ echo.Build finished; now you can run "qcollectiongenerator" with the ^
3043+.qhcp project file in %BUILDDIR%/qthelp, like this:
3044+ echo.^> qcollectiongenerator %BUILDDIR%\qthelp\kewpie.qhcp
3045+ echo.To view the help file:
3046+ echo.^> assistant -collectionFile %BUILDDIR%\qthelp\kewpie.ghc
3047+ goto end
3048+)
3049+
3050+if "%1" == "devhelp" (
3051+ %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
3052+ if errorlevel 1 exit /b 1
3053+ echo.
3054+ echo.Build finished.
3055+ goto end
3056+)
3057+
3058+if "%1" == "epub" (
3059+ %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
3060+ if errorlevel 1 exit /b 1
3061+ echo.
3062+ echo.Build finished. The epub file is in %BUILDDIR%/epub.
3063+ goto end
3064+)
3065+
3066+if "%1" == "latex" (
3067+ %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
3068+ if errorlevel 1 exit /b 1
3069+ echo.
3070+ echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
3071+ goto end
3072+)
3073+
3074+if "%1" == "text" (
3075+ %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
3076+ if errorlevel 1 exit /b 1
3077+ echo.
3078+ echo.Build finished. The text files are in %BUILDDIR%/text.
3079+ goto end
3080+)
3081+
3082+if "%1" == "man" (
3083+ %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
3084+ if errorlevel 1 exit /b 1
3085+ echo.
3086+ echo.Build finished. The manual pages are in %BUILDDIR%/man.
3087+ goto end
3088+)
3089+
3090+if "%1" == "changes" (
3091+ %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
3092+ if errorlevel 1 exit /b 1
3093+ echo.
3094+ echo.The overview file is in %BUILDDIR%/changes.
3095+ goto end
3096+)
3097+
3098+if "%1" == "linkcheck" (
3099+ %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
3100+ if errorlevel 1 exit /b 1
3101+ echo.
3102+ echo.Link check complete; look for any errors in the above output ^
3103+or in %BUILDDIR%/linkcheck/output.txt.
3104+ goto end
3105+)
3106+
3107+if "%1" == "doctest" (
3108+ %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
3109+ if errorlevel 1 exit /b 1
3110+ echo.
3111+ echo.Testing of doctests in the sources finished, look at the ^
3112+results in %BUILDDIR%/doctest/output.txt.
3113+ goto end
3114+)
3115+
3116+:end
3117
3118=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/randgen.rst'
3119--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/randgen.rst 1970-01-01 00:00:00 +0000
3120+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/randgen.rst 2012-06-27 07:03:19 +0000
3121@@ -0,0 +1,202 @@
3122+**********************************
3123+randgen (random query generator)
3124+**********************************
3125+
3126+
3127+
3128+Description
3129+===========
3130+
3131+The randgen aka the random query generator is a database
3132+testing tool. It uses a grammar-based stochastic model to represent
3133+some desired set of queries (to exercise the optimizer, for example)
3134+and generates random queries as allowed by the grammar
3135+
3136+The primary documentation is here: http://forge.mysql.com/wiki/RandomQueryGenerator
3137+
3138+This document is intended to help the user set up their environment so that the tool
3139+may be used in conjunction with the kewpie.py test-runner. The forge documentation
3140+contains more information on the particulars of the tool itself.
3141+
3142+Requirements
3143+============
3144+
3145+DBD::drizzle
3146+-------------
3147+The DBD::drizzle module is required it can be found here http://launchpad.net/dbd-drizzle/
3148+
3149+Additional information for installing the module::
3150+
3151+ Prerequisites
3152+ ----------------
3153+ * Perl
3154+ * Drizzle (bzr branch lp:drizzle)
3155+ * libdrizzle (bzr branch lp:libdrizzle)
3156+ * C compiler
3157+
3158+ Installation
3159+ -------------
3160+ You should only have to run the following:
3161+
3162+ perl Makefile.PL --cflags=-I/usr/local/drizzle/include/ --libs=-"L/usr/local/drizzle/lib -ldrizzle"
3163+
3164+
3165+ Depending on where libdrizzle is installed. Also, you'll want to make
3166+ sure that ldconfig has configured libdrizzle to be in your library path
3167+
3168+Additional information may be found here: http://forge.mysql.com/wiki/RandomQueryGeneratorQuickStart
3169+
3170+Installing the randgen
3171+=======================
3172+
3173+Kewpie includes a branch of the randgen so it is not necessary to install it directly, but thecode may be branched from:
3174+
3175+ launchpad: bzr branch lp:randgen
3176+
3177+it also may be downloaded from:
3178+
3179+ http://launchpad.net/randgen/+download
3180+
3181+That is all there is : )
3182+
3183+Randgen / kewpie testcases
3184+============================
3185+
3186+These tests use kewpie's native mode and are essentially unittest modules. Currently, the suites are designed so that each individual modules executes a single randgen command line and validates results accordingly. An example::
3187+
3188+ class basicTest(mysqlBaseTestCase):
3189+
3190+ def test_OptimizerSubquery1(self):
3191+ self.servers = servers
3192+ test_cmd = ("./gentest.pl "
3193+ "--gendata=conf/percona/outer_join_percona.zz "
3194+ "--grammar=conf/percona/outer_join_percona.yy "
3195+ "--queries=500 "
3196+ "--threads=5"
3197+ )
3198+ retcode, output = self.execute_randgen(test_cmd, test_executor, servers)
3199+ self.assertEqual(retcode, 0, output) ``
3200+
3201+Running tests
3202+=========================
3203+
3204+There are several different ways to run the provided randgen tests.
3205+
3206+It should be noted that unless :option:`--force` is used, the program will
3207+stop execution upon encountering the first failing test.
3208+:option:`--force` is recommended if you are running several tests - it will
3209+allow you to view all successes and failures in one run.
3210+
3211+Running individual tests
3212+------------------------
3213+If one only wants to run a few, specific tests, they may do so this way::
3214+
3215+ ./kewpie --suite=randgen_basic [OPTIONS] test1 [test2 ... testN]
3216+
3217+Running all tests within a suite
3218+--------------------------------
3219+Many of the tests supplied with Drizzle are organized into suites.
3220+
3221+The tests within drizzle/tests/randgen_tests/main are considered the 'main' suite.
3222+Other suites are also subdirectories of drizzle/tests/randgen_tests.
3223+
3224+To run the tests in a specific suite::
3225+
3226+ ./kewpie [OPTIONS] --suite=SUITENAME
3227+
3228+Running specific tests within a suite
3229+--------------------------------------
3230+To run a specific set of tests within a suite::
3231+
3232+ ./kewpie --suite=SUITENAME TEST1 [TEST2..TESTN]
3233+
3234+Calling tests using <suitename>.<testname> currently does not work.
3235+One must specify the test suite via the :option:`--suite` option.
3236+
3237+
3238+Running all available tests
3239+---------------------------
3240+One would currently have to name all suites, but the majority of the working tests live in the main suite
3241+Other suites utilize more exotic server combinations and we are currently tweaking them to better integrate with the
3242+kewpie system. The slave-plugin suite does currently have a good config file for setting up simple replication setups for testing.
3243+To execute several suites' worth of tests::
3244+
3245+ ./kewpie --mode=randgen --randgen-path=/path/to/randgen [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN
3246+
3247+Interpreting test results
3248+=========================
3249+The output of the test runner is quite simple. Every test should pass.
3250+In the event of a test failure, please take the time to file a bug here:
3251+*https://bugs.launchpad.net/drizzle*
3252+
3253+During a run, the program will provide the user with:
3254+ * test name (suite + name)
3255+ * test status (pass/fail/skipped)
3256+ * time spent executing each test
3257+
3258+At the end of a run, the program will provide the user with a listing of:
3259+ * how many tests were run
3260+ * how many tests failed
3261+ * percentage of passing tests
3262+ * a listing of failing tests
3263+ * total time spent executing the tests
3264+
3265+Example output::
3266+
3267+ 24 Feb 2011 17:27:36 : main.outer_join_portable [ pass ] 7019
3268+ 24 Feb 2011 17:27:39 : main.repeatable_read [ pass ] 2764
3269+ 24 Feb 2011 17:28:57 : main.select_stability_validator [ pass ] 77946
3270+ 24 Feb 2011 17:29:01 : main.subquery [ pass ] 4474
3271+ 24 Feb 2011 17:30:52 : main.subquery_semijoin [ pass ] 110355
3272+ 24 Feb 2011 17:31:00 : main.subquery_semijoin_nested [ pass ] 8750
3273+ 24 Feb 2011 17:31:03 : main.varchar [ pass ] 3048
3274+ 24 Feb 2011 17:31:03 : ================================================================================
3275+ 24 Feb 2011 17:31:03 INFO: Test execution complete in 288 seconds
3276+ 24 Feb 2011 17:31:03 INFO: Summary report:
3277+ 24 Feb 2011 17:31:03 INFO: Executed 18/18 test cases, 100.00 percent
3278+ 24 Feb 2011 17:31:03 INFO: STATUS: PASS, 18/18 test cases, 100.00 percent executed
3279+ 24 Feb 2011 17:31:03 INFO: Spent 287 / 288 seconds on: TEST(s)
3280+ 24 Feb 2011 17:31:03 INFO: Test execution complete
3281+ 24 Feb 2011 17:31:03 INFO: Stopping all running servers...
3282+
3283+
3284+Additional uses
3285+===============
3286+Starting a server for manual testing and (optionally) populating it
3287+--------------------------------------------------------------------
3288+
3289+:doc:`kewpie` 's randgen mode allows a user to get a Drizzle server up and running quickly. This can be useful for fast ad-hoc testing.
3290+
3291+To do so call::
3292+
3293+ ./kewpie --suite=randgen_basic --start-and-exit [*OPTIONS*]
3294+
3295+This will start a Drizzle server that you can connect to and query
3296+
3297+With the addition of the --gendata option, a user may utilize the randgen's gendata (table creation and population) tool
3298+to populate a test server. In the following example, the test server is now populated by the 8 tables listed below::
3299+
3300+ ./kewpie --start-and-exit --gendata=conf/drizzle/drizzle.zz
3301+ <snip>
3302+ 24 Feb 2011 17:48:48 INFO: NAME: server0
3303+ 24 Feb 2011 17:48:48 INFO: MASTER_PORT: 9306
3304+ 24 Feb 2011 17:48:48 INFO: DRIZZLE_TCP_PORT: 9307
3305+ 24 Feb 2011 17:48:48 INFO: MC_PORT: 9308
3306+ 24 Feb 2011 17:48:48 INFO: PBMS_PORT: 9309
3307+ 24 Feb 2011 17:48:48 INFO: RABBITMQ_NODE_PORT: 9310
3308+ 24 Feb 2011 17:48:48 INFO: VARDIR: /kewpie/tests/workdir/testbot0/server0/var
3309+ 24 Feb 2011 17:48:48 INFO: STATUS: 1
3310+ # 2011-02-24T17:48:48 Default schema: test
3311+ # 2011-02-24T17:48:48 Executor initialized, id GenTest::Executor::Drizzle 2011.02.2198 ()
3312+ # 2011-02-24T17:48:48 # Creating Drizzle table: test.A; engine: ; rows: 0 .
3313+ # 2011-02-24T17:48:48 # Creating Drizzle table: test.B; engine: ; rows: 0 .
3314+ # 2011-02-24T17:48:48 # Creating Drizzle table: test.C; engine: ; rows: 1 .
3315+ # 2011-02-24T17:48:48 # Creating Drizzle table: test.D; engine: ; rows: 1 .
3316+ # 2011-02-24T17:48:48 # Creating Drizzle table: test.AA; engine: ; rows: 10 .
3317+ # 2011-02-24T17:48:48 # Creating Drizzle table: test.BB; engine: ; rows: 10 .
3318+ # 2011-02-24T17:48:48 # Creating Drizzle table: test.CC; engine: ; rows: 100 .
3319+ # 2011-02-24T17:48:49 # Creating Drizzle table: test.DD; engine: ; rows: 100 .
3320+ 24 Feb 2011 17:48:49 INFO: User specified --start-and-exit. kewpie.py exiting and leaving servers running...
3321+
3322+
3323+
3324
3325=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sql-bench.rst'
3326--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sql-bench.rst 1970-01-01 00:00:00 +0000
3327+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sql-bench.rst 2012-06-27 07:03:19 +0000
3328@@ -0,0 +1,182 @@
3329+**********************************
3330+sql-bench
3331+**********************************
3332+
3333+
3334+
3335+Description
3336+===========
3337+Kewpie can take advantage of two testing modes offered by the sql-bench tool.
3338+
3339+Kewpie has a copy of this tool set in the tree and the test-runner offers two suites for executing sql-bench tests::
3340+
3341+ sql-bench modes
3342+ ---------------
3343+ * sqlbench - runs the entire sql-bench test suite and can take a very long time (~45 minutes)
3344+ * crashme - runs the crash-me tool and reports failure if any tests should not pass
3345+
3346+
3347+Requirements
3348+============
3349+DBD::drizzle
3350+-------------
3351+The DBD::drizzle module is required it can be found here:
3352+
3353+ http://launchpad.net/dbd-drizzle/
3354+
3355+Additional information for installing the module::
3356+
3357+ Prerequisites
3358+ ----------------
3359+ * Perl
3360+ * Drizzle (bzr branch lp:drizzle)
3361+ * libdrizzle (bzr branch lp:libdrizzle)
3362+ * C compiler
3363+
3364+ Installation
3365+ -------------
3366+ You should only have to run the following:
3367+
3368+ perl Makefile.PL --cflags=-I/usr/local/drizzle/include/ --libs=-"L/usr/local/drizzle/lib -ldrizzle"
3369+
3370+
3371+ Depending on where libdrizzle is installed. Also, you'll want to make
3372+ sure that ldconfig has configured libdrizzle to be in your library path
3373+
3374+DBD::MySQL:
3375+
3376+This is required for using MySQL servers and can be found here:
3377+
3378+ http://search.cpan.org/dist/DBD-mysql/
3379+
3380+
3381+sql-bench / kewpie tests
3382+==========================
3383+
3384+Currently, there are only two sql-bench test cases for kewpie. As one might expect, main.all_sqlbench_tests executes::
3385+
3386+ run-all-tests --server=$SERVER_TYPE --dir=$WORKDIR --log --connect-options=port=$MASTER_MYPORT --create-options=ENGINE=innodb --user=root
3387+
3388+against a test server. The second test case executes the crashme tool against a running server.
3389+
3390+Test cases are defined in python .cnf files and live in tests/sqlbench_tests.
3391+
3392+Running tests
3393+=========================
3394+
3395+NOTE: all_sqlbench_tests can take a significant amount of time to execute (45 minutes or so on a decently provisioned laptop)
3396+
3397+There are several different ways to run tests using :doc:`kewpie` 's sql-bench mode.
3398+
3399+It should be noted that unless :option:`--force` is used, the program will
3400+stop execution upon encountering the first failing test.
3401+:option:`--force` is recommended if you are running several tests - it will
3402+allow you to view all successes and failures in one run.
3403+
3404+At present, sql-bench output in a work in progress. It does report a simple pass/fail, but we are working on alternate ways of viewing / storing the results (and for other testing modes as well)
3405+
3406+
3407+Running all tests within a suite
3408+--------------------------------
3409+At present, there is only one test case per suite for sqlbench and crashme modes - that is all that is needed for these tools.
3410+To execute the sql-bench test suite::
3411+
3412+ ./kewpie --suite=sqlbench
3413+
3414+To execute the crash-me test suite::
3415+
3416+ ./kewpie --suite=crashme
3417+
3418+Interpreting test results
3419+=========================
3420+The output of the test runner is quite simple. Every test should pass.
3421+In the event of a test failure, please take the time to file a bug here:
3422+*https://bugs.launchpad.net/drizzle*
3423+
3424+During a run, the program will provide the user with:
3425+ * test name (suite + name)
3426+ * test status (pass/fail/skipped)
3427+ * time spent executing each test
3428+
3429+Example sqlbench output::
3430+
3431+ 20110608-135645 ===============================================================
3432+ 20110608-135645 TEST NAME [ RESULT ] TIME (ms)
3433+ 20110608-135645 ===============================================================
3434+ 20110608-135645 main.all_sqlbench_tests [ pass ] 2732007
3435+ 20110608-135645 Test finished. You can find the result in:
3436+ 20110608-135645 drizzle/tests/workdir/RUN-drizzle-Linux_2.6.38_9_generic_x86_64
3437+ 20110608-135645 Benchmark DBD suite: 2.15
3438+ 20110608-135645 Date of test: 2011-06-08 13:11:10
3439+ 20110608-135645 Running tests on: Linux 2.6.38-9-generic x86_64
3440+ 20110608-135645 Arguments: --connect-options=port=9306 --create-options=ENGINE=innodb
3441+ 20110608-135645 Comments:
3442+ 20110608-135645 Limits from:
3443+ 20110608-135645 Server version: Drizzle 2011.06.19.2325
3444+ 20110608-135645 Optimization: None
3445+ 20110608-135645 Hardware:
3446+ 20110608-135645
3447+ 20110608-135645 alter-table: Total time: 42 wallclock secs ( 0.06 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.10 CPU)
3448+ 20110608-135645 ATIS: Total time: 22 wallclock secs ( 4.01 usr 0.26 sys + 0.00 cusr 0.00 csys = 4.27 CPU)
3449+ 20110608-135645 big-tables: Total time: 24 wallclock secs ( 4.16 usr 0.22 sys + 0.00 cusr 0.00 csys = 4.38 CPU)
3450+ 20110608-135645 connect: Total time: 31 wallclock secs ( 6.81 usr 4.50 sys + 0.00 cusr 0.00 csys = 11.31 CPU)
3451+ 20110608-135645 create: Total time: 59 wallclock secs ( 2.93 usr 1.65 sys + 0.00 cusr 0.00 csys = 4.58 CPU)
3452+ 20110608-135645 insert: Total time: 1962 wallclock secs (270.53 usr 66.35 sys + 0.00 cusr 0.00 csys = 336.88 CPU)
3453+ 20110608-135645 select: Total time: 560 wallclock secs (23.12 usr 4.62 sys + 0.00 cusr 0.00 csys = 27.74 CPU)
3454+ 20110608-135645 transactions: Total time: 21 wallclock secs ( 2.43 usr 1.98 sys + 0.00 cusr 0.00 csys = 4.41 CPU)
3455+ 20110608-135645 wisconsin: Total time: 10 wallclock secs ( 2.11 usr 0.52 sys + 0.00 cusr 0.00 csys = 2.63 CPU)
3456+ 20110608-135645
3457+ 20110608-135645 All 9 test executed successfully
3458+ 20110608-135645
3459+ 20110608-135645 Totals per operation:
3460+ 20110608-135645 Operation seconds usr sys cpu tests
3461+ 20110608-135645 alter_table_add 18.00 0.02 0.00 0.02 100
3462+ 20110608-135645 alter_table_drop 17.00 0.02 0.01 0.03 91
3463+ 20110608-135645 connect 2.00 1.02 0.51 1.53 2000
3464+ <snip>
3465+ 20110608-135645 update_rollback 3.00 0.26 0.23 0.49 100
3466+ 20110608-135645 update_with_key 73.00 6.70 5.23 11.93 300000
3467+ 20110608-135645 update_with_key_prefix 34.00 4.45 2.30 6.75 100000
3468+ 20110608-135645 wisc_benchmark 2.00 1.49 0.00 1.49 114
3469+ 20110608-135645 TOTALS 2865.00 310.26 79.94 390.20 2974250
3470+ 20110608-135645
3471+ 20110608-135645 ===============================================================
3472+ 20110608-135645 INFO Test execution complete in 2735 seconds
3473+ 20110608-135645 INFO Summary report:
3474+ 20110608-135645 INFO Executed 1/1 test cases, 100.00 percent
3475+ 20110608-135645 INFO STATUS: PASS, 1/1 test cases, 100.00 percent executed
3476+ 20110608-135645 INFO Spent 2732 / 2735 seconds on: TEST(s)
3477+ 20110608-135645 INFO Test execution complete
3478+ 20110608-135645 INFO Stopping all running servers...
3479+
3480+Example crashme output::
3481+
3482+ 20110608-152759 ===============================================================
3483+ 20110608-152759 TEST NAME [ RESULT ] TIME (ms)
3484+ 20110608-152759 ===============================================================
3485+ 20110608-152759 main.crashme [ fail ] 155298
3486+ 20110608-152759 func_extra_to_days=error # Function TO_DAYS
3487+ 20110608-152759 ###
3488+ 20110608-152759 ###<select to_days('1996-01-01') from crash_me_d
3489+ 20110608-152759 ###>2450084
3490+ 20110608-152759 ###We expected '729024' but got '2450084'
3491+ 20110608-152759 func_odbc_timestampadd=error # Function TIMESTAMPADD
3492+ 20110608-152759 ###
3493+ 20110608-152759 ###<select timestampadd(SQL_TSI_SECOND,1,'1997-01-01 00:00:00')
3494+ 20110608-152759 ###>1997-01-01 00:00:01.000000
3495+ 20110608-152759 ###We expected '1997-01-01 00:00:01' but got '1997-01-01 00:00:01.000000'
3496+ 20110608-152759 ###
3497+ 20110608-152759 ###<select {fn timestampadd(SQL_TSI_SECOND,1,{ts '1997-01-01 00:00:00'}) }
3498+ 20110608-152759 ###>1997-01-01 00:00:01.000000
3499+ 20110608-152759 ###We expected '1997-01-01 00:00:01' but got '1997-01-01 00:00:01.000000'
3500+ 20110608-152759
3501+ 20110608-152759 ERROR Failed test. Use --force to execute beyond the first test failure
3502+ 20110608-152759 ===============================================================
3503+ 20110608-152759 INFO Test execution complete in 158 seconds
3504+ 20110608-152759 INFO Summary report:
3505+ 20110608-152759 INFO Executed 1/1 test cases, 100.00 percent
3506+ 20110608-152759 INFO STATUS: FAIL, 1/1 test cases, 100.00 percent executed
3507+ 20110608-152759 INFO FAIL tests: main.crashme
3508+ 20110608-152759 INFO Spent 155 / 158 seconds on: TEST(s)
3509+ 20110608-152759 INFO Test execution complete
3510+
3511
3512=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sysbench.rst'
3513--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sysbench.rst 1970-01-01 00:00:00 +0000
3514+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sysbench.rst 2012-06-27 07:03:19 +0000
3515@@ -0,0 +1,123 @@
3516+**********************************
3517+sysbench
3518+**********************************
3519+
3520+
3521+
3522+Description
3523+===========
3524+kewpie's sysbench mode allows a user to run a specific iteration of a sysbench test (eg an oltp readonly run at concurrency = 16)
3525+
3526+
3527+Requirements
3528+============
3529+
3530+The SYSBENCH command requires that the Drizzle library header be installed. Simply build Drizzle and do::
3531+
3532+ $> sudo make install
3533+
3534+This will install the right headers.
3535+
3536+The SYSBENCH command also requires installation of the drizzle-sysbench program, which can be installed from source like so::
3537+
3538+ $> bzr branch lp:~drizzle-developers/sysbench/trunk drizzle-sysbench
3539+ $> cd drizzle-sysbench
3540+ $> ./autogen.sh && ./configure && make && sudo make install
3541+
3542+Make sure sysbench is then in your path
3543+
3544+
3545+sysbench / kewpie tests
3546+=====================
3547+
3548+A sysbench test defines a run for a particular concurrency. There are suites for readonly and readwrite.
3549+They are currently broken down this way as an experiment - we are open to other ways of organizing these tests::
3550+
3551+ [test_info]
3552+ comment = 16 threads
3553+
3554+ [test_command]
3555+ command = sysbench --max-time=240 --max-requests=0 --test=oltp --db-ps-mode=disable --drizzle-table-engine=innodb --oltp-read-only=on --oltp-table-size=1000000 --drizzle-mysql=on --drizzle-user=root --drizzle-db=test --drizzle-port=$MASTER_MYPORT --drizzle-host=localhost --db-driver=drizzle --num-threads=16
3556+
3557+ [test_servers]
3558+ servers = [[innodb.buffer-pool-size=256M innodb.log-file-size=64M innodb.log-buffer-size=8M innodb.thread-concurrency=0 innodb.additional-mem-pool-size=16M table-open-cache=4096 table-definition-cache=4096 mysql-protocol.max-connections=2048]]
3559+
3560+Running tests
3561+=========================
3562+
3563+There are several different ways to run tests using :doc:`kewpie` 's sysbench mode.
3564+
3565+It should be noted that unless :option:`--force` is used, the program will
3566+stop execution upon encountering the first failing test.
3567+:option:`--force` is recommended if you are running several tests - it will
3568+allow you to view all successes and failures in one run.
3569+
3570+Running individual tests
3571+------------------------
3572+If one only wants to run a few, specific tests, they may do so this way::
3573+
3574+ ./kewpie --mode=sysbench [OPTIONS] test1 [test2 ... testN]
3575+
3576+Running all tests within a suite
3577+--------------------------------
3578+Many of the tests supplied with Drizzle are organized into suites.
3579+
3580+The tests within drizzle/tests/randgen_tests/main are considered the 'main' suite.
3581+Other suites are also subdirectories of drizzle/tests/randgen_tests.
3582+
3583+To run the tests in a specific suite::
3584+
3585+ ./kewpie --mode=sysbench [OPTIONS] --suite=SUITENAME
3586+
3587+Running specific tests within a suite
3588+--------------------------------------
3589+To run a specific set of tests within a suite::
3590+
3591+ ./kewpie --mode=sysbench [OPTIONS] --suite=SUITENAME TEST1 [TEST2..TESTN]
3592+
3593+Calling tests using <suitename>.<testname> currently does not work.
3594+One must specify the test suite via the :option:`--suite` option.
3595+
3596+
3597+Running all available tests
3598+---------------------------
3599+One would currently have to name all suites, but the majority of the working tests live in the main suite
3600+Other suites utilize more exotic server combinations and we are currently tweaking them to better integrate with the
3601+kewpie system. The slave-plugin suite does currently have a good config file for setting up simple replication setups for testing.
3602+To execute several suites' worth of tests::
3603+
3604+ ./kewpie --mode=sysbench [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN
3605+
3606+Interpreting test results
3607+=========================
3608+The output of the test runner is quite simple. Every test should pass.
3609+In the event of a test failure, please take the time to file a bug here:
3610+*https://bugs.launchpad.net/drizzle*
3611+
3612+During a run, the program will provide the user with:
3613+ * test name (suite + name)
3614+ * test status (pass/fail/skipped)
3615+ * time spent executing each test
3616+
3617+Example output::
3618+
3619+ 20110601-191706 ===============================================================
3620+ 20110601-191706 TEST NAME [ RESULT ] TIME (ms)
3621+ 20110601-191706 ===============================================================
3622+ 20110601-191706 readonly.concurrency_16 [ pass ] 240019
3623+ 20110601-191706 max_req_lat_ms: 21.44
3624+ 20110601-191706 rwreqps: 4208.2
3625+ 20110601-191706 min_req_lat_ms: 6.31
3626+ 20110601-191706 deadlocksps: 0.0
3627+ 20110601-191706 tps: 150.29
3628+ 20110601-191706 avg_req_lat_ms: 6.65
3629+ 20110601-191706 95p_req_lat_ms: 7.02
3630+ 20110601-191706 ===============================================================
3631+ 20110601-191706 INFO Test execution complete in 275 seconds
3632+ 20110601-191706 INFO Summary report:
3633+ 20110601-191706 INFO Executed 1/1 test cases, 100.00 percent
3634+ 20110601-191706 INFO STATUS: PASS, 1/1 test cases, 100.00 percent executed
3635+ 20110601-191706 INFO Spent 240 / 275 seconds on: TEST(s)
3636+ 20110601-191706 INFO Test execution complete
3637+ 20110601-191706 INFO Stopping all running servers...
3638+
3639
3640=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/test-run.rst'
3641--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/test-run.rst 1970-01-01 00:00:00 +0000
3642+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/test-run.rst 2012-06-27 07:03:19 +0000
3643@@ -0,0 +1,494 @@
3644+.. _test-run-label:
3645+
3646+**********************************
3647+test-run.pl - Drizzle testing tool
3648+**********************************
3649+
3650+Synopsis
3651+========
3652+
3653+**./test-run** [ *OPTIONS* ] [ TESTCASE ]
3654+
3655+Description
3656+===========
3657+
3658+:program:`test-run.pl` (aka test-run, dtr, mtr) is used to execute tests
3659+from the Drizzle/MySQL test suite. These tests are included with their respective
3660+distributions and provide a way for users to verify that the system will
3661+operate according to expectations.
3662+
3663+The tests use a diff-based paradigm, meaning that the test runner executes
3664+a test and then compares the results received with pre-recorded expected
3665+results. In the event of a test failure, the program will provide output
3666+highlighting the differences found between expected and actual results; this
3667+can be useful for troubleshooting and in bug reports.
3668+
3669+While most users are concerned with ensuring general functionality, the
3670+program also allows a user to quickly spin up a server for ad-hoc testing
3671+and to run the test-suite against an already running test server.
3672+
3673+Running tests
3674+=========================
3675+
3676+There are several different ways to run tests using :program:`test-run.pl`.
3677+
3678+It should be noted that unless :option:`--force` is used, the program will
3679+stop execution upon encountering the first failing test.
3680+:option:`--force` is recommended if you are running several tests - it will
3681+allow you to view all successes and failures in one run.
3682+
3683+Running individual tests
3684+------------------------
3685+If one only wants to run a few, specific tests, they may do so this way::
3686+
3687+ ./test-run [OPTIONS] test1 [test2 ... testN]
3688+
3689+Running all tests within a suite
3690+--------------------------------
3691+Many of the tests supplied with MySQL-based servers are organized into suites.
3692+
3693+The tests within drizzle/tests/t are considered the 'main' suite.
3694+Other suites are located in either drizzle/tests/suite or within the various
3695+directories in drizzle/plugin. Tests for a specific plugin should live in
3696+the plugin's directory - drizzle/plugin/example_plugin/tests
3697+
3698+To run the tests in a specific suite::
3699+
3700+ ./test-run [OPTIONS] --suite=SUITENAME
3701+
3702+Running specific tests within a suite
3703+--------------------------------------
3704+To run a specific set of tests within a suite::
3705+
3706+ ./test-run [OPTIONS] --suite=SUITENAME TEST1 [TEST2..TESTN]
3707+
3708+Calling tests using <suitename>.<testname> currently does not work.
3709+One must specify the test suite via the :option:`--suite` option.
3710+
3711+
3712+Running all available tests
3713+---------------------------
3714+Currently, the quickest way to execute all tests in all suites is
3715+to use 'make test' from the drizzle root.
3716+
3717+Otherwise, one should simply name all suites::
3718+
3719+ ./test-run [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN
3720+
3721+Interpreting test results
3722+=========================
3723+The output of the test runner is quite simple. Every test should pass.
3724+In the event of a test failure, please take the time to file a bug here:
3725+*https://bugs.launchpad.net/drizzle*
3726+
3727+During a run, the program will provide the user with:
3728+ * test name (suite + name)
3729+ * test status (pass/fail/skipped)
3730+ * time spent executing each test
3731+
3732+At the end of a run, the program will provide the user with a listing of:
3733+ * how many tests were run
3734+ * how many tests failed
3735+ * percentage of passing tests
3736+ * a listing of failing tests
3737+ * total time spent executing the tests
3738+
3739+Example output::
3740+
3741+ <snip>
3742+ main.snowman [ pass ] 9
3743+ main.statement_boundaries [ pass ] 17
3744+ main.status [ pass ] 12
3745+ main.strict [ pass ] 50
3746+ main.subselect [ pass ] 6778
3747+ main.subselect2 [ pass ] 51
3748+ main.subselect3 [ fail ]
3749+ drizzletest: At line 621: query 'select a, (select max(b) from t1) into outfile
3750+ <snip>
3751+ --------------------------------------------------------------------------------
3752+ Stopping All Servers
3753+ Failed 10/231 tests, 95.67% were successful.
3754+
3755+ The log files in var/log may give you some hint
3756+ of what went wrong.
3757+ If you want to report this error, go to:
3758+ http://bugs.launchpad.net/drizzle
3759+ The servers were restarted 16 times
3760+ Spent 64.364 of 115 seconds executing testcases
3761+
3762+ drizzle-test-run in default mode: *** Failing the test(s): main.exp1
3763+ main.func_str main.loaddata main.null main.outfile main.subselect3
3764+ main.warnings jp.like_utf8 jp.select_utf8 jp.where_utf8
3765+
3766+Additional uses
3767+===============
3768+Starting a server for manual testing
3769+------------------------------------
3770+
3771+:program:`test-run.pl` allows a user to get a Drizzle server up and running
3772+quickly. This can be useful for fast ad-hoc testing.
3773+
3774+To do so call::
3775+
3776+ ./test-run --start-and-exit [*OPTIONS*]
3777+
3778+This will start a Drizzle server that you can connect to and query
3779+
3780+Starting a server against a pre-populated DATADIR
3781+--------------------------------------------------
3782+
3783+Using :option:`--start-dirty` prevents :program:`test-run.pl` from attempting
3784+to initialize (clean) the datadir. This can be useful if you want to use
3785+an already-populated datadir for testing.
3786+
3787+Program architecture
3788+====================
3789+
3790+:program:`test-run.pl` uses a simple diff-based mechanism for testing.
3791+It will execute the statements contained in a test and compare the results
3792+to pre-recorded expected results. In the event of a test failure, you
3793+will be presented with a diff::
3794+
3795+ main.exp1 [ fail ]
3796+ --- drizzle/tests/r/exp1.result 2010-11-02 02:10:25.107013998 +0300
3797+ +++ drizzle/tests/r/exp1.reject 2010-11-02 02:10:32.017013999 +0300
3798+ @@ -5,4 +5,5 @@
3799+ a
3800+ 1
3801+ 2
3802+ +3
3803+ DROP TABLE t1;
3804+
3805+A test case consists of a .test and a .result file. The .test file includes
3806+the various statements to be executed for a test. The .result file lists
3807+the expected results for a given test file. These files live in tests/t
3808+and tests/r, respectively. This structure is the same for all test suites.
3809+
3810+test-run.pl options
3811+===================
3812+
3813+The :program:`test-run.pl` tool has several available options:
3814+
3815+./test-run [ OPTIONS ] [ TESTCASE ]
3816+
3817+Options to control what engine/variation to run
3818+-----------------------------------------------
3819+
3820+.. program:: test-run
3821+
3822+.. option:: --compress
3823+
3824+ Use the compressed protocol between client and server
3825+
3826+.. option:: --bench
3827+
3828+ Run the benchmark suite
3829+
3830+.. option:: --small-bench
3831+
3832+ Run the benchmarks with --small-tests --small-tables
3833+
3834+Options to control directories to use
3835+-------------------------------------
3836+
3837+.. program:: test-run
3838+
3839+.. option:: --benchdir=DIR
3840+
3841+ The directory where the benchmark suite is stored
3842+ (default: ../../mysql-bench)
3843+
3844+.. option:: --tmpdir=DIR
3845+
3846+ The directory where temporary files are stored
3847+ (default: ./var/tmp).
3848+
3849+.. option:: --vardir=DIR
3850+
3851+ The directory where files generated from the test run
3852+ is stored (default: ./var). Specifying a ramdisk or
3853+ tmpfs will speed up tests.
3854+
3855+.. option:: --mem
3856+
3857+ Run testsuite in "memory" using tmpfs or ramdisk
3858+ Attempts to find a suitable location
3859+ using a builtin list of standard locations
3860+ for tmpfs (/dev/shm)
3861+ The option can also be set using environment
3862+ variable :envvar:`DTR_MEM` =[DIR]
3863+
3864+Options to control what test suites or cases to run
3865+---------------------------------------------------
3866+
3867+.. program:: test-run
3868+
3869+.. option:: --force
3870+
3871+ Continue to run the suite after failure
3872+
3873+.. option:: --do-test=PREFIX or REGEX
3874+
3875+ Run test cases which name are prefixed with PREFIX
3876+ or fulfills REGEX
3877+
3878+.. option:: --skip-test=PREFIX or REGEX
3879+
3880+ Skip test cases which name are prefixed with PREFIX
3881+ or fulfills REGEX
3882+
3883+.. option:: --start-from=PREFIX
3884+
3885+ Run test cases starting from test prefixed with PREFIX
3886+ suite[s]=NAME1,..,NAMEN Collect tests in suites from the comma separated
3887+ list of suite names.
3888+ The default is: "main,jp"
3889+
3890+.. option:: --skip-rpl
3891+
3892+ Skip the replication test cases.
3893+ combination="ARG1 .. ARG2" Specify a set of "drizzled" arguments for one
3894+ combination.
3895+
3896+.. option:: --skip-combination
3897+
3898+ Skip any combination options and combinations files
3899+
3900+.. option:: --repeat-test=n
3901+
3902+ How many times to repeat each test (default: 1)
3903+
3904+Options that specify ports
3905+--------------------------
3906+
3907+.. program:: test-run
3908+
3909+.. option:: --master_port=PORT
3910+
3911+ Specify the port number used by the first master
3912+
3913+.. option:: --slave_port=PORT
3914+
3915+ Specify the port number used by the first slave
3916+
3917+.. option:: --dtr-build-thread=#
3918+
3919+ Specify unique collection of ports. Can also be set by
3920+ setting the environment variable :envvar:`DTR_BUILD_THREAD`.
3921+
3922+Options for test case authoring
3923+-------------------------------
3924+
3925+.. program:: test-run
3926+
3927+.. option:: --record TESTNAME
3928+
3929+ (Re)genereate the result file for TESTNAME
3930+
3931+.. option:: --check-testcases
3932+
3933+ Check testcases for sideeffects
3934+
3935+.. option:: --mark-progress
3936+
3937+ Log line number and elapsed time to <testname>.progress
3938+
3939+Options that pass on options
3940+----------------------------
3941+
3942+.. program:: test-run
3943+
3944+.. option:: --drizzled=ARGS
3945+
3946+ Specify additional arguments to "drizzled"
3947+
3948+Options to run test on running server
3949+-------------------------------------
3950+
3951+.. program:: test-run
3952+
3953+.. option:: --extern
3954+
3955+ Use running server for tests
3956+
3957+.. option:: --user=USER
3958+
3959+ User for connection to extern server
3960+
3961+Options for debugging the product
3962+---------------------------------
3963+
3964+.. program:: test-run
3965+
3966+.. option:: --client-ddd
3967+
3968+ Start drizzletest client in ddd
3969+
3970+.. option:: --client-debugger=NAME
3971+
3972+ Start drizzletest in the selected debugger
3973+
3974+.. option:: --client-gdb
3975+
3976+ Start drizzletest client in gdb
3977+
3978+.. option:: --ddd
3979+
3980+ Start drizzled in ddd
3981+
3982+.. option:: --debug
3983+
3984+ Dump trace output for all servers and client programs
3985+
3986+.. option:: --debugger=NAME
3987+
3988+ Start drizzled in the selected debugger
3989+
3990+.. option:: --gdb
3991+
3992+ Start the drizzled(s) in gdb
3993+
3994+.. option:: --manual-debug
3995+
3996+ Let user manually start drizzled in debugger, before running test(s)
3997+
3998+.. option:: --manual-gdb
3999+
4000+ Let user manually start drizzled in gdb, before running test(s)
4001+
4002+.. option:: --manual-ddd
4003+
4004+ Let user manually start drizzled in ddd, before running test(s)
4005+
4006+.. option:: --master-binary=PATH
4007+
4008+ Specify the master "drizzled" to use
4009+
4010+.. option:: --slave-binary=PATH
4011+
4012+ Specify the slave "drizzled" to use
4013+
4014+.. option:: --strace-client
4015+
4016+ Create strace output for drizzletest client
4017+
4018+.. option:: --max-save-core
4019+
4020+ Limit the number of core files saved (to avoid filling up disks for
4021+ heavily crashing server). Defaults to 5, set to 0 for no limit.
4022+
4023+Options for coverage, profiling etc
4024+-----------------------------------
4025+
4026+.. todo::
4027+
4028+ .. option:: --gcov
4029+
4030+.. program:: test-run
4031+
4032+.. option:: --gprof
4033+
4034+ See online documentation on how to use it.
4035+
4036+.. option:: --valgrind
4037+
4038+ Run the *drizzletest* and *drizzled* executables using valgrind with
4039+ default options
4040+
4041+.. option:: --valgrind-all
4042+
4043+ Synonym for :option:`--valgrind`
4044+
4045+.. option:: --valgrind-drizzleslap
4046+
4047+ Run "drizzleslap" with valgrind.
4048+
4049+.. option:: --valgrind-drizzletest
4050+
4051+ Run the *drizzletest* and *drizzle_client_test* executable with valgrind
4052+
4053+.. option:: --valgrind-drizzled
4054+
4055+ Run the "drizzled" executable with valgrind
4056+
4057+.. option:: --valgrind-options=ARGS
4058+
4059+ Deprecated, use :option:`--valgrind-option`
4060+
4061+.. option:: --valgrind-option=ARGS
4062+
4063+ Option to give valgrind, replaces default option(s),
4064+ can be specified more then once
4065+
4066+.. option:: --valgrind-path=[EXE]
4067+
4068+ Path to the valgrind executable
4069+
4070+.. option:: --callgrind
4071+
4072+ Instruct valgrind to use callgrind
4073+
4074+.. option:: --massif
4075+
4076+ Instruct valgrind to use massif
4077+
4078+Misc options
4079+------------
4080+
4081+.. program:: test-run
4082+
4083+.. option:: --comment=STR
4084+
4085+ Write STR to the output
4086+
4087+.. option:: --notimer
4088+
4089+ Don't show test case execution time
4090+
4091+.. option:: --script-debug
4092+
4093+ Debug this script itself
4094+
4095+.. option:: --verbose
4096+
4097+ More verbose output
4098+
4099+.. option:: --start-and-exit
4100+
4101+ Only initialize and start the servers, using the
4102+ startup settings for the specified test case (if any)
4103+
4104+.. option:: --start-dirty
4105+
4106+ Only start the servers (without initialization) for
4107+ the specified test case (if any)
4108+
4109+.. option:: --fast
4110+
4111+ Don't try to clean up from earlier runs
4112+
4113+.. option:: --reorder
4114+
4115+ Reorder tests to get fewer server restarts
4116+
4117+.. option:: --help
4118+
4119+ Get this help text
4120+
4121+.. option:: --testcase-timeout=MINUTES
4122+
4123+ Max test case run time (default 15)
4124+
4125+.. option:: --suite-timeout=MINUTES
4126+
4127+ Max test suite run time (default 180)
4128+
4129+.. option:: --warnings | log-warnings
4130+
4131+ Pass --log-warnings to drizzled
4132+
4133+.. option:: --sleep=SECONDS
4134+
4135+ Passed to drizzletest, will be used as fixed sleep time
4136+
4137+
4138
4139=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/writing_tests.rst'
4140--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/writing_tests.rst 1970-01-01 00:00:00 +0000
4141+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/writing_tests.rst 2012-06-27 07:03:19 +0000
4142@@ -0,0 +1,100 @@
4143+**********************************
4144+Writing native/unittest test cases
4145+**********************************
4146+
4147+Synopsis
4148+========
4149+
4150+Here, we discuss various topics related to writing test cases, with a focus on features
4151+that allow for more complex testing scenarios. Additional documentation for other testing
4152+tools will come later.
4153+
4154+Writing native mode tests
4155+==========================
4156+Native mode is a way of saying Python unittest mode. The goal is that all tests will use this paradigm as it is clean, flexible, and easily expanded. Some references:
4157+
4158+ * http://docs.python.org/library/unittest.html
4159+ * http://docs.python.org/library/unittest.html#assert-methods
4160+
4161+Writing native modes tests can be quite simple. Here is an example::
4162+
4163+ from lib.util.mysqlBaseTestCase import mysqlBaseTestCase
4164+
4165+ server_requirements = [[]]
4166+ servers = []
4167+ server_manager = None
4168+ test_executor = None
4169+
4170+ class basicTest(mysqlBaseTestCase):
4171+
4172+ def test_OptimizerSubquery1(self):
4173+ self.servers = servers
4174+ test_cmd = "./gentest.pl --gendata=conf/percona/outer_join_percona.zz --grammar=conf/percona/outer_join_percona.yy --queries=500 --threads=5"
4175+ retcode, output = self.execute_randgen(test_cmd, test_executor, servers)
4176+ self.assertEqual(retcode, 0, output)
4177+
4178+Every test case should have a basicTest class. This is not ideal, but it is the current implementation and testing does not suffer for the lack of creative naming ; ). The test runner pulls from this class and all test_* methods for the class are executed.
4179+
4180+Requesting / specifying server requirements
4181+--------------------------------------------
4182+
4183+The 'server_requirements' block in the example above is how a test case requests servers for use in a test case.
4184+The content is a list of Python lists, with each sublist containing a string of server options.
4185+A more complex example::
4186+
4187+ server_requirements = [ [ ("--binlog-do-db=test "
4188+ "--innodb-file-per-table "
4189+ "--innodb_file_format='Barracuda' "
4190+ "--sync_binlog=100 "
4191+ "--innodb_flush_log_at_trx_commit=2 "
4192+ )]
4193+ ,[ ("--innodb_file_format='Barracuda' "
4194+ "--innodb_flush_log_at_trx_commit=2"
4195+ )]
4196+ ]
4197+
4198+The server_manager is passed these requirements and attempts to start up a server with them. In the event of a startup failure, informative error information will be provided.
4199+
4200+More complex server setup tasks
4201+--------------------------------
4202+
4203+Sometimes we need to do things that aren't easily described as just a startup option. Sometimes, we need to specify that a server should replicate from another, or pre-populate the server prior to startup, and so on. Here is some information on the tools kewpie provides to help with such tasks
4204+
4205+The common thread to all of these tasks is the use of the server_requests variable::
4206+
4207+ from lib.util.mysqlBaseTestCase import mysqlBaseTestCase
4208+
4209+ server_requirements = [[],[],[]]
4210+ server_requests = {'join_cluster':[(0,1), (0,2)]}
4211+ servers = []
4212+ server_manager = None
4213+ test_executor = None
4214+
4215+Setting a server as a slave to another
4216+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4217+
4218+In the example above, we see that we have a list with two items tied to the key 'join_cluster'.
4219+The server_manager has a method called join_cluster with basically says::
4220+ def join_cluster(master_server, slave_server):
4221+ slave_server.set_master(master_server)
4222+
4223+The way a server sets another as its master can vary greatly and is described in the relevant server object. This currently works for standard MySQl and Galera replication
4224+
4225+Using a pre-populated datadir
4226+------------------------------
4227+The experimental test runner, kewpie allows for starting a server with a pre-populated datadir
4228+for a test case. This is accomplished via the use of a .cnf file (versus a master.opt file)
4229+Over time, this will be the direction for all drizzletest cases.
4230+
4231+The .cnf file shown below tells the test-runner to use the directory drizzle/tests/std_data/backwards_compat_data
4232+as the datadir for the first server. If a test uses multiple servers, the .cnf file can have additional sections ([s1]...[sN])::
4233+
4234+ [test_servers]
4235+ servers = [[]]
4236+
4237+ [s0]
4238+ load-datadir=backwards_compat_data
4239+
4240+All datadirs are expected to be in tests/std_data. If there is need for the ability to use datadirs outside of this location,
4241+it can be explored.
4242+
4243
4244=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/kewpie.py'
4245--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/kewpie.py 1970-01-01 00:00:00 +0000
4246+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/kewpie.py 2012-06-27 07:03:19 +0000
4247@@ -0,0 +1,131 @@
4248+#! /usr/bin/env python
4249+# -*- mode: python; indent-tabs-mode: nil; -*-
4250+# vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4251+#
4252+# Copyright (C) 2010 Patrick Crews
4253+#
4254+# This program is free software; you can redistribute it and/or modify
4255+# it under the terms of the GNU General Public License as published by
4256+# the Free Software Foundation; either version 2 of the License, or
4257+# (at your option) any later version.
4258+#
4259+# This program is distributed in the hope that it will be useful,
4260+# but WITHOUT ANY WARRANTY; without even the implied warranty of
4261+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4262+# GNU General Public License for more details.
4263+#
4264+# You should have received a copy of the GNU General Public License
4265+# along with this program; if not, write to the Free Software
4266+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
4267+
4268+
4269+""" kewpie.py
4270+
4271+(DataBase) Quality Platform - system for executing various
4272+testing systems and the helper code
4273+
4274+Designed to be a modular test-runner. Different testing tools
4275+and databases may be plugged into the system via hacking the
4276+appropriate modules
4277+
4278+Currently geared towards Drizzle and MySQL systems
4279+Runs: Drizzle, MySQL, Percona Server, Galera dbms's
4280+"""
4281+
4282+# imports
4283+import os
4284+import imp
4285+import sys
4286+
4287+import lib.opts.test_run_options as test_run_options
4288+from lib.opts.defaults import get_defaults
4289+from lib.modes.test_mode import handle_mode
4290+from lib.server_mgmt.server_management import serverManager
4291+from lib.sys_mgmt.system_management import systemManager
4292+from lib.test_mgmt.execution_management import executionManager
4293+from lib.opts.matrix_manager import matrixManager
4294+
4295+# functions
4296+def handle_sys_config(input_args, defaults):
4297+ """ Look for / update defaults based on sys_config file
4298+ if specified
4299+
4300+ """
4301+ key_string = '--sys-config'
4302+ module_file = None
4303+ for input_arg in input_args:
4304+ if input_arg.startswith(key_string):
4305+ module_file = input_arg.split(key_string)[1].replace('=','').strip()
4306+ module_file = os.path.abspath(module_file)
4307+ break
4308+ if module_file:
4309+ module_parent = os.path.dirname(module_file)
4310+ sys.path.append(module_parent)
4311+ module_name = os.path.basename(module_file).replace('.py','')
4312+ project = imp.load_source(module_name, module_file)
4313+ defaults = project.get_project_defaults(module_file, defaults)
4314+ return defaults
4315+
4316+# main
4317+# We base / look for a lot of things based on the location of
4318+# the kewpie.py file
4319+qp_rootdir = os.path.dirname(os.path.abspath(sys.argv[0]))
4320+#project_name = 'percona-xtradb-cluster'
4321+#project_name = 'xtrabackup'
4322+project_name = None
4323+defaults = get_defaults(qp_rootdir,project_name)
4324+defaults = handle_sys_config(sys.argv, defaults)
4325+variables = test_run_options.parse_qp_options(defaults)
4326+variables['qp_root'] = qp_rootdir
4327+system_manager = None
4328+server_manager = None
4329+test_manager = None
4330+test_executor = None
4331+execution_manager = None
4332+
4333+try:
4334+ matrix_manager = matrixManager(variables)
4335+ # Some system-level work is constant regardless
4336+ # of the test to be run
4337+ system_manager = systemManager(variables)
4338+
4339+ # Create our server_manager
4340+ server_manager = serverManager(system_manager, variables)
4341+
4342+ # Get our mode-specific test_manager and test_executor
4343+ (test_manager,test_executor) = handle_mode(variables, system_manager)
4344+
4345+ # Gather our tests for execution
4346+ test_manager.gather_tests()
4347+
4348+ # Initialize test execution manager
4349+ execution_manager = executionManager(server_manager, system_manager
4350+ , test_manager, test_executor
4351+ , variables, matrix_manager)
4352+
4353+ # Execute our tests!
4354+ execution_manager.execute_tests()
4355+
4356+except Exception, e:
4357+ print Exception, e
4358+
4359+except KeyboardInterrupt:
4360+ print "\n\nDetected <Ctrl>+c, shutting down and cleaning up..."
4361+
4362+finally:
4363+# TODO - make a more robust cleanup
4364+# At the moment, runaway servers are our biggest concern
4365+ if server_manager and not variables['startandexit']:
4366+ if variables['gdb']:
4367+ server_manager.cleanup_all_servers()
4368+ else:
4369+ server_manager.cleanup()
4370+ if not variables['startandexit']:
4371+ if test_manager:
4372+ fail_count = test_manager.has_failing_tests()
4373+ sys.exit(test_manager.has_failing_tests())
4374+ else:
4375+ # return 1 as we likely have a problem if we don't have a
4376+ # test_manager
4377+ sys.exit(1)
4378+
4379
4380=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib'
4381=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/__init__.py'
4382=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes'
4383=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/__init__.py'
4384=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr'
4385=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/__init__.py'
4386=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_execution.py'
4387--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_execution.py 1970-01-01 00:00:00 +0000
4388+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_execution.py 2012-06-27 07:03:19 +0000
4389@@ -0,0 +1,139 @@
4390+#! /usr/bin/env python
4391+# -*- mode: python; indent-tabs-mode: nil; -*-
4392+# vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4393+#
4394+# Copyright (C) 2010 Patrick Crews
4395+#
4396+#
4397+# This program is free software; you can redistribute it and/or modify
4398+# it under the terms of the GNU General Public License as published by
4399+# the Free Software Foundation; either version 2 of the License, or
4400+# (at your option) any later version.
4401+#
4402+# This program is distributed in the hope that it will be useful,
4403+# but WITHOUT ANY WARRANTY; without even the implied warranty of
4404+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4405+# GNU General Public License for more details.
4406+#
4407+# You should have received a copy of the GNU General Public License
4408+# along with this program; if not, write to the Free Software
4409+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
4410+
4411+""" dtr_test_execution:
4412+ code related to the execution of dtr test cases
4413+
4414+ We are provided access to a testManager with
4415+ dtr-specific testCases. We contact teh executionManager
4416+ to produce the system and server configurations we need
4417+ to execute a test.
4418+
4419+"""
4420+
4421+# imports
4422+import os
4423+import sys
4424+import subprocess
4425+import commands
4426+
4427+import lib.test_mgmt.test_execution as test_execution
4428+
4429+class testExecutor(test_execution.testExecutor):
4430+ """ dtr-specific testExecutor
4431+ We currently execute by sending test-case
4432+ data to client/drizzletest...for now
4433+
4434+ """
4435+
4436+ def execute_testCase (self):
4437+ """ Execute a dtr testCase via calls to drizzletest (boo)
4438+ Eventually, we will replace drizzletest with pythonic
4439+ goodness, but we have these classes stored here for the moment
4440+
4441+ """
4442+ test_execution.testExecutor.execute_testCase(self)
4443+ self.status = 0
4444+
4445+ # generate command line
4446+ drizzletest_cmd = self.generate_drizzletest_call()
4447+
4448+ # call drizzletest
4449+ self.execute_drizzletest(drizzletest_cmd)
4450+
4451+ # analyze results
4452+ self.current_test_status = self.process_drizzletest_output()
4453+ self.set_server_status(self.current_test_status)
4454+
4455+
4456+ def generate_drizzletest_call(self):
4457+ """ Produce the command line we use to call drizzletest
4458+ We have a healthy number of values, so we put this in a
4459+ nice function
4460+
4461+ """
4462+
4463+ drizzletest_arguments = [ '--no-defaults'
4464+ , '--silent'
4465+ , '--tmpdir=%s' %(self.master_server.tmpdir)
4466+ , '--logdir=%s' %(self.master_server.logdir)
4467+ , '--port=%d' %(self.master_server.master_port)
4468+ , '--database=test'
4469+ , '--user=root'
4470+ , '--password='
4471+ #, '--testdir=%s' %(self.test_manager.testdir)
4472+ , '--test-file=%s' %(self.current_testcase.testpath)
4473+ , '--tail-lines=20'
4474+ , '--timer-file=%s' %(self.master_server.timer_file)
4475+ , '--result-file=%s' %(self.current_testcase.resultpath)
4476+ ]
4477+ if self.record_flag:
4478+ # We want to record a new result
4479+ drizzletest_arguments.append('--record')
4480+ drizzletest_cmd = "%s %s %s" %( self.cmd_prefix
4481+ , self.master_server.code_tree.drizzletest
4482+ , " ".join(drizzletest_arguments))
4483+ return drizzletest_cmd
4484+
4485+ def execute_drizzletest(self, drizzletest_cmd):
4486+ """ Execute the commandline and return the result.
4487+ We use subprocess as we can pass os.environ dicts and whatnot
4488+
4489+ """
4490+ testcase_name = self.current_testcase.fullname
4491+ self.time_manager.start(testcase_name,'test')
4492+ #retcode, output = self.system_manager.execute_cmd( drizzletest_cmd
4493+ # , must_pass = 0 )
4494+ drizzletest_outfile = os.path.join(self.logdir,'drizzletest.out')
4495+ drizzletest_output = open(drizzletest_outfile,'w')
4496+ drizzletest_subproc = subprocess.Popen( drizzletest_cmd
4497+ , shell=True
4498+ , cwd=self.system_manager.testdir
4499+ , env=self.working_environment
4500+ , stdout = drizzletest_output
4501+ , stderr = subprocess.STDOUT
4502+ )
4503+ drizzletest_subproc.wait()
4504+ retcode = drizzletest_subproc.returncode
4505+ execution_time = int(self.time_manager.stop(testcase_name)*1000) # millisec
4506+
4507+ drizzletest_output.close()
4508+ drizzletest_file = open(drizzletest_outfile,'r')
4509+ output = ''.join(drizzletest_file.readlines())
4510+ drizzletest_file.close()
4511+
4512+ self.logging.debug("drizzletest_retcode: %d" %(retcode))
4513+ self.current_test_retcode = retcode
4514+ self.current_test_output = output
4515+ self.current_test_exec_time = execution_time
4516+
4517+ def process_drizzletest_output(self):
4518+ """ Drizzletest has run, we now check out what we have """
4519+ retcode = self.current_test_retcode
4520+ if retcode == 0:
4521+ return 'pass'
4522+ elif retcode == 62 or retcode == 15872:
4523+ return 'skipped'
4524+ elif retcode == 63 or retcode == 1:
4525+ return 'fail'
4526+ else:
4527+ return 'fail'
4528+
4529
4530=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_management.py'
4531--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_management.py 1970-01-01 00:00:00 +0000
4532+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_management.py 2012-06-27 07:03:19 +0000
4533@@ -0,0 +1,495 @@
4534+#! /usr/bin/env python
4535+# -*- mode: python; indent-tabs-mode: nil; -*-
4536+# vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4537+#
4538+# Copyright (C) 2010 Patrick Crews
4539+#
4540+## This program is free software; you can redistribute it and/or modify
4541+# it under the terms of the GNU General Public License as published by
4542+# the Free Software Foundation; either version 2 of the License, or
4543+# (at your option) any later version.
4544+#
4545+# This program is distributed in the hope that it will be useful,
4546+# but WITHOUT ANY WARRANTY; without even the implied warranty of
4547+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4548+# GNU General Public License for more details.
4549+#
4550+# You should have received a copy of the GNU General Public License
4551+# along with this program; if not, write to the Free Software
4552+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
4553+
4554+""" dtr_test_management:
4555+ code related to the gathering / analysis / management of
4556+ the test cases
4557+ ie - collecting the list of tests in each suite, then
4558+ gathering additional, relevant information for the test-runner's dtr
4559+ mode. (traditional diff-based testing)
4560+
4561+"""
4562+
4563+# imports
4564+import os
4565+import re
4566+import sys
4567+from ConfigParser import RawConfigParser
4568+
4569+import lib.test_mgmt.test_management as test_management
4570+
4571+
4572+
4573+class testCase:
4574+ """Holds info on a per .test file basis
4575+ Attributes contain information necessary to execute / validate
4576+ the test file when it is executed.
4577+
4578+ """
4579+ def __init__(self, system_manager, test_case=None, test_name=None, suite_name=None
4580+ , suite_path=None, test_server_options=[], test_path=None, result_path=None
4581+ , comment=None, master_sh=None, cnf_path=None
4582+ , disable=0, innodb_test=1
4583+ , need_debug=0, debug=0):
4584+ self.system_manager = system_manager
4585+ self.logging = self.system_manager.logging
4586+ self.skip_keys = ['system_manager']
4587+ self.testcase = test_case
4588+ self.testname = test_name
4589+ self.suitename = suite_name
4590+ self.suitepath = suite_path
4591+ self.fullname = "%s.%s" %(suite_name, test_name)
4592+ self.testpath = test_path
4593+ self.resultpath = result_path
4594+
4595+ self.skip_flag = 0
4596+ self.timezone = "GMT-3"
4597+ self.component_id = "drizzled"
4598+ self.slave_count = 0
4599+ self.master_count = 1
4600+ self.server_options = test_server_options
4601+ # We will populate this in a better fashion later on
4602+ # as we allow .cnf files, we need to do a bit of
4603+ # messing about to make this work right
4604+ if self.server_options == [] or type(self.server_options[0]) is not list:
4605+ self.server_requirements=[self.server_options]
4606+ else:
4607+ self.server_requirements = self.server_options
4608+ self.server_options= self.server_options[0][0]
4609+ self.comment = comment
4610+ self.master_sh = master_sh
4611+ self.cnf_path = cnf_path
4612+ self.disable = disable
4613+ self.innodb_test = innodb_test
4614+ self.need_debug = need_debug
4615+
4616+ self.system_manager.logging.debug_class(self)
4617+
4618+ def should_run(self):
4619+ if self.skip_flag or self.disable:
4620+ return 0
4621+ else:
4622+ return 1
4623+
4624+
4625+
4626+
4627+
4628+class testManager(test_management.testManager):
4629+ """Deals with scanning test directories, gathering test cases, and
4630+ collecting per-test information (opt files, etc) for use by the
4631+ test-runner
4632+
4633+ """
4634+
4635+ def process_suite(self,suite_dir):
4636+ """Process a test suite.
4637+ This includes searching for tests in test_list and only
4638+ working with the named tests (all tests in suite is the default)
4639+ Further processing includes reading the disabled.def file
4640+ to know which tests to skip, processing the suite.opt file,
4641+ and processing the individual test cases for data relevant
4642+ to the rest of the test-runner
4643+
4644+ """
4645+
4646+ self.system_manager.logging.verbose("Processing suite: %s" %(suite_dir))
4647+
4648+ # Generate our test and result files:
4649+ testdir = os.path.join(suite_dir, 't')
4650+ resultdir = os.path.join(suite_dir, 'r')
4651+
4652+ # Do basic checks to make sure this is worth further work
4653+ self.check_suite(suite_dir, testdir, resultdir)
4654+
4655+ # Get suite-level options
4656+ suite_options = []
4657+ cnf_path, suite_options = self.process_suite_options(suite_dir)
4658+
4659+ # Get the 'name' of the suite. This can require some processing
4660+ # But the name is useful for reporting and whatnot
4661+ suite_name = self.get_suite_name(suite_dir)
4662+
4663+ # Get the contents of the testdir and filter it accordingly
4664+ # This applies do-test / skip-test filters and any specific
4665+ # test case names
4666+ testlist = self.testlist_filter(os.listdir(testdir))
4667+ # sort our list if no individual tests were specified
4668+ if not self.desired_tests:
4669+ testlist.sort()
4670+
4671+ # gather deeper information on tests we are interested in
4672+ if testlist:
4673+ # We have tests we want to process, we gather additional information
4674+ # that is useful at the suite level. This includes disabled tests
4675+ # Gather disabled test list.
4676+ # This is used in process_test_file()
4677+ disabled_tests = {}
4678+ disabled_tests = self.process_disabled_test_file(testdir)
4679+ for test_case in testlist:
4680+ self.add_test(self.process_test_file(suite_dir,
4681+ suite_name, cnf_path, suite_options
4682+ , disabled_tests, testdir
4683+ , resultdir, test_case))
4684+
4685+ def process_test_file(self, suite_dir, suite_name, suite_cnf_path, suite_options
4686+ , disabled_tests, testdir
4687+ , resultdir, test_case):
4688+ """ We generate / find / store all the relevant information per-test.
4689+ This information will be used when actually executing the test
4690+ We store the data in a testCase object
4691+
4692+ """
4693+
4694+ test_server_options = suite_options
4695+ test_name = test_case.replace('.test','')
4696+ self.system_manager.logging.verbose("Processing test: %s.%s" %(suite_name,test_name))
4697+
4698+
4699+ # Fix this , create a testCase with gather_test_data() passed
4700+ # as the argument
4701+ # Ensure we pass everything we need and use it all
4702+ ( test_path
4703+ , result_file_name
4704+ , result_path
4705+ , comment
4706+ , master_sh
4707+ , cnf_path
4708+ , test_server_options
4709+ , disable
4710+ , innodb_test
4711+ , need_debug) = self.gather_test_data(test_case, test_name,
4712+ suite_name, test_server_options,testdir,
4713+ resultdir, disabled_tests)
4714+ if suite_cnf_path and not cnf_path:
4715+ cnf_path=suite_cnf_path
4716+ test_case = testCase(self.system_manager, test_case, test_name, suite_name,
4717+ suite_dir, test_server_options,test_path, result_path,
4718+ master_sh=master_sh, cnf_path=cnf_path, debug=self.debug)
4719+ return test_case
4720+
4721+
4722+########################################################################
4723+# utility functions
4724+#
4725+# Stuff that helps us out and simplifies our main functions
4726+# But isn't that important unless you need to dig deep
4727+########################################################################
4728+
4729+ def gather_test_data(self, test_case, test_name, suite_name,
4730+ test_server_options, testdir, resultdir, disabled_tests):
4731+ """ We gather all of the data needed to produce a testCase for
4732+ a given test
4733+
4734+ """
4735+
4736+ test_path = os.path.join(testdir,test_case)
4737+ result_file_name = test_name+'.result'
4738+ result_path = self.find_result_path(resultdir, result_file_name)
4739+ comment = None
4740+ master_sh_path = test_path.replace('.test','-master.sh')
4741+ if os.path.exists(master_sh_path):
4742+ master_sh = master_sh_path
4743+ else:
4744+ master_sh = None
4745+ master_opt_path = test_path.replace('.test', '-master.opt')
4746+ config_file_path = test_path.replace('.test', '.cnf')
4747+ # NOTE: this currently makes suite level server options additive
4748+ # to file-level .opt files...not sure if this is the best.
4749+ test_server_options = test_server_options + self.process_opt_file(
4750+ master_opt_path)
4751+ # deal with .cnf files (which supercede master.opt stuff)
4752+ cnf_options = []
4753+ cnf_flag, returned_options = self.process_cnf_file(config_file_path)
4754+ cnf_options += returned_options
4755+ if cnf_flag: # we found a proper file and need to override
4756+ found_options = cnf_options
4757+ else:
4758+ config_file_path = None
4759+ (disable, comment) = self.check_if_disabled(disabled_tests, test_name)
4760+ innodb_test = 0
4761+ need_debug = 0
4762+ return (test_path, result_file_name, result_path, comment, master_sh,
4763+ config_file_path, test_server_options, disable, innodb_test, need_debug)
4764+
4765+ def check_suite(self, suite_dir, testdir, resultdir):
4766+ """Handle basic checks of the suite:
4767+ does the suite exist?
4768+ is there a /t dir?
4769+ is there a /r dir?
4770+ Error and die if not
4771+
4772+ """
4773+ # We expect suite to be a path name, no fuzzy searching
4774+ if not os.path.exists(suite_dir):
4775+ self.system_manager.logging.error("Suite: %s does not exist" %(suite_dir))
4776+ sys.exit(1)
4777+
4778+ # Ensure our test and result directories are present
4779+ if not os.path.exists(testdir):
4780+ self.system_manager.logging.error("Suite: %s does not have a 't' directory (expected location for test files)" %(suite_dir))
4781+ sys.exit(1)
4782+ if not os.path.exists(resultdir):
4783+ self.system_manager.logging.error("Suite: %s does not have an 'r' directory (expected location for result files)" %(suite_dir))
4784+ sys.exit(1)
4785+
4786+ def get_suite_name(self, suite_dir):
4787+ """ Get the 'name' of the suite
4788+ This can either be the path basename or one directory up, as
4789+ in the case of files in the drizzle/plugins directory
4790+
4791+ """
4792+
4793+ # We trim any trailing path delimiters as python returns
4794+ # '' for basedir if the path ends that way
4795+ # BEGIN horrible hack to accomodate bad location of main suite : /
4796+ if suite_dir == self.testdir:
4797+ return 'main'
4798+ # END horrible hack : /
4799+ if suite_dir.endswith('/'):
4800+ suite_dir=suite_dir[:-1]
4801+ suite_dir_root,suite_dir_basename = os.path.split(suite_dir)
4802+ if suite_dir_basename == 'tests' or suite_dir_basename == 'drizzle-tests':
4803+ suite_name = os.path.basename(suite_dir_root)
4804+ else:
4805+ suite_name = suite_dir_basename
4806+ self.system_manager.logging.debug("Suite_name: %s" %(suite_name))
4807+ return suite_name
4808+
4809+ def process_suite_options(self, suite_dir):
4810+ """ Process the suite.opt and master.opt files
4811+ that reside at the suite-level if they exist.
4812+ Return a list of the options found
4813+
4814+ We also process .cnf files - this
4815+ is currently dbqp-only and is the proper
4816+ way to do things :P
4817+
4818+ """
4819+ found_options = []
4820+ opt_files = ['t/master.opt','t/suite.opt']
4821+ for opt_file in opt_files:
4822+ found_options = found_options + self.process_opt_file(os.path.join(suite_dir,opt_file))
4823+ # We also process the suite-level .cnf file(s). We override
4824+ # a master.opt file if we have a .cnf file. There is no reason they
4825+ # should ever be used in conjunction and I am biased towards .cnf ; )
4826+ cnf_files = ['t/master.cnf']
4827+ cnf_options = []
4828+ for cnf_file in cnf_files:
4829+ config_file_path = os.path.join(suite_dir,cnf_file)
4830+ cnf_flag, returned_options = self.process_cnf_file(config_file_path)
4831+ cnf_options += returned_options
4832+ if cnf_flag: # we found a proper file and need to override
4833+ found_options = cnf_options
4834+ else:
4835+ config_file_path = None
4836+ return config_file_path, found_options
4837+
4838+ def process_disabled_test_file(self, testdir):
4839+ """ Checks and processes the suite's disabled.def
4840+ file. This file must reside in the suite/t directory
4841+ It must be in the format:
4842+ test-name : comment (eg BugNNNN - bug on hold, test disabled)
4843+ In reality a test should *never* be disabled. EVER.
4844+ However, we keep this as a bit of utility
4845+
4846+ """
4847+ disabled_tests = {}
4848+ disabled_def_path = os.path.join(testdir,'disabled.def')
4849+ if not os.path.exists(disabled_def_path):
4850+ return disabled_tests
4851+
4852+ try:
4853+ disabled_test_file = open(disabled_def_path,'r')
4854+ except IOError, e:
4855+ self.system_manager.logging.error("Problem opening disabled.def file: %s" %(disabled_def_path))
4856+ sys.exit(1)
4857+
4858+ self.system_manager.logging.debug("Processing disabled.def file: %s" %(disabled_def_path))
4859+ disabled_bug_pattern = re.compile("[\S]+[\s]+:[\s]+[\S]")
4860+
4861+ for line in disabled_test_file:
4862+ line = line.strip()
4863+ if not line.startswith('#'): # comment
4864+ if re.match(disabled_test_pattern,line):
4865+ self.system_manager.logging.debug("found disabled test - %s" %(line))
4866+ test_name, test_comment = line.split(':')
4867+ disabled_tests[test_name.strip()]=test_comment.strip()
4868+
4869+ disabled_test_file.close()
4870+ return disabled_tests
4871+
4872+
4873+ def process_opt_file(self, opt_file_path):
4874+ """ Process a test-run '.opt' file.
4875+ These files contain test and suite-specific server options
4876+ (ie what options the server needs to use for the test)
4877+
4878+ Returns a list of the options (we don't really validate...yet)
4879+
4880+ NOTE: test-run.pl allows for server *and* system options
4881+ (eg timezone, slave_count, etc) in opt files. We don't.
4882+ None of our tests use this and we should probably avoid it
4883+ We can introduce server and system .opt files or even better
4884+ would be to use config files as we do with drizzle-automation
4885+ This would allow us to specify options for several different
4886+ things in a single file, but in a clean and standardized manner
4887+
4888+ """
4889+ found_options = []
4890+ if not os.path.exists(opt_file_path):
4891+ return found_options
4892+
4893+ try:
4894+ opt_file = open(opt_file_path,'r')
4895+ except IOError, e:
4896+ self.system_manager.logging.error("Problem opening option file: %s" %(opt_file_path))
4897+ sys.exit(1)
4898+
4899+ self.system_manager.logging.debug("Processing opt file: %s" %(opt_file_path))
4900+ for line in opt_file:
4901+ options = line.split('--')
4902+ if options:
4903+ for option in options:
4904+ if option:
4905+ if 'restart' in option or '#' in option:
4906+ option = 'restart'
4907+ found_options.append('--%s' %(option.strip()))
4908+ opt_file.close()
4909+ return found_options
4910+
4911+ def process_cnf_file(self, cnf_file_path):
4912+ """ We extract meaningful information from a .cnf file
4913+ if it exists. Currently limited to server allocation
4914+ needs
4915+
4916+ """
4917+
4918+ server_requirements = []
4919+ cnf_flag = 0
4920+ if os.path.exists(cnf_file_path):
4921+ cnf_flag = 1
4922+ config_reader = RawConfigParser()
4923+ config_reader.read(cnf_file_path)
4924+ server_requirements = self.process_server_reqs(config_reader.get('test_servers','servers'))
4925+ return ( cnf_flag, server_requirements )
4926+
4927+ def process_server_reqs(self,data_string):
4928+ """ We read in the list of lists as a string, so we need to
4929+ handle this / break it down into proper chunks
4930+
4931+ """
4932+ server_reqs = []
4933+ # We expect to see a list of lists and throw away the
4934+ # enclosing brackets
4935+ option_sets = data_string[1:-1].strip().split(',')
4936+ for option_set in option_sets:
4937+ server_reqs.append([option_set[1:-1].strip()])
4938+ return server_reqs
4939+
4940+ def testlist_filter(self, testlist):
4941+ """ Filter our list of testdir contents based on several
4942+ criteria. This looks for user-specified test-cases
4943+ and applies the do-test and skip-test filters
4944+
4945+ Returns the list of tests that we want to execute
4946+ for further processing
4947+
4948+ """
4949+
4950+ # We want only .test files
4951+ # Possible TODO: allow alternate test extensions
4952+ testlist = [test_file for test_file in testlist if test_file.endswith('.test')]
4953+
4954+ # Search for specific test names
4955+ if self.desired_tests: # We have specific, named tests we want from the suite(s)
4956+ tests_to_use = []
4957+ for test in self.desired_tests:
4958+ if test.endswith('.test'):
4959+ pass
4960+ else:
4961+ test = test+'.test'
4962+ if test in testlist:
4963+ tests_to_use.append(test)
4964+ testlist = tests_to_use
4965+
4966+ # TODO: Allow for regex?
4967+ # Apply do-test filter
4968+ if self.dotest:
4969+ testlist = [test_file for test_file in testlist if test_file.startswith(self.dotest)]
4970+ # Apply skip-test filter
4971+ if self.skiptest:
4972+ testlist = [test_file for test_file in testlist if not test_file.startswith(self.skiptest)]
4973+ return testlist
4974+
4975+ def find_result_path(self, result_dir, result_file_name):
4976+ """ This is copied from test-run.pl dtr_cases.pl
4977+ If we have an engine option passed in and the
4978+ path resultdir/engine/testname.result exists, that is
4979+ our .result file
4980+
4981+ Need to check if we really need this - maybe PBXT?
4982+
4983+ """
4984+ result_path = os.path.join(result_dir,result_file_name)
4985+ if self.default_engine:
4986+ candidate_path = os.path.join(result_dir, self.default_engine,
4987+ result_file_name)
4988+ if os.path.exists(candidate_path):
4989+ result_path = candidate_path
4990+ return result_path
4991+
4992+ def check_if_disabled(self, disabled_tests, test_name):
4993+ """ Scan the list of disabled tests if it exists to see
4994+ if the test is disabled.
4995+
4996+ """
4997+
4998+ if disabled_tests:
4999+ if test_name in disabled_tests:
5000+ self.system_manager.logging.debug("%s says - I'm disabled" %(test_name))
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches