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

Proposed by Stewart Smith
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) Needs Fixing
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.
Revision history for this message
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
Revision history for this message
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

Revision history for this message
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

merge latest PAM plugin sources

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'Percona-Server/plugin/percona-pam-for-mysql/.bzrignore'
--- Percona-Server/plugin/percona-pam-for-mysql/.bzrignore 2012-03-15 14:43:05 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/.bzrignore 2012-06-27 07:03:19 +0000
@@ -19,3 +19,4 @@
19*.tar.gz19*.tar.gz
20m4/*.m420m4/*.m4
21doc/build21doc/build
22doc/source/percona-theme
2223
=== modified file 'Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt'
--- Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt 2012-05-08 05:19:39 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt 2012-06-27 07:03:19 +0000
@@ -18,6 +18,8 @@
18CHECK_LIBRARY_EXISTS(mysqlclient mysql_init "" HAVE_MYSQLCLIENT) 18CHECK_LIBRARY_EXISTS(mysqlclient mysql_init "" HAVE_MYSQLCLIENT)
19CHECK_SYMBOL_EXISTS(getpwnam_r "pwd.h" HAVE_GETPWNAM_R)19CHECK_SYMBOL_EXISTS(getpwnam_r "pwd.h" HAVE_GETPWNAM_R)
20CHECK_SYMBOL_EXISTS(getgrgid_r "grp.h" HAVE_GETGRGID_R)20CHECK_SYMBOL_EXISTS(getgrgid_r "grp.h" HAVE_GETGRGID_R)
21CHECK_INCLUDE_FILES (security/pam_misc.h HAVE_SECURITY_PAM_MISC_H)
22CHECK_INCLUDE_FILES (security/openpam.h HAVE_SECURITY_OPENPAM_H)
21IF(HAVE_PAM AND HAVE_MYSQLCLIENT AND HAVE_GETPWNAM_R AND HAVE_GETGRGID_R)23IF(HAVE_PAM AND HAVE_MYSQLCLIENT AND HAVE_GETPWNAM_R AND HAVE_GETGRGID_R)
22 SET(AUTH_PAM_COMMON_SOURCES 24 SET(AUTH_PAM_COMMON_SOURCES
23 src/auth_pam_common.c src/lib_auth_pam_client.c src/lib_auth_pam_client.h25 src/auth_pam_common.c src/lib_auth_pam_client.c src/lib_auth_pam_client.h
2426
=== modified file 'Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile'
--- Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile 2011-10-25 10:51:19 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile 2012-06-27 07:03:19 +0000
@@ -37,6 +37,15 @@
37 -rm -rf $(BUILDDIR)/*37 -rm -rf $(BUILDDIR)/*
3838
39html:39html:
40 @echo "Downloading percona-theme ..."
41 @wget -O percona-theme.tar.gz http://percona.com/docs/theme/percona-pam-for-mysql
42 @echo "Extracting theme."
43 @tar -zxf percona-theme.tar.gz
44 @rm -rf source/percona-theme
45 @mv percona-theme source/percona-theme
46 @rm percona-theme.tar.gz
47 @echo "Building html doc"
48
40 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html49 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
41 @echo50 @echo
42 @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."51 @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
4352
=== removed directory 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme'
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html'
--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html 2012-03-26 17:43:02 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html 1970-01-01 00:00:00 +0000
@@ -1,499 +0,0 @@
1{#
2 basic/layout.html
3 ~~~~~~~~~~~~~~~~~
4
5 Master layout template for Sphinx themes.
6
7 :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
8 :license: BSD, see LICENSE for details.
9#}
10{%- block doctype -%}
11<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
12 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
13{%- endblock %}
14{%- set reldelim1 = reldelim1 is not defined and ' &raquo;' or reldelim1 %}
15{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
16{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and
17 (sidebars != []) %}
18{%- set url_root = pathto('', 1) %}
19{# XXX necessary? #}
20{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
21{%- if not embedded and docstitle %}
22 {%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
23{%- else %}
24 {%- set titlesuffix = "" %}
25{%- endif %}
26
27{%- macro relbar() %}
28 <div class="related">
29 <h3>{{ _('Navigation') }}</h3>
30 <ul>
31 {%- for rellink in rellinks %}
32 <li class="right" {% if loop.first %}style="margin-right: 10px"{% endif %}>
33 <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}"
34 {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
35 {%- if not loop.first %}{{ reldelim2 }}{% endif %}</li>
36 {%- endfor %}
37 {%- block rootrellink %}
38 <li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>{{ reldelim1 }}</li>
39 {%- endblock %}
40 {%- for parent in parents %}
41 <li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li>
42 {%- endfor %}
43 {%- block relbaritems %} {% endblock %}
44 </ul>
45 </div>
46{%- endmacro %}
47
48{%- macro sidebar() %}
49 {%- if render_sidebar %}
50 <div class="sphinxsidebar">
51 <div class="sphinxsidebarwrapper">
52 {%- block sidebarlogo %}
53 {%- if logo %}
54 <p class="logo"><a href="{{ pathto(master_doc) }}">
55 <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
56 </a></p>
57 {%- endif %}
58
59<div class="noborder" id="sidenavi">
60
61 <div class="sidebanner" id="sidebanner">
62 <div class="header"><a href="/contact/sales">Call Us</a></div>
63 <div class="numbers">
64 <div style="padding-bottom: 4px">
65 +1-888-316-9775 (USA - Sales)<br>
66 +1-208-473-2904 (USA - Sales)
67 </div>
68 <div>
69 +44-208-133-0309 (UK - Sales)
70 </div>
71 <div>
72 +1-877-862-4316 (Emergency)
73 </div>
74 </div>
75 </div>
76 <div id="sidefloater"></div>
77</div>
78
79 {%- endblock %}
80 {%- if sidebars != None %}
81 {#- new style sidebar: explicitly include/exclude templates #}
82 {%- for sidebartemplate in sidebars %}
83 {%- include sidebartemplate %}
84 {%- endfor %}
85 {%- else %}
86 {#- old style sidebars: using blocks -- should be deprecated #}
87 {%- block serverseries %}
88 {%- endblock %}
89 {%- block sidebartoc %}
90 {%- include "localtoc.html" %}
91 {%- endblock %}
92 {%- block sidebarrel %}
93 {%- include "relations.html" %}
94 {%- endblock %}
95 {%- block sidebarsourcelink %}
96 {%- include "sourcelink.html" %}
97 {%- endblock %}
98 {%- if customsidebar %}
99 {%- include customsidebar %}
100 {%- endif %}
101 {%- block sidebarsearch %}
102 {%- include "searchbox.html" %}
103 {%- endblock %}
104 {%- endif %}
105
106 </div>
107 </div>
108 {%- endif %}
109{%- endmacro %}
110
111{%- macro script() %}
112 <script type="text/javascript">
113 var DOCUMENTATION_OPTIONS = {
114 URL_ROOT: '{{ url_root }}',
115 VERSION: '{{ release|e }}',
116 COLLAPSE_INDEX: false,
117 FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}',
118 HAS_SOURCE: {{ has_source|lower }}
119 };
120 </script>
121 {%- for scriptfile in script_files %}
122 <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
123 {%- endfor %}
124{%- endmacro %}
125
126{%- macro css() %}
127 <link rel="stylesheet" href="{{ pathto('_static/percona.com.css', 1) }}" type="text/css" />
128 <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
129 <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
130 {%- for cssfile in css_files %}
131 <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
132 {%- endfor %}
133{%- endmacro %}
134
135<html xmlns="http://www.w3.org/1999/xhtml">
136 <head>
137 <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" />
138 {{ metatags }}
139 {%- block htmltitle %}
140 <title>{{ title|striptags|e }}{{ titlesuffix }}</title>
141 {%- endblock %}
142
143 {{ css() }}
144 {%- if not embedded %}
145 {{ script() }}
146 {%- if use_opensearch %}
147 <link rel="search" type="application/opensearchdescription+xml"
148 title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
149 href="{{ pathto('_static/opensearch.xml', 1) }}"/>
150 {%- endif %}
151
152<script src="{{ pathto('_static/percona.com.js', 1)}}" type="text/javascript"></script>
153
154 {%- if favicon %}
155 <link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
156 {%- endif %}
157 {%- endif %}
158{%- block linktags %}
159 {%- if hasdoc('about') %}
160 <link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
161 {%- endif %}
162 {%- if hasdoc('genindex') %}
163 <link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
164 {%- endif %}
165 {%- if hasdoc('search') %}
166 <link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
167 {%- endif %}
168 {%- if hasdoc('copyright') %}
169 <link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
170 {%- endif %}
171 <link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
172 {%- if parents %}
173 <link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}" />
174 {%- endif %}
175 {%- if next %}
176 <link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
177 {%- endif %}
178 {%- if prev %}
179 <link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
180 {%- endif %}
181{%- endblock %}
182{%- block extrahead %} {% endblock %}
183 </head>
184 <body>
185
186{%- block header %}
187
188 <!-- <div id="stickywrapper"> -->
189 <!-- <div id="stickycontent"> -->
190 <div id="header"><div class="header">
191 <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>
192 <div class="right">
193 <div class="searchlink"><a onmouseover="SEARCH.Open()"><img id="searchlink-anchor" src="http://s2.percona.com/ui-search.png" alt="" /></a></div>
194 <span class="inv"><![CDATA[<noindex>]]></span>
195 <div class="navicontainer"><div class="navi">
196 <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>
197
198 <span class="inv"><![CDATA[</noindex>]]></span>
199 <span class="inv"><![CDATA[</noindex>]]></span>
200 </div>
201 </div></div>
202 <div id="stripe"></div>
203
204{% endblock %}
205
206 <!-- <div id="stripe"></div> -->
207
208{%- block content %}
209
210
211
212 {%- block sidebar1 %} {# possible location for sidebar #} {% endblock %}
213
214 <div class="document">
215
216
217
218 {%- block document %}
219 <div class="documentwrapper">
220 {%- if render_sidebar %}
221 <div class="bodywrapper">
222 {%- endif %}
223
224 {%- block relbar1 %}{{ relbar() }}{% endblock %}
225
226 <div class="body">
227 {% block body %} {% endblock %}
228 </div>
229
230 {%- block relbar2 %}{{ relbar() }}
231
232 {%- if render_sidebar %}
233 </div>
234 {%- endif %}
235
236
237
238 </div>
239
240 {%- endblock %}
241
242 {%- block sidebar2 %}{{ sidebar() }}{% endblock %}
243
244 <div class="clearer"></div>
245
246 {%- if last_updated %}
247 {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
248 {%- endif %}
249
250 <div class="license">
251
252 {%- if show_copyright %}
253 {%- if hasdoc('copyright') %}
254 {% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
255 {%- else %}
256 {% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}.{% endtrans %}
257 {%- endif %}
258 {%- endif %}
259
260 <br />
261 Except where otherwise noted, this documentation is licensed under the following license:
262 <br />
263 <a class="urlextern" rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/">
264 CC Attribution-ShareAlike 2.0 Generic</a><br />
265
266 {%- if show_sphinx %}
267 {% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
268 {%- endif %}
269
270 </div>
271
272 </div>
273 {%- endblock %}
274
275 {% endblock %}
276
277{%- block footer %}
278
279 <div class="file-bugs">
280 This documentation is developed in Launchpad as part of the <a href="https://code.launchpad.net/percona-toolkit">Percona Toolkit source code</a>.<br/>
281 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>.
282
283 </div>
284
285 <div id="support-ribbon" class="vertical" style="z-index: 1;">
286 <div id="support-suboptions">
287 <ul>
288 <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>
289 <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>
290 <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>
291 <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>
292 <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>
293
294 </ul>
295 </div>
296 </div>
297
298 <div id="footer">
299
300 <div class="footer">
301 <div class="logo"><img width="110" height="25" alt="" src="{{ pathto('_static/ui-footer-logo.png', 1) }}">
302 </div>
303
304 <div class="text">
305 <span class="inv"><!--[CDATA[<noindex-->]]&gt;</span>
306 Call us: 1-888-316-9775 • <a href="/contact">Contact Us</a><br>
307 MySQL and InnoDB are trademarks of Oracle Corp.<br>
308 Proudly running <a href="/software/percona-server/">Percona Server<span id="recentServerVersion"></span></a><br>
309 Copyright &copy; 2006-2011 Percona Inc.<br>
310 <a href="/about-us/policies/">Copyright, Trademark, and Privacy Policy</a> • <a href="/sitemap/">Sitemap</a>
311 <span class="inv"><!--[CDATA[</noindex-->]]&gt;</span>
312 </div>
313 </div>
314
315 </div>
316{%- endblock %}
317<span class="inv"><!--[CDATA[<noindex-->]]&gt;</span>
318<div id="submenus">
319 <div class="navi-dropdown" id="navi-dropdown-about-us">
320 <div class="navi-dropdown-header-l"><!-- //--></div>
321 <div class="navi-dropdown-content">
322 <div class="item"><a href="http://www.percona.com/about-us/our-mission/">Our Mission</a></div>
323 <div class="item"><a href="http://www.percona.com/about-us/why-percona/">Why Percona?</a></div>
324 <div class="item"><a href="http://www.percona.com/about-us/procedures/">Coordinating with Percona</a></div>
325 <div class="item"><a href="http://www.percona.com/about-us/customers/">Customers</a></div>
326 <div class="item"><a href="http://www.percona.com/webinars/">Webinars</a></div>
327 <div class="item"><a href="http://www.percona.com/about-us/mysql-case-studies/">MySQL Case Studies</a></div>
328 <div class="item"><a href="http://www.percona.com/about-us/our-team/">Our Team</a></div>
329
330 <div class="item"><a href="http://www.percona.com/about-us/books/">Our Books</a></div>
331 <div class="item"><a href="http://www.percona.com/about-us/blogs/">Our Blogs</a></div>
332 <div class="item"><a href="http://www.percona.com/about-us/mysql-white-papers/">MySQL White Papers</a></div>
333 <div class="item"><a href="http://www.percona.com/about-us/conferences/">Conferences</a></div>
334 <div class="item"><a href="http://www.percona.com/about-us/presentations/">Presentations</a></div>
335 <div class="item"><a href="http://www.percona.com/about-us/newsletters/">Newsletters</a></div>
336 <div class="item"><a href="http://www.percona.com/about-us/pressreleases/">Press Releases</a></div>
337 <div class="item"><a href="http://www.percona.com/about-us/percona-in-the-news/">In The News</a></div>
338 <div class="item"><a href="http://www.percona.com/about-us/careers/">Careers</a></div>
339
340 </div>
341 <div class="navi-dropdown-footer"><!-- //--></div>
342 </div>
343 <div class="navi-dropdown" id="navi-dropdown-mysql-consulting">
344 <div class="navi-dropdown-header-l"><!-- //--></div>
345 <div class="navi-dropdown-content">
346 <div class="item"><a href="http://www.percona.com/mysql-consulting/overview/">MySQL Consulting Overview</a></div>
347 <div class="item"><a href="http://www.percona.com/mysql-consulting/prices/">MySQL Consulting Prices</a></div>
348 <div class="item"><a href="http://www.percona.com/mysql-consulting/architecture/">MySQL Architecture &amp; Design</a></div>
349 <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-backups/">MySQL Backups</a></div>
350 <div class="item"><a href="http://www.percona.com/mysql-consulting/cloud-computing/">MySQL Cloud Solutions</a></div>
351
352 <div class="item"><a href="http://www.percona.com/mysql-consulting/cluster/">MySQL Cluster Consulting</a></div>
353 <div class="item"><a href="http://www.percona.com/mysql-consulting/data-warehousing/">MySQL Data Warehousing</a></div>
354 <div class="item"><a href="http://www.percona.com/mysql-consulting/data-recovery/">MySQL Data Recovery</a></div>
355 <div class="item"><a href="http://www.percona.com/mysql-consulting/high-availability/">MySQL High Availability</a></div>
356 <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-monitoring-graphing/">MySQL Monitoring &amp; Graphing</a></div>
357 <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-onsite-consulting/">MySQL Onsite Consulting</a></div>
358 <div class="item"><a href="http://www.percona.com/mysql-consulting/performance-audit/">MySQL Performance Audit</a></div>
359 <div class="item"><a href="http://www.percona.com/mysql-consulting/remote-dba/">MySQL Remote DBA</a></div>
360
361 <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-replication/">MySQL Replication</a></div>
362 <div class="item"><a href="http://www.percona.com/mysql-consulting/upgrade/">MySQL Version Upgrades</a></div>
363 <div class="item"><a href="http://www.percona.com/mysql-consulting/24x7-emergency/">Emergency 24&times;7 Consulting</a></div>
364 <div class="item"><a href="http://www.percona.com/mysql-consulting/migration/">Migration to MySQL</a></div>
365 <div class="item"><a href="http://www.percona.com/drizzle-consulting/">Drizzle Consulting</a></div>
366 <div class="item"><a href="http://www.percona.com/mysql-consulting/sphinx/">Sphinx Consulting</a></div>
367 <div class="item"><a href="http://www.percona.com/mysql-consulting/drbd/">DRBD Consulting</a></div>
368 <div class="item"><a href="http://www.percona.com/mysql-consulting/memcached/">Memcached Consulting</a></div>
369
370 <div class="item"><a href="http://www.percona.com/mysql-consulting/other-services/">Other Consulting Services</a></div>
371 </div>
372 <div class="navi-dropdown-footer"><!-- //--></div>
373 </div>
374 <div class="navi-dropdown" id="navi-dropdown-support">
375 <div class="navi-dropdown-header-l"><!-- //--></div>
376 <div class="navi-dropdown-content">
377 <div class="item"><a href="http://www.percona.com/mysql-support/">MySQL Support Overview</a></div>
378 <div class="item"><a href="http://www.percona.com/prices/mysql-support/">MySQL Support Prices</a></div>
379 <div class="item"><a href="http://www.percona.com/mysql-support/policies/">MySQL Support Policies</a></div>
380 <div class="item"><a href="http://www.percona.com/mysql-support/consulting-vs-support/">Consulting vs. Support</a></div>
381 <div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div>
382
383 </div>
384 <div class="navi-dropdown-footer"><!-- //--></div>
385 </div>
386 <div class="navi-dropdown" id="navi-dropdown-training">
387 <div class="navi-dropdown-header-l"><!-- //--></div>
388 <div class="navi-dropdown-content">
389 <div class="item"><a href="http://www.percona.com/training/">MySQL Training Overview</a></div>
390 <div class="item"><a href="http://www.percona.com/prices/training/">MySQL Training Prices</a></div>
391 <div class="item"><a href="http://www.percona.com/training/classes/dba/">MySQL DBA Training</a></div>
392 <div class="item"><a href="http://www.percona.com/training/classes/developers/">MySQL Developer Training</a></div>
393 <div class="item"><a href="http://www.percona.com/training/classes/operations/">MySQL Operations Training</a></div>
394 <div class="item"><a href="http://www.percona.com/training/classes/innodb/">InnoDB &amp; XtraDB Training</a></div>
395
396 <div class="item"><a href="http://www.percona.com/training/classes/custom-onsite/">Custom Onsite Training</a></div>
397 </div>
398 <div class="navi-dropdown-footer"><!-- //--></div>
399 </div>
400 <div class="navi-dropdown" id="navi-dropdown-development">
401 <div class="navi-dropdown-header-l"><!-- //--></div>
402 <div class="navi-dropdown-content">
403 <div class="item"><a href="http://www.percona.com/development/mysql/">MySQL Development Overview</a></div>
404 <div class="item"><a href="http://www.percona.com/development/prices/">Custom Development Prices</a></div>
405 <div class="item"><a href="http://www.percona.com/development/maintenance/">MySQL Support Overview</a></div>
406 <div class="item"><a href="http://www.percona.com/development/benchmarking/">Custom Product Evaluation</a></div>
407 <div class="item"><a href="http://www.percona.com/development/maatkit/">Custom Maatkit Development</a></div>
408
409 <div class="item"><a href="http://www.percona.com/development/custom-tools/">Custom Tools Development</a></div>
410 </div>
411 <div class="navi-dropdown-footer"><!-- //--></div>
412 </div>
413 <div class="navi-dropdown" id="navi-dropdown-software">
414 <div class="navi-dropdown-header-l"><!-- //--></div>
415 <div class="navi-dropdown-content">
416 <div class="item"><a href="http://www.percona.com/software/">Percona Software for MySQL</a></div>
417 <div class="item"><a href="http://www.percona.com/software/percona-server/">Percona Server with XtraDB</a></div>
418 <div class="item"><a href="http://www.percona.com/software/percona-xtradb-cluster/">Percona XtraDB Cluster</a></div>
419 <div class="item"><a href="http://www.percona.com/software/percona-xtrabackup/">Percona XtraBackup</a></div>
420 <div class="item"><a href="http://www.percona.com/software/mysql-innodb-data-recovery-tools/">Data Recovery Toolkit</a></div>
421
422 <div class="item"><a href="http://www.percona.com/software/percona-xtradb/">Percona XtraDB</a></div>
423 <div class="item"><a href="http://www.percona.com/software/percona-toolkit/">Percona Toolkit</a></div>
424 <div class="item"><a href="http://www.percona.com/prices/software/">Software Prices</a></div>
425 <div class="item"><a href="http://www.percona.com/downloads/">Downloads</a></div>
426 <div class="item"><a href="http://www.percona.com/software/repositories/">Repositories</a></div>
427 <div class="item"><a href="http://www.percona.com/software/documentation/">Documentation</a></div>
428 <div class="item"><a href="http://forum.percona.com">Forum</a></div>
429 <div class="item"><a href="http://groups.google.com/group/percona-discussion">Google Discussion</a></div>
430 <div class="item"><a href="https://launchpad.net/percona-server">Launchpad</a></div>
431
432 </div>
433 <div class="navi-dropdown-footer"><!-- //--></div>
434 </div>
435 <div class="navi-dropdown" id="navi-dropdown-events">
436 <div class="navi-dropdown-header-r"><!-- //--></div>
437 <div class="navi-dropdown-content">
438 <div class="item"><a href="http://www.percona.com/live/mysql-conference-2012/">MySQL Conference &amp; Expo 2012</a></div>
439 <div class="item"><a href="http://www.percona.com/live/">Previous Percona Live Events</a></div>
440 </div>
441 <div class="navi-dropdown-footer"><!-- //--></div>
442 </div>
443
444 <div class="navi-dropdown" id="navi-dropdown-contact">
445 <div class="navi-dropdown-header-r"><!-- //--></div>
446 <div class="navi-dropdown-content">
447 <div class="item"><a href="http://www.percona.com/contact/24x7-emergency/">24&times;7 Emergency</a></div>
448 <div class="item"><a href="http://www.percona.com/contact/sales/">Sales &amp; General Inquiries</a></div>
449 <div class="item"><a href="http://www.percona.com/contact/billing/">Billing Inquiries</a></div>
450 <div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div>
451 <div class="item"><a href="http://www.percona.com/contact/phone-directory/">Phone Directory</a></div>
452 <div class="item"><a href="http://www.percona.com/subscribe/">Subscribe to Newsletter</a></div>
453
454 </div>
455 <div class="navi-dropdown-footer"><!-- //--></div>
456 </div>
457 <div id="search-dropdown" class="search-dropdown">
458 <div class="search-dropdown-header"><!-- //--></div>
459 <div class="search-dropdown-content">
460 <div class="search-info">Search Percona.com:</div>
461 <form method="get" action="http://search.percona.com/search/" id="search-form">
462 <div class="form"><input type="text" id="search-input" name="q" maxlength="100"></div>
463 </form>
464 </div>
465 <div class="search-dropdown-footer"><!-- //--></div>
466 </div>
467</div>
468<div id="stats">
469<!-- GA //-->
470 <script src="http://www.percona.com/static/js/urchin.js" type="text/javascript"></script>
471 <script type="text/javascript">
472 _uacct = "UA-343802-3";
473 urchinTracker();
474 </script>
475<!-- /GA //-->
476<!-- NAVI //-->
477<script type="text/javascript">//<![CDATA[
478var 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"}];
479for(var i = 0, c = navi.length; i < c; i++) {
480window.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); } );
481}
482window.jQuery('#search-form').bind('submit', function() { window.location.href = jQuery('#search-form').attr('action') + jQuery('#search-input').val(); return false; });
483//]]></script>
484<!-- /NAVI //-->
485<script type="text/javascript">
486//<![CDATA[
487Percona.host = 'www.percona.com';
488Percona.getRecentServerVersion('#recentServerVersion');
489//]]>
490</script>
491</div>
492 </body>
493</html>
494
495
496
497{% if theme_collapsiblesidebar|tobool %}
498{% set script_files = script_files + ['_static/sidebar.js'] %}
499{% endif %}
5000
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html'
--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html 2011-10-25 10:51:19 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html 1970-01-01 00:00:00 +0000
@@ -1,22 +0,0 @@
1{#
2 basic/searchbox.html
3 ~~~~~~~~~~~~~~~~~~~~
4
5 Sphinx sidebar template: quick search box.
6
7 :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
8 :license: BSD, see LICENSE for details.
9#}
10{%- if pagename != "search" %}
11<div id="searchbox" style="display: none; padding: 3px;">
12 <h3>{{ _('Quick search') }}</h3>
13 <form class="search" action="{{ pathto('search') }}" method="get">
14 <input type="text" name="q" size="18" />
15 <input type="submit" value="{{ _('Go') }}" />
16 <input type="hidden" name="check_keywords" value="yes" />
17 <input type="hidden" name="area" value="default" />
18 </form>
19
20</div>
21<script type="text/javascript">$('#searchbox').show(0);</script>
22{%- endif %}
230
=== removed directory 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static'
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t'
--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t 2011-10-25 10:51:19 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t 1970-01-01 00:00:00 +0000
@@ -1,469 +0,0 @@
1/*
2 * default.css_t
3 * ~~~~~~~~~~~~~
4 *
5 * Sphinx stylesheet -- default theme.
6 *
7 * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
8 * :license: BSD, see LICENSE for details.
9 *
10 */
11
12@import url("basic.css");
13
14/* -- page layout ----------------------------------------------------------- */
15
16body {
17 font-family: Arial,Helvetica,sans-serif;
18 font-size: 14px;
19 background-color: #fff;
20 color: #333333;
21 line-height: 20px;
22 margin: 0;
23 padding: 0;
24
25}
26
27div.document {
28 background-color: #fff;
29 margin: 0 auto;
30 overflow: hidden;
31 padding: 30px 0;
32 width: 960px;
33}
34
35div.documentwrapper {
36 /* float: left; */
37 /* width: 100%; */
38
39}
40
41div.bodywrapper {
42 margin: 10 0 0 0px;
43 width: 660px;
44 float:right;
45}
46
47div.body {
48 background-color: #fff;
49 color: #333333;
50 padding: 0 0 20px;
51}
52
53{%- if theme_rightsidebar|tobool %}
54div.bodywrapper {
55 margin: 0 {{ theme_sidebarwidth }}px 0 0;
56}
57{%- endif %}
58
59div.footer {
60 /* color: {{ theme_footertextcolor }}; */
61 /* width: 100%; */
62 /* padding: 9px 0 9px 0; */
63 /* text-align: center; */
64 /* font-size: 75%; */
65 font: 80% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif;
66 background: none repeat scroll 0 0 #333333;
67 border-top: 2px solid #D95200;
68 overflow: hidden;
69}
70
71div.footer a {
72 color: {{ theme_footertextcolor }};
73 text-decoration: underline;
74}
75
76div.related {
77 background-color: #ccc;
78 line-height: 30px;
79 color: #333;
80 background: none repeat scroll 0 0 #F8F8F8;
81 border: 1px solid #E0E0E0;
82 clear: both;
83 padding: 10px;
84 width: 635px;
85 margin-bottom: 5px;
86}
87
88div.related a {
89 color: #999;
90}
91
92div.sphinxsidebar {
93 margin-left: 0px;
94 margin-right: 30px;
95 color: #eee;
96 font-family: Arial,Helvetica,sans-serif;
97 width: 260px;
98 {%- if theme_stickysidebar|tobool %}
99 top: 30px;
100 bottom: 0;
101 margin: 0;
102 position: fixed;
103 overflow: auto;
104 height: auto;
105 {%- endif %}
106 {%- if theme_rightsidebar|tobool %}
107 float: right;
108 {%- if theme_stickysidebar|tobool %}
109 right: 0;
110 {%- endif %}
111 {%- endif %}
112}
113
114{%- if theme_stickysidebar|tobool %}
115/* this is nice, but it it leads to hidden headings when jumping
116 to an anchor */
117/*
118div.related {
119 position: fixed;
120}
121
122div.documentwrapper {
123 margin-top: 30px;
124}
125*/
126{%- endif %}
127
128div.sphinxsidebar h3 {
129 /* font-family: {{ theme_headfont }}; */
130 color: #999;
131 font-size: 18px;
132 line-height: 15px;
133 font-weight: 400;
134 margin-left: 5px;
135 padding: 0;
136}
137
138div.sphinxsidebar h3 a {
139 color: #333;
140}
141
142div.sphinxsidebar a:hover {
143 /* color: #333; */
144}
145
146div.sphinxsidebar h4 {
147 /* font-family: {{ theme_headfont }}; */
148 color: #666;
149 font-size: 18px;
150 font-weight: normal;
151 margin: 5px 0 0 5px;
152 padding: 0;
153}
154
155div.sphinxsidebar p {
156 color: #333;
157 margin-bottom: 5px;
158 margin-left: 5px;
159}
160
161div.sphinxsidebar p.topless {
162 margin: 5px 10px 10px 10px;
163}
164
165div.sphinxsidebar ul {
166 margin: 10px;
167 padding-left: 5px;
168 color: #333;
169}
170
171div.sphinxsidebar a {
172 color: #D12907;
173}
174
175div.sphinxsidebar input {
176 border: 1px solid #999;
177 font-family: sans-serif;
178 font-size: 1em;
179}
180
181{% if theme_collapsiblesidebar|tobool %}
182/* for collapsible sidebar */
183div#sidebarbutton {
184 background-color: {{ theme_sidebarbtncolor }};
185}
186{% endif %}
187
188/* -- hyperlink styles ------------------------------------------------------ */
189
190a {
191 color: #D12907;
192 text-decoration: underline;
193 border: medium none;
194 cursor: pointer;
195}
196
197a:visited {
198 color: #D12907;
199 text-decoration: underline;
200}
201
202a:hover {
203 color: #D12907;
204 text-decoration: underline;
205}
206
207{% if theme_externalrefs|tobool %}
208a.external {
209 text-decoration: none;
210 border-bottom: 1px dashed {{ theme_linkcolor }};
211}
212
213a.external:hover {
214 text-decoration: none;
215 border-bottom: none;
216}
217
218a.external:visited {
219 text-decoration: none;
220 border-bottom: 1px dashed {{ theme_visitedlinkcolor }};
221}
222{% endif %}
223
224/* -- body styles ----------------------------------------------------------- */
225
226div.body h1,
227div.body h2,
228div.body h3,
229div.body h4,
230div.body h5,
231div.body h6 {
232 font-family: Arial,Helvetica,sans-serif;
233 background-color: #fff;
234 font-weight: 400;
235
236 /* border-bottom: 1px solid #ccc; */
237 /* margin: 20px -20px 10px -20px; */
238 /* padding: 0; */
239 /* padding: 3px 0 3px 10px; */
240 text-decoration: none !important;
241
242 border-bottom: 1px solid #E0E0E0;
243 font-size: 20px;
244 line-height: 20px;
245 margin: 30px 0 15px;
246 padding: 0 0 3px;
247 color: #000;
248}
249
250div.body h1 {
251 font-size: 32px;
252 color: #D12907;
253 line-height: 40px;
254 margin: 10px 0 20px 0;
255 text-decoration: none !important;
256 border-bottom: none;
257 margin-top: 35px;
258}
259
260div.body h2 { font-size: 150%; }
261div.body h3 { font-size: 140%; }
262div.body h4 { font-size: 120%; }
263div.body h5 { font-size: 110%; }
264div.body h6 { font-size: 100%; }
265
266a.headerlink {
267 color: {{ theme_headlinkcolor }};
268 font-size: 0.8em;
269 padding: 0 4px 0 4px;
270 text-decoration: none;
271}
272
273a.headerlink:hover {
274 background-color: {{ theme_headlinkcolor }};
275 color: white;
276}
277
278div.body dd, div.body li {
279 text-align: justify;
280}
281
282div.body dt {
283 list-style-type: square;
284 /* margin: 8px 0 8px 30px; */
285 padding: 0 4px 0 5px;
286
287}
288
289div.body p {
290 text-align: justify;
291/* line-height: 130%;*/
292 margin: 10px 0;
293}
294
295/* div.body ul, */
296div.body li {
297 list-style-type: square;
298 margin: 8px 0 8px 30px;
299 padding: 0 4px 0 5px;
300}
301
302.reference em {
303 font-style: normal;
304}
305
306.std-term {
307 font-style: normal;
308 font-weight: 400;
309 color: #FF7400
310}
311
312div.admonition p.admonition-title + p {
313 display: inline;
314}
315
316div.admonition p {
317 margin-bottom: 5px;
318}
319
320div.admonition pre {
321 margin-bottom: 5px;
322}
323
324div.admonition ul, div.admonition ol {
325 margin-bottom: 5px;
326}
327
328div.note {
329 background-color: #eee;
330 border: 1px solid #ccc;
331}
332
333div.seealso {
334 background-color: #ffc;
335 border: 1px solid #ff6;
336}
337
338div.topic {
339 background-color: #eee;
340}
341
342div.warning {
343 background-color: #ffe4e4;
344 border: 1px solid #f66;
345}
346
347p.admonition-title {
348 display: inline;
349}
350
351p.admonition-title:after {
352 content: ":";
353}
354
355pre {
356 padding: 10px;
357 background-color: #F0E6D9/* {{ theme_codebgcolor }} */;
358 color: {{ theme_codetextcolor }};
359 line-height: 120%;
360 border: 1px dashed #ED9821;
361 font-size: 80%;
362 overflow: auto;
363 /* border-left: none; */
364 /* border-right: none; */
365}
366
367tt {
368/* background-color: #ecf0f3;
369 padding: 0 1px 0 1px;
370 font-size: 0.95em;*/
371 font-weight: 400;
372}
373
374div.body td {
375 text-align: none;
376}
377
378table.docutils th {
379 background-color: #DEE7EC;
380 border: 1px solid #8CACBB;
381 padding: 3px;
382 text-align: center;
383 font-style: normal;
384 font-weight: 400;
385}
386
387table.docutils td {
388 border: 1px solid #8CACBB;
389 padding: 3px;
390 line-height: 16px;
391 vertical-align: middle;
392}
393
394.warning tt {
395 background: #efc2c2;
396}
397
398.note tt {
399 background: #d6d6d6;
400}
401
402.viewcode-back {
403 font-family: {{ theme_bodyfont }};
404}
405
406div.viewcode-block:target {
407 background-color: #f4debf;
408 border-top: 1px solid #ac9;
409 border-bottom: 1px solid #ac9;
410}
411
412.file-bugs {
413 background: none repeat scroll 0 0 #E8E8E8;
414 border: 1px solid #E0E0E0;
415 clear: both;
416 color: #333333;
417 padding: 10px;
418 text-align: center;
419 font-size: 90%;
420}
421
422div.footer .footer {
423 margin: 0 auto;
424 overflow: hidden;
425 padding: 10px 0;
426 width: 960px;
427 border-top: none;
428}
429
430div.footer .footer .logo {
431 float: left;
432 overflow: hidden;
433 padding: 17px 0 0;
434}
435
436div.footer .footer .text {
437 color: #E0E0E0;
438 float: right;
439 font-family: Arial,Helvetica,sans-serif;
440 font-size: 11px;
441 line-height: 15px;
442 overflow: hidden;
443 text-align: right;
444}
445
446div.license {
447 font-size: 80%;
448 /* padding: 0.5em; */
449 text-align: center;
450 margin: 13px 0 -15px;
451}
452
453#sidenavi.noborder {
454 border-right: medium none;
455 border-top: medium none;
456 margin: 0;
457}
458
459#sidenavi {
460 color: #333333;
461 /* float: left; */
462 font-family: Arial,Helvetica,sans-serif;
463 font-size: 18px;
464 line-height: 25px;
465 overflow: hidden;
466 padding: 10px 0 8px 0px;
467 width: 255px;
468}
469
4700
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/email-small.png'
471Binary 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 differ1Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js'
--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js 2011-10-25 10:51:19 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js 1970-01-01 00:00:00 +0000
@@ -1,154 +0,0 @@
1/*!
2 * jQuery JavaScript Library v1.4.2
3 * http://jquery.com/
4 *
5 * Copyright 2010, John Resig
6 * Dual licensed under the MIT or GPL Version 2 licenses.
7 * http://jquery.org/license
8 *
9 * Includes Sizzle.js
10 * http://sizzlejs.com/
11 * Copyright 2010, The Dojo Foundation
12 * Released under the MIT, BSD, and GPL Licenses.
13 *
14 * Date: Sat Feb 13 22:33:48 2010 -0500
15 */
16(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?
17e(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=
18j.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,
19"&")}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=
20true;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/,
21Wa=/^(\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))&&
22(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,
23a)}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===
24"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,
25function(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)||
26c.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",
27L,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,
28"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 "+
29a))();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],
30d)===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]===
31a)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&&
32!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=
33true;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'/>";
34var 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,
35parentNode: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=
36false;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=
37s.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,
38applet: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];
39else 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,
40a,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===
41w)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,
42cb=/^(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+" ",
43i=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]+" ",
44" ");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=
45this.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=
46e[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=
47c.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");
48a[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,
49function(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(".");
50k=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),
51C=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!=
52null)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=
53e=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()&&
54f)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;
55if(!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(" "),
56fix: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||
57d&&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,
58"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=
59a;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,
60isImmediatePropagationStopped: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=
61{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")}};
62if(!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",
63e);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,
64"_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,
65d,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"&&
66!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}},
67toggle: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,
68u=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(" "),
69function(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];
70if(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,
71e=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();
72t=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||
73g);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[];
74for(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-
751)!=="\\"){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-]|\\.)+)/,
76CLASS:/\.((?:[\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")}},
77relative:{"+":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]=
78l?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=[];
79h=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()},
80CHILD: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,
81g);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)},
82text: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)}},
83setFilters:{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=
84h[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=
85m.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===
86"="?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,
87h){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||
88!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=
89h.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"&&
90q.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>";
91if(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}}();
92(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)}:
93function(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)/,
94gb=/,/;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;
95c.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=
96{},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===
97"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",
98d)},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")?
99a.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===
1001&&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)?
101a: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=
102c(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},
103wrapInner: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)})},
104prepend: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,
105this.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);
106return 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,
107""):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]&&
108this[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]||
109u.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===
1101?(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]);
111return 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)||["",
112""])[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=
113c.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]?
114c.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=
115function(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=
116Na.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,
117"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=
118a.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=
119a.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!==
120"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},
121serialize: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(" "),
122function(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,
123global: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&&
124e.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)?
125"&":"?")+(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===
126false&&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=
127false;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",
128c.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||
129d();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);
130g("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===
1311223||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===
132"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;
133if(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");
134this[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],
135"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)},
136animate: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=
137j.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([]);
138this.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===
139"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]||
140c.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;
141this.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=
142this.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,
143e,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||
144c.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?
145function(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=
146this[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;
147k-=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&&
148f.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>";
149a.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);
150c.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,
151d,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-
152f.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":
153"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
154e&&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);
1550
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css'
--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css 2012-03-26 17:43:02 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css 1970-01-01 00:00:00 +0000
@@ -1,271 +0,0 @@
1@charset "utf-8";
2/**
3 * Support ribbon
4 */
5#support-ribbon.vertical
6{
7 position: fixed;
8 right:-3px;
9 top:145px;
10 color: #ffffff;
11 width: 153px;
12 height: 130px;
13 z-index: 1;
14}
15#support-ribbon.vertical #support-suboptions {
16 display: block;
17 position:relative;
18 right:0px;
19 top: 0px;
20 width:155px;
21 border-bottom: 0;
22 z-index: -10;
23
24}
25#support-ribbon.vertical #support-suboptions a {
26 margin-bottom:5px;
27 display: block;
28 opacity: 0.9;
29 text-align: center;
30 color: #fff;
31 height: 33px;
32 line-height:33px;
33}
34#support-suboptions a:hover {
35 opacity: 1;
36}
37#support-suboptions a span { display:none;}
38/**
39horizontal ribbon
40*/
41#support-ribbon.horizontal
42{
43 position: fixed;
44 bottom:0;
45 left:0;
46 color: #ffffff;
47 height: 38px;
48 z-index: 1;
49}
50 #support-ribbon.horizontal #support-suboptions {
51
52 position:relative;
53 top: 0px;
54 border-bottom: 0;
55 z-index: -10;
56 margin:auto;
57}
58#support-ribbon.horizontal #support-suboptions li {
59 float: left;
60 list-style-type: none;
61}
62#support-ribbon.horizontal #support-suboptions li a {
63 margin-bottom:5px;
64 display: block;
65 opacity: 0.9;
66 text-align: center;
67 color: #fff;
68 height: 38px;
69 line-height:38px;
70 width: 145px;
71 margin-right:5px;
72}
73
74html{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;}
75
76
77
78/***
79 * side style buttons
80*/
81.a-btn-container {
82 overflow:hidden;
83 border-radius:4px;
84}
85.a-btn, .a-btn-green, .a-btn-red{
86
87 width: 245px;
88 background:#f2aa2e;
89 background:-webkit-gradient(linear,left top,left bottom,color-stop(##f2aa2e,0),color-stop(##c7401e,1));
90 background:-webkit-linear-gradient(top, #f2aa2e 0%, #c7401e 100%);
91 background:-moz-linear-gradient(top, #f2aa2e 0%, #c7401e 100%);
92 background:-o-linear-gradient(top, #f2aa2e 0%, #c7401e 100%);
93 background:linear-gradient(top, #f2aa2e 0%, #c7401e 100%);
94 filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#f2aa2e', endColorstr='#c7401e',GradientType=0 );
95 border:1px solid #f5b74e;
96 border-color:#f5b74e #e5a73e #d6982f;
97 -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395;
98 -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395;
99 box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395;
100 padding:0px;
101 height:65px;
102 display:inline-block;
103 position:relative;
104 -webkit-border-radius:4px;
105 -moz-border-radius:4px;
106 border-radius:4px;
107 float:left;
108 overflow:hidden;
109 -webkit-transition:all 0.3s linear;
110 -moz-transition:all 0.3s linear;
111 -o-transition:all 0.3s linear;
112 transition:all 0.3s linear;
113 text-decoration: none !important;
114}
115.a-btn-green{
116 background:#a1de78;
117 background:-webkit-gradient(linear,left top,left bottom,color-stop(##a1de78,0),color-stop(##a1de78,1));
118 background:-webkit-linear-gradient(top, #00e05a 0%, #006127 100%);
119 background:-moz-linear-gradient(center top , #00e05a 0%, #006127 130%);
120 background:-o-linear-gradient(top, #00e05a 0%, #006127 100%);
121 background:linear-gradient(top, #00e05a 0%, #006127 100%);
122 filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#00e05a', endColorstr='#444444',GradientType=0 );
123 border:1px solid #f5b74e;
124 border-color:#00ba4b #009A00 #007A31;
125 -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F;
126 -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F;
127 box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F;
128}
129
130.a-btn-red{
131 background:#e31300;
132 background:-webkit-gradient(linear,left top,left bottom,color-stop(##e31300,0),color-stop(##6b0900,1));
133 background:-webkit-linear-gradient(top, #e31300 0%, #6b0900 100%);
134 background:-moz-linear-gradient(center top , #e31300 0%, #6b0900 130%);
135 background:-o-linear-gradient(top, #e31300 0%, #6b0900 100%);
136 background:linear-gradient(top, #e31300 0%, #6b0900 100%);
137 filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#e31300', endColorstr='#444444',GradientType=0 );
138 border:1px solid #ff2d19;
139 border-color:#e85345 #b00f00 #63241e;
140 -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c;
141 -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c;
142 box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c;
143}
144
145
146.a-btn-text{
147 padding-left:15px;
148 padding-top:10px;
149 display:block;
150 font-size:18px;
151 white-space:nowrap;
152 color: #f5f1ea;
153 text-shadow:0 1px 0 #000;
154 -webkit-transition:all 0.3s linear;
155 -moz-transition:all 0.3s linear;
156 -o-transition:all 0.3s linear;
157 transition:all 0.3s linear;
158
159}
160.a-btn-green .a-btn-text {
161 color: #fff;
162}
163
164.a-btn-slide-text, .a-btn-fixed-slide-text {
165 position:absolute;
166 top:35px;
167 left:0px;
168 width:auto;
169 right:52px;
170 height:0px;
171 background:#fff;
172 color:#996633;
173 font-size:13px;
174 white-space:nowrap;
175 font-family:Georgia, serif;
176 font-style:italic;
177 text-indent:15px;
178 overflow:hidden;
179 line-height:30px;
180 -webkit-box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset;
181 -moz-box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset;
182 box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset;
183 -webkit-transition:height 0.3s linear;
184 -moz-transition:height 0.3s linear;
185 -o-transition:height 0.3s linear;
186 transition:height 0.3s linear;
187}
188.a-btn-fixed-slide-text{
189 height: 30px;
190}
191
192.a-btn-icon-right{
193 position:absolute;
194
195 right:0px;
196 top:0px;
197 height:100%;
198 width:52px;
199 border-left:1px solid #f5b74e;
200 -webkit-box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset;
201 -moz-box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset;
202 box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset;
203}
204.a-btn-red .a-btn-icon-right {
205 border-left: 1px solid #fa430c;
206}
207.a-btn-icon-right span{
208 width:38px;
209 height:38px;
210
211 position:absolute;
212 left:50%;
213 top:50%;
214 margin:-20px 0px 0px -20px;
215 background:transparent url(/static/images/software-download-white-brdr.png) no-repeat 50% 55%;
216 -webkit-transition:all 0.3s linear;
217 -moz-transition:all 0.3s linear;
218 -o-transition:all 0.3s linear;
219 transition:all 0.3s linear;
220
221}
222.a-btn-green .a-btn-icon-right span {
223 background:transparent url(/static/images/software-download-white-brdr-green3.png) no-repeat 50% 55%;
224}
225.a-btn-red .a-btn-icon-right span {
226
227 background:transparent url(/static/images/software-download-white-brdr-red.png) no-repeat 50% 55%;
228}
229.a-btn:hover{
230 height:65px;
231 -webkit-box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4);
232 -moz-box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4);
233 box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4);
234}
235.a-btn:hover .a-btn-text{
236
237 text-shadow:0 1px 0 #000;
238 color:#fff;
239}
240.a-btn:hover .a-btn-slide-text:hover{
241 height:30px;
242}
243.a-btn:hover .a-btn-icon-right span{
244 opacity:1;
245 /**
246 -webkit-transform:rotate(-45deg);
247 -moz-transform:rotate(-45deg);
248 -ms-transform:rotate(-45deg);
249 -o-transform:rotate(-45deg);
250 transform:rotate(-45deg);
251 */
252}
253.a-btn:active{
254 position:relative;
255 top:1px;
256 background:#fec354;
257 background:-webkit-gradient(linear,left top,left bottom,color-stop(#fec354,0),color-stop(#fecd61,1));
258 background:-webkit-linear-gradient(top, #fec354 0%, #fecd61 100%);
259 background:-moz-linear-gradient(top, #fec354 0%, #fecd61 100%);
260 background:-o-linear-gradient(top, #fec354 0%, #fecd61 100%);
261 background:linear-gradient(top, #fec354 0%, #fecd61 100%);
262 filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fec354', endColorstr='#fecd61',GradientType=0 );
263 border-color:#d29a3a #cc9436 #c89133;
264 text-shadow:0 1px 0 #fee1a0;
265 -webkit-box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e;
266 -moz-box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e;
267 box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e;
268}
269.body .section blockquote {
270 margin-left: 25px;
271}
2720
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js'
--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js 2012-03-26 17:43:02 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js 1970-01-01 00:00:00 +0000
@@ -1,269 +0,0 @@
1window.jQuery(function($) {
2
3
4
5function setCookie(c_name, value, expiredays)
6{
7 var exdate = new Date();
8 exdate.setDate(exdate.getDate() + expiredays);
9 document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";path=/;expires=" + exdate.toUTCString());
10}
11
12function getCookie(c_name)
13{
14 if (document.cookie.length > 0)
15 {
16 c_start = document.cookie.indexOf(c_name + "=");
17 if (c_start != -1)
18 {
19 c_start = c_start + c_name.length+1;
20 c_end = document.cookie.indexOf(";",c_start);
21 if (c_end == -1)
22 {
23 c_end = document.cookie.length;
24 }
25 return unescape(document.cookie.substring(c_start, c_end));
26 }
27 }
28 return "";
29}
30
31
32NAVI = new Object();
33
34NAVI.CloseTimer = null;
35
36NAVI.Open = function ( menu_tag, dir )
37{
38 NAVI_CancelTimer();
39 NAVI_Close();
40 SEARCH_CancelTimer();
41 SEARCH_Close();
42 if ('h' == dir)
43 {
44 return;
45 }
46 var pos = $("#navilink-span-"+menu_tag).offset();
47 if (dir=='r')
48 {
49 $("#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" } );
50 }
51 else
52 {
53 $("#navi-dropdown-"+menu_tag).css( { "position": "absolute", "left": (pos.left) + "px", "top": (pos.top + 32) + "px" } );
54 }
55 $("#navi-dropdown-"+menu_tag).show();
56 $("#navilink-span-"+menu_tag).bind('mouseover',NAVI_CancelTimer);
57 $("#navilink-span-"+menu_tag).bind('mouseout',NAVI_Timer);
58 $("#navi-dropdown-"+menu_tag).bind('mouseover',NAVI_CancelTimer);
59 $("#navi-dropdown-"+menu_tag).bind('mouseout',NAVI_Timer);
60};
61
62function NAVI_Close()
63{
64 $(".navi-dropdown").hide();
65 $("#menu div").unbind('mouseover');
66 $(".dropdown").unbind('mouseover');
67 $(".dropdown").unbind('mouseout');
68
69 $("#search-dropdown").hide();
70 $("#searchlink-anchor").unbind('mouseover');
71 $("#searchlink-anchor").unbind('mouseout');
72 $("#search-dropdown").unbind('mouseover');
73 $("#search-dropdown").unbind('mouseout');
74}
75
76function NAVI_CancelTimer()
77{
78 if (NAVI.CloseTimer!=null)
79 {
80 window.clearTimeout(NAVI.CloseTimer);
81 NAVI.CloseTimer = null;
82 }
83}
84
85function NAVI_Timer()
86{
87 if (NAVI.CloseTimer==null)
88 {
89 NAVI.CloseTimer = window.setTimeout(NAVI_Close, 300);
90 }
91}
92
93
94SUBNAVI = new Object();
95
96SUBNAVI.Open = function ( menu_tag )
97{
98 if ($("#sidesubnavi-" + menu_tag + ':hidden').length)
99 {
100 $(".sidesubnavi").hide();
101 $("#sidesubnavi-"+menu_tag).show();
102 return false;
103 } else {
104 return true;
105 }
106};
107
108
109SEARCH = new Object();
110
111SEARCH.CloseTimer = null;
112
113SEARCH.Open = function()
114{
115 NAVI_CancelTimer();
116 NAVI_Close();
117 SEARCH_CancelTimer();
118 SEARCH_Close();
119 var pos = $("#searchlink-anchor").offset();
120 $("#search-dropdown").css( { "position": "absolute", "left": (pos.left - ($("#search-dropdown").width()) + 40) + "px", "top": (pos.top + 36) + "px" } );
121 $("#search-dropdown").show();
122 $("#searchlink-anchor").bind('mouseover',NAVI_CancelTimer);
123 $("#searchlink-anchor").bind('mouseout',NAVI_Timer);
124 $("#search-dropdown").bind('mouseover',NAVI_CancelTimer);
125 $("#search-dropdown").bind('mouseout',NAVI_Timer);
126 $("#search-input")[0].focus();
127};
128
129function SEARCH_Close()
130{
131 $(".navi-dropdown").hide();
132 $("#menu div").unbind('mouseover');
133 $(".dropdown").unbind('mouseover');
134 $(".dropdown").unbind('mouseout');
135
136 $("#search-dropdown").hide();
137 $("#searchlink-anchor").unbind('mouseover');
138 $("#searchlink-anchor").unbind('mouseout');
139 $("#search-dropdown").unbind('mouseover');
140 $("#search-dropdown").unbind('mouseout');
141}
142
143
144function SEARCH_CancelTimer()
145{
146 if (SEARCH.CloseTimer!=null)
147 {
148 window.clearTimeout(SEARCH.CloseTimer);
149 SEARCH.CloseTimer = null;
150 }
151}
152
153function SEARCH_Timer()
154{
155 if (SEARCH.CloseTimer==null)
156 {
157 SEARCH.CloseTimer = window.setTimeout(SEARCH_Close, 300);
158 }
159}
160
161menuImg1 = new Image(); menuImg1.src = 'http://s1.percona.com/ui-dropdown-header-l.png';
162menuImg2 = new Image(); menuImg2.src = 'http://s2.percona.com/ui-dropdown-header-r.png';
163menuImg3 = new Image(); menuImg3.src = 'http://s3.percona.com/ui-dropdown-header-search.png';
164menuImg4 = new Image(); menuImg4.src = 'http://s0.percona.com/ui-dropdown-bg.png';
165menuImg5 = new Image(); menuImg5.src = 'http://s1.percona.com/ui-dropdown-footer.png';
166
167
168});
169
170
171var Percona = {
172 ssl: false,
173 host: 'www.percona.com'
174};
175/**
176 * @param string selector jQuery selector string
177 */
178Percona.getRecentServerVersion = function(selector)
179{
180 if ('string' != typeof(selector))
181 {
182 alert('Percona.getRecentServerVersion: missed or wrong selector!');
183 }
184 /* Localize jQuery variable */
185 var jQuery;
186 /******** Load jQuery if not present *********/
187 if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.4.2')
188 {
189 var script_tag = document.createElement('script');
190 script_tag.setAttribute("type","text/javascript");
191 script_tag.setAttribute('src', 'http' + (Percona.ssl ? 's' : '') + ':/' + '/ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');
192 script_tag.onload = scriptLoadHandler;
193 script_tag.onreadystatechange = function () /* Same thing but for IE */
194 {
195 if (this.readyState == 'complete' || this.readyState == 'loaded')
196 {
197 scriptLoadHandler();
198 }
199 };
200 /* Try to find the head, otherwise default to the documentElement */
201 (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
202 } else {
203 /* The jQuery version on the window is the one we want to use */
204 jQuery = window.jQuery;
205 main();
206 }
207 var scriptLoadHandler_counter = 0;
208 /******** Called once jQuery has loaded ******/
209 function scriptLoadHandler()
210 {
211 if (++scriptLoadHandler_counter > 1)
212 {
213 return;
214 }
215 /* Restore $ and window.jQuery to their previous values and store the
216 new jQuery in our local jQuery variable */
217 jQuery = window.jQuery.noConflict(true);
218 /* Call our main function */
219 main(jQuery);
220 }
221 /******** Our main function ********/
222 function main($)
223 {
224 var fillRecentServerVersion = function($)
225 {
226 if ($(selector).get(0))
227 {
228 $.get('http' + (Percona.ssl ? 's' : '') + ':/' + '/' + Percona.host + '/ajax/server-version/?callback=?', {}, function(json)
229 {
230 if ('object' == typeof(json) && 'string' == typeof(json.recentServerVersion))
231 {
232 $(selector).text(' ' + json.recentServerVersion);
233 }
234 }, 'jsonp');
235 }
236 };
237 $(document).ready(function()
238 {
239 fillRecentServerVersion(jQuery);
240 });
241 }
242};
243
244$(document).ready(function(){
245 $(window).bind("resize", resizeWindow);
246 resizeWindow();
247 function resizeWindow() {
248 var win_w = $(window).width();
249 var ribon = $("#support-ribbon");
250 if(win_w < 1265){
251 if(/mobile/i.test(navigator.userAgent)){
252 ribon.hide();
253 }else{
254 if(ribon.hasClass("vertical")){
255 ribon.removeClass("vertical");
256 ribon.addClass("horizontal");
257 }
258 ribon.css({"left":'50%', "margin-left": '-'+(ribon.width() / 2)+'px'});
259 }
260 }else{
261 if(ribon.hasClass("horizontal")){
262 ribon.addClass("vertical");
263 ribon.removeClass("horizontal");
264 ribon.removeAttr("style");
265 }
266
267 }
268 }
269});
270\ No newline at end of file0\ No newline at end of file
2711
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone-small.png'
272Binary 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 differ2Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone.png'
273Binary 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 differ3Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/shield.png'
274Binary 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 differ4Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js'
--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js 2011-10-25 10:51:19 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js 1970-01-01 00:00:00 +0000
@@ -1,151 +0,0 @@
1/*
2 * sidebar.js
3 * ~~~~~~~~~~
4 *
5 * This script makes the Sphinx sidebar collapsible.
6 *
7 * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds
8 * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton
9 * used to collapse and expand the sidebar.
10 *
11 * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden
12 * and the width of the sidebar and the margin-left of the document
13 * are decreased. When the sidebar is expanded the opposite happens.
14 * This script saves a per-browser/per-session cookie used to
15 * remember the position of the sidebar among the pages.
16 * Once the browser is closed the cookie is deleted and the position
17 * reset to the default (expanded).
18 *
19 * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
20 * :license: BSD, see LICENSE for details.
21 *
22 */
23
24$(function() {
25 // global elements used by the functions.
26 // the 'sidebarbutton' element is defined as global after its
27 // creation, in the add_sidebar_button function
28 var bodywrapper = $('.bodywrapper');
29 var sidebar = $('.sphinxsidebar');
30 var sidebarwrapper = $('.sphinxsidebarwrapper');
31
32 // for some reason, the document has no sidebar; do not run into errors
33 if (!sidebar.length) return;
34
35 // original margin-left of the bodywrapper and width of the sidebar
36 // with the sidebar expanded
37 var bw_margin_expanded = bodywrapper.css('margin-left');
38 var ssb_width_expanded = sidebar.width();
39
40 // margin-left of the bodywrapper and width of the sidebar
41 // with the sidebar collapsed
42 var bw_margin_collapsed = '.8em';
43 var ssb_width_collapsed = '.8em';
44
45 // colors used by the current theme
46 var dark_color = $('.related').css('background-color');
47 var light_color = $('.document').css('background-color');
48
49 function sidebar_is_collapsed() {
50 return sidebarwrapper.is(':not(:visible)');
51 }
52
53 function toggle_sidebar() {
54 if (sidebar_is_collapsed())
55 expand_sidebar();
56 else
57 collapse_sidebar();
58 }
59
60 function collapse_sidebar() {
61 sidebarwrapper.hide();
62 sidebar.css('width', ssb_width_collapsed);
63 bodywrapper.css('margin-left', bw_margin_collapsed);
64 sidebarbutton.css({
65 'margin-left': '0',
66 'height': bodywrapper.height()
67 });
68 sidebarbutton.find('span').text('»');
69 sidebarbutton.attr('title', _('Expand sidebar'));
70 document.cookie = 'sidebar=collapsed';
71 }
72
73 function expand_sidebar() {
74 bodywrapper.css('margin-left', bw_margin_expanded);
75 sidebar.css('width', ssb_width_expanded);
76 sidebarwrapper.show();
77 sidebarbutton.css({
78 'margin-left': ssb_width_expanded-12,
79 'height': bodywrapper.height()
80 });
81 sidebarbutton.find('span').text('«');
82 sidebarbutton.attr('title', _('Collapse sidebar'));
83 document.cookie = 'sidebar=expanded';
84 }
85
86 function add_sidebar_button() {
87 sidebarwrapper.css({
88 'float': 'left',
89 'margin-right': '0',
90 'width': ssb_width_expanded - 28
91 });
92 // create the button
93 sidebar.append(
94 '<div id="sidebarbutton"><span>&laquo;</span></div>'
95 );
96 var sidebarbutton = $('#sidebarbutton');
97 light_color = sidebarbutton.css('background-color');
98 // find the height of the viewport to center the '<<' in the page
99 var viewport_height;
100 if (window.innerHeight)
101 viewport_height = window.innerHeight;
102 else
103 viewport_height = $(window).height();
104 sidebarbutton.find('span').css({
105 'display': 'block',
106 'margin-top': (viewport_height - sidebar.position().top - 20) / 2
107 });
108
109 sidebarbutton.click(toggle_sidebar);
110 sidebarbutton.attr('title', _('Collapse sidebar'));
111 sidebarbutton.css({
112 'color': '#FFFFFF',
113 'border-left': '1px solid ' + dark_color,
114 'font-size': '1.2em',
115 'cursor': 'pointer',
116 'height': bodywrapper.height(),
117 'padding-top': '1px',
118 'margin-left': ssb_width_expanded - 12
119 });
120
121 sidebarbutton.hover(
122 function () {
123 $(this).css('background-color', dark_color);
124 },
125 function () {
126 $(this).css('background-color', light_color);
127 }
128 );
129 }
130
131 function set_position_from_cookie() {
132 if (!document.cookie)
133 return;
134 var items = document.cookie.split(';');
135 for(var k=0; k<items.length; k++) {
136 var key_val = items[k].split('=');
137 var key = key_val[0];
138 if (key == 'sidebar') {
139 var value = key_val[1];
140 if ((value == 'collapsed') && (!sidebar_is_collapsed()))
141 collapse_sidebar();
142 else if ((value == 'expanded') && (sidebar_is_collapsed()))
143 expand_sidebar();
144 }
145 }
146 }
147
148 add_sidebar_button();
149 var sidebarbutton = $('#sidebarbutton');
150 set_position_from_cookie();
151});
1520
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-download.png'
153Binary 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 differ1Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-latest.png'
154Binary 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 differ2Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/support-small.png'
155Binary 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 differ3Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-bg.png'
156Binary 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 differ4Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-footer.png'
157Binary 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 differ5Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-l.png'
158Binary 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 differ6Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-r.png'
159Binary 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 differ7Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-search.png'
160Binary 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 differ8Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-footer-logo.png'
161Binary 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 differ9Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-leftnavi-sel.png'
162Binary 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 differ10Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-logo.png'
163Binary 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 differ11Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-l.png'
164Binary 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 differ12Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-r.png'
165Binary 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 differ13Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-l.png'
166Binary 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 differ14Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-r.png'
167Binary 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 differ15Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-l.png'
168Binary 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 differ16Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-r.png'
169Binary 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 differ17Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-content.png'
170Binary 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 differ18Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-front.png'
171Binary 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 differ19Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-search.png'
172Binary 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 differ20Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-tab-bg.png'
173Binary 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 differ21Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/warning.png'
174Binary 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 differ22Binary 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
=== removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf'
--- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf 2011-10-25 10:51:19 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf 1970-01-01 00:00:00 +0000
@@ -1,32 +0,0 @@
1[theme]
2inherit = default
3stylesheet = default.css
4pygments_style = sphinx
5
6[options]
7rightsidebar = false
8stickysidebar = false
9collapsiblesidebar = false
10externalrefs = false
11
12footerbgcolor = #11303d
13footertextcolor = #ffffff
14sidebarbgcolor = #1c4e63
15sidebarbtncolor = #3c6e83
16sidebartextcolor = #ffffff
17sidebarlinkcolor = #98dbcc
18relbarbgcolor = #133f52
19relbartextcolor = #ffffff
20relbarlinkcolor = #ffffff
21bgcolor = #ffffff
22textcolor = #000000
23headbgcolor = #f2f2f2
24headtextcolor = #20435c
25headlinkcolor = #c60f0f
26linkcolor = #355f7c
27visitedlinkcolor = #355f7c
28codebgcolor = #eeffcc
29codetextcolor = #333333
30
31bodyfont = sans-serif
32headfont = 'Arial', 'Helvetica' sans-serif
330
=== modified file 'Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h'
--- Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h 2012-02-13 06:19:11 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h 2012-06-27 07:03:19 +0000
@@ -31,7 +31,11 @@
3131
32#include <security/pam_appl.h>32#include <security/pam_appl.h>
33#include <security/pam_modules.h>33#include <security/pam_modules.h>
34#if HAVE_SECURITY_PAM_MISC_H
34#include <security/pam_misc.h>35#include <security/pam_misc.h>
36#elif HAVE_SECURITY_OPENPAM_H
37#include <security/openpam.h>
38#endif
3539
36#include <mysql/plugin.h>40#include <mysql/plugin.h>
37#include <mysql/plugin_auth.h>41#include <mysql/plugin_auth.h>
3842
=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test'
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/bootstrap.sh'
--- Percona-Server/plugin/percona-pam-for-mysql/test/bootstrap.sh 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/bootstrap.sh 2012-06-27 07:03:19 +0000
@@ -0,0 +1,122 @@
1#!/bin/bash
2
3set -e
4
5function usage()
6{
7 cat <<EOF
8Usage:
9$0 xtrabackup_target [installation_directory]
10$0 path_to_server_tarball [installation_directory]
11
12Prepares a server binary directory to be used by run.sh when running XtraBackup
13tests.
14
15If the argument is one of the build targets passed to build.sh
16(i.e. innodb51_builtin innodb51 innodb55 xtradb51 xtradb55) then the
17appropriate Linux tarball is downloaded from a pre-defined location and
18unpacked into the specified installation directory ('./server' by default).
19
20Otherwise the argument is assumed to be a path to a server binary tarball.
21EOF
22}
23
24if [ -z "$1" ]
25then
26 usage
27fi
28
29arch="`uname -m`"
30if [ "$arch" = "i386" ]
31then
32 arch="i686"
33fi
34
35case "$1" in
36 innodb51_builtin | innodb51)
37 url="http://s3.amazonaws.com/percona.com/downloads/community"
38 tarball="mysql-5.1.49-linux-$arch-glibc23.tar.gz"
39 ;;
40 innodb55)
41 url="http://s3.amazonaws.com/percona.com/downloads/community"
42 tarball="mysql-5.5.16-linux2.6-$arch.tar.gz"
43 ;;
44 xtradb51)
45 url="http://www.percona.com/redir/downloads/Percona-Server-5.1/Percona-Server-5.1.60-13.1/binary/linux/$arch"
46 tarball="Percona-Server-5.1.60-rel13.1-413.Linux.$arch.tar.gz"
47 ;;
48 xtradb55)
49 url="http://s3.amazonaws.com/percona.com/downloads/Percona-Server-5.5/Percona-Server-5.5.11-20.2/Linux/binary"
50 tarball="Percona-Server-5.5.11-rel20.2-116.Linux.$arch.tar.gz"
51 ;;
52 galera55)
53 galera=1
54 ;;
55 *)
56 if ! test -r "$1"
57 then
58 echo "$1 does not exist"
59 exit 1
60 fi
61 tarball="$1"
62 ;;
63esac
64
65if test -n "$2"
66then
67 destdir="$2"
68else
69 destdir="./server"
70fi
71
72if test -d "$destdir"
73then
74 rm -rf "$destdir"
75fi
76mkdir "$destdir"
77
78if test ! $galera
79then
80 if test -n "$url"
81 then
82 echo "Downloading $tarball"
83 wget -qc "$url/$tarball"
84 fi
85
86 echo "Unpacking $tarball into $destdir"
87 tar zxf $tarball -C $destdir
88 sourcedir="$destdir/`ls $destdir`"
89 if test -n "$sourcedir"
90 then
91 mv $sourcedir/* $destdir
92 rm -rf $sourcedir
93 fi
94else
95 if test ! -d galerabuild
96 then
97 bzr init-repo galerabuild
98 fi
99 cd galerabuild
100
101 rm -rf percona-xtradb-cluster
102 bzr branch lp:percona-xtradb-cluster percona-xtradb-cluster
103 rm -rf galera2x
104 bzr branch lp:galera/2.x galera2x
105 cd percona-xtradb-cluster
106 cmake -DENABLE_DTRACE=0 -DWITH_WSREP:BOOL="1" -DCMAKE_INSTALL_PREFIX="../../server"
107
108 if test -f /proc/cpuinfo
109 then
110 MAKE_J=`grep '^processor' /proc/cpuinfo | wc -l`
111 else
112 MAKE_J=4
113 fi
114
115 make -j$MAKE_J
116 make install
117
118 cd ../galera2x
119 ./scripts/build.sh
120 cp libgalera_smm.so ../../server/
121 cd ..
122fi
0123
=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp'
=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs'
=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/_build'
=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/_static'
=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/_templates'
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/conf.py'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/conf.py 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/conf.py 2012-06-27 07:03:19 +0000
@@ -0,0 +1,216 @@
1# -*- coding: utf-8 -*-
2#
3# kewpie documentation build configuration file, created by
4# sphinx-quickstart on Mon Dec 5 12:35:13 2011.
5#
6# This file is execfile()d with the current directory set to its containing dir.
7#
8# Note that not all possible configuration values are present in this
9# autogenerated file.
10#
11# All configuration values have a default; values that are commented out
12# serve to show the default.
13
14import sys, os
15
16# If extensions (or modules to document with autodoc) are in another directory,
17# add these directories to sys.path here. If the directory is relative to the
18# documentation root, use os.path.abspath to make it absolute, like shown here.
19#sys.path.insert(0, os.path.abspath('.'))
20
21# -- General configuration -----------------------------------------------------
22
23# If your documentation needs a minimal Sphinx version, state it here.
24#needs_sphinx = '1.0'
25
26# Add any Sphinx extension module names here, as strings. They can be extensions
27# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
28extensions = ['sphinx.ext.autodoc']
29
30# Add any paths that contain templates here, relative to this directory.
31templates_path = ['_templates']
32
33# The suffix of source filenames.
34source_suffix = '.rst'
35
36# The encoding of source files.
37#source_encoding = 'utf-8-sig'
38
39# The master toctree document.
40master_doc = 'index'
41
42# General information about the project.
43project = u'kewpie'
44copyright = u'2011, pcrews'
45
46# The version info for the project you're documenting, acts as replacement for
47# |version| and |release|, also used in various other places throughout the
48# built documents.
49#
50# The short X.Y version.
51version = '1.2.1'
52# The full version, including alpha/beta/rc tags.
53release = '1.2.1'
54
55# The language for content autogenerated by Sphinx. Refer to documentation
56# for a list of supported languages.
57#language = None
58
59# There are two options for replacing |today|: either, you set today to some
60# non-false value, then it is used:
61#today = ''
62# Else, today_fmt is used as the format for a strftime call.
63#today_fmt = '%B %d, %Y'
64
65# List of patterns, relative to source directory, that match files and
66# directories to ignore when looking for source files.
67exclude_patterns = ['_build']
68
69# The reST default role (used for this markup: `text`) to use for all documents.
70#default_role = None
71
72# If true, '()' will be appended to :func: etc. cross-reference text.
73#add_function_parentheses = True
74
75# If true, the current module name will be prepended to all description
76# unit titles (such as .. function::).
77#add_module_names = True
78
79# If true, sectionauthor and moduleauthor directives will be shown in the
80# output. They are ignored by default.
81#show_authors = False
82
83# The name of the Pygments (syntax highlighting) style to use.
84pygments_style = 'sphinx'
85
86# A list of ignored prefixes for module index sorting.
87#modindex_common_prefix = []
88
89
90# -- Options for HTML output ---------------------------------------------------
91
92# The theme to use for HTML and HTML Help pages. See the documentation for
93# a list of builtin themes.
94html_theme = 'default'
95
96# Theme options are theme-specific and customize the look and feel of a theme
97# further. For a list of options available for each theme, see the
98# documentation.
99#html_theme_options = {}
100
101# Add any paths that contain custom themes here, relative to this directory.
102#html_theme_path = []
103
104# The name for this set of Sphinx documents. If None, it defaults to
105# "<project> v<release> documentation".
106#html_title = None
107
108# A shorter title for the navigation bar. Default is the same as html_title.
109#html_short_title = None
110
111# The name of an image file (relative to this directory) to place at the top
112# of the sidebar.
113#html_logo = None
114
115# The name of an image file (within the static path) to use as favicon of the
116# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
117# pixels large.
118#html_favicon = None
119
120# Add any paths that contain custom static files (such as style sheets) here,
121# relative to this directory. They are copied after the builtin static files,
122# so a file named "default.css" will overwrite the builtin "default.css".
123html_static_path = ['_static']
124
125# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
126# using the given strftime format.
127#html_last_updated_fmt = '%b %d, %Y'
128
129# If true, SmartyPants will be used to convert quotes and dashes to
130# typographically correct entities.
131#html_use_smartypants = True
132
133# Custom sidebar templates, maps document names to template names.
134#html_sidebars = {}
135
136# Additional templates that should be rendered to pages, maps page names to
137# template names.
138#html_additional_pages = {}
139
140# If false, no module index is generated.
141#html_domain_indices = True
142
143# If false, no index is generated.
144#html_use_index = True
145
146# If true, the index is split into individual pages for each letter.
147#html_split_index = False
148
149# If true, links to the reST sources are added to the pages.
150#html_show_sourcelink = True
151
152# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
153#html_show_sphinx = True
154
155# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
156#html_show_copyright = True
157
158# If true, an OpenSearch description file will be output, and all pages will
159# contain a <link> tag referring to it. The value of this option must be the
160# base URL from which the finished HTML is served.
161#html_use_opensearch = ''
162
163# This is the file name suffix for HTML files (e.g. ".xhtml").
164#html_file_suffix = None
165
166# Output file base name for HTML help builder.
167htmlhelp_basename = 'kewpiedoc'
168
169
170# -- Options for LaTeX output --------------------------------------------------
171
172# The paper size ('letter' or 'a4').
173#latex_paper_size = 'letter'
174
175# The font size ('10pt', '11pt' or '12pt').
176#latex_font_size = '10pt'
177
178# Grouping the document tree into LaTeX files. List of tuples
179# (source start file, target name, title, author, documentclass [howto/manual]).
180latex_documents = [
181 ('index', 'kewpie.tex', u'kewpie Documentation',
182 u'pcrews', 'manual'),
183]
184
185# The name of an image file (relative to this directory) to place at the top of
186# the title page.
187#latex_logo = None
188
189# For "manual" documents, if this is true, then toplevel headings are parts,
190# not chapters.
191#latex_use_parts = False
192
193# If true, show page references after internal links.
194#latex_show_pagerefs = False
195
196# If true, show URL addresses after external links.
197#latex_show_urls = False
198
199# Additional stuff for the LaTeX preamble.
200#latex_preamble = ''
201
202# Documents to append as an appendix to all manuals.
203#latex_appendices = []
204
205# If false, no module index is generated.
206#latex_domain_indices = True
207
208
209# -- Options for manual page output --------------------------------------------
210
211# One entry per manual page. List of tuples
212# (source start file, name, description, authors, manual section).
213man_pages = [
214 ('index', 'kewpie', u'kewpie Documentation',
215 [u'pcrews'], 1)
216]
0217
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/dbqp.rst'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/dbqp.rst 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/dbqp.rst 2012-06-27 07:03:19 +0000
@@ -0,0 +1,21 @@
1**********************************
2dbqp
3**********************************
4
5Synopsis
6========
7Database Quality Platform. Versatile, pluggable test runner for MySQL-based databases
8
9**./kewpie** [ *OPTIONS* ] [ TESTCASE ]
10
11Description
12===========
13
14:program:`kewpie.py` is intended to provide a standardized
15platform to facilitate testing MySQL databases. Currently a number of MySQL variants are supported and include:
16* Drizzle
17* MySQL
18* Percona Server
19* MySQL using Galera replication
20
21NOTE: dbqp has been renamed to kewpie and you should refer to this page for documentation: :doc:`kewpie`
022
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/index.rst'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/index.rst 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/index.rst 2012-06-27 07:03:19 +0000
@@ -0,0 +1,34 @@
1.. kewpie documentation master file, created by
2 sphinx-quickstart on Mon Dec 5 12:35:13 2011.
3 You can adapt this file completely to your liking, but it should at least
4 contain the root `toctree` directive.
5
6Welcome to kewpie's documentation!
7===================================
8
9kewpie ((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)
10
11Introduction:
12-------------
13.. toctree::
14 :maxdepth: 2
15
16Testing:
17--------
18.. toctree::
19 :maxdepth: 2
20
21 kewpie.rst
22 writing_tests.rst
23 randgen.rst
24 test-run.rst
25 sql-bench.rst
26 sysbench.rst
27 writing_tests.rst
28
29Indices and tables
30==================
31
32* :ref:`genindex`
33* :ref:`search`
34
035
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/kewpie.rst'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/kewpie.rst 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/kewpie.rst 2012-06-27 07:03:19 +0000
@@ -0,0 +1,498 @@
1**********************************
2kewpie
3**********************************
4
5Synopsis
6========
7Database Quality Platform. Versatile, pluggable test runner for MySQL-based databases
8
9**./kewpie** [ *OPTIONS* ] [ TESTCASE ]
10
11Description
12===========
13
14:program:`kewpie.py` is intended to provide a standardized
15platform to facilitate testing MySQL databases. Currently a number of MySQL variants are supported and include:
16* Drizzle
17* MySQL
18* Percona Server
19* MySQL using Galera replication
20
21Designed 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.
22
23Long experience with MySQL testing has shown that a number of tasks are common to all tests:
24* Allocation and management of test servers
25* Test collection and management
26* Reporting of test results
27
28Kewpie 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:
29* randgen tests
30* running sql-bench comprehensive tests
31* running sql-bench crashme
32* running sysbench
33* running drizzle-test-run test cases
34* more direct tests using python code and helper libraries
35
36Provided test suites
37=======================
38
39* MySQL / Percona Server / Galera tests:
40
41 * randgen_basic - basic randgen tests of the server (optimizer stress, etc)
42 * randgen_bugs - holder suite for failing tests
43 * crashme - sql-bench's crashme suite (may take some time to run)
44 * sqlbench - sql-bench comprehensive suite. (may take ~45 min. to execute)
45 * cluster_basic - small, atomic tests of replication functionality. Tests are written in such a way as to be portable across server types (!)
46 * cluster_bugs - holder suite for failing tests
47 * cluster_randgen - tests of replication functionality using the random query generator and relevant test loads
48 * xtrabackup_basic - tests of the Percona Xtrabackup tool
49 * xtrabackup_bugs - hoder suite for failing tests
50
51* Drizzle tests:
52
53 * randgen_basic - basic tests of the server (optimizer stress, etc)
54 * The following all use the same transaction tests, but validate different functionality:
55
56 * randgen_trxLog - tests the file-based replication log
57 * randgen_innoTrxLog - tests the innodb-table-based replication log
58 * randgen_slavePlugin - tests the functionality of the replication / slave plugin
59
60 * crashme - sql-bench's crashme suite (may take some time to run)
61 * sqlbench - sql-bench comprehensive suite. (may take ~45 min. to execute)
62
63
64Running tests
65=========================
66
67There are several different ways to run tests using :program:`kewpie.py`.
68
69It should be noted that unless :option:`--force` is used, the program will
70stop execution upon encountering the first failing test.
71:option:`--force` is recommended if you are running several tests - it will
72allow you to view all successes and failures in one run.
73
74Running individual tests
75------------------------
76If one only wants to run a few, specific tests, they may do so this way::
77
78 ./kewpie.py [OPTIONS] test1 [test2 ... testN]
79
80Running all tests within a suite
81--------------------------------
82Many of the tests supplied with Drizzle are organized into suites.
83
84The tests within drizzle/tests/t are considered the 'main' suite.
85Other suites are located in either drizzle/tests/suite or within the various
86directories in drizzle/plugin. Tests for a specific plugin should live in
87the plugin's directory - drizzle/plugin/example_plugin/tests
88
89To run the tests in a specific suite::
90
91 ./kewpie.py [OPTIONS] --suite=SUITENAME
92
93Running specific tests within a suite
94--------------------------------------
95To run a specific set of tests within a suite::
96
97 ./kewpie.py [OPTIONS] --suite=SUITENAME TEST1 [TEST2..TESTN]
98
99Calling tests using <suitename>.<testname> currently does not work.
100One must specify the test suite via the :option:`--suite` option.
101
102
103Running all available tests
104---------------------------
105Currently, the quickest way to execute all tests in all suites is
106to use 'make test-kewpie' from the drizzle root.
107
108Otherwise, one should simply name all suites::
109
110 ./kewpie.py [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN
111
112Interpreting test results
113=========================
114The output of the test runner is quite simple. Every test should pass.
115In the event of a test failure, please take the time to file a bug here:
116*https://bugs.launchpad.net/drizzle*
117
118During a run, the program will provide the user with:
119 * test name (suite + name)
120 * test status (pass/fail/skipped)
121 * time spent executing each test
122
123At the end of a run, the program will provide the user with a listing of:
124 * how many tests were run
125 * counts and percentages of total exectuted for all test statuses
126 * a listing of failing, skipped, or disabled tests
127 * total time spent executing the tests
128
129Example output::
130
131 <snip>
132 30 Jan 2011 16:26:31 : main.small_tmp_table [ pass ] 38
133 30 Jan 2011 16:26:31 : main.snowman [ pass ] 42
134 30 Jan 2011 16:26:31 : main.statement_boundaries [ pass ] 47
135 30 Jan 2011 16:26:31 : main.status [ pass ] 51
136 30 Jan 2011 16:26:31 : main.strict [ pass ] 138
137 30 Jan 2011 16:26:43 : main.subselect [ fail ] 12361
138 30 Jan 2011 16:26:43 : --- drizzle/tests/r/subselect.result 2011-01-30 16:23:54.975776148 -0500
139 30 Jan 2011 16:26:43 : +++ drizzle/tests/r/subselect.reject 2011-01-30 16:26:43.835519303 -0500
140 30 Jan 2011 16:26:43 : @@ -5,7 +5,7 @@
141 30 Jan 2011 16:26:43 : 2
142 30 Jan 2011 16:26:43 : explain extended select (select 2);
143 30 Jan 2011 16:26:43 : id select_type table type possible_keys key key_len ref rows filtered Extra
144 30 Jan 2011 16:26:43 : -9 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL No tables used
145 30 Jan 2011 16:26:43 : +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL No tables used
146 <snip>
147 30 Jan 2011 16:30:20 : ================================================================================
148 30 Jan 2011 16:30:20 INFO: Test execution complete in 314 seconds
149 30 Jan 2011 16:30:20 INFO: Summary report:
150 30 Jan 2011 16:30:20 INFO: Executed 552/552 test cases, 100.00 percent
151 30 Jan 2011 16:30:20 INFO: STATUS: FAIL, 1/552 test cases, 0.18 percent executed
152 30 Jan 2011 16:30:20 INFO: STATUS: PASS, 551/552 test cases, 99.82 percent executed
153 30 Jan 2011 16:30:20 INFO: FAIL tests: main.subselect
154 30 Jan 2011 16:30:20 INFO: Spent 308 / 314 seconds on: TEST(s)
155 30 Jan 2011 16:30:20 INFO: Test execution complete
156 30 Jan 2011 16:30:20 INFO: Stopping all running servers...
157
158
159Additional uses
160===============
161Starting a server for manual testing
162------------------------------------
163
164:program:`kewpie.py` allows a user to get a Drizzle server up and running
165quickly. This can be useful for fast ad-hoc testing.
166
167To do so call::
168
169 ./kewpie.py --start-and-exit [*OPTIONS*]
170
171This will start a Drizzle server that you can connect to and query
172
173Starting a server against a pre-populated DATADIR
174--------------------------------------------------
175
176Using :option:`--start-dirty` prevents :program:`kewpie.py` from attempting
177to initialize (clean) the datadir. This can be useful if you want to use
178an already-populated datadir for testing.
179
180NOTE: This feature is still being tested, use caution with your data!!!
181
182Cleanup mode
183-------------
184A cleanup mode is provided for user convenience. This simply shuts down
185any servers whose pid files are detected in the kewpie workdir. It is mainly
186intended as a quick cleanup for post-testing with :option:`--start-and-exit`::
187
188 ./kewpie.py --mode=cleanup
189
190 Setting --start-dirty=True for cleanup mode...
191 23 Feb 2011 11:35:59 INFO: Using Drizzle source tree:
192 23 Feb 2011 11:35:59 INFO: basedir: drizzle
193 23 Feb 2011 11:35:59 INFO: clientbindir: drizzle/client
194 23 Feb 2011 11:35:59 INFO: testdir: drizzle/tests
195 23 Feb 2011 11:35:59 INFO: server_version: 2011.02.2188
196 23 Feb 2011 11:35:59 INFO: server_compile_os: unknown-linux-gnu
197 23 Feb 2011 11:35:59 INFO: server_platform: x86_64
198 23 Feb 2011 11:35:59 INFO: server_comment: (Source distribution (kewpie_randgen))
199 23 Feb 2011 11:35:59 INFO: Using --start-dirty, not attempting to touch directories
200 23 Feb 2011 11:35:59 INFO: Using default-storage-engine: innodb
201 23 Feb 2011 11:35:59 INFO: Using testing mode: cleanup
202 23 Feb 2011 11:35:59 INFO: Killing pid 10484 from drizzle/tests/workdir/testbot0/server0/var/run/server0.pid
203 23 Feb 2011 11:35:59 INFO: Stopping all running servers...
204
205Program architecture
206====================
207
208:program:`kewpie.py`'s 'dtr' mode uses a simple diff-based mechanism for testing.
209This is the default mode and where the majority of Drizzle testing occurs.
210It will execute the statements contained in a test and compare the results
211to pre-recorded expected results. In the event of a test failure, you
212will be presented with a diff::
213
214 main.exp1 [ fail ]
215 --- drizzle/tests/r/exp1.result 2010-11-02 02:10:25.107013998 +0300
216 +++ drizzle/tests/r/exp1.reject 2010-11-02 02:10:32.017013999 +0300
217 @@ -5,4 +5,5 @@
218 a
219 1
220 2
221 +3
222 DROP TABLE t1;
223
224A test case consists of a .test and a .result file. The .test file includes
225the various statements to be executed for a test. The .result file lists
226the expected results for a given test file. These files live in tests/t
227and tests/r, respectively. This structure is the same for all test suites.
228
229kewpie.py options
230===================
231
232The :program:`kewpie.py` tool has several available options:
233
234./kewpie.py [ OPTIONS ] [ TESTCASE ]
235
236
237Options
238-------
239
240.. program:: kewpie.py
241
242.. option:: -h, --help
243
244 show this help message and exit
245
246Configuration controls - kewpie can read config files with certain options pre-set:
247---------------------------------------------------------------------------------------------------
248
249.. option:: --sys_config_file=SYSCONFIGFILEPATH
250
251 The file that specifies system configuration specs for
252 kewpie to execute tests (not yet implemented)
253
254Options for the test-runner itself
255----------------------------------
256
257.. program:: kewpie.py
258
259.. option:: --force
260
261 Set this to continue test execution beyond the first failed test
262
263.. option:: --start-and-exit
264
265 Spin up the server(s) for the first specified test then exit
266 (will leave servers running)
267
268.. option:: --verbose
269
270 Produces extensive output about test-runner state.
271 Distinct from --debug
272
273.. option:: --debug
274
275 Provide internal-level debugging output.
276 Distinct from --verbose
277
278.. option:: --mode=MODE
279
280 Testing mode.
281 Currently supporting dtr, sysbench, and native (unittest) modes. The goal is to remove this and have all tests operate via unittest"
282 [native]
283
284.. option:: --record
285
286 Record a testcase result
287 (if the testing mode supports it - MTR / DTR specific)
288 [False]
289
290.. option:: --fast
291
292 Don't try to cleanup from earlier runs
293 (currently just a placeholder) [False]
294
295
296Options for controlling which tests are executed
297------------------------------------------------
298
299.. program:: kewpie.py
300
301.. option:: --suite=SUITELIST
302
303 The name of the suite containing tests we want.
304 Can accept comma-separated list (with no spaces).
305 Additional --suite args are appended to existing list
306 [autosearch]
307
308.. option:: --suitepath=SUITEPATHS
309
310 The path containing the suite(s) you wish to execute.
311 Use on --suitepath for each suite you want to use.
312
313.. option:: --do-test=DOTEST
314
315 input can either be a prefix or a regex.
316 Will only execute tests that match the provided pattern
317
318.. option:: --skip-test=SKIPTEST
319
320 input can either be a prefix or a regex.
321 Will exclude tests that match the provided pattern
322
323.. option:: --reorder
324
325 sort the testcases so that they are executed optimally
326 for the given mode [False]
327
328.. option:: --repeat=REPEAT
329
330 Run each test case the specified number of times. For
331 a given sequence, the first test will be run n times,
332 then the second, etc [1]
333
334Options for defining the code that will be under test
335-----------------------------------------------------
336
337.. program:: kewpie.py
338
339.. option:: --basedir=BASEDIR
340
341 Pass this argument to signal to the test-runner
342 that this is an in-tree test (not required).
343 We automatically set a number of variables
344 relative to the argument (client-bindir,
345 serverdir, testdir) [../]
346
347.. option:: --serverdir=SERVERPATH
348
349 Path to the server executable. [auto-search]
350
351.. option:: --client-bindir=CLIENTBINDIR
352
353 Path to the directory containing client program
354 binaries for use in testing [auto-search]
355
356.. option:: --default-storage-engine=DEFAULTENGINE
357
358 Start drizzled using the specified engine [innodb]
359
360Options for defining the testing environment
361--------------------------------------------
362
363.. program:: kewpie.py
364
365.. option:: --testdir=TESTDIR
366
367 Path to the test dir, containing additional files for
368 test execution. [pwd]
369
370.. option:: --workdir=WORKDIR
371
372 Path to the directory test-run will use to store
373 generated files and directories.
374 [basedir/tests/kewpie_work]
375
376.. option:: --top-srcdir=TOPSRCDIR
377
378 build option [basedir_default]
379
380.. option:: --top-builddir=TOPBUILDDIR
381
382 build option [basedir_default]
383
384.. option:: --no-shm
385
386 By default, we symlink workdir to a location in shm.
387 Use this flag to not symlink [False]
388
389.. option:: --libeatmydata
390
391 We use libeatmydata (if available) to disable fsyncs
392 and speed up test execution. Implies --no-shm
393
394.. option:: --libeatmydata-path=LIBEATMYDATAPATH
395
396 Path to the libeatmydata install you want to use
397 [/usr/local/lib/libeatmydata.so]
398
399.. option:: --start-dirty
400
401 Don't try to clean up working directories before test
402 execution [False]
403
404.. option:: --no-secure-file-priv
405
406 Turn off the use of --secure-file-priv=vardir for
407 started servers
408
409.. option:: --randgen-path=RANDGENPATH
410
411 The path to a randgen installation that can be used to
412 execute randgen-based tests [kewpie/randgen]
413
414.. option:: --innobackupex-path=INNOBACKUPEXPATH
415
416 The path to the innobackupex script that facilitates
417 the use of Xtrabackup
418
419.. option:: --xtrabackup-path=XTRABACKUPPATH
420
421 The path the xtrabackup binary to be tested
422
423.. option:: --tar4ibd-path=TAR4IBDPATH
424
425 The path to the tar4ibd binary that will be used for any applicable tests
426
427.. option:: --wsrep-provider-path=WSREPPROVIDER
428
429 The path to a wsrep provider library for use with
430 mysql
431
432.. option:: --subunit-outfile=SUBUNITOUTFILE
433
434 File path where subunit output will be logged
435 [/kewpie/workdir/test_results.subunit]
436
437Options to pass options on to the server
438-----------------------------------------
439
440.. program:: kewpie.py
441
442.. option:: --drizzled=DRIZZLEDOPTIONS
443
444 Pass additional options to the server. Will be passed
445 to all servers for all tests (mostly for --start-and-
446 exit)
447
448
449Options for defining the tools we use for code analysis (valgrind, gprof, gcov, etc)
450------------------------------------------------------------------------------------
451
452.. program:: kewpie.py
453
454.. option:: --valgrind
455
456 Run drizzletest and drizzled executables using
457 valgrind with default options [False]
458
459.. option:: --valgrind-option=VALGRINDARGLIST
460
461 Pass an option to valgrind (overrides/removes default
462 valgrind options)
463
464.. option:: --valgrind-suppressions=VALGRINDSUPPRESSIONS
465
466 Point at a valgrind suppression file
467 [kewpie/valgrind.supp]
468
469.. option:: --helgrind
470
471 Use the helgrind tool for valgrind. Implies / will
472 auto-use --valgrind
473
474Options for controlling the use of debuggers with test execution
475----------------------------------------------------------------
476
477.. program:: kewpie.py
478
479.. option:: --gdb
480
481 Start the drizzled server(s) in gdb
482
483.. option:: --manual-gdb
484
485 Allows you to start the drizzled server(s) in gdb
486 manually (in another window, etc
487
488Options to call additional utilities such as datagen
489------------------------------------------------------
490
491.. program:: kewpie.py
492
493.. option:: --gendata=GENDATAFILE
494
495 Call the randgen's gendata utility to use the
496 specified configuration file. This will populate the
497 server prior to any test execution
498
0499
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/make.bat'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/make.bat 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/make.bat 2012-06-27 07:03:19 +0000
@@ -0,0 +1,170 @@
1@ECHO OFF
2
3REM Command file for Sphinx documentation
4
5if "%SPHINXBUILD%" == "" (
6 set SPHINXBUILD=sphinx-build
7)
8set BUILDDIR=_build
9set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
10if NOT "%PAPER%" == "" (
11 set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
12)
13
14if "%1" == "" goto help
15
16if "%1" == "help" (
17 :help
18 echo.Please use `make ^<target^>` where ^<target^> is one of
19 echo. html to make standalone HTML files
20 echo. dirhtml to make HTML files named index.html in directories
21 echo. singlehtml to make a single large HTML file
22 echo. pickle to make pickle files
23 echo. json to make JSON files
24 echo. htmlhelp to make HTML files and a HTML help project
25 echo. qthelp to make HTML files and a qthelp project
26 echo. devhelp to make HTML files and a Devhelp project
27 echo. epub to make an epub
28 echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
29 echo. text to make text files
30 echo. man to make manual pages
31 echo. changes to make an overview over all changed/added/deprecated items
32 echo. linkcheck to check all external links for integrity
33 echo. doctest to run all doctests embedded in the documentation if enabled
34 goto end
35)
36
37if "%1" == "clean" (
38 for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
39 del /q /s %BUILDDIR%\*
40 goto end
41)
42
43if "%1" == "html" (
44 %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
45 if errorlevel 1 exit /b 1
46 echo.
47 echo.Build finished. The HTML pages are in %BUILDDIR%/html.
48 goto end
49)
50
51if "%1" == "dirhtml" (
52 %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
53 if errorlevel 1 exit /b 1
54 echo.
55 echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
56 goto end
57)
58
59if "%1" == "singlehtml" (
60 %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
61 if errorlevel 1 exit /b 1
62 echo.
63 echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
64 goto end
65)
66
67if "%1" == "pickle" (
68 %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
69 if errorlevel 1 exit /b 1
70 echo.
71 echo.Build finished; now you can process the pickle files.
72 goto end
73)
74
75if "%1" == "json" (
76 %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
77 if errorlevel 1 exit /b 1
78 echo.
79 echo.Build finished; now you can process the JSON files.
80 goto end
81)
82
83if "%1" == "htmlhelp" (
84 %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
85 if errorlevel 1 exit /b 1
86 echo.
87 echo.Build finished; now you can run HTML Help Workshop with the ^
88.hhp project file in %BUILDDIR%/htmlhelp.
89 goto end
90)
91
92if "%1" == "qthelp" (
93 %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
94 if errorlevel 1 exit /b 1
95 echo.
96 echo.Build finished; now you can run "qcollectiongenerator" with the ^
97.qhcp project file in %BUILDDIR%/qthelp, like this:
98 echo.^> qcollectiongenerator %BUILDDIR%\qthelp\kewpie.qhcp
99 echo.To view the help file:
100 echo.^> assistant -collectionFile %BUILDDIR%\qthelp\kewpie.ghc
101 goto end
102)
103
104if "%1" == "devhelp" (
105 %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
106 if errorlevel 1 exit /b 1
107 echo.
108 echo.Build finished.
109 goto end
110)
111
112if "%1" == "epub" (
113 %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
114 if errorlevel 1 exit /b 1
115 echo.
116 echo.Build finished. The epub file is in %BUILDDIR%/epub.
117 goto end
118)
119
120if "%1" == "latex" (
121 %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
122 if errorlevel 1 exit /b 1
123 echo.
124 echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
125 goto end
126)
127
128if "%1" == "text" (
129 %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
130 if errorlevel 1 exit /b 1
131 echo.
132 echo.Build finished. The text files are in %BUILDDIR%/text.
133 goto end
134)
135
136if "%1" == "man" (
137 %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
138 if errorlevel 1 exit /b 1
139 echo.
140 echo.Build finished. The manual pages are in %BUILDDIR%/man.
141 goto end
142)
143
144if "%1" == "changes" (
145 %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
146 if errorlevel 1 exit /b 1
147 echo.
148 echo.The overview file is in %BUILDDIR%/changes.
149 goto end
150)
151
152if "%1" == "linkcheck" (
153 %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
154 if errorlevel 1 exit /b 1
155 echo.
156 echo.Link check complete; look for any errors in the above output ^
157or in %BUILDDIR%/linkcheck/output.txt.
158 goto end
159)
160
161if "%1" == "doctest" (
162 %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
163 if errorlevel 1 exit /b 1
164 echo.
165 echo.Testing of doctests in the sources finished, look at the ^
166results in %BUILDDIR%/doctest/output.txt.
167 goto end
168)
169
170:end
0171
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/randgen.rst'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/randgen.rst 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/randgen.rst 2012-06-27 07:03:19 +0000
@@ -0,0 +1,202 @@
1**********************************
2randgen (random query generator)
3**********************************
4
5
6
7Description
8===========
9
10The randgen aka the random query generator is a database
11testing tool. It uses a grammar-based stochastic model to represent
12some desired set of queries (to exercise the optimizer, for example)
13and generates random queries as allowed by the grammar
14
15The primary documentation is here: http://forge.mysql.com/wiki/RandomQueryGenerator
16
17This document is intended to help the user set up their environment so that the tool
18may be used in conjunction with the kewpie.py test-runner. The forge documentation
19contains more information on the particulars of the tool itself.
20
21Requirements
22============
23
24DBD::drizzle
25-------------
26The DBD::drizzle module is required it can be found here http://launchpad.net/dbd-drizzle/
27
28Additional information for installing the module::
29
30 Prerequisites
31 ----------------
32 * Perl
33 * Drizzle (bzr branch lp:drizzle)
34 * libdrizzle (bzr branch lp:libdrizzle)
35 * C compiler
36
37 Installation
38 -------------
39 You should only have to run the following:
40
41 perl Makefile.PL --cflags=-I/usr/local/drizzle/include/ --libs=-"L/usr/local/drizzle/lib -ldrizzle"
42
43
44 Depending on where libdrizzle is installed. Also, you'll want to make
45 sure that ldconfig has configured libdrizzle to be in your library path
46
47Additional information may be found here: http://forge.mysql.com/wiki/RandomQueryGeneratorQuickStart
48
49Installing the randgen
50=======================
51
52Kewpie includes a branch of the randgen so it is not necessary to install it directly, but thecode may be branched from:
53
54 launchpad: bzr branch lp:randgen
55
56it also may be downloaded from:
57
58 http://launchpad.net/randgen/+download
59
60That is all there is : )
61
62Randgen / kewpie testcases
63============================
64
65These 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::
66
67 class basicTest(mysqlBaseTestCase):
68
69 def test_OptimizerSubquery1(self):
70 self.servers = servers
71 test_cmd = ("./gentest.pl "
72 "--gendata=conf/percona/outer_join_percona.zz "
73 "--grammar=conf/percona/outer_join_percona.yy "
74 "--queries=500 "
75 "--threads=5"
76 )
77 retcode, output = self.execute_randgen(test_cmd, test_executor, servers)
78 self.assertEqual(retcode, 0, output) ``
79
80Running tests
81=========================
82
83There are several different ways to run the provided randgen tests.
84
85It should be noted that unless :option:`--force` is used, the program will
86stop execution upon encountering the first failing test.
87:option:`--force` is recommended if you are running several tests - it will
88allow you to view all successes and failures in one run.
89
90Running individual tests
91------------------------
92If one only wants to run a few, specific tests, they may do so this way::
93
94 ./kewpie --suite=randgen_basic [OPTIONS] test1 [test2 ... testN]
95
96Running all tests within a suite
97--------------------------------
98Many of the tests supplied with Drizzle are organized into suites.
99
100The tests within drizzle/tests/randgen_tests/main are considered the 'main' suite.
101Other suites are also subdirectories of drizzle/tests/randgen_tests.
102
103To run the tests in a specific suite::
104
105 ./kewpie [OPTIONS] --suite=SUITENAME
106
107Running specific tests within a suite
108--------------------------------------
109To run a specific set of tests within a suite::
110
111 ./kewpie --suite=SUITENAME TEST1 [TEST2..TESTN]
112
113Calling tests using <suitename>.<testname> currently does not work.
114One must specify the test suite via the :option:`--suite` option.
115
116
117Running all available tests
118---------------------------
119One would currently have to name all suites, but the majority of the working tests live in the main suite
120Other suites utilize more exotic server combinations and we are currently tweaking them to better integrate with the
121kewpie system. The slave-plugin suite does currently have a good config file for setting up simple replication setups for testing.
122To execute several suites' worth of tests::
123
124 ./kewpie --mode=randgen --randgen-path=/path/to/randgen [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN
125
126Interpreting test results
127=========================
128The output of the test runner is quite simple. Every test should pass.
129In the event of a test failure, please take the time to file a bug here:
130*https://bugs.launchpad.net/drizzle*
131
132During a run, the program will provide the user with:
133 * test name (suite + name)
134 * test status (pass/fail/skipped)
135 * time spent executing each test
136
137At the end of a run, the program will provide the user with a listing of:
138 * how many tests were run
139 * how many tests failed
140 * percentage of passing tests
141 * a listing of failing tests
142 * total time spent executing the tests
143
144Example output::
145
146 24 Feb 2011 17:27:36 : main.outer_join_portable [ pass ] 7019
147 24 Feb 2011 17:27:39 : main.repeatable_read [ pass ] 2764
148 24 Feb 2011 17:28:57 : main.select_stability_validator [ pass ] 77946
149 24 Feb 2011 17:29:01 : main.subquery [ pass ] 4474
150 24 Feb 2011 17:30:52 : main.subquery_semijoin [ pass ] 110355
151 24 Feb 2011 17:31:00 : main.subquery_semijoin_nested [ pass ] 8750
152 24 Feb 2011 17:31:03 : main.varchar [ pass ] 3048
153 24 Feb 2011 17:31:03 : ================================================================================
154 24 Feb 2011 17:31:03 INFO: Test execution complete in 288 seconds
155 24 Feb 2011 17:31:03 INFO: Summary report:
156 24 Feb 2011 17:31:03 INFO: Executed 18/18 test cases, 100.00 percent
157 24 Feb 2011 17:31:03 INFO: STATUS: PASS, 18/18 test cases, 100.00 percent executed
158 24 Feb 2011 17:31:03 INFO: Spent 287 / 288 seconds on: TEST(s)
159 24 Feb 2011 17:31:03 INFO: Test execution complete
160 24 Feb 2011 17:31:03 INFO: Stopping all running servers...
161
162
163Additional uses
164===============
165Starting a server for manual testing and (optionally) populating it
166--------------------------------------------------------------------
167
168: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.
169
170To do so call::
171
172 ./kewpie --suite=randgen_basic --start-and-exit [*OPTIONS*]
173
174This will start a Drizzle server that you can connect to and query
175
176With the addition of the --gendata option, a user may utilize the randgen's gendata (table creation and population) tool
177to populate a test server. In the following example, the test server is now populated by the 8 tables listed below::
178
179 ./kewpie --start-and-exit --gendata=conf/drizzle/drizzle.zz
180 <snip>
181 24 Feb 2011 17:48:48 INFO: NAME: server0
182 24 Feb 2011 17:48:48 INFO: MASTER_PORT: 9306
183 24 Feb 2011 17:48:48 INFO: DRIZZLE_TCP_PORT: 9307
184 24 Feb 2011 17:48:48 INFO: MC_PORT: 9308
185 24 Feb 2011 17:48:48 INFO: PBMS_PORT: 9309
186 24 Feb 2011 17:48:48 INFO: RABBITMQ_NODE_PORT: 9310
187 24 Feb 2011 17:48:48 INFO: VARDIR: /kewpie/tests/workdir/testbot0/server0/var
188 24 Feb 2011 17:48:48 INFO: STATUS: 1
189 # 2011-02-24T17:48:48 Default schema: test
190 # 2011-02-24T17:48:48 Executor initialized, id GenTest::Executor::Drizzle 2011.02.2198 ()
191 # 2011-02-24T17:48:48 # Creating Drizzle table: test.A; engine: ; rows: 0 .
192 # 2011-02-24T17:48:48 # Creating Drizzle table: test.B; engine: ; rows: 0 .
193 # 2011-02-24T17:48:48 # Creating Drizzle table: test.C; engine: ; rows: 1 .
194 # 2011-02-24T17:48:48 # Creating Drizzle table: test.D; engine: ; rows: 1 .
195 # 2011-02-24T17:48:48 # Creating Drizzle table: test.AA; engine: ; rows: 10 .
196 # 2011-02-24T17:48:48 # Creating Drizzle table: test.BB; engine: ; rows: 10 .
197 # 2011-02-24T17:48:48 # Creating Drizzle table: test.CC; engine: ; rows: 100 .
198 # 2011-02-24T17:48:49 # Creating Drizzle table: test.DD; engine: ; rows: 100 .
199 24 Feb 2011 17:48:49 INFO: User specified --start-and-exit. kewpie.py exiting and leaving servers running...
200
201
202
0203
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sql-bench.rst'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sql-bench.rst 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sql-bench.rst 2012-06-27 07:03:19 +0000
@@ -0,0 +1,182 @@
1**********************************
2sql-bench
3**********************************
4
5
6
7Description
8===========
9Kewpie can take advantage of two testing modes offered by the sql-bench tool.
10
11Kewpie has a copy of this tool set in the tree and the test-runner offers two suites for executing sql-bench tests::
12
13 sql-bench modes
14 ---------------
15 * sqlbench - runs the entire sql-bench test suite and can take a very long time (~45 minutes)
16 * crashme - runs the crash-me tool and reports failure if any tests should not pass
17
18
19Requirements
20============
21DBD::drizzle
22-------------
23The DBD::drizzle module is required it can be found here:
24
25 http://launchpad.net/dbd-drizzle/
26
27Additional information for installing the module::
28
29 Prerequisites
30 ----------------
31 * Perl
32 * Drizzle (bzr branch lp:drizzle)
33 * libdrizzle (bzr branch lp:libdrizzle)
34 * C compiler
35
36 Installation
37 -------------
38 You should only have to run the following:
39
40 perl Makefile.PL --cflags=-I/usr/local/drizzle/include/ --libs=-"L/usr/local/drizzle/lib -ldrizzle"
41
42
43 Depending on where libdrizzle is installed. Also, you'll want to make
44 sure that ldconfig has configured libdrizzle to be in your library path
45
46DBD::MySQL:
47
48This is required for using MySQL servers and can be found here:
49
50 http://search.cpan.org/dist/DBD-mysql/
51
52
53sql-bench / kewpie tests
54==========================
55
56Currently, there are only two sql-bench test cases for kewpie. As one might expect, main.all_sqlbench_tests executes::
57
58 run-all-tests --server=$SERVER_TYPE --dir=$WORKDIR --log --connect-options=port=$MASTER_MYPORT --create-options=ENGINE=innodb --user=root
59
60against a test server. The second test case executes the crashme tool against a running server.
61
62Test cases are defined in python .cnf files and live in tests/sqlbench_tests.
63
64Running tests
65=========================
66
67NOTE: all_sqlbench_tests can take a significant amount of time to execute (45 minutes or so on a decently provisioned laptop)
68
69There are several different ways to run tests using :doc:`kewpie` 's sql-bench mode.
70
71It should be noted that unless :option:`--force` is used, the program will
72stop execution upon encountering the first failing test.
73:option:`--force` is recommended if you are running several tests - it will
74allow you to view all successes and failures in one run.
75
76At 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)
77
78
79Running all tests within a suite
80--------------------------------
81At present, there is only one test case per suite for sqlbench and crashme modes - that is all that is needed for these tools.
82To execute the sql-bench test suite::
83
84 ./kewpie --suite=sqlbench
85
86To execute the crash-me test suite::
87
88 ./kewpie --suite=crashme
89
90Interpreting test results
91=========================
92The output of the test runner is quite simple. Every test should pass.
93In the event of a test failure, please take the time to file a bug here:
94*https://bugs.launchpad.net/drizzle*
95
96During a run, the program will provide the user with:
97 * test name (suite + name)
98 * test status (pass/fail/skipped)
99 * time spent executing each test
100
101Example sqlbench output::
102
103 20110608-135645 ===============================================================
104 20110608-135645 TEST NAME [ RESULT ] TIME (ms)
105 20110608-135645 ===============================================================
106 20110608-135645 main.all_sqlbench_tests [ pass ] 2732007
107 20110608-135645 Test finished. You can find the result in:
108 20110608-135645 drizzle/tests/workdir/RUN-drizzle-Linux_2.6.38_9_generic_x86_64
109 20110608-135645 Benchmark DBD suite: 2.15
110 20110608-135645 Date of test: 2011-06-08 13:11:10
111 20110608-135645 Running tests on: Linux 2.6.38-9-generic x86_64
112 20110608-135645 Arguments: --connect-options=port=9306 --create-options=ENGINE=innodb
113 20110608-135645 Comments:
114 20110608-135645 Limits from:
115 20110608-135645 Server version: Drizzle 2011.06.19.2325
116 20110608-135645 Optimization: None
117 20110608-135645 Hardware:
118 20110608-135645
119 20110608-135645 alter-table: Total time: 42 wallclock secs ( 0.06 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.10 CPU)
120 20110608-135645 ATIS: Total time: 22 wallclock secs ( 4.01 usr 0.26 sys + 0.00 cusr 0.00 csys = 4.27 CPU)
121 20110608-135645 big-tables: Total time: 24 wallclock secs ( 4.16 usr 0.22 sys + 0.00 cusr 0.00 csys = 4.38 CPU)
122 20110608-135645 connect: Total time: 31 wallclock secs ( 6.81 usr 4.50 sys + 0.00 cusr 0.00 csys = 11.31 CPU)
123 20110608-135645 create: Total time: 59 wallclock secs ( 2.93 usr 1.65 sys + 0.00 cusr 0.00 csys = 4.58 CPU)
124 20110608-135645 insert: Total time: 1962 wallclock secs (270.53 usr 66.35 sys + 0.00 cusr 0.00 csys = 336.88 CPU)
125 20110608-135645 select: Total time: 560 wallclock secs (23.12 usr 4.62 sys + 0.00 cusr 0.00 csys = 27.74 CPU)
126 20110608-135645 transactions: Total time: 21 wallclock secs ( 2.43 usr 1.98 sys + 0.00 cusr 0.00 csys = 4.41 CPU)
127 20110608-135645 wisconsin: Total time: 10 wallclock secs ( 2.11 usr 0.52 sys + 0.00 cusr 0.00 csys = 2.63 CPU)
128 20110608-135645
129 20110608-135645 All 9 test executed successfully
130 20110608-135645
131 20110608-135645 Totals per operation:
132 20110608-135645 Operation seconds usr sys cpu tests
133 20110608-135645 alter_table_add 18.00 0.02 0.00 0.02 100
134 20110608-135645 alter_table_drop 17.00 0.02 0.01 0.03 91
135 20110608-135645 connect 2.00 1.02 0.51 1.53 2000
136 <snip>
137 20110608-135645 update_rollback 3.00 0.26 0.23 0.49 100
138 20110608-135645 update_with_key 73.00 6.70 5.23 11.93 300000
139 20110608-135645 update_with_key_prefix 34.00 4.45 2.30 6.75 100000
140 20110608-135645 wisc_benchmark 2.00 1.49 0.00 1.49 114
141 20110608-135645 TOTALS 2865.00 310.26 79.94 390.20 2974250
142 20110608-135645
143 20110608-135645 ===============================================================
144 20110608-135645 INFO Test execution complete in 2735 seconds
145 20110608-135645 INFO Summary report:
146 20110608-135645 INFO Executed 1/1 test cases, 100.00 percent
147 20110608-135645 INFO STATUS: PASS, 1/1 test cases, 100.00 percent executed
148 20110608-135645 INFO Spent 2732 / 2735 seconds on: TEST(s)
149 20110608-135645 INFO Test execution complete
150 20110608-135645 INFO Stopping all running servers...
151
152Example crashme output::
153
154 20110608-152759 ===============================================================
155 20110608-152759 TEST NAME [ RESULT ] TIME (ms)
156 20110608-152759 ===============================================================
157 20110608-152759 main.crashme [ fail ] 155298
158 20110608-152759 func_extra_to_days=error # Function TO_DAYS
159 20110608-152759 ###
160 20110608-152759 ###<select to_days('1996-01-01') from crash_me_d
161 20110608-152759 ###>2450084
162 20110608-152759 ###We expected '729024' but got '2450084'
163 20110608-152759 func_odbc_timestampadd=error # Function TIMESTAMPADD
164 20110608-152759 ###
165 20110608-152759 ###<select timestampadd(SQL_TSI_SECOND,1,'1997-01-01 00:00:00')
166 20110608-152759 ###>1997-01-01 00:00:01.000000
167 20110608-152759 ###We expected '1997-01-01 00:00:01' but got '1997-01-01 00:00:01.000000'
168 20110608-152759 ###
169 20110608-152759 ###<select {fn timestampadd(SQL_TSI_SECOND,1,{ts '1997-01-01 00:00:00'}) }
170 20110608-152759 ###>1997-01-01 00:00:01.000000
171 20110608-152759 ###We expected '1997-01-01 00:00:01' but got '1997-01-01 00:00:01.000000'
172 20110608-152759
173 20110608-152759 ERROR Failed test. Use --force to execute beyond the first test failure
174 20110608-152759 ===============================================================
175 20110608-152759 INFO Test execution complete in 158 seconds
176 20110608-152759 INFO Summary report:
177 20110608-152759 INFO Executed 1/1 test cases, 100.00 percent
178 20110608-152759 INFO STATUS: FAIL, 1/1 test cases, 100.00 percent executed
179 20110608-152759 INFO FAIL tests: main.crashme
180 20110608-152759 INFO Spent 155 / 158 seconds on: TEST(s)
181 20110608-152759 INFO Test execution complete
182
0183
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sysbench.rst'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sysbench.rst 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sysbench.rst 2012-06-27 07:03:19 +0000
@@ -0,0 +1,123 @@
1**********************************
2sysbench
3**********************************
4
5
6
7Description
8===========
9kewpie's sysbench mode allows a user to run a specific iteration of a sysbench test (eg an oltp readonly run at concurrency = 16)
10
11
12Requirements
13============
14
15The SYSBENCH command requires that the Drizzle library header be installed. Simply build Drizzle and do::
16
17 $> sudo make install
18
19This will install the right headers.
20
21The SYSBENCH command also requires installation of the drizzle-sysbench program, which can be installed from source like so::
22
23 $> bzr branch lp:~drizzle-developers/sysbench/trunk drizzle-sysbench
24 $> cd drizzle-sysbench
25 $> ./autogen.sh && ./configure && make && sudo make install
26
27Make sure sysbench is then in your path
28
29
30sysbench / kewpie tests
31=====================
32
33A sysbench test defines a run for a particular concurrency. There are suites for readonly and readwrite.
34They are currently broken down this way as an experiment - we are open to other ways of organizing these tests::
35
36 [test_info]
37 comment = 16 threads
38
39 [test_command]
40 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
41
42 [test_servers]
43 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]]
44
45Running tests
46=========================
47
48There are several different ways to run tests using :doc:`kewpie` 's sysbench mode.
49
50It should be noted that unless :option:`--force` is used, the program will
51stop execution upon encountering the first failing test.
52:option:`--force` is recommended if you are running several tests - it will
53allow you to view all successes and failures in one run.
54
55Running individual tests
56------------------------
57If one only wants to run a few, specific tests, they may do so this way::
58
59 ./kewpie --mode=sysbench [OPTIONS] test1 [test2 ... testN]
60
61Running all tests within a suite
62--------------------------------
63Many of the tests supplied with Drizzle are organized into suites.
64
65The tests within drizzle/tests/randgen_tests/main are considered the 'main' suite.
66Other suites are also subdirectories of drizzle/tests/randgen_tests.
67
68To run the tests in a specific suite::
69
70 ./kewpie --mode=sysbench [OPTIONS] --suite=SUITENAME
71
72Running specific tests within a suite
73--------------------------------------
74To run a specific set of tests within a suite::
75
76 ./kewpie --mode=sysbench [OPTIONS] --suite=SUITENAME TEST1 [TEST2..TESTN]
77
78Calling tests using <suitename>.<testname> currently does not work.
79One must specify the test suite via the :option:`--suite` option.
80
81
82Running all available tests
83---------------------------
84One would currently have to name all suites, but the majority of the working tests live in the main suite
85Other suites utilize more exotic server combinations and we are currently tweaking them to better integrate with the
86kewpie system. The slave-plugin suite does currently have a good config file for setting up simple replication setups for testing.
87To execute several suites' worth of tests::
88
89 ./kewpie --mode=sysbench [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN
90
91Interpreting test results
92=========================
93The output of the test runner is quite simple. Every test should pass.
94In the event of a test failure, please take the time to file a bug here:
95*https://bugs.launchpad.net/drizzle*
96
97During a run, the program will provide the user with:
98 * test name (suite + name)
99 * test status (pass/fail/skipped)
100 * time spent executing each test
101
102Example output::
103
104 20110601-191706 ===============================================================
105 20110601-191706 TEST NAME [ RESULT ] TIME (ms)
106 20110601-191706 ===============================================================
107 20110601-191706 readonly.concurrency_16 [ pass ] 240019
108 20110601-191706 max_req_lat_ms: 21.44
109 20110601-191706 rwreqps: 4208.2
110 20110601-191706 min_req_lat_ms: 6.31
111 20110601-191706 deadlocksps: 0.0
112 20110601-191706 tps: 150.29
113 20110601-191706 avg_req_lat_ms: 6.65
114 20110601-191706 95p_req_lat_ms: 7.02
115 20110601-191706 ===============================================================
116 20110601-191706 INFO Test execution complete in 275 seconds
117 20110601-191706 INFO Summary report:
118 20110601-191706 INFO Executed 1/1 test cases, 100.00 percent
119 20110601-191706 INFO STATUS: PASS, 1/1 test cases, 100.00 percent executed
120 20110601-191706 INFO Spent 240 / 275 seconds on: TEST(s)
121 20110601-191706 INFO Test execution complete
122 20110601-191706 INFO Stopping all running servers...
123
0124
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/test-run.rst'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/test-run.rst 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/test-run.rst 2012-06-27 07:03:19 +0000
@@ -0,0 +1,494 @@
1.. _test-run-label:
2
3**********************************
4test-run.pl - Drizzle testing tool
5**********************************
6
7Synopsis
8========
9
10**./test-run** [ *OPTIONS* ] [ TESTCASE ]
11
12Description
13===========
14
15:program:`test-run.pl` (aka test-run, dtr, mtr) is used to execute tests
16from the Drizzle/MySQL test suite. These tests are included with their respective
17distributions and provide a way for users to verify that the system will
18operate according to expectations.
19
20The tests use a diff-based paradigm, meaning that the test runner executes
21a test and then compares the results received with pre-recorded expected
22results. In the event of a test failure, the program will provide output
23highlighting the differences found between expected and actual results; this
24can be useful for troubleshooting and in bug reports.
25
26While most users are concerned with ensuring general functionality, the
27program also allows a user to quickly spin up a server for ad-hoc testing
28and to run the test-suite against an already running test server.
29
30Running tests
31=========================
32
33There are several different ways to run tests using :program:`test-run.pl`.
34
35It should be noted that unless :option:`--force` is used, the program will
36stop execution upon encountering the first failing test.
37:option:`--force` is recommended if you are running several tests - it will
38allow you to view all successes and failures in one run.
39
40Running individual tests
41------------------------
42If one only wants to run a few, specific tests, they may do so this way::
43
44 ./test-run [OPTIONS] test1 [test2 ... testN]
45
46Running all tests within a suite
47--------------------------------
48Many of the tests supplied with MySQL-based servers are organized into suites.
49
50The tests within drizzle/tests/t are considered the 'main' suite.
51Other suites are located in either drizzle/tests/suite or within the various
52directories in drizzle/plugin. Tests for a specific plugin should live in
53the plugin's directory - drizzle/plugin/example_plugin/tests
54
55To run the tests in a specific suite::
56
57 ./test-run [OPTIONS] --suite=SUITENAME
58
59Running specific tests within a suite
60--------------------------------------
61To run a specific set of tests within a suite::
62
63 ./test-run [OPTIONS] --suite=SUITENAME TEST1 [TEST2..TESTN]
64
65Calling tests using <suitename>.<testname> currently does not work.
66One must specify the test suite via the :option:`--suite` option.
67
68
69Running all available tests
70---------------------------
71Currently, the quickest way to execute all tests in all suites is
72to use 'make test' from the drizzle root.
73
74Otherwise, one should simply name all suites::
75
76 ./test-run [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN
77
78Interpreting test results
79=========================
80The output of the test runner is quite simple. Every test should pass.
81In the event of a test failure, please take the time to file a bug here:
82*https://bugs.launchpad.net/drizzle*
83
84During a run, the program will provide the user with:
85 * test name (suite + name)
86 * test status (pass/fail/skipped)
87 * time spent executing each test
88
89At the end of a run, the program will provide the user with a listing of:
90 * how many tests were run
91 * how many tests failed
92 * percentage of passing tests
93 * a listing of failing tests
94 * total time spent executing the tests
95
96Example output::
97
98 <snip>
99 main.snowman [ pass ] 9
100 main.statement_boundaries [ pass ] 17
101 main.status [ pass ] 12
102 main.strict [ pass ] 50
103 main.subselect [ pass ] 6778
104 main.subselect2 [ pass ] 51
105 main.subselect3 [ fail ]
106 drizzletest: At line 621: query 'select a, (select max(b) from t1) into outfile
107 <snip>
108 --------------------------------------------------------------------------------
109 Stopping All Servers
110 Failed 10/231 tests, 95.67% were successful.
111
112 The log files in var/log may give you some hint
113 of what went wrong.
114 If you want to report this error, go to:
115 http://bugs.launchpad.net/drizzle
116 The servers were restarted 16 times
117 Spent 64.364 of 115 seconds executing testcases
118
119 drizzle-test-run in default mode: *** Failing the test(s): main.exp1
120 main.func_str main.loaddata main.null main.outfile main.subselect3
121 main.warnings jp.like_utf8 jp.select_utf8 jp.where_utf8
122
123Additional uses
124===============
125Starting a server for manual testing
126------------------------------------
127
128:program:`test-run.pl` allows a user to get a Drizzle server up and running
129quickly. This can be useful for fast ad-hoc testing.
130
131To do so call::
132
133 ./test-run --start-and-exit [*OPTIONS*]
134
135This will start a Drizzle server that you can connect to and query
136
137Starting a server against a pre-populated DATADIR
138--------------------------------------------------
139
140Using :option:`--start-dirty` prevents :program:`test-run.pl` from attempting
141to initialize (clean) the datadir. This can be useful if you want to use
142an already-populated datadir for testing.
143
144Program architecture
145====================
146
147:program:`test-run.pl` uses a simple diff-based mechanism for testing.
148It will execute the statements contained in a test and compare the results
149to pre-recorded expected results. In the event of a test failure, you
150will be presented with a diff::
151
152 main.exp1 [ fail ]
153 --- drizzle/tests/r/exp1.result 2010-11-02 02:10:25.107013998 +0300
154 +++ drizzle/tests/r/exp1.reject 2010-11-02 02:10:32.017013999 +0300
155 @@ -5,4 +5,5 @@
156 a
157 1
158 2
159 +3
160 DROP TABLE t1;
161
162A test case consists of a .test and a .result file. The .test file includes
163the various statements to be executed for a test. The .result file lists
164the expected results for a given test file. These files live in tests/t
165and tests/r, respectively. This structure is the same for all test suites.
166
167test-run.pl options
168===================
169
170The :program:`test-run.pl` tool has several available options:
171
172./test-run [ OPTIONS ] [ TESTCASE ]
173
174Options to control what engine/variation to run
175-----------------------------------------------
176
177.. program:: test-run
178
179.. option:: --compress
180
181 Use the compressed protocol between client and server
182
183.. option:: --bench
184
185 Run the benchmark suite
186
187.. option:: --small-bench
188
189 Run the benchmarks with --small-tests --small-tables
190
191Options to control directories to use
192-------------------------------------
193
194.. program:: test-run
195
196.. option:: --benchdir=DIR
197
198 The directory where the benchmark suite is stored
199 (default: ../../mysql-bench)
200
201.. option:: --tmpdir=DIR
202
203 The directory where temporary files are stored
204 (default: ./var/tmp).
205
206.. option:: --vardir=DIR
207
208 The directory where files generated from the test run
209 is stored (default: ./var). Specifying a ramdisk or
210 tmpfs will speed up tests.
211
212.. option:: --mem
213
214 Run testsuite in "memory" using tmpfs or ramdisk
215 Attempts to find a suitable location
216 using a builtin list of standard locations
217 for tmpfs (/dev/shm)
218 The option can also be set using environment
219 variable :envvar:`DTR_MEM` =[DIR]
220
221Options to control what test suites or cases to run
222---------------------------------------------------
223
224.. program:: test-run
225
226.. option:: --force
227
228 Continue to run the suite after failure
229
230.. option:: --do-test=PREFIX or REGEX
231
232 Run test cases which name are prefixed with PREFIX
233 or fulfills REGEX
234
235.. option:: --skip-test=PREFIX or REGEX
236
237 Skip test cases which name are prefixed with PREFIX
238 or fulfills REGEX
239
240.. option:: --start-from=PREFIX
241
242 Run test cases starting from test prefixed with PREFIX
243 suite[s]=NAME1,..,NAMEN Collect tests in suites from the comma separated
244 list of suite names.
245 The default is: "main,jp"
246
247.. option:: --skip-rpl
248
249 Skip the replication test cases.
250 combination="ARG1 .. ARG2" Specify a set of "drizzled" arguments for one
251 combination.
252
253.. option:: --skip-combination
254
255 Skip any combination options and combinations files
256
257.. option:: --repeat-test=n
258
259 How many times to repeat each test (default: 1)
260
261Options that specify ports
262--------------------------
263
264.. program:: test-run
265
266.. option:: --master_port=PORT
267
268 Specify the port number used by the first master
269
270.. option:: --slave_port=PORT
271
272 Specify the port number used by the first slave
273
274.. option:: --dtr-build-thread=#
275
276 Specify unique collection of ports. Can also be set by
277 setting the environment variable :envvar:`DTR_BUILD_THREAD`.
278
279Options for test case authoring
280-------------------------------
281
282.. program:: test-run
283
284.. option:: --record TESTNAME
285
286 (Re)genereate the result file for TESTNAME
287
288.. option:: --check-testcases
289
290 Check testcases for sideeffects
291
292.. option:: --mark-progress
293
294 Log line number and elapsed time to <testname>.progress
295
296Options that pass on options
297----------------------------
298
299.. program:: test-run
300
301.. option:: --drizzled=ARGS
302
303 Specify additional arguments to "drizzled"
304
305Options to run test on running server
306-------------------------------------
307
308.. program:: test-run
309
310.. option:: --extern
311
312 Use running server for tests
313
314.. option:: --user=USER
315
316 User for connection to extern server
317
318Options for debugging the product
319---------------------------------
320
321.. program:: test-run
322
323.. option:: --client-ddd
324
325 Start drizzletest client in ddd
326
327.. option:: --client-debugger=NAME
328
329 Start drizzletest in the selected debugger
330
331.. option:: --client-gdb
332
333 Start drizzletest client in gdb
334
335.. option:: --ddd
336
337 Start drizzled in ddd
338
339.. option:: --debug
340
341 Dump trace output for all servers and client programs
342
343.. option:: --debugger=NAME
344
345 Start drizzled in the selected debugger
346
347.. option:: --gdb
348
349 Start the drizzled(s) in gdb
350
351.. option:: --manual-debug
352
353 Let user manually start drizzled in debugger, before running test(s)
354
355.. option:: --manual-gdb
356
357 Let user manually start drizzled in gdb, before running test(s)
358
359.. option:: --manual-ddd
360
361 Let user manually start drizzled in ddd, before running test(s)
362
363.. option:: --master-binary=PATH
364
365 Specify the master "drizzled" to use
366
367.. option:: --slave-binary=PATH
368
369 Specify the slave "drizzled" to use
370
371.. option:: --strace-client
372
373 Create strace output for drizzletest client
374
375.. option:: --max-save-core
376
377 Limit the number of core files saved (to avoid filling up disks for
378 heavily crashing server). Defaults to 5, set to 0 for no limit.
379
380Options for coverage, profiling etc
381-----------------------------------
382
383.. todo::
384
385 .. option:: --gcov
386
387.. program:: test-run
388
389.. option:: --gprof
390
391 See online documentation on how to use it.
392
393.. option:: --valgrind
394
395 Run the *drizzletest* and *drizzled* executables using valgrind with
396 default options
397
398.. option:: --valgrind-all
399
400 Synonym for :option:`--valgrind`
401
402.. option:: --valgrind-drizzleslap
403
404 Run "drizzleslap" with valgrind.
405
406.. option:: --valgrind-drizzletest
407
408 Run the *drizzletest* and *drizzle_client_test* executable with valgrind
409
410.. option:: --valgrind-drizzled
411
412 Run the "drizzled" executable with valgrind
413
414.. option:: --valgrind-options=ARGS
415
416 Deprecated, use :option:`--valgrind-option`
417
418.. option:: --valgrind-option=ARGS
419
420 Option to give valgrind, replaces default option(s),
421 can be specified more then once
422
423.. option:: --valgrind-path=[EXE]
424
425 Path to the valgrind executable
426
427.. option:: --callgrind
428
429 Instruct valgrind to use callgrind
430
431.. option:: --massif
432
433 Instruct valgrind to use massif
434
435Misc options
436------------
437
438.. program:: test-run
439
440.. option:: --comment=STR
441
442 Write STR to the output
443
444.. option:: --notimer
445
446 Don't show test case execution time
447
448.. option:: --script-debug
449
450 Debug this script itself
451
452.. option:: --verbose
453
454 More verbose output
455
456.. option:: --start-and-exit
457
458 Only initialize and start the servers, using the
459 startup settings for the specified test case (if any)
460
461.. option:: --start-dirty
462
463 Only start the servers (without initialization) for
464 the specified test case (if any)
465
466.. option:: --fast
467
468 Don't try to clean up from earlier runs
469
470.. option:: --reorder
471
472 Reorder tests to get fewer server restarts
473
474.. option:: --help
475
476 Get this help text
477
478.. option:: --testcase-timeout=MINUTES
479
480 Max test case run time (default 15)
481
482.. option:: --suite-timeout=MINUTES
483
484 Max test suite run time (default 180)
485
486.. option:: --warnings | log-warnings
487
488 Pass --log-warnings to drizzled
489
490.. option:: --sleep=SECONDS
491
492 Passed to drizzletest, will be used as fixed sleep time
493
494
0495
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/writing_tests.rst'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/writing_tests.rst 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/writing_tests.rst 2012-06-27 07:03:19 +0000
@@ -0,0 +1,100 @@
1**********************************
2Writing native/unittest test cases
3**********************************
4
5Synopsis
6========
7
8Here, we discuss various topics related to writing test cases, with a focus on features
9that allow for more complex testing scenarios. Additional documentation for other testing
10tools will come later.
11
12Writing native mode tests
13==========================
14Native 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:
15
16 * http://docs.python.org/library/unittest.html
17 * http://docs.python.org/library/unittest.html#assert-methods
18
19Writing native modes tests can be quite simple. Here is an example::
20
21 from lib.util.mysqlBaseTestCase import mysqlBaseTestCase
22
23 server_requirements = [[]]
24 servers = []
25 server_manager = None
26 test_executor = None
27
28 class basicTest(mysqlBaseTestCase):
29
30 def test_OptimizerSubquery1(self):
31 self.servers = servers
32 test_cmd = "./gentest.pl --gendata=conf/percona/outer_join_percona.zz --grammar=conf/percona/outer_join_percona.yy --queries=500 --threads=5"
33 retcode, output = self.execute_randgen(test_cmd, test_executor, servers)
34 self.assertEqual(retcode, 0, output)
35
36Every 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.
37
38Requesting / specifying server requirements
39--------------------------------------------
40
41The 'server_requirements' block in the example above is how a test case requests servers for use in a test case.
42The content is a list of Python lists, with each sublist containing a string of server options.
43A more complex example::
44
45 server_requirements = [ [ ("--binlog-do-db=test "
46 "--innodb-file-per-table "
47 "--innodb_file_format='Barracuda' "
48 "--sync_binlog=100 "
49 "--innodb_flush_log_at_trx_commit=2 "
50 )]
51 ,[ ("--innodb_file_format='Barracuda' "
52 "--innodb_flush_log_at_trx_commit=2"
53 )]
54 ]
55
56The 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.
57
58More complex server setup tasks
59--------------------------------
60
61Sometimes 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
62
63The common thread to all of these tasks is the use of the server_requests variable::
64
65 from lib.util.mysqlBaseTestCase import mysqlBaseTestCase
66
67 server_requirements = [[],[],[]]
68 server_requests = {'join_cluster':[(0,1), (0,2)]}
69 servers = []
70 server_manager = None
71 test_executor = None
72
73Setting a server as a slave to another
74^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
75
76In the example above, we see that we have a list with two items tied to the key 'join_cluster'.
77The server_manager has a method called join_cluster with basically says::
78 def join_cluster(master_server, slave_server):
79 slave_server.set_master(master_server)
80
81The 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
82
83Using a pre-populated datadir
84------------------------------
85The experimental test runner, kewpie allows for starting a server with a pre-populated datadir
86for a test case. This is accomplished via the use of a .cnf file (versus a master.opt file)
87Over time, this will be the direction for all drizzletest cases.
88
89The .cnf file shown below tells the test-runner to use the directory drizzle/tests/std_data/backwards_compat_data
90as the datadir for the first server. If a test uses multiple servers, the .cnf file can have additional sections ([s1]...[sN])::
91
92 [test_servers]
93 servers = [[]]
94
95 [s0]
96 load-datadir=backwards_compat_data
97
98All datadirs are expected to be in tests/std_data. If there is need for the ability to use datadirs outside of this location,
99it can be explored.
100
0101
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/kewpie.py'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/kewpie.py 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/kewpie.py 2012-06-27 07:03:19 +0000
@@ -0,0 +1,131 @@
1#! /usr/bin/env python
2# -*- mode: python; indent-tabs-mode: nil; -*-
3# vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4#
5# Copyright (C) 2010 Patrick Crews
6#
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 2 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with this program; if not, write to the Free Software
19# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
21
22""" kewpie.py
23
24(DataBase) Quality Platform - system for executing various
25testing systems and the helper code
26
27Designed to be a modular test-runner. Different testing tools
28and databases may be plugged into the system via hacking the
29appropriate modules
30
31Currently geared towards Drizzle and MySQL systems
32Runs: Drizzle, MySQL, Percona Server, Galera dbms's
33"""
34
35# imports
36import os
37import imp
38import sys
39
40import lib.opts.test_run_options as test_run_options
41from lib.opts.defaults import get_defaults
42from lib.modes.test_mode import handle_mode
43from lib.server_mgmt.server_management import serverManager
44from lib.sys_mgmt.system_management import systemManager
45from lib.test_mgmt.execution_management import executionManager
46from lib.opts.matrix_manager import matrixManager
47
48# functions
49def handle_sys_config(input_args, defaults):
50 """ Look for / update defaults based on sys_config file
51 if specified
52
53 """
54 key_string = '--sys-config'
55 module_file = None
56 for input_arg in input_args:
57 if input_arg.startswith(key_string):
58 module_file = input_arg.split(key_string)[1].replace('=','').strip()
59 module_file = os.path.abspath(module_file)
60 break
61 if module_file:
62 module_parent = os.path.dirname(module_file)
63 sys.path.append(module_parent)
64 module_name = os.path.basename(module_file).replace('.py','')
65 project = imp.load_source(module_name, module_file)
66 defaults = project.get_project_defaults(module_file, defaults)
67 return defaults
68
69# main
70# We base / look for a lot of things based on the location of
71# the kewpie.py file
72qp_rootdir = os.path.dirname(os.path.abspath(sys.argv[0]))
73#project_name = 'percona-xtradb-cluster'
74#project_name = 'xtrabackup'
75project_name = None
76defaults = get_defaults(qp_rootdir,project_name)
77defaults = handle_sys_config(sys.argv, defaults)
78variables = test_run_options.parse_qp_options(defaults)
79variables['qp_root'] = qp_rootdir
80system_manager = None
81server_manager = None
82test_manager = None
83test_executor = None
84execution_manager = None
85
86try:
87 matrix_manager = matrixManager(variables)
88 # Some system-level work is constant regardless
89 # of the test to be run
90 system_manager = systemManager(variables)
91
92 # Create our server_manager
93 server_manager = serverManager(system_manager, variables)
94
95 # Get our mode-specific test_manager and test_executor
96 (test_manager,test_executor) = handle_mode(variables, system_manager)
97
98 # Gather our tests for execution
99 test_manager.gather_tests()
100
101 # Initialize test execution manager
102 execution_manager = executionManager(server_manager, system_manager
103 , test_manager, test_executor
104 , variables, matrix_manager)
105
106 # Execute our tests!
107 execution_manager.execute_tests()
108
109except Exception, e:
110 print Exception, e
111
112except KeyboardInterrupt:
113 print "\n\nDetected <Ctrl>+c, shutting down and cleaning up..."
114
115finally:
116# TODO - make a more robust cleanup
117# At the moment, runaway servers are our biggest concern
118 if server_manager and not variables['startandexit']:
119 if variables['gdb']:
120 server_manager.cleanup_all_servers()
121 else:
122 server_manager.cleanup()
123 if not variables['startandexit']:
124 if test_manager:
125 fail_count = test_manager.has_failing_tests()
126 sys.exit(test_manager.has_failing_tests())
127 else:
128 # return 1 as we likely have a problem if we don't have a
129 # test_manager
130 sys.exit(1)
131
0132
=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib'
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/__init__.py'
=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes'
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/__init__.py'
=== added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr'
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/__init__.py'
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_execution.py'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_execution.py 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_execution.py 2012-06-27 07:03:19 +0000
@@ -0,0 +1,139 @@
1#! /usr/bin/env python
2# -*- mode: python; indent-tabs-mode: nil; -*-
3# vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4#
5# Copyright (C) 2010 Patrick Crews
6#
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
22""" dtr_test_execution:
23 code related to the execution of dtr test cases
24
25 We are provided access to a testManager with
26 dtr-specific testCases. We contact teh executionManager
27 to produce the system and server configurations we need
28 to execute a test.
29
30"""
31
32# imports
33import os
34import sys
35import subprocess
36import commands
37
38import lib.test_mgmt.test_execution as test_execution
39
40class testExecutor(test_execution.testExecutor):
41 """ dtr-specific testExecutor
42 We currently execute by sending test-case
43 data to client/drizzletest...for now
44
45 """
46
47 def execute_testCase (self):
48 """ Execute a dtr testCase via calls to drizzletest (boo)
49 Eventually, we will replace drizzletest with pythonic
50 goodness, but we have these classes stored here for the moment
51
52 """
53 test_execution.testExecutor.execute_testCase(self)
54 self.status = 0
55
56 # generate command line
57 drizzletest_cmd = self.generate_drizzletest_call()
58
59 # call drizzletest
60 self.execute_drizzletest(drizzletest_cmd)
61
62 # analyze results
63 self.current_test_status = self.process_drizzletest_output()
64 self.set_server_status(self.current_test_status)
65
66
67 def generate_drizzletest_call(self):
68 """ Produce the command line we use to call drizzletest
69 We have a healthy number of values, so we put this in a
70 nice function
71
72 """
73
74 drizzletest_arguments = [ '--no-defaults'
75 , '--silent'
76 , '--tmpdir=%s' %(self.master_server.tmpdir)
77 , '--logdir=%s' %(self.master_server.logdir)
78 , '--port=%d' %(self.master_server.master_port)
79 , '--database=test'
80 , '--user=root'
81 , '--password='
82 #, '--testdir=%s' %(self.test_manager.testdir)
83 , '--test-file=%s' %(self.current_testcase.testpath)
84 , '--tail-lines=20'
85 , '--timer-file=%s' %(self.master_server.timer_file)
86 , '--result-file=%s' %(self.current_testcase.resultpath)
87 ]
88 if self.record_flag:
89 # We want to record a new result
90 drizzletest_arguments.append('--record')
91 drizzletest_cmd = "%s %s %s" %( self.cmd_prefix
92 , self.master_server.code_tree.drizzletest
93 , " ".join(drizzletest_arguments))
94 return drizzletest_cmd
95
96 def execute_drizzletest(self, drizzletest_cmd):
97 """ Execute the commandline and return the result.
98 We use subprocess as we can pass os.environ dicts and whatnot
99
100 """
101 testcase_name = self.current_testcase.fullname
102 self.time_manager.start(testcase_name,'test')
103 #retcode, output = self.system_manager.execute_cmd( drizzletest_cmd
104 # , must_pass = 0 )
105 drizzletest_outfile = os.path.join(self.logdir,'drizzletest.out')
106 drizzletest_output = open(drizzletest_outfile,'w')
107 drizzletest_subproc = subprocess.Popen( drizzletest_cmd
108 , shell=True
109 , cwd=self.system_manager.testdir
110 , env=self.working_environment
111 , stdout = drizzletest_output
112 , stderr = subprocess.STDOUT
113 )
114 drizzletest_subproc.wait()
115 retcode = drizzletest_subproc.returncode
116 execution_time = int(self.time_manager.stop(testcase_name)*1000) # millisec
117
118 drizzletest_output.close()
119 drizzletest_file = open(drizzletest_outfile,'r')
120 output = ''.join(drizzletest_file.readlines())
121 drizzletest_file.close()
122
123 self.logging.debug("drizzletest_retcode: %d" %(retcode))
124 self.current_test_retcode = retcode
125 self.current_test_output = output
126 self.current_test_exec_time = execution_time
127
128 def process_drizzletest_output(self):
129 """ Drizzletest has run, we now check out what we have """
130 retcode = self.current_test_retcode
131 if retcode == 0:
132 return 'pass'
133 elif retcode == 62 or retcode == 15872:
134 return 'skipped'
135 elif retcode == 63 or retcode == 1:
136 return 'fail'
137 else:
138 return 'fail'
139
0140
=== added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_management.py'
--- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_management.py 1970-01-01 00:00:00 +0000
+++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_management.py 2012-06-27 07:03:19 +0000
@@ -0,0 +1,495 @@
1#! /usr/bin/env python
2# -*- mode: python; indent-tabs-mode: nil; -*-
3# vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4#
5# Copyright (C) 2010 Patrick Crews
6#
7## This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 2 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with this program; if not, write to the Free Software
19# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
21""" dtr_test_management:
22 code related to the gathering / analysis / management of
23 the test cases
24 ie - collecting the list of tests in each suite, then
25 gathering additional, relevant information for the test-runner's dtr
26 mode. (traditional diff-based testing)
27
28"""
29
30# imports
31import os
32import re
33import sys
34from ConfigParser import RawConfigParser
35
36import lib.test_mgmt.test_management as test_management
37
38
39
40class testCase:
41 """Holds info on a per .test file basis
42 Attributes contain information necessary to execute / validate
43 the test file when it is executed.
44
45 """
46 def __init__(self, system_manager, test_case=None, test_name=None, suite_name=None
47 , suite_path=None, test_server_options=[], test_path=None, result_path=None
48 , comment=None, master_sh=None, cnf_path=None
49 , disable=0, innodb_test=1
50 , need_debug=0, debug=0):
51 self.system_manager = system_manager
52 self.logging = self.system_manager.logging
53 self.skip_keys = ['system_manager']
54 self.testcase = test_case
55 self.testname = test_name
56 self.suitename = suite_name
57 self.suitepath = suite_path
58 self.fullname = "%s.%s" %(suite_name, test_name)
59 self.testpath = test_path
60 self.resultpath = result_path
61
62 self.skip_flag = 0
63 self.timezone = "GMT-3"
64 self.component_id = "drizzled"
65 self.slave_count = 0
66 self.master_count = 1
67 self.server_options = test_server_options
68 # We will populate this in a better fashion later on
69 # as we allow .cnf files, we need to do a bit of
70 # messing about to make this work right
71 if self.server_options == [] or type(self.server_options[0]) is not list:
72 self.server_requirements=[self.server_options]
73 else:
74 self.server_requirements = self.server_options
75 self.server_options= self.server_options[0][0]
76 self.comment = comment
77 self.master_sh = master_sh
78 self.cnf_path = cnf_path
79 self.disable = disable
80 self.innodb_test = innodb_test
81 self.need_debug = need_debug
82
83 self.system_manager.logging.debug_class(self)
84
85 def should_run(self):
86 if self.skip_flag or self.disable:
87 return 0
88 else:
89 return 1
90
91
92
93
94
95class testManager(test_management.testManager):
96 """Deals with scanning test directories, gathering test cases, and
97 collecting per-test information (opt files, etc) for use by the
98 test-runner
99
100 """
101
102 def process_suite(self,suite_dir):
103 """Process a test suite.
104 This includes searching for tests in test_list and only
105 working with the named tests (all tests in suite is the default)
106 Further processing includes reading the disabled.def file
107 to know which tests to skip, processing the suite.opt file,
108 and processing the individual test cases for data relevant
109 to the rest of the test-runner
110
111 """
112
113 self.system_manager.logging.verbose("Processing suite: %s" %(suite_dir))
114
115 # Generate our test and result files:
116 testdir = os.path.join(suite_dir, 't')
117 resultdir = os.path.join(suite_dir, 'r')
118
119 # Do basic checks to make sure this is worth further work
120 self.check_suite(suite_dir, testdir, resultdir)
121
122 # Get suite-level options
123 suite_options = []
124 cnf_path, suite_options = self.process_suite_options(suite_dir)
125
126 # Get the 'name' of the suite. This can require some processing
127 # But the name is useful for reporting and whatnot
128 suite_name = self.get_suite_name(suite_dir)
129
130 # Get the contents of the testdir and filter it accordingly
131 # This applies do-test / skip-test filters and any specific
132 # test case names
133 testlist = self.testlist_filter(os.listdir(testdir))
134 # sort our list if no individual tests were specified
135 if not self.desired_tests:
136 testlist.sort()
137
138 # gather deeper information on tests we are interested in
139 if testlist:
140 # We have tests we want to process, we gather additional information
141 # that is useful at the suite level. This includes disabled tests
142 # Gather disabled test list.
143 # This is used in process_test_file()
144 disabled_tests = {}
145 disabled_tests = self.process_disabled_test_file(testdir)
146 for test_case in testlist:
147 self.add_test(self.process_test_file(suite_dir,
148 suite_name, cnf_path, suite_options
149 , disabled_tests, testdir
150 , resultdir, test_case))
151
152 def process_test_file(self, suite_dir, suite_name, suite_cnf_path, suite_options
153 , disabled_tests, testdir
154 , resultdir, test_case):
155 """ We generate / find / store all the relevant information per-test.
156 This information will be used when actually executing the test
157 We store the data in a testCase object
158
159 """
160
161 test_server_options = suite_options
162 test_name = test_case.replace('.test','')
163 self.system_manager.logging.verbose("Processing test: %s.%s" %(suite_name,test_name))
164
165
166 # Fix this , create a testCase with gather_test_data() passed
167 # as the argument
168 # Ensure we pass everything we need and use it all
169 ( test_path
170 , result_file_name
171 , result_path
172 , comment
173 , master_sh
174 , cnf_path
175 , test_server_options
176 , disable
177 , innodb_test
178 , need_debug) = self.gather_test_data(test_case, test_name,
179 suite_name, test_server_options,testdir,
180 resultdir, disabled_tests)
181 if suite_cnf_path and not cnf_path:
182 cnf_path=suite_cnf_path
183 test_case = testCase(self.system_manager, test_case, test_name, suite_name,
184 suite_dir, test_server_options,test_path, result_path,
185 master_sh=master_sh, cnf_path=cnf_path, debug=self.debug)
186 return test_case
187
188
189########################################################################
190# utility functions
191#
192# Stuff that helps us out and simplifies our main functions
193# But isn't that important unless you need to dig deep
194########################################################################
195
196 def gather_test_data(self, test_case, test_name, suite_name,
197 test_server_options, testdir, resultdir, disabled_tests):
198 """ We gather all of the data needed to produce a testCase for
199 a given test
200
201 """
202
203 test_path = os.path.join(testdir,test_case)
204 result_file_name = test_name+'.result'
205 result_path = self.find_result_path(resultdir, result_file_name)
206 comment = None
207 master_sh_path = test_path.replace('.test','-master.sh')
208 if os.path.exists(master_sh_path):
209 master_sh = master_sh_path
210 else:
211 master_sh = None
212 master_opt_path = test_path.replace('.test', '-master.opt')
213 config_file_path = test_path.replace('.test', '.cnf')
214 # NOTE: this currently makes suite level server options additive
215 # to file-level .opt files...not sure if this is the best.
216 test_server_options = test_server_options + self.process_opt_file(
217 master_opt_path)
218 # deal with .cnf files (which supercede master.opt stuff)
219 cnf_options = []
220 cnf_flag, returned_options = self.process_cnf_file(config_file_path)
221 cnf_options += returned_options
222 if cnf_flag: # we found a proper file and need to override
223 found_options = cnf_options
224 else:
225 config_file_path = None
226 (disable, comment) = self.check_if_disabled(disabled_tests, test_name)
227 innodb_test = 0
228 need_debug = 0
229 return (test_path, result_file_name, result_path, comment, master_sh,
230 config_file_path, test_server_options, disable, innodb_test, need_debug)
231
232 def check_suite(self, suite_dir, testdir, resultdir):
233 """Handle basic checks of the suite:
234 does the suite exist?
235 is there a /t dir?
236 is there a /r dir?
237 Error and die if not
238
239 """
240 # We expect suite to be a path name, no fuzzy searching
241 if not os.path.exists(suite_dir):
242 self.system_manager.logging.error("Suite: %s does not exist" %(suite_dir))
243 sys.exit(1)
244
245 # Ensure our test and result directories are present
246 if not os.path.exists(testdir):
247 self.system_manager.logging.error("Suite: %s does not have a 't' directory (expected location for test files)" %(suite_dir))
248 sys.exit(1)
249 if not os.path.exists(resultdir):
250 self.system_manager.logging.error("Suite: %s does not have an 'r' directory (expected location for result files)" %(suite_dir))
251 sys.exit(1)
252
253 def get_suite_name(self, suite_dir):
254 """ Get the 'name' of the suite
255 This can either be the path basename or one directory up, as
256 in the case of files in the drizzle/plugins directory
257
258 """
259
260 # We trim any trailing path delimiters as python returns
261 # '' for basedir if the path ends that way
262 # BEGIN horrible hack to accomodate bad location of main suite : /
263 if suite_dir == self.testdir:
264 return 'main'
265 # END horrible hack : /
266 if suite_dir.endswith('/'):
267 suite_dir=suite_dir[:-1]
268 suite_dir_root,suite_dir_basename = os.path.split(suite_dir)
269 if suite_dir_basename == 'tests' or suite_dir_basename == 'drizzle-tests':
270 suite_name = os.path.basename(suite_dir_root)
271 else:
272 suite_name = suite_dir_basename
273 self.system_manager.logging.debug("Suite_name: %s" %(suite_name))
274 return suite_name
275
276 def process_suite_options(self, suite_dir):
277 """ Process the suite.opt and master.opt files
278 that reside at the suite-level if they exist.
279 Return a list of the options found
280
281 We also process .cnf files - this
282 is currently dbqp-only and is the proper
283 way to do things :P
284
285 """
286 found_options = []
287 opt_files = ['t/master.opt','t/suite.opt']
288 for opt_file in opt_files:
289 found_options = found_options + self.process_opt_file(os.path.join(suite_dir,opt_file))
290 # We also process the suite-level .cnf file(s). We override
291 # a master.opt file if we have a .cnf file. There is no reason they
292 # should ever be used in conjunction and I am biased towards .cnf ; )
293 cnf_files = ['t/master.cnf']
294 cnf_options = []
295 for cnf_file in cnf_files:
296 config_file_path = os.path.join(suite_dir,cnf_file)
297 cnf_flag, returned_options = self.process_cnf_file(config_file_path)
298 cnf_options += returned_options
299 if cnf_flag: # we found a proper file and need to override
300 found_options = cnf_options
301 else:
302 config_file_path = None
303 return config_file_path, found_options
304
305 def process_disabled_test_file(self, testdir):
306 """ Checks and processes the suite's disabled.def
307 file. This file must reside in the suite/t directory
308 It must be in the format:
309 test-name : comment (eg BugNNNN - bug on hold, test disabled)
310 In reality a test should *never* be disabled. EVER.
311 However, we keep this as a bit of utility
312
313 """
314 disabled_tests = {}
315 disabled_def_path = os.path.join(testdir,'disabled.def')
316 if not os.path.exists(disabled_def_path):
317 return disabled_tests
318
319 try:
320 disabled_test_file = open(disabled_def_path,'r')
321 except IOError, e:
322 self.system_manager.logging.error("Problem opening disabled.def file: %s" %(disabled_def_path))
323 sys.exit(1)
324
325 self.system_manager.logging.debug("Processing disabled.def file: %s" %(disabled_def_path))
326 disabled_bug_pattern = re.compile("[\S]+[\s]+:[\s]+[\S]")
327
328 for line in disabled_test_file:
329 line = line.strip()
330 if not line.startswith('#'): # comment
331 if re.match(disabled_test_pattern,line):
332 self.system_manager.logging.debug("found disabled test - %s" %(line))
333 test_name, test_comment = line.split(':')
334 disabled_tests[test_name.strip()]=test_comment.strip()
335
336 disabled_test_file.close()
337 return disabled_tests
338
339
340 def process_opt_file(self, opt_file_path):
341 """ Process a test-run '.opt' file.
342 These files contain test and suite-specific server options
343 (ie what options the server needs to use for the test)
344
345 Returns a list of the options (we don't really validate...yet)
346
347 NOTE: test-run.pl allows for server *and* system options
348 (eg timezone, slave_count, etc) in opt files. We don't.
349 None of our tests use this and we should probably avoid it
350 We can introduce server and system .opt files or even better
351 would be to use config files as we do with drizzle-automation
352 This would allow us to specify options for several different
353 things in a single file, but in a clean and standardized manner
354
355 """
356 found_options = []
357 if not os.path.exists(opt_file_path):
358 return found_options
359
360 try:
361 opt_file = open(opt_file_path,'r')
362 except IOError, e:
363 self.system_manager.logging.error("Problem opening option file: %s" %(opt_file_path))
364 sys.exit(1)
365
366 self.system_manager.logging.debug("Processing opt file: %s" %(opt_file_path))
367 for line in opt_file:
368 options = line.split('--')
369 if options:
370 for option in options:
371 if option:
372 if 'restart' in option or '#' in option:
373 option = 'restart'
374 found_options.append('--%s' %(option.strip()))
375 opt_file.close()
376 return found_options
377
378 def process_cnf_file(self, cnf_file_path):
379 """ We extract meaningful information from a .cnf file
380 if it exists. Currently limited to server allocation
381 needs
382
383 """
384
385 server_requirements = []
386 cnf_flag = 0
387 if os.path.exists(cnf_file_path):
388 cnf_flag = 1
389 config_reader = RawConfigParser()
390 config_reader.read(cnf_file_path)
391 server_requirements = self.process_server_reqs(config_reader.get('test_servers','servers'))
392 return ( cnf_flag, server_requirements )
393
394 def process_server_reqs(self,data_string):
395 """ We read in the list of lists as a string, so we need to
396 handle this / break it down into proper chunks
397
398 """
399 server_reqs = []
400 # We expect to see a list of lists and throw away the
401 # enclosing brackets
402 option_sets = data_string[1:-1].strip().split(',')
403 for option_set in option_sets:
404 server_reqs.append([option_set[1:-1].strip()])
405 return server_reqs
406
407 def testlist_filter(self, testlist):
408 """ Filter our list of testdir contents based on several
409 criteria. This looks for user-specified test-cases
410 and applies the do-test and skip-test filters
411
412 Returns the list of tests that we want to execute
413 for further processing
414
415 """
416
417 # We want only .test files
418 # Possible TODO: allow alternate test extensions
419 testlist = [test_file for test_file in testlist if test_file.endswith('.test')]
420
421 # Search for specific test names
422 if self.desired_tests: # We have specific, named tests we want from the suite(s)
423 tests_to_use = []
424 for test in self.desired_tests:
425 if test.endswith('.test'):
426 pass
427 else:
428 test = test+'.test'
429 if test in testlist:
430 tests_to_use.append(test)
431 testlist = tests_to_use
432
433 # TODO: Allow for regex?
434 # Apply do-test filter
435 if self.dotest:
436 testlist = [test_file for test_file in testlist if test_file.startswith(self.dotest)]
437 # Apply skip-test filter
438 if self.skiptest:
439 testlist = [test_file for test_file in testlist if not test_file.startswith(self.skiptest)]
440 return testlist
441
442 def find_result_path(self, result_dir, result_file_name):
443 """ This is copied from test-run.pl dtr_cases.pl
444 If we have an engine option passed in and the
445 path resultdir/engine/testname.result exists, that is
446 our .result file
447
448 Need to check if we really need this - maybe PBXT?
449
450 """
451 result_path = os.path.join(result_dir,result_file_name)
452 if self.default_engine:
453 candidate_path = os.path.join(result_dir, self.default_engine,
454 result_file_name)
455 if os.path.exists(candidate_path):
456 result_path = candidate_path
457 return result_path
458
459 def check_if_disabled(self, disabled_tests, test_name):
460 """ Scan the list of disabled tests if it exists to see
461 if the test is disabled.
462
463 """
464
465 if disabled_tests:
466 if test_name in disabled_tests:
467 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