aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjason2017-01-23 20:18:42 -0700
committerjason2017-01-23 20:18:42 -0700
commitf3c64b9a0837dd03584b67179267e1e0ca8edadd (patch)
tree4b282f228902334e13415547f9d3ff8e9889d0d4
parent4780da086a62543c2bfbf0b98cabc181c4420244 (diff)
downloadeventmq-f3c64b9a0837dd03584b67179267e1e0ca8edadd.tar.gz
eventmq-f3c64b9a0837dd03584b67179267e1e0ca8edadd.zip
update docs
-rwxr-xr-x[-rw-r--r--].gitignore0
-rwxr-xr-x[-rw-r--r--].nojekyll0
-rw-r--r--_sources/api.rst.txt15
-rwxr-xr-x[-rw-r--r--]_sources/api.txt0
-rw-r--r--_sources/client.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/client.txt0
-rw-r--r--_sources/client/jobs.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/client/jobs.txt0
-rw-r--r--_sources/client/messages.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/client/messages.txt0
-rw-r--r--_sources/contributing.rst.txt14
-rwxr-xr-x[-rw-r--r--]_sources/contributing.txt0
-rw-r--r--_sources/exceptions.rst.txt2
-rwxr-xr-x[-rw-r--r--]_sources/exceptions.txt0
-rwxr-xr-x[-rw-r--r--]_sources/getting_started.txt0
-rwxr-xr-x[-rw-r--r--]_sources/glossary.txt0
-rw-r--r--_sources/index.rst.txt18
-rwxr-xr-x[-rw-r--r--]_sources/index.txt0
-rw-r--r--_sources/jobmanager.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/jobmanager.txt0
-rw-r--r--_sources/poller.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/poller.txt0
-rw-r--r--_sources/protocol.rst.txt260
-rwxr-xr-x[-rw-r--r--]_sources/protocol.txt0
-rw-r--r--_sources/receiver.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/receiver.txt0
-rw-r--r--_sources/router.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/router.txt0
-rw-r--r--_sources/sender.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/sender.txt0
-rw-r--r--_sources/settings_file.rst.txt51
-rwxr-xr-x[-rw-r--r--]_sources/settings_file.txt0
-rwxr-xr-x[-rw-r--r--]_sources/style.txt0
-rw-r--r--_sources/using.rst.txt14
-rwxr-xr-x[-rw-r--r--]_sources/using.txt0
-rwxr-xr-x[-rw-r--r--]_sources/utils.txt0
-rw-r--r--_sources/utils/classes.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/utils/classes.txt0
-rw-r--r--_sources/utils/devices.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/utils/devices.txt0
-rw-r--r--_sources/utils/index.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/utils/index.txt0
-rw-r--r--_sources/utils/messages.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/utils/messages.txt0
-rw-r--r--_sources/utils/settings.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/utils/settings.txt0
-rw-r--r--_sources/utils/timeutils.rst.txt3
-rwxr-xr-x[-rw-r--r--]_sources/utils/timeutils.txt0
-rwxr-xr-x[-rw-r--r--]_static/ajax-loader.gifbin673 -> 673 bytes
-rwxr-xr-x[-rw-r--r--]_static/basic.css79
-rwxr-xr-x[-rw-r--r--]_static/classic.css0
-rwxr-xr-x[-rw-r--r--]_static/comment-bright.pngbin3500 -> 756 bytes
-rwxr-xr-x[-rw-r--r--]_static/comment-close.pngbin3578 -> 829 bytes
-rwxr-xr-x[-rw-r--r--]_static/comment.pngbin3445 -> 641 bytes
-rwxr-xr-x[-rw-r--r--]_static/css/badge_only.css0
-rwxr-xr-x[-rw-r--r--]_static/css/theme.css0
-rwxr-xr-x[-rw-r--r--]_static/doctools.js28
-rwxr-xr-x[-rw-r--r--]_static/down-pressed.pngbin347 -> 222 bytes
-rwxr-xr-x[-rw-r--r--]_static/down.pngbin347 -> 202 bytes
-rwxr-xr-x[-rw-r--r--]_static/file.pngbin358 -> 286 bytes
-rwxr-xr-x[-rw-r--r--]_static/fonts/Inconsolata-Bold.ttfbin66352 -> 66352 bytes
-rwxr-xr-x[-rw-r--r--]_static/fonts/Inconsolata-Regular.ttfbin84548 -> 84548 bytes
-rwxr-xr-x[-rw-r--r--]_static/fonts/Lato-Bold.ttfbin121788 -> 121788 bytes
-rwxr-xr-x[-rw-r--r--]_static/fonts/Lato-Regular.ttfbin120196 -> 120196 bytes
-rwxr-xr-x[-rw-r--r--]_static/fonts/RobotoSlab-Bold.ttfbin170616 -> 170616 bytes
-rwxr-xr-x[-rw-r--r--]_static/fonts/RobotoSlab-Regular.ttfbin169064 -> 169064 bytes
-rwxr-xr-x[-rw-r--r--]_static/fonts/fontawesome-webfont.eotbin56006 -> 56006 bytes
-rwxr-xr-x[-rw-r--r--]_static/fonts/fontawesome-webfont.svg0
-rwxr-xr-x[-rw-r--r--]_static/fonts/fontawesome-webfont.ttfbin112160 -> 112160 bytes
-rwxr-xr-x[-rw-r--r--]_static/fonts/fontawesome-webfont.woffbin65452 -> 65452 bytes
-rwxr-xr-x[-rw-r--r--]_static/jquery-1.11.1.js0
-rw-r--r--_static/jquery-3.1.0.js10074
-rwxr-xr-x[-rw-r--r--]_static/jquery.js8
-rwxr-xr-x[-rw-r--r--]_static/js/modernizr.min.js0
-rwxr-xr-x[-rw-r--r--]_static/js/theme.js0
-rwxr-xr-x[-rw-r--r--]_static/minus.pngbin173 -> 90 bytes
-rwxr-xr-x[-rw-r--r--]_static/plus.pngbin173 -> 90 bytes
-rwxr-xr-x[-rw-r--r--]_static/pygments.css4
-rwxr-xr-x[-rw-r--r--]_static/searchtools.js166
-rwxr-xr-x[-rw-r--r--]_static/sidebar.js0
-rwxr-xr-x[-rw-r--r--]_static/underscore-1.3.1.js0
-rwxr-xr-x[-rw-r--r--]_static/underscore.js0
-rwxr-xr-x[-rw-r--r--]_static/up-pressed.pngbin345 -> 214 bytes
-rwxr-xr-x[-rw-r--r--]_static/up.pngbin345 -> 203 bytes
-rwxr-xr-x[-rw-r--r--]_static/websupport.js4
-rwxr-xr-x[-rw-r--r--]api.html11
-rwxr-xr-x[-rw-r--r--]client.html11
-rwxr-xr-x[-rw-r--r--]client/jobs.html17
-rwxr-xr-x[-rw-r--r--]client/messages.html99
-rwxr-xr-x[-rw-r--r--]contributing.html11
-rwxr-xr-x[-rw-r--r--]exceptions.html13
-rwxr-xr-x[-rw-r--r--]genindex.html1135
-rwxr-xr-x[-rw-r--r--]getting_started.html0
-rwxr-xr-x[-rw-r--r--]glossary.html0
-rwxr-xr-x[-rw-r--r--]index.html15
-rwxr-xr-x[-rw-r--r--]jobmanager.html47
-rwxr-xr-x[-rw-r--r--]objects.invbin1468 -> 1831 bytes
-rwxr-xr-x[-rw-r--r--]poller.html25
-rwxr-xr-x[-rw-r--r--]protocol.html55
-rwxr-xr-x[-rw-r--r--]py-modindex.html41
-rwxr-xr-x[-rw-r--r--]receiver.html52
-rwxr-xr-x[-rw-r--r--]router.html68
-rwxr-xr-x[-rw-r--r--]search.html7
-rw-r--r--searchindex.js2
-rwxr-xr-x[-rw-r--r--]sender.html55
-rwxr-xr-x[-rw-r--r--]settings_file.html11
-rwxr-xr-x[-rw-r--r--]style.html0
-rwxr-xr-x[-rw-r--r--]using.html11
-rwxr-xr-x[-rw-r--r--]utils.html0
-rwxr-xr-x[-rw-r--r--]utils/classes.html100
-rwxr-xr-x[-rw-r--r--]utils/devices.html13
-rwxr-xr-x[-rw-r--r--]utils/index.html22
-rwxr-xr-x[-rw-r--r--]utils/messages.html35
-rwxr-xr-x[-rw-r--r--]utils/settings.html13
-rwxr-xr-x[-rw-r--r--]utils/timeutils.html15
115 files changed, 11581 insertions, 1082 deletions
diff --git a/.gitignore b/.gitignore
index 106a152..106a152 100644..100755
--- a/.gitignore
+++ b/.gitignore
diff --git a/.nojekyll b/.nojekyll
index e69de29..e69de29 100644..100755
--- a/.nojekyll
+++ b/.nojekyll
diff --git a/_sources/api.rst.txt b/_sources/api.rst.txt
new file mode 100644
index 0000000..8351355
--- /dev/null
+++ b/_sources/api.rst.txt
@@ -0,0 +1,15 @@
1#################
2API Documentation
3#################
4
5.. toctree::
6 :maxdepth: 2
7
8 client
9 exceptions
10 jobmanager
11 poller
12 receiver
13 router
14 sender
15 utils/index
diff --git a/_sources/api.txt b/_sources/api.txt
index 8351355..8351355 100644..100755
--- a/_sources/api.txt
+++ b/_sources/api.txt
diff --git a/_sources/client.rst.txt b/_sources/client.rst.txt
new file mode 100644
index 0000000..dad4ee4
--- /dev/null
+++ b/_sources/client.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.client
2 :members:
3 :special-members:
diff --git a/_sources/client.txt b/_sources/client.txt
index dad4ee4..dad4ee4 100644..100755
--- a/_sources/client.txt
+++ b/_sources/client.txt
diff --git a/_sources/client/jobs.rst.txt b/_sources/client/jobs.rst.txt
new file mode 100644
index 0000000..a4acb3b
--- /dev/null
+++ b/_sources/client/jobs.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.client.jobs
2 :members:
3 :special-members:
diff --git a/_sources/client/jobs.txt b/_sources/client/jobs.txt
index a4acb3b..a4acb3b 100644..100755
--- a/_sources/client/jobs.txt
+++ b/_sources/client/jobs.txt
diff --git a/_sources/client/messages.rst.txt b/_sources/client/messages.rst.txt
new file mode 100644
index 0000000..f89b9d5
--- /dev/null
+++ b/_sources/client/messages.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.client.messages
2 :members:
3 :special-members:
diff --git a/_sources/client/messages.txt b/_sources/client/messages.txt
index f89b9d5..f89b9d5 100644..100755
--- a/_sources/client/messages.txt
+++ b/_sources/client/messages.txt
diff --git a/_sources/contributing.rst.txt b/_sources/contributing.rst.txt
new file mode 100644
index 0000000..2489abb
--- /dev/null
+++ b/_sources/contributing.rst.txt
@@ -0,0 +1,14 @@
1#######################
2Contributing to EventMQ
3#######################
4
5A few tips when working on the code
6
7 * Use relative imports. If you use absolute imports then when you `import eventmq.exceptions` it's possible that you receive in return a different version of eventmq. exceptions installed somewhere else on the system.
8
9.. toctree::
10 :maxdepth: 1
11
12 protocol
13 Source Code <https://github.com/enderlabs/eventmq>
14 Issues <https://github.com/enderlabs/eventmq/issues>
diff --git a/_sources/contributing.txt b/_sources/contributing.txt
index 2489abb..2489abb 100644..100755
--- a/_sources/contributing.txt
+++ b/_sources/contributing.txt
diff --git a/_sources/exceptions.rst.txt b/_sources/exceptions.rst.txt
new file mode 100644
index 0000000..04f9c5a
--- /dev/null
+++ b/_sources/exceptions.rst.txt
@@ -0,0 +1,2 @@
1.. automodule:: eventmq.exceptions
2 :members:
diff --git a/_sources/exceptions.txt b/_sources/exceptions.txt
index 04f9c5a..04f9c5a 100644..100755
--- a/_sources/exceptions.txt
+++ b/_sources/exceptions.txt
diff --git a/_sources/getting_started.txt b/_sources/getting_started.txt
index 167ca0f..167ca0f 100644..100755
--- a/_sources/getting_started.txt
+++ b/_sources/getting_started.txt
diff --git a/_sources/glossary.txt b/_sources/glossary.txt
index d33fbc5..d33fbc5 100644..100755
--- a/_sources/glossary.txt
+++ b/_sources/glossary.txt
diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt
new file mode 100644
index 0000000..25fc86f
--- /dev/null
+++ b/_sources/index.rst.txt
@@ -0,0 +1,18 @@
1#####################
2EventMQ Documentation
3#####################
4
5.. toctree::
6 :maxdepth: 2
7
8 using
9 api
10 contributing
11
12
13Indices and tables
14==================
15
16* :ref:`genindex`
17* :ref:`modindex`
18* :ref:`search`
diff --git a/_sources/index.txt b/_sources/index.txt
index 25fc86f..25fc86f 100644..100755
--- a/_sources/index.txt
+++ b/_sources/index.txt
diff --git a/_sources/jobmanager.rst.txt b/_sources/jobmanager.rst.txt
new file mode 100644
index 0000000..65b439d
--- /dev/null
+++ b/_sources/jobmanager.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.jobmanager
2 :members:
3 :special-members:
diff --git a/_sources/jobmanager.txt b/_sources/jobmanager.txt
index 65b439d..65b439d 100644..100755
--- a/_sources/jobmanager.txt
+++ b/_sources/jobmanager.txt
diff --git a/_sources/poller.rst.txt b/_sources/poller.rst.txt
new file mode 100644
index 0000000..1aab472
--- /dev/null
+++ b/_sources/poller.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.poller
2 :members:
3 :special-members:
diff --git a/_sources/poller.txt b/_sources/poller.txt
index 1aab472..1aab472 100644..100755
--- a/_sources/poller.txt
+++ b/_sources/poller.txt
diff --git a/_sources/protocol.rst.txt b/_sources/protocol.rst.txt
new file mode 100644
index 0000000..66b6829
--- /dev/null
+++ b/_sources/protocol.rst.txt
@@ -0,0 +1,260 @@
1******************************
2EventMQ Protocol Specification
3******************************
4*The status of this document is alpha and subject to heavy change*
5
6Goals
7=====
8The EventMQ Protocol (eMQP) defines a reliable service-oriented request-reply and pub-sub dialog between a set of clients, a broker, and a set of workers.
9
10The goals are to:
11
12 * Specify a protocol to follow when implementing a component to EventMQ.
13 * Allow requests to be routed to workers by an abstracted service name (named queues).
14 * Detect disconnected peers through heartbeating.
15 * Allow for message tracing and debugging.
16
17
18License
19=======
20This Specification is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 2.1 of the License, or (at your option) any later version.
21
22This Specification is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
23
24Language
25========
26The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119[[1](http://tools.ietf.org/html/rfc2119)].
27
28Architecture
29============
30insert pretty picture here
31
32Topology
33--------
34eMQP connects a set of client applications (e.g. web servers), a broker, and a pool of workers. Clients connect to the broker as well as the workers.
35
36'Clients' is defined as application issuing requests and 'workers' as applications that process these requests. (Workers consist of a `JobManager` and a pool of `Worker` resources where the job executes.)
37
38The EventMQ broker handles a set of named queues. The broker SHOULD serve clients on a fair request and MAY deliver requests to workers on any basis, including 0MQ's built-in round robin or least-recently used.
39
40ROUTER Addressing
41-----------------
42In the case of request-reply, the broker MUST use a ROUTER socket to accept requests from both clients and workers. The broker MAY use a seperate socket implementing a subset of eMQP, or MAY use a single socket implementing all of eMQP.
43
44From the 0MQ manual[[2](http://api.zeromq.org/master:zmq-socket)]
45> When receiving messages a ROUTER socket shall prepend a message part containing the identity of the originating peer to the message before passing it to the application. When sending messages a ROUTER socket shall remove the first part of the message and use it to determine the identity of the peer the message shall be routed to.
46
47This extra frame is not shown in the specifications below.
48
49Global Frames
50-------------
51An **ACK** command consists of a 4-frame multipart message, formatted as follows.
52
53====== ============== ===========
54FRAME Value Description
55====== ============== ===========
560 _EMPTY_ leave empty
571 eMQP/1.0 Protocol version
582 ACK command
593 _MSGID_ A unique id for the msg
604 _MSGID_ The message id of the message this ACK is acknowledging
61====== ============== ===========
62
63A **REPLY** frame consists of a 5-frame multipart message, formatted as follows.
64
65====== ============== ===========
66FRAME Value Description
67====== ============== ===========
680 _EMPTY_ leave empty
691 eMQP/1.0 Protocol version
702 REPLY command
713 _MSGID_ A unique id for the msg
724 _MSG_ The reply to respond with
73====== ============== ===========
74
75A **HEARTBEAT** frame consists of a
76
77====== ============== ===========
78FRAME Value Description
79====== ============== ===========
800 _EMPTY_ leave empty
811 eMQP/1.0 Protocol version
822 HEARTBEAT command
833 _MSGID_ A unique id for the msg
844 _UNIX_TS_ A unix timestamp
85====== ============== ===========
86
87A **DISCONNECT** frame consists of
88
89====== ============== ===========
90FRAME Value Description
91====== ============== ===========
920 _EMPTY_ leave empty
931 eMQP/1.0 Protocol version
942 DISCONNECT command
953 _MSGID_ A unique id for the msg
96====== ============== ===========
97
98A **KBAI** frame consists of
99
100====== ============== ===========
101FRAME Value Description
102====== ============== ===========
1030 _EMPTY_ leave empty
1041 eMQP/1.0 Protocol version
1052 KBAI command
1063 _MSGID_ A unique id for the msg
107====== ============== ===========
108
109eMQP / Client
110-------------
111A **REQUEST** command consists of a 7-frame multipart message, formatted as follows.
112
113====== ============== ===========
114FRAME Value Description
115====== ============== ===========
1160 _EMPTY_ leave empty
1171 eMQP/1.0 Protocol version
1182 REQUEST command
1193 _MSGID_ A unique id for the msg
1204 _QUEUE_NAME_ the name of the queue the request should be sent to
1215 _HEADERS_ dictionary of headers. can be an empty set
1226 _MSG_ The message to send
123====== ============== ===========
124
125A **PUBLISH** command consists of a 7-frame multipart messag, formatted as follows.
126
127====== ============== ===========
128FRAME Value Description
129====== ============== ===========
1300 _EMPTY_ leave empty
1311 eMQP/1.0 Protocol version
1322 PUBLISH command
1333 _MSGID_ A unique id for the msg
1344 _TOPIC_NAME_ the name of the topic this message should be published across
1355 _HEADERS_ csv list of headers
1366 _MSG_ The message to send
137====== ============== ===========
138
139A **SCHEDULE** command consists of a 7-frame multipart message, formatted as follows.
140
141====== ============== ===========
142FRAME Value Description
143====== ============== ===========
1440 _EMPTY_ leave empty
1451 eMQP/1.0 Protocol version
1462 SCHEDULE command
1473 _MSGID_ A unique id for the msg
1484 _QUEUE_NAME_ name of queue that the job should run in
1495 _HEADERS_ csv list of headers for this message
1506 _MSG_ The message to send
151====== ============== ===========
152
153An **UNSCHEDULE** command consists of a 7-frame multipart message, formatted as follows.
154
155====== ============== ===========
156FRAME Value Description
157====== ============== ===========
1580 _EMPTY_ leave empty
1591 eMQP/1.0 Protocol version
1602 UNSCHEDULE command
1613 _MSGID_ A unique id for the msg
1624 _QUEUE_NAME_ ignored for this command, broadcasted to all queues
1635 _HEADERS_ csv list of headers for this message
1646 _MSG_ The message to send
165====== ============== ===========
166
167eMQP / Scheduler
168----------------
169An **INFORM** command consists of a 6-frame multipart message, formatted as follows.
170
171====== ============== ===========
172FRAME Value Description
173====== ============== ===========
1740 _EMPTY_ leave empty
1751 eMQP/1.0 Protocol version
1762 INFORM command
1773 _MSGID_ A unique id for the msg
1784 Queues. Unused for scheduler
1795 scheduler type of peer connecting
180====== ============== ===========
181
182eMQP / Worker
183-------------
184An **INFORM** command consists of a 5-frame multipart message, formatted as follows.
185
186====== ============== ===========
187FRAME Value Description
188====== ============== ===========
1890 _EMPTY_ leave empty
1901 eMQP/1.0 Protocol version
1912 INFORM command
1923 _MSGID_ A unique id for the msg
1934 _QUEUES_ csv seperated arrays containing an int and a string for weight and name. e.g. [40, 'email']
1945 worker type of peer connecting
195====== ============== ===========
196
197A **READY** frame consists of a 4-frame multipart message, formatted as follows.
198
199====== ============== ===========
200FRAME Value Description
201====== ============== ===========
2020 _EMPTY_ leave empty
2031 eMQP/1.0 Protocol version
2042 READY command
2053 _MSGID_ A unique id for the msg
206====== ============== ===========
207
208eMQP / Publisher
209----------------
210A **PUBLISH** frame consists of a 6-frame multipart message, formatted as follows.
211
212====== ============== ===========
213FRAME Value Description
214====== ============== ===========
2150 _EMPTY_ leave empty
2161 eMQP/1.0 Protocol version
2172 PUBLISH command
2183 _MSGID_ A unique id for the msg
2194 TOPIC A topic to publish to
2205 MSG Message to be published
221====== ============== ===========
222
223
224Heartbeating
225------------
226 * HEARTBEAT commands are valid at any time after an INFORM command.
227 * Any command except DISCONNECT act as a heartbeat. Peers SHOULD NOT send HEARTBEAT commands while sending other commands.
228 * Worker and broker MUST send heartbeats at regular and agreed-upon intervals.
229 * Scheduler and broker MUST send heartbeats at regular and agreed-upon intervals.
230 * If the worker detects that the broker disconnected it SHOULD restart the conversation.
231 * If the broker detects that a worker has disconnected it should stop sending it a message of any type.
232 * If the scheduler detects that the broker disconnects it SHOULD restart the conversation.
233
234Headers
235---------------
236Headers MUST be 0 to many comma seperated values inserted into the header field. If there are no headers required, an empty string MUST be sent where headers are required.
237
238Below is a table which defines and describes the headers.
239
240
241================= ======= ======= ======== ======= ===========
242Header REQUEST PUBLISH SCHEDULE Default Description
243================= ======= ======= ======== ======= ===========
244reply-requested X False Once the job is finished, send a reply back with information from the job. If there is no information reply with a True value.
245retry-count:# X 0 Retry a failed job this many times before accepting defeat.
246timeout:# X 0 Kill the job after X seconds, defaults to never timing out (0)
247guarantee X False Ensure the job completes by letting someone else worry about a success reply.
248nohaste X False When scheduling a job, set this to True if you don't want the job to run immediately as it's scheduled. Instead, it will run for the first time when the interval has elapsed.
249================= ======= ======= ======== ======= ===========
250
251DISCONNECT and KBAI
252===================
253When a component receives a DISCONNECT command it:
254 * MUST send a KBAI command to all connected components.
255 * MUST stop sending and receiving any messages
256 * MUST allow any pending messages or jobs to complete.
257
258When a component receives a KBAI command it:
259 * MUST stop sending any messages to the disconnecting component.
260 * SHOULD Clean up references to the disconnecting component.
diff --git a/_sources/protocol.txt b/_sources/protocol.txt
index 015f5fb..015f5fb 100644..100755
--- a/_sources/protocol.txt
+++ b/_sources/protocol.txt
diff --git a/_sources/receiver.rst.txt b/_sources/receiver.rst.txt
new file mode 100644
index 0000000..854349c
--- /dev/null
+++ b/_sources/receiver.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.receiver
2 :members:
3 :special-members:
diff --git a/_sources/receiver.txt b/_sources/receiver.txt
index 854349c..854349c 100644..100755
--- a/_sources/receiver.txt
+++ b/_sources/receiver.txt
diff --git a/_sources/router.rst.txt b/_sources/router.rst.txt
new file mode 100644
index 0000000..9f7f576
--- /dev/null
+++ b/_sources/router.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.router
2 :members:
3 :special-members:
diff --git a/_sources/router.txt b/_sources/router.txt
index 9f7f576..9f7f576 100644..100755
--- a/_sources/router.txt
+++ b/_sources/router.txt
diff --git a/_sources/sender.rst.txt b/_sources/sender.rst.txt
new file mode 100644
index 0000000..67a1338
--- /dev/null
+++ b/_sources/sender.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.sender
2 :members:
3 :special-members:
diff --git a/_sources/sender.txt b/_sources/sender.txt
index 67a1338..67a1338 100644..100755
--- a/_sources/sender.txt
+++ b/_sources/sender.txt
diff --git a/_sources/settings_file.rst.txt b/_sources/settings_file.rst.txt
new file mode 100644
index 0000000..cd37b6a
--- /dev/null
+++ b/_sources/settings_file.rst.txt
@@ -0,0 +1,51 @@
1##############################
2Server Settings (eventmq.conf)
3##############################
4EventMQ uses a standard INI style config file found at ``/etc/eventmq.conf``.
5
6******
7Router
8******
9
10*********
11Scheduler
12*********
13
14***********
15Job Manager
16***********
17
18concurrent_jobs
19===============
20Default: 4
21
22This is the number of concurrent jobs the indiviudal job manager should execute
23at a time. If you are using the multiprocess or threading model this number
24becomes important as you will want to control the load on your server. If the
25load equals the number of cores on the server, processes will begin waiting for
26cpu cycles and things will begin to slow down.
27
28A safe number to choose if your jobs block a lot would be (2 * cores). If your
29jobs are cpu intensive you will want to set this number to the number of cores
30you have or (cores - 1) to leave cycles for the os and other processes. This is
31something that will have to be tuned based on the jobs that are
32running. Grouping similar jobs in named queues will help you tune this number.
33
34queues
35======
36Default: (10, default)
37
38Semi-colon seperated list of queues to process jobs for with thier
39weights. Example: ``queues=(10, data_process); (15, email)``. With these
40weights and the ``CONCURRENT_JOBS`` setting, you should be able to tune managers
41running jobs locally pretty efficiently. If you have a larger box with a weight
42of 50 on q1 and 8 concurrent jobs and a smaller box with a weight 30 and 4
43concurrent jobs, the q1 jobs will be sent to the large box until it is no longer
44accepting jobs. At this point jobs will start to be sent to the next highest
45number until the large box is ready to accept another q1 job.
46
47.. note::
48
49 It is recommended that you have some workers listening for jobs on your
50 default queue so that anything that is not explicitly assigned will still be
51 run.
diff --git a/_sources/settings_file.txt b/_sources/settings_file.txt
index cd37b6a..cd37b6a 100644..100755
--- a/_sources/settings_file.txt
+++ b/_sources/settings_file.txt
diff --git a/_sources/style.txt b/_sources/style.txt
index 2f1cfea..2f1cfea 100644..100755
--- a/_sources/style.txt
+++ b/_sources/style.txt
diff --git a/_sources/using.rst.txt b/_sources/using.rst.txt
new file mode 100644
index 0000000..4e5ee10
--- /dev/null
+++ b/_sources/using.rst.txt
@@ -0,0 +1,14 @@
1#############
2Using EventMQ
3#############
4
5.. toctree::
6 :maxdepth: 2
7
8 settings_file
9
10****************************
11Client Environment Variables
12****************************
13
14``EMQ_BROKER_ADDR`` is the address a client should use to connect to the broker. The client can be any application using EventMQ.
diff --git a/_sources/using.txt b/_sources/using.txt
index 4e5ee10..4e5ee10 100644..100755
--- a/_sources/using.txt
+++ b/_sources/using.txt
diff --git a/_sources/utils.txt b/_sources/utils.txt
index 02904ed..02904ed 100644..100755
--- a/_sources/utils.txt
+++ b/_sources/utils.txt
diff --git a/_sources/utils/classes.rst.txt b/_sources/utils/classes.rst.txt
new file mode 100644
index 0000000..ab48e06
--- /dev/null
+++ b/_sources/utils/classes.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.utils.classes
2 :members:
3 :special-members:
diff --git a/_sources/utils/classes.txt b/_sources/utils/classes.txt
index ab48e06..ab48e06 100644..100755
--- a/_sources/utils/classes.txt
+++ b/_sources/utils/classes.txt
diff --git a/_sources/utils/devices.rst.txt b/_sources/utils/devices.rst.txt
new file mode 100644
index 0000000..ef68c27
--- /dev/null
+++ b/_sources/utils/devices.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.utils.devices
2 :members:
3 :special-members:
diff --git a/_sources/utils/devices.txt b/_sources/utils/devices.txt
index ef68c27..ef68c27 100644..100755
--- a/_sources/utils/devices.txt
+++ b/_sources/utils/devices.txt
diff --git a/_sources/utils/index.rst.txt b/_sources/utils/index.rst.txt
new file mode 100644
index 0000000..02904ed
--- /dev/null
+++ b/_sources/utils/index.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.utils
2 :members:
3 :special-members:
diff --git a/_sources/utils/index.txt b/_sources/utils/index.txt
index 02904ed..02904ed 100644..100755
--- a/_sources/utils/index.txt
+++ b/_sources/utils/index.txt
diff --git a/_sources/utils/messages.rst.txt b/_sources/utils/messages.rst.txt
new file mode 100644
index 0000000..e49897c
--- /dev/null
+++ b/_sources/utils/messages.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.utils.messages
2 :members:
3 :special-members:
diff --git a/_sources/utils/messages.txt b/_sources/utils/messages.txt
index e49897c..e49897c 100644..100755
--- a/_sources/utils/messages.txt
+++ b/_sources/utils/messages.txt
diff --git a/_sources/utils/settings.rst.txt b/_sources/utils/settings.rst.txt
new file mode 100644
index 0000000..1334f15
--- /dev/null
+++ b/_sources/utils/settings.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.utils.settings
2 :members:
3 :special-members:
diff --git a/_sources/utils/settings.txt b/_sources/utils/settings.txt
index 1334f15..1334f15 100644..100755
--- a/_sources/utils/settings.txt
+++ b/_sources/utils/settings.txt
diff --git a/_sources/utils/timeutils.rst.txt b/_sources/utils/timeutils.rst.txt
new file mode 100644
index 0000000..952c896
--- /dev/null
+++ b/_sources/utils/timeutils.rst.txt
@@ -0,0 +1,3 @@
1.. automodule:: eventmq.utils.timeutils
2 :members:
3 :special-members:
diff --git a/_sources/utils/timeutils.txt b/_sources/utils/timeutils.txt
index 952c896..952c896 100644..100755
--- a/_sources/utils/timeutils.txt
+++ b/_sources/utils/timeutils.txt
diff --git a/_static/ajax-loader.gif b/_static/ajax-loader.gif
index 61faf8c..61faf8c 100644..100755
--- a/_static/ajax-loader.gif
+++ b/_static/ajax-loader.gif
Binary files differ
diff --git a/_static/basic.css b/_static/basic.css
index 9fa77d8..7ed0e58 100644..100755
--- a/_static/basic.css
+++ b/_static/basic.css
@@ -4,7 +4,7 @@
4 * 4 *
5 * Sphinx stylesheet -- basic theme. 5 * Sphinx stylesheet -- basic theme.
6 * 6 *
7 * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. 7 * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
8 * :license: BSD, see LICENSE for details. 8 * :license: BSD, see LICENSE for details.
9 * 9 *
10 */ 10 */
@@ -52,6 +52,8 @@ div.sphinxsidebar {
52 width: 230px; 52 width: 230px;
53 margin-left: -100%; 53 margin-left: -100%;
54 font-size: 90%; 54 font-size: 90%;
55 word-wrap: break-word;
56 overflow-wrap : break-word;
55} 57}
56 58
57div.sphinxsidebar ul { 59div.sphinxsidebar ul {
@@ -83,10 +85,6 @@ div.sphinxsidebar #searchbox input[type="text"] {
83 width: 170px; 85 width: 170px;
84} 86}
85 87
86div.sphinxsidebar #searchbox input[type="submit"] {
87 width: 30px;
88}
89
90img { 88img {
91 border: 0; 89 border: 0;
92 max-width: 100%; 90 max-width: 100%;
@@ -124,6 +122,8 @@ ul.keywordmatches li.goodmatch a {
124 122
125table.contentstable { 123table.contentstable {
126 width: 90%; 124 width: 90%;
125 margin-left: auto;
126 margin-right: auto;
127} 127}
128 128
129table.contentstable p.biglink { 129table.contentstable p.biglink {
@@ -151,9 +151,14 @@ table.indextable td {
151 vertical-align: top; 151 vertical-align: top;
152} 152}
153 153
154table.indextable dl, table.indextable dd { 154table.indextable ul {
155 margin-top: 0; 155 margin-top: 0;
156 margin-bottom: 0; 156 margin-bottom: 0;
157 list-style-type: none;
158}
159
160table.indextable > tbody > tr > td > ul {
161 padding-left: 0em;
157} 162}
158 163
159table.indextable tr.pcap { 164table.indextable tr.pcap {
@@ -185,8 +190,22 @@ div.genindex-jumpbox {
185 padding: 0.4em; 190 padding: 0.4em;
186} 191}
187 192
193/* -- domain module index --------------------------------------------------- */
194
195table.modindextable td {
196 padding: 2px;
197 border-collapse: collapse;
198}
199
188/* -- general body styles --------------------------------------------------- */ 200/* -- general body styles --------------------------------------------------- */
189 201
202div.body p, div.body dd, div.body li, div.body blockquote {
203 -moz-hyphens: auto;
204 -ms-hyphens: auto;
205 -webkit-hyphens: auto;
206 hyphens: auto;
207}
208
190a.headerlink { 209a.headerlink {
191 visibility: hidden; 210 visibility: hidden;
192} 211}
@@ -212,10 +231,6 @@ div.body td {
212 text-align: left; 231 text-align: left;
213} 232}
214 233
215.field-list ul {
216 padding-left: 1em;
217}
218
219.first { 234.first {
220 margin-top: 0 !important; 235 margin-top: 0 !important;
221} 236}
@@ -332,10 +347,6 @@ table.docutils td, table.docutils th {
332 border-bottom: 1px solid #aaa; 347 border-bottom: 1px solid #aaa;
333} 348}
334 349
335table.field-list td, table.field-list th {
336 border: 0 !important;
337}
338
339table.footnote td, table.footnote th { 350table.footnote td, table.footnote th {
340 border: 0 !important; 351 border: 0 !important;
341} 352}
@@ -372,6 +383,20 @@ div.figure p.caption span.caption-number {
372div.figure p.caption span.caption-text { 383div.figure p.caption span.caption-text {
373} 384}
374 385
386/* -- field list styles ----------------------------------------------------- */
387
388table.field-list td, table.field-list th {
389 border: 0 !important;
390}
391
392.field-list ul {
393 margin: 0;
394 padding-left: 1em;
395}
396
397.field-list p {
398 margin: 0;
399}
375 400
376/* -- other body styles ----------------------------------------------------- */ 401/* -- other body styles ----------------------------------------------------- */
377 402
@@ -422,15 +447,6 @@ dl.glossary dt {
422 font-size: 1.1em; 447 font-size: 1.1em;
423} 448}
424 449
425.field-list ul {
426 margin: 0;
427 padding-left: 1em;
428}
429
430.field-list p {
431 margin: 0;
432}
433
434.optional { 450.optional {
435 font-size: 1.3em; 451 font-size: 1.3em;
436} 452}
@@ -489,6 +505,13 @@ pre {
489 overflow-y: hidden; /* fixes display issues on Chrome browsers */ 505 overflow-y: hidden; /* fixes display issues on Chrome browsers */
490} 506}
491 507
508span.pre {
509 -moz-hyphens: none;
510 -ms-hyphens: none;
511 -webkit-hyphens: none;
512 hyphens: none;
513}
514
492td.linenos pre { 515td.linenos pre {
493 padding: 5px 0px; 516 padding: 5px 0px;
494 border: 0; 517 border: 0;
@@ -580,6 +603,16 @@ span.eqno {
580 float: right; 603 float: right;
581} 604}
582 605
606span.eqno a.headerlink {
607 position: relative;
608 left: 0px;
609 z-index: 1;
610}
611
612div.math:hover a.headerlink {
613 visibility: visible;
614}
615
583/* -- printout stylesheet --------------------------------------------------- */ 616/* -- printout stylesheet --------------------------------------------------- */
584 617
585@media print { 618@media print {
diff --git a/_static/classic.css b/_static/classic.css
index 2da9234..2da9234 100644..100755
--- a/_static/classic.css
+++ b/_static/classic.css
diff --git a/_static/comment-bright.png b/_static/comment-bright.png
index 551517b..15e27ed 100644..100755
--- a/_static/comment-bright.png
+++ b/_static/comment-bright.png
Binary files differ
diff --git a/_static/comment-close.png b/_static/comment-close.png
index 09b54be..4d91bcf 100644..100755
--- a/_static/comment-close.png
+++ b/_static/comment-close.png
Binary files differ
diff --git a/_static/comment.png b/_static/comment.png
index 92feb52..dfbc0cb 100644..100755
--- a/_static/comment.png
+++ b/_static/comment.png
Binary files differ
diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css
index 7e17fb1..7e17fb1 100644..100755
--- a/_static/css/badge_only.css
+++ b/_static/css/badge_only.css
diff --git a/_static/css/theme.css b/_static/css/theme.css
index 7be9339..7be9339 100644..100755
--- a/_static/css/theme.css
+++ b/_static/css/theme.css
diff --git a/_static/doctools.js b/_static/doctools.js
index c7bfe76..8163495 100644..100755
--- a/_static/doctools.js
+++ b/_static/doctools.js
@@ -4,7 +4,7 @@
4 * 4 *
5 * Sphinx JavaScript utilities for all documentation. 5 * Sphinx JavaScript utilities for all documentation.
6 * 6 *
7 * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. 7 * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
8 * :license: BSD, see LICENSE for details. 8 * :license: BSD, see LICENSE for details.
9 * 9 *
10 */ 10 */
@@ -124,6 +124,7 @@ var Documentation = {
124 this.fixFirefoxAnchorBug(); 124 this.fixFirefoxAnchorBug();
125 this.highlightSearchWords(); 125 this.highlightSearchWords();
126 this.initIndexTable(); 126 this.initIndexTable();
127
127 }, 128 },
128 129
129 /** 130 /**
@@ -252,6 +253,29 @@ var Documentation = {
252 }); 253 });
253 var url = parts.join('/'); 254 var url = parts.join('/');
254 return path.substring(url.lastIndexOf('/') + 1, path.length - 1); 255 return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
256 },
257
258 initOnKeyListeners: function() {
259 $(document).keyup(function(event) {
260 var activeElementType = document.activeElement.tagName;
261 // don't navigate when in search box or textarea
262 if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
263 switch (event.keyCode) {
264 case 37: // left
265 var prevHref = $('link[rel="prev"]').prop('href');
266 if (prevHref) {
267 window.location.href = prevHref;
268 return false;
269 }
270 case 39: // right
271 var nextHref = $('link[rel="next"]').prop('href');
272 if (nextHref) {
273 window.location.href = nextHref;
274 return false;
275 }
276 }
277 }
278 });
255 } 279 }
256}; 280};
257 281
@@ -260,4 +284,4 @@ _ = Documentation.gettext;
260 284
261$(document).ready(function() { 285$(document).ready(function() {
262 Documentation.init(); 286 Documentation.init();
263}); 287}); \ No newline at end of file
diff --git a/_static/down-pressed.png b/_static/down-pressed.png
index 7c30d00..5756c8c 100644..100755
--- a/_static/down-pressed.png
+++ b/_static/down-pressed.png
Binary files differ
diff --git a/_static/down.png b/_static/down.png
index f48098a..1b3bdad 100644..100755
--- a/_static/down.png
+++ b/_static/down.png
Binary files differ
diff --git a/_static/file.png b/_static/file.png
index 254c60b..a858a41 100644..100755
--- a/_static/file.png
+++ b/_static/file.png
Binary files differ
diff --git a/_static/fonts/Inconsolata-Bold.ttf b/_static/fonts/Inconsolata-Bold.ttf
index 58c9fef..58c9fef 100644..100755
--- a/_static/fonts/Inconsolata-Bold.ttf
+++ b/_static/fonts/Inconsolata-Bold.ttf
Binary files differ
diff --git a/_static/fonts/Inconsolata-Regular.ttf b/_static/fonts/Inconsolata-Regular.ttf
index a87ffba..a87ffba 100644..100755
--- a/_static/fonts/Inconsolata-Regular.ttf
+++ b/_static/fonts/Inconsolata-Regular.ttf
Binary files differ
diff --git a/_static/fonts/Lato-Bold.ttf b/_static/fonts/Lato-Bold.ttf
index 7434369..7434369 100644..100755
--- a/_static/fonts/Lato-Bold.ttf
+++ b/_static/fonts/Lato-Bold.ttf
Binary files differ
diff --git a/_static/fonts/Lato-Regular.ttf b/_static/fonts/Lato-Regular.ttf
index 04ea8ef..04ea8ef 100644..100755
--- a/_static/fonts/Lato-Regular.ttf
+++ b/_static/fonts/Lato-Regular.ttf
Binary files differ
diff --git a/_static/fonts/RobotoSlab-Bold.ttf b/_static/fonts/RobotoSlab-Bold.ttf
index df5d1df..df5d1df 100644..100755
--- a/_static/fonts/RobotoSlab-Bold.ttf
+++ b/_static/fonts/RobotoSlab-Bold.ttf
Binary files differ
diff --git a/_static/fonts/RobotoSlab-Regular.ttf b/_static/fonts/RobotoSlab-Regular.ttf
index eb52a79..eb52a79 100644..100755
--- a/_static/fonts/RobotoSlab-Regular.ttf
+++ b/_static/fonts/RobotoSlab-Regular.ttf
Binary files differ
diff --git a/_static/fonts/fontawesome-webfont.eot b/_static/fonts/fontawesome-webfont.eot
index 84677bc..84677bc 100644..100755
--- a/_static/fonts/fontawesome-webfont.eot
+++ b/_static/fonts/fontawesome-webfont.eot
Binary files differ
diff --git a/_static/fonts/fontawesome-webfont.svg b/_static/fonts/fontawesome-webfont.svg
index d907b25..d907b25 100644..100755
--- a/_static/fonts/fontawesome-webfont.svg
+++ b/_static/fonts/fontawesome-webfont.svg
diff --git a/_static/fonts/fontawesome-webfont.ttf b/_static/fonts/fontawesome-webfont.ttf
index 96a3639..96a3639 100644..100755
--- a/_static/fonts/fontawesome-webfont.ttf
+++ b/_static/fonts/fontawesome-webfont.ttf
Binary files differ
diff --git a/_static/fonts/fontawesome-webfont.woff b/_static/fonts/fontawesome-webfont.woff
index 628b6a5..628b6a5 100644..100755
--- a/_static/fonts/fontawesome-webfont.woff
+++ b/_static/fonts/fontawesome-webfont.woff
Binary files differ
diff --git a/_static/jquery-1.11.1.js b/_static/jquery-1.11.1.js
index d4b67f7..d4b67f7 100644..100755
--- a/_static/jquery-1.11.1.js
+++ b/_static/jquery-1.11.1.js
diff --git a/_static/jquery-3.1.0.js b/_static/jquery-3.1.0.js
new file mode 100644
index 0000000..f2fc274
--- /dev/null
+++ b/_static/jquery-3.1.0.js
@@ -0,0 +1,10074 @@
1/*eslint-disable no-unused-vars*/
2/*!
3 * jQuery JavaScript Library v3.1.0
4 * https://jquery.com/
5 *
6 * Includes Sizzle.js
7 * https://sizzlejs.com/
8 *
9 * Copyright jQuery Foundation and other contributors
10 * Released under the MIT license
11 * https://jquery.org/license
12 *
13 * Date: 2016-07-07T21:44Z
14 */
15( function( global, factory ) {
16
17 "use strict";
18
19 if ( typeof module === "object" && typeof module.exports === "object" ) {
20
21 // For CommonJS and CommonJS-like environments where a proper `window`
22 // is present, execute the factory and get jQuery.
23 // For environments that do not have a `window` with a `document`
24 // (such as Node.js), expose a factory as module.exports.
25 // This accentuates the need for the creation of a real `window`.
26 // e.g. var jQuery = require("jquery")(window);
27 // See ticket #14549 for more info.
28 module.exports = global.document ?
29 factory( global, true ) :
30 function( w ) {
31 if ( !w.document ) {
32 throw new Error( "jQuery requires a window with a document" );
33 }
34 return factory( w );
35 };
36 } else {
37 factory( global );
38 }
39
40// Pass this if window is not defined yet
41} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
42
43// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
44// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
45// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
46// enough that all such attempts are guarded in a try block.
47"use strict";
48
49var arr = [];
50
51var document = window.document;
52
53var getProto = Object.getPrototypeOf;
54
55var slice = arr.slice;
56
57var concat = arr.concat;
58
59var push = arr.push;
60
61var indexOf = arr.indexOf;
62
63var class2type = {};
64
65var toString = class2type.toString;
66
67var hasOwn = class2type.hasOwnProperty;
68
69var fnToString = hasOwn.toString;
70
71var ObjectFunctionString = fnToString.call( Object );
72
73var support = {};
74
75
76
77 function DOMEval( code, doc ) {
78 doc = doc || document;
79
80 var script = doc.createElement( "script" );
81
82 script.text = code;
83 doc.head.appendChild( script ).parentNode.removeChild( script );
84 }
85/* global Symbol */
86// Defining this global in .eslintrc would create a danger of using the global
87// unguarded in another place, it seems safer to define global only for this module
88
89
90
91var
92 version = "3.1.0",
93
94 // Define a local copy of jQuery
95 jQuery = function( selector, context ) {
96
97 // The jQuery object is actually just the init constructor 'enhanced'
98 // Need init if jQuery is called (just allow error to be thrown if not included)
99 return new jQuery.fn.init( selector, context );
100 },
101
102 // Support: Android <=4.0 only
103 // Make sure we trim BOM and NBSP
104 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
105
106 // Matches dashed string for camelizing
107 rmsPrefix = /^-ms-/,
108 rdashAlpha = /-([a-z])/g,
109
110 // Used by jQuery.camelCase as callback to replace()
111 fcamelCase = function( all, letter ) {
112 return letter.toUpperCase();
113 };
114
115jQuery.fn = jQuery.prototype = {
116
117 // The current version of jQuery being used
118 jquery: version,
119
120 constructor: jQuery,
121
122 // The default length of a jQuery object is 0
123 length: 0,
124
125 toArray: function() {
126 return slice.call( this );
127 },
128
129 // Get the Nth element in the matched element set OR
130 // Get the whole matched element set as a clean array
131 get: function( num ) {
132 return num != null ?
133
134 // Return just the one element from the set
135 ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
136
137 // Return all the elements in a clean array
138 slice.call( this );
139 },
140
141 // Take an array of elements and push it onto the stack
142 // (returning the new matched element set)
143 pushStack: function( elems ) {
144
145 // Build a new jQuery matched element set
146 var ret = jQuery.merge( this.constructor(), elems );
147
148 // Add the old object onto the stack (as a reference)
149 ret.prevObject = this;
150
151 // Return the newly-formed element set
152 return ret;
153 },
154
155 // Execute a callback for every element in the matched set.
156 each: function( callback ) {
157 return jQuery.each( this, callback );
158 },
159
160 map: function( callback ) {
161 return this.pushStack( jQuery.map( this, function( elem, i ) {
162 return callback.call( elem, i, elem );
163 } ) );
164 },
165
166 slice: function() {
167 return this.pushStack( slice.apply( this, arguments ) );
168 },
169
170 first: function() {
171 return this.eq( 0 );
172 },
173
174 last: function() {
175 return this.eq( -1 );
176 },
177
178 eq: function( i ) {
179 var len = this.length,
180 j = +i + ( i < 0 ? len : 0 );
181 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
182 },
183
184 end: function() {
185 return this.prevObject || this.constructor();
186 },
187
188 // For internal use only.
189 // Behaves like an Array's method, not like a jQuery method.
190 push: push,
191 sort: arr.sort,
192 splice: arr.splice
193};
194
195jQuery.extend = jQuery.fn.extend = function() {
196 var options, name, src, copy, copyIsArray, clone,
197 target = arguments[ 0 ] || {},
198 i = 1,
199 length = arguments.length,
200 deep = false;
201
202 // Handle a deep copy situation
203 if ( typeof target === "boolean" ) {
204 deep = target;
205
206 // Skip the boolean and the target
207 target = arguments[ i ] || {};
208 i++;
209 }
210
211 // Handle case when target is a string or something (possible in deep copy)
212 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
213 target = {};
214 }
215
216 // Extend jQuery itself if only one argument is passed
217 if ( i === length ) {
218 target = this;
219 i--;
220 }
221
222 for ( ; i < length; i++ ) {
223
224 // Only deal with non-null/undefined values
225 if ( ( options = arguments[ i ] ) != null ) {
226
227 // Extend the base object
228 for ( name in options ) {
229 src = target[ name ];
230 copy = options[ name ];
231
232 // Prevent never-ending loop
233 if ( target === copy ) {
234 continue;
235 }
236
237 // Recurse if we're merging plain objects or arrays
238 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
239 ( copyIsArray = jQuery.isArray( copy ) ) ) ) {
240
241 if ( copyIsArray ) {
242 copyIsArray = false;
243 clone = src && jQuery.isArray( src ) ? src : [];
244
245 } else {
246 clone = src && jQuery.isPlainObject( src ) ? src : {};
247 }
248
249 // Never move original objects, clone them
250 target[ name ] = jQuery.extend( deep, clone, copy );
251
252 // Don't bring in undefined values
253 } else if ( copy !== undefined ) {
254 target[ name ] = copy;
255 }
256 }
257 }
258 }
259
260 // Return the modified object
261 return target;
262};
263
264jQuery.extend( {
265
266 // Unique for each copy of jQuery on the page
267 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
268
269 // Assume jQuery is ready without the ready module
270 isReady: true,
271
272 error: function( msg ) {
273 throw new Error( msg );
274 },
275
276 noop: function() {},
277
278 isFunction: function( obj ) {
279 return jQuery.type( obj ) === "function";
280 },
281
282 isArray: Array.isArray,
283
284 isWindow: function( obj ) {
285 return obj != null && obj === obj.window;
286 },
287
288 isNumeric: function( obj ) {
289
290 // As of jQuery 3.0, isNumeric is limited to
291 // strings and numbers (primitives or objects)
292 // that can be coerced to finite numbers (gh-2662)
293 var type = jQuery.type( obj );
294 return ( type === "number" || type === "string" ) &&
295
296 // parseFloat NaNs numeric-cast false positives ("")
297 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
298 // subtraction forces infinities to NaN
299 !isNaN( obj - parseFloat( obj ) );
300 },
301
302 isPlainObject: function( obj ) {
303 var proto, Ctor;
304
305 // Detect obvious negatives
306 // Use toString instead of jQuery.type to catch host objects
307 if ( !obj || toString.call( obj ) !== "[object Object]" ) {
308 return false;
309 }
310
311 proto = getProto( obj );
312
313 // Objects with no prototype (e.g., `Object.create( null )`) are plain
314 if ( !proto ) {
315 return true;
316 }
317
318 // Objects with prototype are plain iff they were constructed by a global Object function
319 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
320 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
321 },
322
323 isEmptyObject: function( obj ) {
324
325 /* eslint-disable no-unused-vars */
326 // See https://github.com/eslint/eslint/issues/6125
327 var name;
328
329 for ( name in obj ) {
330 return false;
331 }
332 return true;
333 },
334
335 type: function( obj ) {
336 if ( obj == null ) {
337 return obj + "";
338 }
339
340 // Support: Android <=2.3 only (functionish RegExp)
341 return typeof obj === "object" || typeof obj === "function" ?
342 class2type[ toString.call( obj ) ] || "object" :
343 typeof obj;
344 },
345
346 // Evaluates a script in a global context
347 globalEval: function( code ) {
348 DOMEval( code );
349 },
350
351 // Convert dashed to camelCase; used by the css and data modules
352 // Support: IE <=9 - 11, Edge 12 - 13
353 // Microsoft forgot to hump their vendor prefix (#9572)
354 camelCase: function( string ) {
355 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
356 },
357
358 nodeName: function( elem, name ) {
359 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
360 },
361
362 each: function( obj, callback ) {
363 var length, i = 0;
364
365 if ( isArrayLike( obj ) ) {
366 length = obj.length;
367 for ( ; i < length; i++ ) {
368 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
369 break;
370 }
371 }
372 } else {
373 for ( i in obj ) {
374 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
375 break;
376 }
377 }
378 }
379
380 return obj;
381 },
382
383 // Support: Android <=4.0 only
384 trim: function( text ) {
385 return text == null ?
386 "" :
387 ( text + "" ).replace( rtrim, "" );
388 },
389
390 // results is for internal usage only
391 makeArray: function( arr, results ) {
392 var ret = results || [];
393
394 if ( arr != null ) {
395 if ( isArrayLike( Object( arr ) ) ) {
396 jQuery.merge( ret,
397 typeof arr === "string" ?
398 [ arr ] : arr
399 );
400 } else {
401 push.call( ret, arr );
402 }
403 }
404
405 return ret;
406 },
407
408 inArray: function( elem, arr, i ) {
409 return arr == null ? -1 : indexOf.call( arr, elem, i );
410 },
411
412 // Support: Android <=4.0 only, PhantomJS 1 only
413 // push.apply(_, arraylike) throws on ancient WebKit
414 merge: function( first, second ) {
415 var len = +second.length,
416 j = 0,
417 i = first.length;
418
419 for ( ; j < len; j++ ) {
420 first[ i++ ] = second[ j ];
421 }
422
423 first.length = i;
424
425 return first;
426 },
427
428 grep: function( elems, callback, invert ) {
429 var callbackInverse,
430 matches = [],
431 i = 0,
432 length = elems.length,
433 callbackExpect = !invert;
434
435 // Go through the array, only saving the items
436 // that pass the validator function
437 for ( ; i < length; i++ ) {
438 callbackInverse = !callback( elems[ i ], i );
439 if ( callbackInverse !== callbackExpect ) {
440 matches.push( elems[ i ] );
441 }
442 }
443
444 return matches;
445 },
446
447 // arg is for internal usage only
448 map: function( elems, callback, arg ) {
449 var length, value,
450 i = 0,
451 ret = [];
452
453 // Go through the array, translating each of the items to their new values
454 if ( isArrayLike( elems ) ) {
455 length = elems.length;
456 for ( ; i < length; i++ ) {
457 value = callback( elems[ i ], i, arg );
458
459 if ( value != null ) {
460 ret.push( value );
461 }
462 }
463
464 // Go through every key on the object,
465 } else {
466 for ( i in elems ) {
467 value = callback( elems[ i ], i, arg );
468
469 if ( value != null ) {
470 ret.push( value );
471 }
472 }
473 }
474
475 // Flatten any nested arrays
476 return concat.apply( [], ret );
477 },
478
479 // A global GUID counter for objects
480 guid: 1,
481
482 // Bind a function to a context, optionally partially applying any
483 // arguments.
484 proxy: function( fn, context ) {
485 var tmp, args, proxy;
486
487 if ( typeof context === "string" ) {
488 tmp = fn[ context ];
489 context = fn;
490 fn = tmp;
491 }
492
493 // Quick check to determine if target is callable, in the spec
494 // this throws a TypeError, but we will just return undefined.
495 if ( !jQuery.isFunction( fn ) ) {
496 return undefined;
497 }
498
499 // Simulated bind
500 args = slice.call( arguments, 2 );
501 proxy = function() {
502 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
503 };
504
505 // Set the guid of unique handler to the same of original handler, so it can be removed
506 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
507
508 return proxy;
509 },
510
511 now: Date.now,
512
513 // jQuery.support is not used in Core but other projects attach their
514 // properties to it so it needs to exist.
515 support: support
516} );
517
518if ( typeof Symbol === "function" ) {
519 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
520}
521
522// Populate the class2type map
523jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
524function( i, name ) {
525 class2type[ "[object " + name + "]" ] = name.toLowerCase();
526} );
527
528function isArrayLike( obj ) {
529
530 // Support: real iOS 8.2 only (not reproducible in simulator)
531 // `in` check used to prevent JIT error (gh-2145)
532 // hasOwn isn't used here due to false negatives
533 // regarding Nodelist length in IE
534 var length = !!obj && "length" in obj && obj.length,
535 type = jQuery.type( obj );
536
537 if ( type === "function" || jQuery.isWindow( obj ) ) {
538 return false;
539 }
540
541 return type === "array" || length === 0 ||
542 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
543}
544var Sizzle =
545/*!
546 * Sizzle CSS Selector Engine v2.3.0
547 * https://sizzlejs.com/
548 *
549 * Copyright jQuery Foundation and other contributors
550 * Released under the MIT license
551 * http://jquery.org/license
552 *
553 * Date: 2016-01-04
554 */
555(function( window ) {
556
557var i,
558 support,
559 Expr,
560 getText,
561 isXML,
562 tokenize,
563 compile,
564 select,
565 outermostContext,
566 sortInput,
567 hasDuplicate,
568
569 // Local document vars
570 setDocument,
571 document,
572 docElem,
573 documentIsHTML,
574 rbuggyQSA,
575 rbuggyMatches,
576 matches,
577 contains,
578
579 // Instance-specific data
580 expando = "sizzle" + 1 * new Date(),
581 preferredDoc = window.document,
582 dirruns = 0,
583 done = 0,
584 classCache = createCache(),
585 tokenCache = createCache(),
586 compilerCache = createCache(),
587 sortOrder = function( a, b ) {
588 if ( a === b ) {
589 hasDuplicate = true;
590 }
591 return 0;
592 },
593
594 // Instance methods
595 hasOwn = ({}).hasOwnProperty,
596 arr = [],
597 pop = arr.pop,
598 push_native = arr.push,
599 push = arr.push,
600 slice = arr.slice,
601 // Use a stripped-down indexOf as it's faster than native
602 // https://jsperf.com/thor-indexof-vs-for/5
603 indexOf = function( list, elem ) {
604 var i = 0,
605 len = list.length;
606 for ( ; i < len; i++ ) {
607 if ( list[i] === elem ) {
608 return i;
609 }
610 }
611 return -1;
612 },
613
614 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
615
616 // Regular expressions
617
618 // http://www.w3.org/TR/css3-selectors/#whitespace
619 whitespace = "[\\x20\\t\\r\\n\\f]",
620
621 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
622 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
623
624 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
625 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
626 // Operator (capture 2)
627 "*([*^$|!~]?=)" + whitespace +
628 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
629 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
630 "*\\]",
631
632 pseudos = ":(" + identifier + ")(?:\\((" +
633 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
634 // 1. quoted (capture 3; capture 4 or capture 5)
635 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
636 // 2. simple (capture 6)
637 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
638 // 3. anything else (capture 2)
639 ".*" +
640 ")\\)|)",
641
642 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
643 rwhitespace = new RegExp( whitespace + "+", "g" ),
644 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
645
646 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
647 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
648
649 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
650
651 rpseudo = new RegExp( pseudos ),
652 ridentifier = new RegExp( "^" + identifier + "$" ),
653
654 matchExpr = {
655 "ID": new RegExp( "^#(" + identifier + ")" ),
656 "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
657 "TAG": new RegExp( "^(" + identifier + "|[*])" ),
658 "ATTR": new RegExp( "^" + attributes ),
659 "PSEUDO": new RegExp( "^" + pseudos ),
660 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
661 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
662 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
663 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
664 // For use in libraries implementing .is()
665 // We use this for POS matching in `select`
666 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
667 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
668 },
669
670 rinputs = /^(?:input|select|textarea|button)$/i,
671 rheader = /^h\d$/i,
672
673 rnative = /^[^{]+\{\s*\[native \w/,
674
675 // Easily-parseable/retrievable ID or TAG or CLASS selectors
676 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
677
678 rsibling = /[+~]/,
679
680 // CSS escapes
681 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
682 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
683 funescape = function( _, escaped, escapedWhitespace ) {
684 var high = "0x" + escaped - 0x10000;
685 // NaN means non-codepoint
686 // Support: Firefox<24
687 // Workaround erroneous numeric interpretation of +"0x"
688 return high !== high || escapedWhitespace ?
689 escaped :
690 high < 0 ?
691 // BMP codepoint
692 String.fromCharCode( high + 0x10000 ) :
693 // Supplemental Plane codepoint (surrogate pair)
694 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
695 },
696
697 // CSS string/identifier serialization
698 // https://drafts.csswg.org/cssom/#common-serializing-idioms
699 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,
700 fcssescape = function( ch, asCodePoint ) {
701 if ( asCodePoint ) {
702
703 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
704 if ( ch === "\0" ) {
705 return "\uFFFD";
706 }
707
708 // Control characters and (dependent upon position) numbers get escaped as code points
709 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
710 }
711
712 // Other potentially-special ASCII characters get backslash-escaped
713 return "\\" + ch;
714 },
715
716 // Used for iframes
717 // See setDocument()
718 // Removing the function wrapper causes a "Permission Denied"
719 // error in IE
720 unloadHandler = function() {
721 setDocument();
722 },
723
724 disabledAncestor = addCombinator(
725 function( elem ) {
726 return elem.disabled === true;
727 },
728 { dir: "parentNode", next: "legend" }
729 );
730
731// Optimize for push.apply( _, NodeList )
732try {
733 push.apply(
734 (arr = slice.call( preferredDoc.childNodes )),
735 preferredDoc.childNodes
736 );
737 // Support: Android<4.0
738 // Detect silently failing push.apply
739 arr[ preferredDoc.childNodes.length ].nodeType;
740} catch ( e ) {
741 push = { apply: arr.length ?
742
743 // Leverage slice if possible
744 function( target, els ) {
745 push_native.apply( target, slice.call(els) );
746 } :
747
748 // Support: IE<9
749 // Otherwise append directly
750 function( target, els ) {
751 var j = target.length,
752 i = 0;
753 // Can't trust NodeList.length
754 while ( (target[j++] = els[i++]) ) {}
755 target.length = j - 1;
756 }
757 };
758}
759
760function Sizzle( selector, context, results, seed ) {
761 var m, i, elem, nid, match, groups, newSelector,
762 newContext = context && context.ownerDocument,
763
764 // nodeType defaults to 9, since context defaults to document
765 nodeType = context ? context.nodeType : 9;
766
767 results = results || [];
768
769 // Return early from calls with invalid selector or context
770 if ( typeof selector !== "string" || !selector ||
771 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
772
773 return results;
774 }
775
776 // Try to shortcut find operations (as opposed to filters) in HTML documents
777 if ( !seed ) {
778
779 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
780 setDocument( context );
781 }
782 context = context || document;
783
784 if ( documentIsHTML ) {
785
786 // If the selector is sufficiently simple, try using a "get*By*" DOM method
787 // (excepting DocumentFragment context, where the methods don't exist)
788 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
789
790 // ID selector
791 if ( (m = match[1]) ) {
792
793 // Document context
794 if ( nodeType === 9 ) {
795 if ( (elem = context.getElementById( m )) ) {
796
797 // Support: IE, Opera, Webkit
798 // TODO: identify versions
799 // getElementById can match elements by name instead of ID
800 if ( elem.id === m ) {
801 results.push( elem );
802 return results;
803 }
804 } else {
805 return results;
806 }
807
808 // Element context
809 } else {
810
811 // Support: IE, Opera, Webkit
812 // TODO: identify versions
813 // getElementById can match elements by name instead of ID
814 if ( newContext && (elem = newContext.getElementById( m )) &&
815 contains( context, elem ) &&
816 elem.id === m ) {
817
818 results.push( elem );
819 return results;
820 }
821 }
822
823 // Type selector
824 } else if ( match[2] ) {
825 push.apply( results, context.getElementsByTagName( selector ) );
826 return results;
827
828 // Class selector
829 } else if ( (m = match[3]) && support.getElementsByClassName &&
830 context.getElementsByClassName ) {
831
832 push.apply( results, context.getElementsByClassName( m ) );
833 return results;
834 }
835 }
836
837 // Take advantage of querySelectorAll
838 if ( support.qsa &&
839 !compilerCache[ selector + " " ] &&
840 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
841
842 if ( nodeType !== 1 ) {
843 newContext = context;
844 newSelector = selector;
845
846 // qSA looks outside Element context, which is not what we want
847 // Thanks to Andrew Dupont for this workaround technique
848 // Support: IE <=8
849 // Exclude object elements
850 } else if ( context.nodeName.toLowerCase() !== "object" ) {
851
852 // Capture the context ID, setting it first if necessary
853 if ( (nid = context.getAttribute( "id" )) ) {
854 nid = nid.replace( rcssescape, fcssescape );
855 } else {
856 context.setAttribute( "id", (nid = expando) );
857 }
858
859 // Prefix every selector in the list
860 groups = tokenize( selector );
861 i = groups.length;
862 while ( i-- ) {
863 groups[i] = "#" + nid + " " + toSelector( groups[i] );
864 }
865 newSelector = groups.join( "," );
866
867 // Expand context for sibling selectors
868 newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
869 context;
870 }
871
872 if ( newSelector ) {
873 try {
874 push.apply( results,
875 newContext.querySelectorAll( newSelector )
876 );
877 return results;
878 } catch ( qsaError ) {
879 } finally {
880 if ( nid === expando ) {
881 context.removeAttribute( "id" );
882 }
883 }
884 }
885 }
886 }
887 }
888
889 // All others
890 return select( selector.replace( rtrim, "$1" ), context, results, seed );
891}
892
893/**
894 * Create key-value caches of limited size
895 * @returns {function(string, object)} Returns the Object data after storing it on itself with
896 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
897 * deleting the oldest entry
898 */
899function createCache() {
900 var keys = [];
901
902 function cache( key, value ) {
903 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
904 if ( keys.push( key + " " ) > Expr.cacheLength ) {
905 // Only keep the most recent entries
906 delete cache[ keys.shift() ];
907 }
908 return (cache[ key + " " ] = value);
909 }
910 return cache;
911}
912
913/**
914 * Mark a function for special use by Sizzle
915 * @param {Function} fn The function to mark
916 */
917function markFunction( fn ) {
918 fn[ expando ] = true;
919 return fn;
920}
921
922/**
923 * Support testing using an element
924 * @param {Function} fn Passed the created element and returns a boolean result
925 */
926function assert( fn ) {
927 var el = document.createElement("fieldset");
928
929 try {
930 return !!fn( el );
931 } catch (e) {
932 return false;
933 } finally {
934 // Remove from its parent by default
935 if ( el.parentNode ) {
936 el.parentNode.removeChild( el );
937 }
938 // release memory in IE
939 el = null;
940 }
941}
942
943/**
944 * Adds the same handler for all of the specified attrs
945 * @param {String} attrs Pipe-separated list of attributes
946 * @param {Function} handler The method that will be applied
947 */
948function addHandle( attrs, handler ) {
949 var arr = attrs.split("|"),
950 i = arr.length;
951
952 while ( i-- ) {
953 Expr.attrHandle[ arr[i] ] = handler;
954 }
955}
956
957/**
958 * Checks document order of two siblings
959 * @param {Element} a
960 * @param {Element} b
961 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
962 */
963function siblingCheck( a, b ) {
964 var cur = b && a,
965 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
966 a.sourceIndex - b.sourceIndex;
967
968 // Use IE sourceIndex if available on both nodes
969 if ( diff ) {
970 return diff;
971 }
972
973 // Check if b follows a
974 if ( cur ) {
975 while ( (cur = cur.nextSibling) ) {
976 if ( cur === b ) {
977 return -1;
978 }
979 }
980 }
981
982 return a ? 1 : -1;
983}
984
985/**
986 * Returns a function to use in pseudos for input types
987 * @param {String} type
988 */
989function createInputPseudo( type ) {
990 return function( elem ) {
991 var name = elem.nodeName.toLowerCase();
992 return name === "input" && elem.type === type;
993 };
994}
995
996/**
997 * Returns a function to use in pseudos for buttons
998 * @param {String} type
999 */
1000function createButtonPseudo( type ) {
1001 return function( elem ) {
1002 var name = elem.nodeName.toLowerCase();
1003 return (name === "input" || name === "button") && elem.type === type;
1004 };
1005}
1006
1007/**
1008 * Returns a function to use in pseudos for :enabled/:disabled
1009 * @param {Boolean} disabled true for :disabled; false for :enabled
1010 */
1011function createDisabledPseudo( disabled ) {
1012 // Known :disabled false positives:
1013 // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset)
1014 // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
1015 return function( elem ) {
1016
1017 // Check form elements and option elements for explicit disabling
1018 return "label" in elem && elem.disabled === disabled ||
1019 "form" in elem && elem.disabled === disabled ||
1020
1021 // Check non-disabled form elements for fieldset[disabled] ancestors
1022 "form" in elem && elem.disabled === false && (
1023 // Support: IE6-11+
1024 // Ancestry is covered for us
1025 elem.isDisabled === disabled ||
1026
1027 // Otherwise, assume any non-<option> under fieldset[disabled] is disabled
1028 /* jshint -W018 */
1029 elem.isDisabled !== !disabled &&
1030 ("label" in elem || !disabledAncestor( elem )) !== disabled
1031 );
1032 };
1033}
1034
1035/**
1036 * Returns a function to use in pseudos for positionals
1037 * @param {Function} fn
1038 */
1039function createPositionalPseudo( fn ) {
1040 return markFunction(function( argument ) {
1041 argument = +argument;
1042 return markFunction(function( seed, matches ) {
1043 var j,
1044 matchIndexes = fn( [], seed.length, argument ),
1045 i = matchIndexes.length;
1046
1047 // Match elements found at the specified indexes
1048 while ( i-- ) {
1049 if ( seed[ (j = matchIndexes[i]) ] ) {
1050 seed[j] = !(matches[j] = seed[j]);
1051 }
1052 }
1053 });
1054 });
1055}
1056
1057/**
1058 * Checks a node for validity as a Sizzle context
1059 * @param {Element|Object=} context
1060 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
1061 */
1062function testContext( context ) {
1063 return context && typeof context.getElementsByTagName !== "undefined" && context;
1064}
1065
1066// Expose support vars for convenience
1067support = Sizzle.support = {};
1068
1069/**
1070 * Detects XML nodes
1071 * @param {Element|Object} elem An element or a document
1072 * @returns {Boolean} True iff elem is a non-HTML XML node
1073 */
1074isXML = Sizzle.isXML = function( elem ) {
1075 // documentElement is verified for cases where it doesn't yet exist
1076 // (such as loading iframes in IE - #4833)
1077 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
1078 return documentElement ? documentElement.nodeName !== "HTML" : false;
1079};
1080
1081/**
1082 * Sets document-related variables once based on the current document
1083 * @param {Element|Object} [doc] An element or document object to use to set the document
1084 * @returns {Object} Returns the current document
1085 */
1086setDocument = Sizzle.setDocument = function( node ) {
1087 var hasCompare, subWindow,
1088 doc = node ? node.ownerDocument || node : preferredDoc;
1089
1090 // Return early if doc is invalid or already selected
1091 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
1092 return document;
1093 }
1094
1095 // Update global variables
1096 document = doc;
1097 docElem = document.documentElement;
1098 documentIsHTML = !isXML( document );
1099
1100 // Support: IE 9-11, Edge
1101 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
1102 if ( preferredDoc !== document &&
1103 (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
1104
1105 // Support: IE 11, Edge
1106 if ( subWindow.addEventListener ) {
1107 subWindow.addEventListener( "unload", unloadHandler, false );
1108
1109 // Support: IE 9 - 10 only
1110 } else if ( subWindow.attachEvent ) {
1111 subWindow.attachEvent( "onunload", unloadHandler );
1112 }
1113 }
1114
1115 /* Attributes
1116 ---------------------------------------------------------------------- */
1117
1118 // Support: IE<8
1119 // Verify that getAttribute really returns attributes and not properties
1120 // (excepting IE8 booleans)
1121 support.attributes = assert(function( el ) {
1122 el.className = "i";
1123 return !el.getAttribute("className");
1124 });
1125
1126 /* getElement(s)By*
1127 ---------------------------------------------------------------------- */
1128
1129 // Check if getElementsByTagName("*") returns only elements
1130 support.getElementsByTagName = assert(function( el ) {
1131 el.appendChild( document.createComment("") );
1132 return !el.getElementsByTagName("*").length;
1133 });
1134
1135 // Support: IE<9
1136 support.getElementsByClassName = rnative.test( document.getElementsByClassName );
1137
1138 // Support: IE<10
1139 // Check if getElementById returns elements by name
1140 // The broken getElementById methods don't pick up programmatically-set names,
1141 // so use a roundabout getElementsByName test
1142 support.getById = assert(function( el ) {
1143 docElem.appendChild( el ).id = expando;
1144 return !document.getElementsByName || !document.getElementsByName( expando ).length;
1145 });
1146
1147 // ID find and filter
1148 if ( support.getById ) {
1149 Expr.find["ID"] = function( id, context ) {
1150 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1151 var m = context.getElementById( id );
1152 return m ? [ m ] : [];
1153 }
1154 };
1155 Expr.filter["ID"] = function( id ) {
1156 var attrId = id.replace( runescape, funescape );
1157 return function( elem ) {
1158 return elem.getAttribute("id") === attrId;
1159 };
1160 };
1161 } else {
1162 // Support: IE6/7
1163 // getElementById is not reliable as a find shortcut
1164 delete Expr.find["ID"];
1165
1166 Expr.filter["ID"] = function( id ) {
1167 var attrId = id.replace( runescape, funescape );
1168 return function( elem ) {
1169 var node = typeof elem.getAttributeNode !== "undefined" &&
1170 elem.getAttributeNode("id");
1171 return node && node.value === attrId;
1172 };
1173 };
1174 }
1175
1176 // Tag
1177 Expr.find["TAG"] = support.getElementsByTagName ?
1178 function( tag, context ) {
1179 if ( typeof context.getElementsByTagName !== "undefined" ) {
1180 return context.getElementsByTagName( tag );
1181
1182 // DocumentFragment nodes don't have gEBTN
1183 } else if ( support.qsa ) {
1184 return context.querySelectorAll( tag );
1185 }
1186 } :
1187
1188 function( tag, context ) {
1189 var elem,
1190 tmp = [],
1191 i = 0,
1192 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
1193 results = context.getElementsByTagName( tag );
1194
1195 // Filter out possible comments
1196 if ( tag === "*" ) {
1197 while ( (elem = results[i++]) ) {
1198 if ( elem.nodeType === 1 ) {
1199 tmp.push( elem );
1200 }
1201 }
1202
1203 return tmp;
1204 }
1205 return results;
1206 };
1207
1208 // Class
1209 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
1210 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
1211 return context.getElementsByClassName( className );
1212 }
1213 };
1214
1215 /* QSA/matchesSelector
1216 ---------------------------------------------------------------------- */
1217
1218 // QSA and matchesSelector support
1219
1220 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
1221 rbuggyMatches = [];
1222
1223 // qSa(:focus) reports false when true (Chrome 21)
1224 // We allow this because of a bug in IE8/9 that throws an error
1225 // whenever `document.activeElement` is accessed on an iframe
1226 // So, we allow :focus to pass through QSA all the time to avoid the IE error
1227 // See https://bugs.jquery.com/ticket/13378
1228 rbuggyQSA = [];
1229
1230 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
1231 // Build QSA regex
1232 // Regex strategy adopted from Diego Perini
1233 assert(function( el ) {
1234 // Select is set to empty string on purpose
1235 // This is to test IE's treatment of not explicitly
1236 // setting a boolean content attribute,
1237 // since its presence should be enough
1238 // https://bugs.jquery.com/ticket/12359
1239 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
1240 "<select id='" + expando + "-\r\\' msallowcapture=''>" +
1241 "<option selected=''></option></select>";
1242
1243 // Support: IE8, Opera 11-12.16
1244 // Nothing should be selected when empty strings follow ^= or $= or *=
1245 // The test attribute must be unknown in Opera but "safe" for WinRT
1246 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
1247 if ( el.querySelectorAll("[msallowcapture^='']").length ) {
1248 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
1249 }
1250
1251 // Support: IE8
1252 // Boolean attributes and "value" are not treated correctly
1253 if ( !el.querySelectorAll("[selected]").length ) {
1254 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
1255 }
1256
1257 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
1258 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
1259 rbuggyQSA.push("~=");
1260 }
1261
1262 // Webkit/Opera - :checked should return selected option elements
1263 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
1264 // IE8 throws error here and will not see later tests
1265 if ( !el.querySelectorAll(":checked").length ) {
1266 rbuggyQSA.push(":checked");
1267 }
1268
1269 // Support: Safari 8+, iOS 8+
1270 // https://bugs.webkit.org/show_bug.cgi?id=136851
1271 // In-page `selector#id sibling-combinator selector` fails
1272 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
1273 rbuggyQSA.push(".#.+[+~]");
1274 }
1275 });
1276
1277 assert(function( el ) {
1278 el.innerHTML = "<a href='' disabled='disabled'></a>" +
1279 "<select disabled='disabled'><option/></select>";
1280
1281 // Support: Windows 8 Native Apps
1282 // The type and name attributes are restricted during .innerHTML assignment
1283 var input = document.createElement("input");
1284 input.setAttribute( "type", "hidden" );
1285 el.appendChild( input ).setAttribute( "name", "D" );
1286
1287 // Support: IE8
1288 // Enforce case-sensitivity of name attribute
1289 if ( el.querySelectorAll("[name=d]").length ) {
1290 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
1291 }
1292
1293 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
1294 // IE8 throws error here and will not see later tests
1295 if ( el.querySelectorAll(":enabled").length !== 2 ) {
1296 rbuggyQSA.push( ":enabled", ":disabled" );
1297 }
1298
1299 // Support: IE9-11+
1300 // IE's :disabled selector does not pick up the children of disabled fieldsets
1301 docElem.appendChild( el ).disabled = true;
1302 if ( el.querySelectorAll(":disabled").length !== 2 ) {
1303 rbuggyQSA.push( ":enabled", ":disabled" );
1304 }
1305
1306 // Opera 10-11 does not throw on post-comma invalid pseudos
1307 el.querySelectorAll("*,:x");
1308 rbuggyQSA.push(",.*:");
1309 });
1310 }
1311
1312 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
1313 docElem.webkitMatchesSelector ||
1314 docElem.mozMatchesSelector ||
1315 docElem.oMatchesSelector ||
1316 docElem.msMatchesSelector) )) ) {
1317
1318 assert(function( el ) {
1319 // Check to see if it's possible to do matchesSelector
1320 // on a disconnected node (IE 9)
1321 support.disconnectedMatch = matches.call( el, "*" );
1322
1323 // This should fail with an exception
1324 // Gecko does not error, returns false instead
1325 matches.call( el, "[s!='']:x" );
1326 rbuggyMatches.push( "!=", pseudos );
1327 });
1328 }
1329
1330 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
1331 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
1332
1333 /* Contains
1334 ---------------------------------------------------------------------- */
1335 hasCompare = rnative.test( docElem.compareDocumentPosition );
1336
1337 // Element contains another
1338 // Purposefully self-exclusive
1339 // As in, an element does not contain itself
1340 contains = hasCompare || rnative.test( docElem.contains ) ?
1341 function( a, b ) {
1342 var adown = a.nodeType === 9 ? a.documentElement : a,
1343 bup = b && b.parentNode;
1344 return a === bup || !!( bup && bup.nodeType === 1 && (
1345 adown.contains ?
1346 adown.contains( bup ) :
1347 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
1348 ));
1349 } :
1350 function( a, b ) {
1351 if ( b ) {
1352 while ( (b = b.parentNode) ) {
1353 if ( b === a ) {
1354 return true;
1355 }
1356 }
1357 }
1358 return false;
1359 };
1360
1361 /* Sorting
1362 ---------------------------------------------------------------------- */
1363
1364 // Document order sorting
1365 sortOrder = hasCompare ?
1366 function( a, b ) {
1367
1368 // Flag for duplicate removal
1369 if ( a === b ) {
1370 hasDuplicate = true;
1371 return 0;
1372 }
1373
1374 // Sort on method existence if only one input has compareDocumentPosition
1375 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
1376 if ( compare ) {
1377 return compare;
1378 }
1379
1380 // Calculate position if both inputs belong to the same document
1381 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
1382 a.compareDocumentPosition( b ) :
1383
1384 // Otherwise we know they are disconnected
1385 1;
1386
1387 // Disconnected nodes
1388 if ( compare & 1 ||
1389 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
1390
1391 // Choose the first element that is related to our preferred document
1392 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
1393 return -1;
1394 }
1395 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
1396 return 1;
1397 }
1398
1399 // Maintain original order
1400 return sortInput ?
1401 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1402 0;
1403 }
1404
1405 return compare & 4 ? -1 : 1;
1406 } :
1407 function( a, b ) {
1408 // Exit early if the nodes are identical
1409 if ( a === b ) {
1410 hasDuplicate = true;
1411 return 0;
1412 }
1413
1414 var cur,
1415 i = 0,
1416 aup = a.parentNode,
1417 bup = b.parentNode,
1418 ap = [ a ],
1419 bp = [ b ];
1420
1421 // Parentless nodes are either documents or disconnected
1422 if ( !aup || !bup ) {
1423 return a === document ? -1 :
1424 b === document ? 1 :
1425 aup ? -1 :
1426 bup ? 1 :
1427 sortInput ?
1428 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1429 0;
1430
1431 // If the nodes are siblings, we can do a quick check
1432 } else if ( aup === bup ) {
1433 return siblingCheck( a, b );
1434 }
1435
1436 // Otherwise we need full lists of their ancestors for comparison
1437 cur = a;
1438 while ( (cur = cur.parentNode) ) {
1439 ap.unshift( cur );
1440 }
1441 cur = b;
1442 while ( (cur = cur.parentNode) ) {
1443 bp.unshift( cur );
1444 }
1445
1446 // Walk down the tree looking for a discrepancy
1447 while ( ap[i] === bp[i] ) {
1448 i++;
1449 }
1450
1451 return i ?
1452 // Do a sibling check if the nodes have a common ancestor
1453 siblingCheck( ap[i], bp[i] ) :
1454
1455 // Otherwise nodes in our document sort first
1456 ap[i] === preferredDoc ? -1 :
1457 bp[i] === preferredDoc ? 1 :
1458 0;
1459 };
1460
1461 return document;
1462};
1463
1464Sizzle.matches = function( expr, elements ) {
1465 return Sizzle( expr, null, null, elements );
1466};
1467
1468Sizzle.matchesSelector = function( elem, expr ) {
1469 // Set document vars if needed
1470 if ( ( elem.ownerDocument || elem ) !== document ) {
1471 setDocument( elem );
1472 }
1473
1474 // Make sure that attribute selectors are quoted
1475 expr = expr.replace( rattributeQuotes, "='$1']" );
1476
1477 if ( support.matchesSelector && documentIsHTML &&
1478 !compilerCache[ expr + " " ] &&
1479 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
1480 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
1481
1482 try {
1483 var ret = matches.call( elem, expr );
1484
1485 // IE 9's matchesSelector returns false on disconnected nodes
1486 if ( ret || support.disconnectedMatch ||
1487 // As well, disconnected nodes are said to be in a document
1488 // fragment in IE 9
1489 elem.document && elem.document.nodeType !== 11 ) {
1490 return ret;
1491 }
1492 } catch (e) {}
1493 }
1494
1495 return Sizzle( expr, document, null, [ elem ] ).length > 0;
1496};
1497
1498Sizzle.contains = function( context, elem ) {
1499 // Set document vars if needed
1500 if ( ( context.ownerDocument || context ) !== document ) {
1501 setDocument( context );
1502 }
1503 return contains( context, elem );
1504};
1505
1506Sizzle.attr = function( elem, name ) {
1507 // Set document vars if needed
1508 if ( ( elem.ownerDocument || elem ) !== document ) {
1509 setDocument( elem );
1510 }
1511
1512 var fn = Expr.attrHandle[ name.toLowerCase() ],
1513 // Don't get fooled by Object.prototype properties (jQuery #13807)
1514 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
1515 fn( elem, name, !documentIsHTML ) :
1516 undefined;
1517
1518 return val !== undefined ?
1519 val :
1520 support.attributes || !documentIsHTML ?
1521 elem.getAttribute( name ) :
1522 (val = elem.getAttributeNode(name)) && val.specified ?
1523 val.value :
1524 null;
1525};
1526
1527Sizzle.escape = function( sel ) {
1528 return (sel + "").replace( rcssescape, fcssescape );
1529};
1530
1531Sizzle.error = function( msg ) {
1532 throw new Error( "Syntax error, unrecognized expression: " + msg );
1533};
1534
1535/**
1536 * Document sorting and removing duplicates
1537 * @param {ArrayLike} results
1538 */
1539Sizzle.uniqueSort = function( results ) {
1540 var elem,
1541 duplicates = [],
1542 j = 0,
1543 i = 0;
1544
1545 // Unless we *know* we can detect duplicates, assume their presence
1546 hasDuplicate = !support.detectDuplicates;
1547 sortInput = !support.sortStable && results.slice( 0 );
1548 results.sort( sortOrder );
1549
1550 if ( hasDuplicate ) {
1551 while ( (elem = results[i++]) ) {
1552 if ( elem === results[ i ] ) {
1553 j = duplicates.push( i );
1554 }
1555 }
1556 while ( j-- ) {
1557 results.splice( duplicates[ j ], 1 );
1558 }
1559 }
1560
1561 // Clear input after sorting to release objects
1562 // See https://github.com/jquery/sizzle/pull/225
1563 sortInput = null;
1564
1565 return results;
1566};
1567
1568/**
1569 * Utility function for retrieving the text value of an array of DOM nodes
1570 * @param {Array|Element} elem
1571 */
1572getText = Sizzle.getText = function( elem ) {
1573 var node,
1574 ret = "",
1575 i = 0,
1576 nodeType = elem.nodeType;
1577
1578 if ( !nodeType ) {
1579 // If no nodeType, this is expected to be an array
1580 while ( (node = elem[i++]) ) {
1581 // Do not traverse comment nodes
1582 ret += getText( node );
1583 }
1584 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
1585 // Use textContent for elements
1586 // innerText usage removed for consistency of new lines (jQuery #11153)
1587 if ( typeof elem.textContent === "string" ) {
1588 return elem.textContent;
1589 } else {
1590 // Traverse its children
1591 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
1592 ret += getText( elem );
1593 }
1594 }
1595 } else if ( nodeType === 3 || nodeType === 4 ) {
1596 return elem.nodeValue;
1597 }
1598 // Do not include comment or processing instruction nodes
1599
1600 return ret;
1601};
1602
1603Expr = Sizzle.selectors = {
1604
1605 // Can be adjusted by the user
1606 cacheLength: 50,
1607
1608 createPseudo: markFunction,
1609
1610 match: matchExpr,
1611
1612 attrHandle: {},
1613
1614 find: {},
1615
1616 relative: {
1617 ">": { dir: "parentNode", first: true },
1618 " ": { dir: "parentNode" },
1619 "+": { dir: "previousSibling", first: true },
1620 "~": { dir: "previousSibling" }
1621 },
1622
1623 preFilter: {
1624 "ATTR": function( match ) {
1625 match[1] = match[1].replace( runescape, funescape );
1626
1627 // Move the given value to match[3] whether quoted or unquoted
1628 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
1629
1630 if ( match[2] === "~=" ) {
1631 match[3] = " " + match[3] + " ";
1632 }
1633
1634 return match.slice( 0, 4 );
1635 },
1636
1637 "CHILD": function( match ) {
1638 /* matches from matchExpr["CHILD"]
1639 1 type (only|nth|...)
1640 2 what (child|of-type)
1641 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
1642 4 xn-component of xn+y argument ([+-]?\d*n|)
1643 5 sign of xn-component
1644 6 x of xn-component
1645 7 sign of y-component
1646 8 y of y-component
1647 */
1648 match[1] = match[1].toLowerCase();
1649
1650 if ( match[1].slice( 0, 3 ) === "nth" ) {
1651 // nth-* requires argument
1652 if ( !match[3] ) {
1653 Sizzle.error( match[0] );
1654 }
1655
1656 // numeric x and y parameters for Expr.filter.CHILD
1657 // remember that false/true cast respectively to 0/1
1658 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
1659 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
1660
1661 // other types prohibit arguments
1662 } else if ( match[3] ) {
1663 Sizzle.error( match[0] );
1664 }
1665
1666 return match;
1667 },
1668
1669 "PSEUDO": function( match ) {
1670 var excess,
1671 unquoted = !match[6] && match[2];
1672
1673 if ( matchExpr["CHILD"].test( match[0] ) ) {
1674 return null;
1675 }
1676
1677 // Accept quoted arguments as-is
1678 if ( match[3] ) {
1679 match[2] = match[4] || match[5] || "";
1680
1681 // Strip excess characters from unquoted arguments
1682 } else if ( unquoted && rpseudo.test( unquoted ) &&
1683 // Get excess from tokenize (recursively)
1684 (excess = tokenize( unquoted, true )) &&
1685 // advance to the next closing parenthesis
1686 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
1687
1688 // excess is a negative index
1689 match[0] = match[0].slice( 0, excess );
1690 match[2] = unquoted.slice( 0, excess );
1691 }
1692
1693 // Return only captures needed by the pseudo filter method (type and argument)
1694 return match.slice( 0, 3 );
1695 }
1696 },
1697
1698 filter: {
1699
1700 "TAG": function( nodeNameSelector ) {
1701 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
1702 return nodeNameSelector === "*" ?
1703 function() { return true; } :
1704 function( elem ) {
1705 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
1706 };
1707 },
1708
1709 "CLASS": function( className ) {
1710 var pattern = classCache[ className + " " ];
1711
1712 return pattern ||
1713 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
1714 classCache( className, function( elem ) {
1715 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
1716 });
1717 },
1718
1719 "ATTR": function( name, operator, check ) {
1720 return function( elem ) {
1721 var result = Sizzle.attr( elem, name );
1722
1723 if ( result == null ) {
1724 return operator === "!=";
1725 }
1726 if ( !operator ) {
1727 return true;
1728 }
1729
1730 result += "";
1731
1732 return operator === "=" ? result === check :
1733 operator === "!=" ? result !== check :
1734 operator === "^=" ? check && result.indexOf( check ) === 0 :
1735 operator === "*=" ? check && result.indexOf( check ) > -1 :
1736 operator === "$=" ? check && result.slice( -check.length ) === check :
1737 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
1738 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
1739 false;
1740 };
1741 },
1742
1743 "CHILD": function( type, what, argument, first, last ) {
1744 var simple = type.slice( 0, 3 ) !== "nth",
1745 forward = type.slice( -4 ) !== "last",
1746 ofType = what === "of-type";
1747
1748 return first === 1 && last === 0 ?
1749
1750 // Shortcut for :nth-*(n)
1751 function( elem ) {
1752 return !!elem.parentNode;
1753 } :
1754
1755 function( elem, context, xml ) {
1756 var cache, uniqueCache, outerCache, node, nodeIndex, start,
1757 dir = simple !== forward ? "nextSibling" : "previousSibling",
1758 parent = elem.parentNode,
1759 name = ofType && elem.nodeName.toLowerCase(),
1760 useCache = !xml && !ofType,
1761 diff = false;
1762
1763 if ( parent ) {
1764
1765 // :(first|last|only)-(child|of-type)
1766 if ( simple ) {
1767 while ( dir ) {
1768 node = elem;
1769 while ( (node = node[ dir ]) ) {
1770 if ( ofType ?
1771 node.nodeName.toLowerCase() === name :
1772 node.nodeType === 1 ) {
1773
1774 return false;
1775 }
1776 }
1777 // Reverse direction for :only-* (if we haven't yet done so)
1778 start = dir = type === "only" && !start && "nextSibling";
1779 }
1780 return true;
1781 }
1782
1783 start = [ forward ? parent.firstChild : parent.lastChild ];
1784
1785 // non-xml :nth-child(...) stores cache data on `parent`
1786 if ( forward && useCache ) {
1787
1788 // Seek `elem` from a previously-cached index
1789
1790 // ...in a gzip-friendly way
1791 node = parent;
1792 outerCache = node[ expando ] || (node[ expando ] = {});
1793
1794 // Support: IE <9 only
1795 // Defend against cloned attroperties (jQuery gh-1709)
1796 uniqueCache = outerCache[ node.uniqueID ] ||
1797 (outerCache[ node.uniqueID ] = {});
1798
1799 cache = uniqueCache[ type ] || [];
1800 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
1801 diff = nodeIndex && cache[ 2 ];
1802 node = nodeIndex && parent.childNodes[ nodeIndex ];
1803
1804 while ( (node = ++nodeIndex && node && node[ dir ] ||
1805
1806 // Fallback to seeking `elem` from the start
1807 (diff = nodeIndex = 0) || start.pop()) ) {
1808
1809 // When found, cache indexes on `parent` and break
1810 if ( node.nodeType === 1 && ++diff && node === elem ) {
1811 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
1812 break;
1813 }
1814 }
1815
1816 } else {
1817 // Use previously-cached element index if available
1818 if ( useCache ) {
1819 // ...in a gzip-friendly way
1820 node = elem;
1821 outerCache = node[ expando ] || (node[ expando ] = {});
1822
1823 // Support: IE <9 only
1824 // Defend against cloned attroperties (jQuery gh-1709)
1825 uniqueCache = outerCache[ node.uniqueID ] ||
1826 (outerCache[ node.uniqueID ] = {});
1827
1828 cache = uniqueCache[ type ] || [];
1829 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
1830 diff = nodeIndex;
1831 }
1832
1833 // xml :nth-child(...)
1834 // or :nth-last-child(...) or :nth(-last)?-of-type(...)
1835 if ( diff === false ) {
1836 // Use the same loop as above to seek `elem` from the start
1837 while ( (node = ++nodeIndex && node && node[ dir ] ||
1838 (diff = nodeIndex = 0) || start.pop()) ) {
1839
1840 if ( ( ofType ?
1841 node.nodeName.toLowerCase() === name :
1842 node.nodeType === 1 ) &&
1843 ++diff ) {
1844
1845 // Cache the index of each encountered element
1846 if ( useCache ) {
1847 outerCache = node[ expando ] || (node[ expando ] = {});
1848
1849 // Support: IE <9 only
1850 // Defend against cloned attroperties (jQuery gh-1709)
1851 uniqueCache = outerCache[ node.uniqueID ] ||
1852 (outerCache[ node.uniqueID ] = {});
1853
1854 uniqueCache[ type ] = [ dirruns, diff ];
1855 }
1856
1857 if ( node === elem ) {
1858 break;
1859 }
1860 }
1861 }
1862 }
1863 }
1864
1865 // Incorporate the offset, then check against cycle size
1866 diff -= last;
1867 return diff === first || ( diff % first === 0 && diff / first >= 0 );
1868 }
1869 };
1870 },
1871
1872 "PSEUDO": function( pseudo, argument ) {
1873 // pseudo-class names are case-insensitive
1874 // http://www.w3.org/TR/selectors/#pseudo-classes
1875 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
1876 // Remember that setFilters inherits from pseudos
1877 var args,
1878 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
1879 Sizzle.error( "unsupported pseudo: " + pseudo );
1880
1881 // The user may use createPseudo to indicate that
1882 // arguments are needed to create the filter function
1883 // just as Sizzle does
1884 if ( fn[ expando ] ) {
1885 return fn( argument );
1886 }
1887
1888 // But maintain support for old signatures
1889 if ( fn.length > 1 ) {
1890 args = [ pseudo, pseudo, "", argument ];
1891 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
1892 markFunction(function( seed, matches ) {
1893 var idx,
1894 matched = fn( seed, argument ),
1895 i = matched.length;
1896 while ( i-- ) {
1897 idx = indexOf( seed, matched[i] );
1898 seed[ idx ] = !( matches[ idx ] = matched[i] );
1899 }
1900 }) :
1901 function( elem ) {
1902 return fn( elem, 0, args );
1903 };
1904 }
1905
1906 return fn;
1907 }
1908 },
1909
1910 pseudos: {
1911 // Potentially complex pseudos
1912 "not": markFunction(function( selector ) {
1913 // Trim the selector passed to compile
1914 // to avoid treating leading and trailing
1915 // spaces as combinators
1916 var input = [],
1917 results = [],
1918 matcher = compile( selector.replace( rtrim, "$1" ) );
1919
1920 return matcher[ expando ] ?
1921 markFunction(function( seed, matches, context, xml ) {
1922 var elem,
1923 unmatched = matcher( seed, null, xml, [] ),
1924 i = seed.length;
1925
1926 // Match elements unmatched by `matcher`
1927 while ( i-- ) {
1928 if ( (elem = unmatched[i]) ) {
1929 seed[i] = !(matches[i] = elem);
1930 }
1931 }
1932 }) :
1933 function( elem, context, xml ) {
1934 input[0] = elem;
1935 matcher( input, null, xml, results );
1936 // Don't keep the element (issue #299)
1937 input[0] = null;
1938 return !results.pop();
1939 };
1940 }),
1941
1942 "has": markFunction(function( selector ) {
1943 return function( elem ) {
1944 return Sizzle( selector, elem ).length > 0;
1945 };
1946 }),
1947
1948 "contains": markFunction(function( text ) {
1949 text = text.replace( runescape, funescape );
1950 return function( elem ) {
1951 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
1952 };
1953 }),
1954
1955 // "Whether an element is represented by a :lang() selector
1956 // is based solely on the element's language value
1957 // being equal to the identifier C,
1958 // or beginning with the identifier C immediately followed by "-".
1959 // The matching of C against the element's language value is performed case-insensitively.
1960 // The identifier C does not have to be a valid language name."
1961 // http://www.w3.org/TR/selectors/#lang-pseudo
1962 "lang": markFunction( function( lang ) {
1963 // lang value must be a valid identifier
1964 if ( !ridentifier.test(lang || "") ) {
1965 Sizzle.error( "unsupported lang: " + lang );
1966 }
1967 lang = lang.replace( runescape, funescape ).toLowerCase();
1968 return function( elem ) {
1969 var elemLang;
1970 do {
1971 if ( (elemLang = documentIsHTML ?
1972 elem.lang :
1973 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
1974
1975 elemLang = elemLang.toLowerCase();
1976 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
1977 }
1978 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
1979 return false;
1980 };
1981 }),
1982
1983 // Miscellaneous
1984 "target": function( elem ) {
1985 var hash = window.location && window.location.hash;
1986 return hash && hash.slice( 1 ) === elem.id;
1987 },
1988
1989 "root": function( elem ) {
1990 return elem === docElem;
1991 },
1992
1993 "focus": function( elem ) {
1994 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
1995 },
1996
1997 // Boolean properties
1998 "enabled": createDisabledPseudo( false ),
1999 "disabled": createDisabledPseudo( true ),
2000
2001 "checked": function( elem ) {
2002 // In CSS3, :checked should return both checked and selected elements
2003 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
2004 var nodeName = elem.nodeName.toLowerCase();
2005 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
2006 },
2007
2008 "selected": function( elem ) {
2009 // Accessing this property makes selected-by-default
2010 // options in Safari work properly
2011 if ( elem.parentNode ) {
2012 elem.parentNode.selectedIndex;
2013 }
2014
2015 return elem.selected === true;
2016 },
2017
2018 // Contents
2019 "empty": function( elem ) {
2020 // http://www.w3.org/TR/selectors/#empty-pseudo
2021 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
2022 // but not by others (comment: 8; processing instruction: 7; etc.)
2023 // nodeType < 6 works because attributes (2) do not appear as children
2024 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
2025 if ( elem.nodeType < 6 ) {
2026 return false;
2027 }
2028 }
2029 return true;
2030 },
2031
2032 "parent": function( elem ) {
2033 return !Expr.pseudos["empty"]( elem );
2034 },
2035
2036 // Element/input types
2037 "header": function( elem ) {
2038 return rheader.test( elem.nodeName );
2039 },
2040
2041 "input": function( elem ) {
2042 return rinputs.test( elem.nodeName );
2043 },
2044
2045 "button": function( elem ) {
2046 var name = elem.nodeName.toLowerCase();
2047 return name === "input" && elem.type === "button" || name === "button";
2048 },
2049
2050 "text": function( elem ) {
2051 var attr;
2052 return elem.nodeName.toLowerCase() === "input" &&
2053 elem.type === "text" &&
2054
2055 // Support: IE<8
2056 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
2057 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
2058 },
2059
2060 // Position-in-collection
2061 "first": createPositionalPseudo(function() {
2062 return [ 0 ];
2063 }),
2064
2065 "last": createPositionalPseudo(function( matchIndexes, length ) {
2066 return [ length - 1 ];
2067 }),
2068
2069 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
2070 return [ argument < 0 ? argument + length : argument ];
2071 }),
2072
2073 "even": createPositionalPseudo(function( matchIndexes, length ) {
2074 var i = 0;
2075 for ( ; i < length; i += 2 ) {
2076 matchIndexes.push( i );
2077 }
2078 return matchIndexes;
2079 }),
2080
2081 "odd": createPositionalPseudo(function( matchIndexes, length ) {
2082 var i = 1;
2083 for ( ; i < length; i += 2 ) {
2084 matchIndexes.push( i );
2085 }
2086 return matchIndexes;
2087 }),
2088
2089 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
2090 var i = argument < 0 ? argument + length : argument;
2091 for ( ; --i >= 0; ) {
2092 matchIndexes.push( i );
2093 }
2094 return matchIndexes;
2095 }),
2096
2097 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
2098 var i = argument < 0 ? argument + length : argument;
2099 for ( ; ++i < length; ) {
2100 matchIndexes.push( i );
2101 }
2102 return matchIndexes;
2103 })
2104 }
2105};
2106
2107Expr.pseudos["nth"] = Expr.pseudos["eq"];
2108
2109// Add button/input type pseudos
2110for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
2111 Expr.pseudos[ i ] = createInputPseudo( i );
2112}
2113for ( i in { submit: true, reset: true } ) {
2114 Expr.pseudos[ i ] = createButtonPseudo( i );
2115}
2116
2117// Easy API for creating new setFilters
2118function setFilters() {}
2119setFilters.prototype = Expr.filters = Expr.pseudos;
2120Expr.setFilters = new setFilters();
2121
2122tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
2123 var matched, match, tokens, type,
2124 soFar, groups, preFilters,
2125 cached = tokenCache[ selector + " " ];
2126
2127 if ( cached ) {
2128 return parseOnly ? 0 : cached.slice( 0 );
2129 }
2130
2131 soFar = selector;
2132 groups = [];
2133 preFilters = Expr.preFilter;
2134
2135 while ( soFar ) {
2136
2137 // Comma and first run
2138 if ( !matched || (match = rcomma.exec( soFar )) ) {
2139 if ( match ) {
2140 // Don't consume trailing commas as valid
2141 soFar = soFar.slice( match[0].length ) || soFar;
2142 }
2143 groups.push( (tokens = []) );
2144 }
2145
2146 matched = false;
2147
2148 // Combinators
2149 if ( (match = rcombinators.exec( soFar )) ) {
2150 matched = match.shift();
2151 tokens.push({
2152 value: matched,
2153 // Cast descendant combinators to space
2154 type: match[0].replace( rtrim, " " )
2155 });
2156 soFar = soFar.slice( matched.length );
2157 }
2158
2159 // Filters
2160 for ( type in Expr.filter ) {
2161 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
2162 (match = preFilters[ type ]( match ))) ) {
2163 matched = match.shift();
2164 tokens.push({
2165 value: matched,
2166 type: type,
2167 matches: match
2168 });
2169 soFar = soFar.slice( matched.length );
2170 }
2171 }
2172
2173 if ( !matched ) {
2174 break;
2175 }
2176 }
2177
2178 // Return the length of the invalid excess
2179 // if we're just parsing
2180 // Otherwise, throw an error or return tokens
2181 return parseOnly ?
2182 soFar.length :
2183 soFar ?
2184 Sizzle.error( selector ) :
2185 // Cache the tokens
2186 tokenCache( selector, groups ).slice( 0 );
2187};
2188
2189function toSelector( tokens ) {
2190 var i = 0,
2191 len = tokens.length,
2192 selector = "";
2193 for ( ; i < len; i++ ) {
2194 selector += tokens[i].value;
2195 }
2196 return selector;
2197}
2198
2199function addCombinator( matcher, combinator, base ) {
2200 var dir = combinator.dir,
2201 skip = combinator.next,
2202 key = skip || dir,
2203 checkNonElements = base && key === "parentNode",
2204 doneName = done++;
2205
2206 return combinator.first ?
2207 // Check against closest ancestor/preceding element
2208 function( elem, context, xml ) {
2209 while ( (elem = elem[ dir ]) ) {
2210 if ( elem.nodeType === 1 || checkNonElements ) {
2211 return matcher( elem, context, xml );
2212 }
2213 }
2214 } :
2215
2216 // Check against all ancestor/preceding elements
2217 function( elem, context, xml ) {
2218 var oldCache, uniqueCache, outerCache,
2219 newCache = [ dirruns, doneName ];
2220
2221 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
2222 if ( xml ) {
2223 while ( (elem = elem[ dir ]) ) {
2224 if ( elem.nodeType === 1 || checkNonElements ) {
2225 if ( matcher( elem, context, xml ) ) {
2226 return true;
2227 }
2228 }
2229 }
2230 } else {
2231 while ( (elem = elem[ dir ]) ) {
2232 if ( elem.nodeType === 1 || checkNonElements ) {
2233 outerCache = elem[ expando ] || (elem[ expando ] = {});
2234
2235 // Support: IE <9 only
2236 // Defend against cloned attroperties (jQuery gh-1709)
2237 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
2238
2239 if ( skip && skip === elem.nodeName.toLowerCase() ) {
2240 elem = elem[ dir ] || elem;
2241 } else if ( (oldCache = uniqueCache[ key ]) &&
2242 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
2243
2244 // Assign to newCache so results back-propagate to previous elements
2245 return (newCache[ 2 ] = oldCache[ 2 ]);
2246 } else {
2247 // Reuse newcache so results back-propagate to previous elements
2248 uniqueCache[ key ] = newCache;
2249
2250 // A match means we're done; a fail means we have to keep checking
2251 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
2252 return true;
2253 }
2254 }
2255 }
2256 }
2257 }
2258 };
2259}
2260
2261function elementMatcher( matchers ) {
2262 return matchers.length > 1 ?
2263 function( elem, context, xml ) {
2264 var i = matchers.length;
2265 while ( i-- ) {
2266 if ( !matchers[i]( elem, context, xml ) ) {
2267 return false;
2268 }
2269 }
2270 return true;
2271 } :
2272 matchers[0];
2273}
2274
2275function multipleContexts( selector, contexts, results ) {
2276 var i = 0,
2277 len = contexts.length;
2278 for ( ; i < len; i++ ) {
2279 Sizzle( selector, contexts[i], results );
2280 }
2281 return results;
2282}
2283
2284function condense( unmatched, map, filter, context, xml ) {
2285 var elem,
2286 newUnmatched = [],
2287 i = 0,
2288 len = unmatched.length,
2289 mapped = map != null;
2290
2291 for ( ; i < len; i++ ) {
2292 if ( (elem = unmatched[i]) ) {
2293 if ( !filter || filter( elem, context, xml ) ) {
2294 newUnmatched.push( elem );
2295 if ( mapped ) {
2296 map.push( i );
2297 }
2298 }
2299 }
2300 }
2301
2302 return newUnmatched;
2303}
2304
2305function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
2306 if ( postFilter && !postFilter[ expando ] ) {
2307 postFilter = setMatcher( postFilter );
2308 }
2309 if ( postFinder && !postFinder[ expando ] ) {
2310 postFinder = setMatcher( postFinder, postSelector );
2311 }
2312 return markFunction(function( seed, results, context, xml ) {
2313 var temp, i, elem,
2314 preMap = [],
2315 postMap = [],
2316 preexisting = results.length,
2317
2318 // Get initial elements from seed or context
2319 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
2320
2321 // Prefilter to get matcher input, preserving a map for seed-results synchronization
2322 matcherIn = preFilter && ( seed || !selector ) ?
2323 condense( elems, preMap, preFilter, context, xml ) :
2324 elems,
2325
2326 matcherOut = matcher ?
2327 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
2328 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
2329
2330 // ...intermediate processing is necessary
2331 [] :
2332
2333 // ...otherwise use results directly
2334 results :
2335 matcherIn;
2336
2337 // Find primary matches
2338 if ( matcher ) {
2339 matcher( matcherIn, matcherOut, context, xml );
2340 }
2341
2342 // Apply postFilter
2343 if ( postFilter ) {
2344 temp = condense( matcherOut, postMap );
2345 postFilter( temp, [], context, xml );
2346
2347 // Un-match failing elements by moving them back to matcherIn
2348 i = temp.length;
2349 while ( i-- ) {
2350 if ( (elem = temp[i]) ) {
2351 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
2352 }
2353 }
2354 }
2355
2356 if ( seed ) {
2357 if ( postFinder || preFilter ) {
2358 if ( postFinder ) {
2359 // Get the final matcherOut by condensing this intermediate into postFinder contexts
2360 temp = [];
2361 i = matcherOut.length;
2362 while ( i-- ) {
2363 if ( (elem = matcherOut[i]) ) {
2364 // Restore matcherIn since elem is not yet a final match
2365 temp.push( (matcherIn[i] = elem) );
2366 }
2367 }
2368 postFinder( null, (matcherOut = []), temp, xml );
2369 }
2370
2371 // Move matched elements from seed to results to keep them synchronized
2372 i = matcherOut.length;
2373 while ( i-- ) {
2374 if ( (elem = matcherOut[i]) &&
2375 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
2376
2377 seed[temp] = !(results[temp] = elem);
2378 }
2379 }
2380 }
2381
2382 // Add elements to results, through postFinder if defined
2383 } else {
2384 matcherOut = condense(
2385 matcherOut === results ?
2386 matcherOut.splice( preexisting, matcherOut.length ) :
2387 matcherOut
2388 );
2389 if ( postFinder ) {
2390 postFinder( null, results, matcherOut, xml );
2391 } else {
2392 push.apply( results, matcherOut );
2393 }
2394 }
2395 });
2396}
2397
2398function matcherFromTokens( tokens ) {
2399 var checkContext, matcher, j,
2400 len = tokens.length,
2401 leadingRelative = Expr.relative[ tokens[0].type ],
2402 implicitRelative = leadingRelative || Expr.relative[" "],
2403 i = leadingRelative ? 1 : 0,
2404
2405 // The foundational matcher ensures that elements are reachable from top-level context(s)
2406 matchContext = addCombinator( function( elem ) {
2407 return elem === checkContext;
2408 }, implicitRelative, true ),
2409 matchAnyContext = addCombinator( function( elem ) {
2410 return indexOf( checkContext, elem ) > -1;
2411 }, implicitRelative, true ),
2412 matchers = [ function( elem, context, xml ) {
2413 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
2414 (checkContext = context).nodeType ?
2415 matchContext( elem, context, xml ) :
2416 matchAnyContext( elem, context, xml ) );
2417 // Avoid hanging onto element (issue #299)
2418 checkContext = null;
2419 return ret;
2420 } ];
2421
2422 for ( ; i < len; i++ ) {
2423 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
2424 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
2425 } else {
2426 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
2427
2428 // Return special upon seeing a positional matcher
2429 if ( matcher[ expando ] ) {
2430 // Find the next relative operator (if any) for proper handling
2431 j = ++i;
2432 for ( ; j < len; j++ ) {
2433 if ( Expr.relative[ tokens[j].type ] ) {
2434 break;
2435 }
2436 }
2437 return setMatcher(
2438 i > 1 && elementMatcher( matchers ),
2439 i > 1 && toSelector(
2440 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
2441 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
2442 ).replace( rtrim, "$1" ),
2443 matcher,
2444 i < j && matcherFromTokens( tokens.slice( i, j ) ),
2445 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
2446 j < len && toSelector( tokens )
2447 );
2448 }
2449 matchers.push( matcher );
2450 }
2451 }
2452
2453 return elementMatcher( matchers );
2454}
2455
2456function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
2457 var bySet = setMatchers.length > 0,
2458 byElement = elementMatchers.length > 0,
2459 superMatcher = function( seed, context, xml, results, outermost ) {
2460 var elem, j, matcher,
2461 matchedCount = 0,
2462 i = "0",
2463 unmatched = seed && [],
2464 setMatched = [],
2465 contextBackup = outermostContext,
2466 // We must always have either seed elements or outermost context
2467 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
2468 // Use integer dirruns iff this is the outermost matcher
2469 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
2470 len = elems.length;
2471
2472 if ( outermost ) {
2473 outermostContext = context === document || context || outermost;
2474 }
2475
2476 // Add elements passing elementMatchers directly to results
2477 // Support: IE<9, Safari
2478 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
2479 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
2480 if ( byElement && elem ) {
2481 j = 0;
2482 if ( !context && elem.ownerDocument !== document ) {
2483 setDocument( elem );
2484 xml = !documentIsHTML;
2485 }
2486 while ( (matcher = elementMatchers[j++]) ) {
2487 if ( matcher( elem, context || document, xml) ) {
2488 results.push( elem );
2489 break;
2490 }
2491 }
2492 if ( outermost ) {
2493 dirruns = dirrunsUnique;
2494 }
2495 }
2496
2497 // Track unmatched elements for set filters
2498 if ( bySet ) {
2499 // They will have gone through all possible matchers
2500 if ( (elem = !matcher && elem) ) {
2501 matchedCount--;
2502 }
2503
2504 // Lengthen the array for every element, matched or not
2505 if ( seed ) {
2506 unmatched.push( elem );
2507 }
2508 }
2509 }
2510
2511 // `i` is now the count of elements visited above, and adding it to `matchedCount`
2512 // makes the latter nonnegative.
2513 matchedCount += i;
2514
2515 // Apply set filters to unmatched elements
2516 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
2517 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
2518 // no element matchers and no seed.
2519 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
2520 // case, which will result in a "00" `matchedCount` that differs from `i` but is also
2521 // numerically zero.
2522 if ( bySet && i !== matchedCount ) {
2523 j = 0;
2524 while ( (matcher = setMatchers[j++]) ) {
2525 matcher( unmatched, setMatched, context, xml );
2526 }
2527
2528 if ( seed ) {
2529 // Reintegrate element matches to eliminate the need for sorting
2530 if ( matchedCount > 0 ) {
2531 while ( i-- ) {
2532 if ( !(unmatched[i] || setMatched[i]) ) {
2533 setMatched[i] = pop.call( results );
2534 }
2535 }
2536 }
2537
2538 // Discard index placeholder values to get only actual matches
2539 setMatched = condense( setMatched );
2540 }
2541
2542 // Add matches to results
2543 push.apply( results, setMatched );
2544
2545 // Seedless set matches succeeding multiple successful matchers stipulate sorting
2546 if ( outermost && !seed && setMatched.length > 0 &&
2547 ( matchedCount + setMatchers.length ) > 1 ) {
2548
2549 Sizzle.uniqueSort( results );
2550 }
2551 }
2552
2553 // Override manipulation of globals by nested matchers
2554 if ( outermost ) {
2555 dirruns = dirrunsUnique;
2556 outermostContext = contextBackup;
2557 }
2558
2559 return unmatched;
2560 };
2561
2562 return bySet ?
2563 markFunction( superMatcher ) :
2564 superMatcher;
2565}
2566
2567compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
2568 var i,
2569 setMatchers = [],
2570 elementMatchers = [],
2571 cached = compilerCache[ selector + " " ];
2572
2573 if ( !cached ) {
2574 // Generate a function of recursive functions that can be used to check each element
2575 if ( !match ) {
2576 match = tokenize( selector );
2577 }
2578 i = match.length;
2579 while ( i-- ) {
2580 cached = matcherFromTokens( match[i] );
2581 if ( cached[ expando ] ) {
2582 setMatchers.push( cached );
2583 } else {
2584 elementMatchers.push( cached );
2585 }
2586 }
2587
2588 // Cache the compiled function
2589 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
2590
2591 // Save selector and tokenization
2592 cached.selector = selector;
2593 }
2594 return cached;
2595};
2596
2597/**
2598 * A low-level selection function that works with Sizzle's compiled
2599 * selector functions
2600 * @param {String|Function} selector A selector or a pre-compiled
2601 * selector function built with Sizzle.compile
2602 * @param {Element} context
2603 * @param {Array} [results]
2604 * @param {Array} [seed] A set of elements to match against
2605 */
2606select = Sizzle.select = function( selector, context, results, seed ) {
2607 var i, tokens, token, type, find,
2608 compiled = typeof selector === "function" && selector,
2609 match = !seed && tokenize( (selector = compiled.selector || selector) );
2610
2611 results = results || [];
2612
2613 // Try to minimize operations if there is only one selector in the list and no seed
2614 // (the latter of which guarantees us context)
2615 if ( match.length === 1 ) {
2616
2617 // Reduce context if the leading compound selector is an ID
2618 tokens = match[0] = match[0].slice( 0 );
2619 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
2620 support.getById && context.nodeType === 9 && documentIsHTML &&
2621 Expr.relative[ tokens[1].type ] ) {
2622
2623 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
2624 if ( !context ) {
2625 return results;
2626
2627 // Precompiled matchers will still verify ancestry, so step up a level
2628 } else if ( compiled ) {
2629 context = context.parentNode;
2630 }
2631
2632 selector = selector.slice( tokens.shift().value.length );
2633 }
2634
2635 // Fetch a seed set for right-to-left matching
2636 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
2637 while ( i-- ) {
2638 token = tokens[i];
2639
2640 // Abort if we hit a combinator
2641 if ( Expr.relative[ (type = token.type) ] ) {
2642 break;
2643 }
2644 if ( (find = Expr.find[ type ]) ) {
2645 // Search, expanding context for leading sibling combinators
2646 if ( (seed = find(
2647 token.matches[0].replace( runescape, funescape ),
2648 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
2649 )) ) {
2650
2651 // If seed is empty or no tokens remain, we can return early
2652 tokens.splice( i, 1 );
2653 selector = seed.length && toSelector( tokens );
2654 if ( !selector ) {
2655 push.apply( results, seed );
2656 return results;
2657 }
2658
2659 break;
2660 }
2661 }
2662 }
2663 }
2664
2665 // Compile and execute a filtering function if one is not provided
2666 // Provide `match` to avoid retokenization if we modified the selector above
2667 ( compiled || compile( selector, match ) )(
2668 seed,
2669 context,
2670 !documentIsHTML,
2671 results,
2672 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
2673 );
2674 return results;
2675};
2676
2677// One-time assignments
2678
2679// Sort stability
2680support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
2681
2682// Support: Chrome 14-35+
2683// Always assume duplicates if they aren't passed to the comparison function
2684support.detectDuplicates = !!hasDuplicate;
2685
2686// Initialize against the default document
2687setDocument();
2688
2689// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
2690// Detached nodes confoundingly follow *each other*
2691support.sortDetached = assert(function( el ) {
2692 // Should return 1, but returns 4 (following)
2693 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
2694});
2695
2696// Support: IE<8
2697// Prevent attribute/property "interpolation"
2698// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
2699if ( !assert(function( el ) {
2700 el.innerHTML = "<a href='#'></a>";
2701 return el.firstChild.getAttribute("href") === "#" ;
2702}) ) {
2703 addHandle( "type|href|height|width", function( elem, name, isXML ) {
2704 if ( !isXML ) {
2705 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
2706 }
2707 });
2708}
2709
2710// Support: IE<9
2711// Use defaultValue in place of getAttribute("value")
2712if ( !support.attributes || !assert(function( el ) {
2713 el.innerHTML = "<input/>";
2714 el.firstChild.setAttribute( "value", "" );
2715 return el.firstChild.getAttribute( "value" ) === "";
2716}) ) {
2717 addHandle( "value", function( elem, name, isXML ) {
2718 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
2719 return elem.defaultValue;
2720 }
2721 });
2722}
2723
2724// Support: IE<9
2725// Use getAttributeNode to fetch booleans when getAttribute lies
2726if ( !assert(function( el ) {
2727 return el.getAttribute("disabled") == null;
2728}) ) {
2729 addHandle( booleans, function( elem, name, isXML ) {
2730 var val;
2731 if ( !isXML ) {
2732 return elem[ name ] === true ? name.toLowerCase() :
2733 (val = elem.getAttributeNode( name )) && val.specified ?
2734 val.value :
2735 null;
2736 }
2737 });
2738}
2739
2740return Sizzle;
2741
2742})( window );
2743
2744
2745
2746jQuery.find = Sizzle;
2747jQuery.expr = Sizzle.selectors;
2748
2749// Deprecated
2750jQuery.expr[ ":" ] = jQuery.expr.pseudos;
2751jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
2752jQuery.text = Sizzle.getText;
2753jQuery.isXMLDoc = Sizzle.isXML;
2754jQuery.contains = Sizzle.contains;
2755jQuery.escapeSelector = Sizzle.escape;
2756
2757
2758
2759
2760var dir = function( elem, dir, until ) {
2761 var matched = [],
2762 truncate = until !== undefined;
2763
2764 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
2765 if ( elem.nodeType === 1 ) {
2766 if ( truncate && jQuery( elem ).is( until ) ) {
2767 break;
2768 }
2769 matched.push( elem );
2770 }
2771 }
2772 return matched;
2773};
2774
2775
2776var siblings = function( n, elem ) {
2777 var matched = [];
2778
2779 for ( ; n; n = n.nextSibling ) {
2780 if ( n.nodeType === 1 && n !== elem ) {
2781 matched.push( n );
2782 }
2783 }
2784
2785 return matched;
2786};
2787
2788
2789var rneedsContext = jQuery.expr.match.needsContext;
2790
2791var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
2792
2793
2794
2795var risSimple = /^.[^:#\[\.,]*$/;
2796
2797// Implement the identical functionality for filter and not
2798function winnow( elements, qualifier, not ) {
2799 if ( jQuery.isFunction( qualifier ) ) {
2800 return jQuery.grep( elements, function( elem, i ) {
2801 return !!qualifier.call( elem, i, elem ) !== not;
2802 } );
2803
2804 }
2805
2806 if ( qualifier.nodeType ) {
2807 return jQuery.grep( elements, function( elem ) {
2808 return ( elem === qualifier ) !== not;
2809 } );
2810
2811 }
2812
2813 if ( typeof qualifier === "string" ) {
2814 if ( risSimple.test( qualifier ) ) {
2815 return jQuery.filter( qualifier, elements, not );
2816 }
2817
2818 qualifier = jQuery.filter( qualifier, elements );
2819 }
2820
2821 return jQuery.grep( elements, function( elem ) {
2822 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
2823 } );
2824}
2825
2826jQuery.filter = function( expr, elems, not ) {
2827 var elem = elems[ 0 ];
2828
2829 if ( not ) {
2830 expr = ":not(" + expr + ")";
2831 }
2832
2833 return elems.length === 1 && elem.nodeType === 1 ?
2834 jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
2835 jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
2836 return elem.nodeType === 1;
2837 } ) );
2838};
2839
2840jQuery.fn.extend( {
2841 find: function( selector ) {
2842 var i, ret,
2843 len = this.length,
2844 self = this;
2845
2846 if ( typeof selector !== "string" ) {
2847 return this.pushStack( jQuery( selector ).filter( function() {
2848 for ( i = 0; i < len; i++ ) {
2849 if ( jQuery.contains( self[ i ], this ) ) {
2850 return true;
2851 }
2852 }
2853 } ) );
2854 }
2855
2856 ret = this.pushStack( [] );
2857
2858 for ( i = 0; i < len; i++ ) {
2859 jQuery.find( selector, self[ i ], ret );
2860 }
2861
2862 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
2863 },
2864 filter: function( selector ) {
2865 return this.pushStack( winnow( this, selector || [], false ) );
2866 },
2867 not: function( selector ) {
2868 return this.pushStack( winnow( this, selector || [], true ) );
2869 },
2870 is: function( selector ) {
2871 return !!winnow(
2872 this,
2873
2874 // If this is a positional/relative selector, check membership in the returned set
2875 // so $("p:first").is("p:last") won't return true for a doc with two "p".
2876 typeof selector === "string" && rneedsContext.test( selector ) ?
2877 jQuery( selector ) :
2878 selector || [],
2879 false
2880 ).length;
2881 }
2882} );
2883
2884
2885// Initialize a jQuery object
2886
2887
2888// A central reference to the root jQuery(document)
2889var rootjQuery,
2890
2891 // A simple way to check for HTML strings
2892 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
2893 // Strict HTML recognition (#11290: must start with <)
2894 // Shortcut simple #id case for speed
2895 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
2896
2897 init = jQuery.fn.init = function( selector, context, root ) {
2898 var match, elem;
2899
2900 // HANDLE: $(""), $(null), $(undefined), $(false)
2901 if ( !selector ) {
2902 return this;
2903 }
2904
2905 // Method init() accepts an alternate rootjQuery
2906 // so migrate can support jQuery.sub (gh-2101)
2907 root = root || rootjQuery;
2908
2909 // Handle HTML strings
2910 if ( typeof selector === "string" ) {
2911 if ( selector[ 0 ] === "<" &&
2912 selector[ selector.length - 1 ] === ">" &&
2913 selector.length >= 3 ) {
2914
2915 // Assume that strings that start and end with <> are HTML and skip the regex check
2916 match = [ null, selector, null ];
2917
2918 } else {
2919 match = rquickExpr.exec( selector );
2920 }
2921
2922 // Match html or make sure no context is specified for #id
2923 if ( match && ( match[ 1 ] || !context ) ) {
2924
2925 // HANDLE: $(html) -> $(array)
2926 if ( match[ 1 ] ) {
2927 context = context instanceof jQuery ? context[ 0 ] : context;
2928
2929 // Option to run scripts is true for back-compat
2930 // Intentionally let the error be thrown if parseHTML is not present
2931 jQuery.merge( this, jQuery.parseHTML(
2932 match[ 1 ],
2933 context && context.nodeType ? context.ownerDocument || context : document,
2934 true
2935 ) );
2936
2937 // HANDLE: $(html, props)
2938 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
2939 for ( match in context ) {
2940
2941 // Properties of context are called as methods if possible
2942 if ( jQuery.isFunction( this[ match ] ) ) {
2943 this[ match ]( context[ match ] );
2944
2945 // ...and otherwise set as attributes
2946 } else {
2947 this.attr( match, context[ match ] );
2948 }
2949 }
2950 }
2951
2952 return this;
2953
2954 // HANDLE: $(#id)
2955 } else {
2956 elem = document.getElementById( match[ 2 ] );
2957
2958 if ( elem ) {
2959
2960 // Inject the element directly into the jQuery object
2961 this[ 0 ] = elem;
2962 this.length = 1;
2963 }
2964 return this;
2965 }
2966
2967 // HANDLE: $(expr, $(...))
2968 } else if ( !context || context.jquery ) {
2969 return ( context || root ).find( selector );
2970
2971 // HANDLE: $(expr, context)
2972 // (which is just equivalent to: $(context).find(expr)
2973 } else {
2974 return this.constructor( context ).find( selector );
2975 }
2976
2977 // HANDLE: $(DOMElement)
2978 } else if ( selector.nodeType ) {
2979 this[ 0 ] = selector;
2980 this.length = 1;
2981 return this;
2982
2983 // HANDLE: $(function)
2984 // Shortcut for document ready
2985 } else if ( jQuery.isFunction( selector ) ) {
2986 return root.ready !== undefined ?
2987 root.ready( selector ) :
2988
2989 // Execute immediately if ready is not present
2990 selector( jQuery );
2991 }
2992
2993 return jQuery.makeArray( selector, this );
2994 };
2995
2996// Give the init function the jQuery prototype for later instantiation
2997init.prototype = jQuery.fn;
2998
2999// Initialize central reference
3000rootjQuery = jQuery( document );
3001
3002
3003var rparentsprev = /^(?:parents|prev(?:Until|All))/,
3004
3005 // Methods guaranteed to produce a unique set when starting from a unique set
3006 guaranteedUnique = {
3007 children: true,
3008 contents: true,
3009 next: true,
3010 prev: true
3011 };
3012
3013jQuery.fn.extend( {
3014 has: function( target ) {
3015 var targets = jQuery( target, this ),
3016 l = targets.length;
3017
3018 return this.filter( function() {
3019 var i = 0;
3020 for ( ; i < l; i++ ) {
3021 if ( jQuery.contains( this, targets[ i ] ) ) {
3022 return true;
3023 }
3024 }
3025 } );
3026 },
3027
3028 closest: function( selectors, context ) {
3029 var cur,
3030 i = 0,
3031 l = this.length,
3032 matched = [],
3033 targets = typeof selectors !== "string" && jQuery( selectors );
3034
3035 // Positional selectors never match, since there's no _selection_ context
3036 if ( !rneedsContext.test( selectors ) ) {
3037 for ( ; i < l; i++ ) {
3038 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
3039
3040 // Always skip document fragments
3041 if ( cur.nodeType < 11 && ( targets ?
3042 targets.index( cur ) > -1 :
3043
3044 // Don't pass non-elements to Sizzle
3045 cur.nodeType === 1 &&
3046 jQuery.find.matchesSelector( cur, selectors ) ) ) {
3047
3048 matched.push( cur );
3049 break;
3050 }
3051 }
3052 }
3053 }
3054
3055 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
3056 },
3057
3058 // Determine the position of an element within the set
3059 index: function( elem ) {
3060
3061 // No argument, return index in parent
3062 if ( !elem ) {
3063 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
3064 }
3065
3066 // Index in selector
3067 if ( typeof elem === "string" ) {
3068 return indexOf.call( jQuery( elem ), this[ 0 ] );
3069 }
3070
3071 // Locate the position of the desired element
3072 return indexOf.call( this,
3073
3074 // If it receives a jQuery object, the first element is used
3075 elem.jquery ? elem[ 0 ] : elem
3076 );
3077 },
3078
3079 add: function( selector, context ) {
3080 return this.pushStack(
3081 jQuery.uniqueSort(
3082 jQuery.merge( this.get(), jQuery( selector, context ) )
3083 )
3084 );
3085 },
3086
3087 addBack: function( selector ) {
3088 return this.add( selector == null ?
3089 this.prevObject : this.prevObject.filter( selector )
3090 );
3091 }
3092} );
3093
3094function sibling( cur, dir ) {
3095 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
3096 return cur;
3097}
3098
3099jQuery.each( {
3100 parent: function( elem ) {
3101 var parent = elem.parentNode;
3102 return parent && parent.nodeType !== 11 ? parent : null;
3103 },
3104 parents: function( elem ) {
3105 return dir( elem, "parentNode" );
3106 },
3107 parentsUntil: function( elem, i, until ) {
3108 return dir( elem, "parentNode", until );
3109 },
3110 next: function( elem ) {
3111 return sibling( elem, "nextSibling" );
3112 },
3113 prev: function( elem ) {
3114 return sibling( elem, "previousSibling" );
3115 },
3116 nextAll: function( elem ) {
3117 return dir( elem, "nextSibling" );
3118 },
3119 prevAll: function( elem ) {
3120 return dir( elem, "previousSibling" );
3121 },
3122 nextUntil: function( elem, i, until ) {
3123 return dir( elem, "nextSibling", until );
3124 },
3125 prevUntil: function( elem, i, until ) {
3126 return dir( elem, "previousSibling", until );
3127 },
3128 siblings: function( elem ) {
3129 return siblings( ( elem.parentNode || {} ).firstChild, elem );
3130 },
3131 children: function( elem ) {
3132 return siblings( elem.firstChild );
3133 },
3134 contents: function( elem ) {
3135 return elem.contentDocument || jQuery.merge( [], elem.childNodes );
3136 }
3137}, function( name, fn ) {
3138 jQuery.fn[ name ] = function( until, selector ) {
3139 var matched = jQuery.map( this, fn, until );
3140
3141 if ( name.slice( -5 ) !== "Until" ) {
3142 selector = until;
3143 }
3144
3145 if ( selector && typeof selector === "string" ) {
3146 matched = jQuery.filter( selector, matched );
3147 }
3148
3149 if ( this.length > 1 ) {
3150
3151 // Remove duplicates
3152 if ( !guaranteedUnique[ name ] ) {
3153 jQuery.uniqueSort( matched );
3154 }
3155
3156 // Reverse order for parents* and prev-derivatives
3157 if ( rparentsprev.test( name ) ) {
3158 matched.reverse();
3159 }
3160 }
3161
3162 return this.pushStack( matched );
3163 };
3164} );
3165var rnotwhite = ( /\S+/g );
3166
3167
3168
3169// Convert String-formatted options into Object-formatted ones
3170function createOptions( options ) {
3171 var object = {};
3172 jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
3173 object[ flag ] = true;
3174 } );
3175 return object;
3176}
3177
3178/*
3179 * Create a callback list using the following parameters:
3180 *
3181 * options: an optional list of space-separated options that will change how
3182 * the callback list behaves or a more traditional option object
3183 *
3184 * By default a callback list will act like an event callback list and can be
3185 * "fired" multiple times.
3186 *
3187 * Possible options:
3188 *
3189 * once: will ensure the callback list can only be fired once (like a Deferred)
3190 *
3191 * memory: will keep track of previous values and will call any callback added
3192 * after the list has been fired right away with the latest "memorized"
3193 * values (like a Deferred)
3194 *
3195 * unique: will ensure a callback can only be added once (no duplicate in the list)
3196 *
3197 * stopOnFalse: interrupt callings when a callback returns false
3198 *
3199 */
3200jQuery.Callbacks = function( options ) {
3201
3202 // Convert options from String-formatted to Object-formatted if needed
3203 // (we check in cache first)
3204 options = typeof options === "string" ?
3205 createOptions( options ) :
3206 jQuery.extend( {}, options );
3207
3208 var // Flag to know if list is currently firing
3209 firing,
3210
3211 // Last fire value for non-forgettable lists
3212 memory,
3213
3214 // Flag to know if list was already fired
3215 fired,
3216
3217 // Flag to prevent firing
3218 locked,
3219
3220 // Actual callback list
3221 list = [],
3222
3223 // Queue of execution data for repeatable lists
3224 queue = [],
3225
3226 // Index of currently firing callback (modified by add/remove as needed)
3227 firingIndex = -1,
3228
3229 // Fire callbacks
3230 fire = function() {
3231
3232 // Enforce single-firing
3233 locked = options.once;
3234
3235 // Execute callbacks for all pending executions,
3236 // respecting firingIndex overrides and runtime changes
3237 fired = firing = true;
3238 for ( ; queue.length; firingIndex = -1 ) {
3239 memory = queue.shift();
3240 while ( ++firingIndex < list.length ) {
3241
3242 // Run callback and check for early termination
3243 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
3244 options.stopOnFalse ) {
3245
3246 // Jump to end and forget the data so .add doesn't re-fire
3247 firingIndex = list.length;
3248 memory = false;
3249 }
3250 }
3251 }
3252
3253 // Forget the data if we're done with it
3254 if ( !options.memory ) {
3255 memory = false;
3256 }
3257
3258 firing = false;
3259
3260 // Clean up if we're done firing for good
3261 if ( locked ) {
3262
3263 // Keep an empty list if we have data for future add calls
3264 if ( memory ) {
3265 list = [];
3266
3267 // Otherwise, this object is spent
3268 } else {
3269 list = "";
3270 }
3271 }
3272 },
3273
3274 // Actual Callbacks object
3275 self = {
3276
3277 // Add a callback or a collection of callbacks to the list
3278 add: function() {
3279 if ( list ) {
3280
3281 // If we have memory from a past run, we should fire after adding
3282 if ( memory && !firing ) {
3283 firingIndex = list.length - 1;
3284 queue.push( memory );
3285 }
3286
3287 ( function add( args ) {
3288 jQuery.each( args, function( _, arg ) {
3289 if ( jQuery.isFunction( arg ) ) {
3290 if ( !options.unique || !self.has( arg ) ) {
3291 list.push( arg );
3292 }
3293 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
3294
3295 // Inspect recursively
3296 add( arg );
3297 }
3298 } );
3299 } )( arguments );
3300
3301 if ( memory && !firing ) {
3302 fire();
3303 }
3304 }
3305 return this;
3306 },
3307
3308 // Remove a callback from the list
3309 remove: function() {
3310 jQuery.each( arguments, function( _, arg ) {
3311 var index;
3312 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
3313 list.splice( index, 1 );
3314
3315 // Handle firing indexes
3316 if ( index <= firingIndex ) {
3317 firingIndex--;
3318 }
3319 }
3320 } );
3321 return this;
3322 },
3323
3324 // Check if a given callback is in the list.
3325 // If no argument is given, return whether or not list has callbacks attached.
3326 has: function( fn ) {
3327 return fn ?
3328 jQuery.inArray( fn, list ) > -1 :
3329 list.length > 0;
3330 },
3331
3332 // Remove all callbacks from the list
3333 empty: function() {
3334 if ( list ) {
3335 list = [];
3336 }
3337 return this;
3338 },
3339
3340 // Disable .fire and .add
3341 // Abort any current/pending executions
3342 // Clear all callbacks and values
3343 disable: function() {
3344 locked = queue = [];
3345 list = memory = "";
3346 return this;
3347 },
3348 disabled: function() {
3349 return !list;
3350 },
3351
3352 // Disable .fire
3353 // Also disable .add unless we have memory (since it would have no effect)
3354 // Abort any pending executions
3355 lock: function() {
3356 locked = queue = [];
3357 if ( !memory && !firing ) {
3358 list = memory = "";
3359 }
3360 return this;
3361 },
3362 locked: function() {
3363 return !!locked;
3364 },
3365
3366 // Call all callbacks with the given context and arguments
3367 fireWith: function( context, args ) {
3368 if ( !locked ) {
3369 args = args || [];
3370 args = [ context, args.slice ? args.slice() : args ];
3371 queue.push( args );
3372 if ( !firing ) {
3373 fire();
3374 }
3375 }
3376 return this;
3377 },
3378
3379 // Call all the callbacks with the given arguments
3380 fire: function() {
3381 self.fireWith( this, arguments );
3382 return this;
3383 },
3384
3385 // To know if the callbacks have already been called at least once
3386 fired: function() {
3387 return !!fired;
3388 }
3389 };
3390
3391 return self;
3392};
3393
3394
3395function Identity( v ) {
3396 return v;
3397}
3398function Thrower( ex ) {
3399 throw ex;
3400}
3401
3402function adoptValue( value, resolve, reject ) {
3403 var method;
3404
3405 try {
3406
3407 // Check for promise aspect first to privilege synchronous behavior
3408 if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
3409 method.call( value ).done( resolve ).fail( reject );
3410
3411 // Other thenables
3412 } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
3413 method.call( value, resolve, reject );
3414
3415 // Other non-thenables
3416 } else {
3417
3418 // Support: Android 4.0 only
3419 // Strict mode functions invoked without .call/.apply get global-object context
3420 resolve.call( undefined, value );
3421 }
3422
3423 // For Promises/A+, convert exceptions into rejections
3424 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
3425 // Deferred#then to conditionally suppress rejection.
3426 } catch ( value ) {
3427
3428 // Support: Android 4.0 only
3429 // Strict mode functions invoked without .call/.apply get global-object context
3430 reject.call( undefined, value );
3431 }
3432}
3433
3434jQuery.extend( {
3435
3436 Deferred: function( func ) {
3437 var tuples = [
3438
3439 // action, add listener, callbacks,
3440 // ... .then handlers, argument index, [final state]
3441 [ "notify", "progress", jQuery.Callbacks( "memory" ),
3442 jQuery.Callbacks( "memory" ), 2 ],
3443 [ "resolve", "done", jQuery.Callbacks( "once memory" ),
3444 jQuery.Callbacks( "once memory" ), 0, "resolved" ],
3445 [ "reject", "fail", jQuery.Callbacks( "once memory" ),
3446 jQuery.Callbacks( "once memory" ), 1, "rejected" ]
3447 ],
3448 state = "pending",
3449 promise = {
3450 state: function() {
3451 return state;
3452 },
3453 always: function() {
3454 deferred.done( arguments ).fail( arguments );
3455 return this;
3456 },
3457 "catch": function( fn ) {
3458 return promise.then( null, fn );
3459 },
3460
3461 // Keep pipe for back-compat
3462 pipe: function( /* fnDone, fnFail, fnProgress */ ) {
3463 var fns = arguments;
3464
3465 return jQuery.Deferred( function( newDefer ) {
3466 jQuery.each( tuples, function( i, tuple ) {
3467
3468 // Map tuples (progress, done, fail) to arguments (done, fail, progress)
3469 var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
3470
3471 // deferred.progress(function() { bind to newDefer or newDefer.notify })
3472 // deferred.done(function() { bind to newDefer or newDefer.resolve })
3473 // deferred.fail(function() { bind to newDefer or newDefer.reject })
3474 deferred[ tuple[ 1 ] ]( function() {
3475 var returned = fn && fn.apply( this, arguments );
3476 if ( returned && jQuery.isFunction( returned.promise ) ) {
3477 returned.promise()
3478 .progress( newDefer.notify )
3479 .done( newDefer.resolve )
3480 .fail( newDefer.reject );
3481 } else {
3482 newDefer[ tuple[ 0 ] + "With" ](
3483 this,
3484 fn ? [ returned ] : arguments
3485 );
3486 }
3487 } );
3488 } );
3489 fns = null;
3490 } ).promise();
3491 },
3492 then: function( onFulfilled, onRejected, onProgress ) {
3493 var maxDepth = 0;
3494 function resolve( depth, deferred, handler, special ) {
3495 return function() {
3496 var that = this,
3497 args = arguments,
3498 mightThrow = function() {
3499 var returned, then;
3500
3501 // Support: Promises/A+ section 2.3.3.3.3
3502 // https://promisesaplus.com/#point-59
3503 // Ignore double-resolution attempts
3504 if ( depth < maxDepth ) {
3505 return;
3506 }
3507
3508 returned = handler.apply( that, args );
3509
3510 // Support: Promises/A+ section 2.3.1
3511 // https://promisesaplus.com/#point-48
3512 if ( returned === deferred.promise() ) {
3513 throw new TypeError( "Thenable self-resolution" );
3514 }
3515
3516 // Support: Promises/A+ sections 2.3.3.1, 3.5
3517 // https://promisesaplus.com/#point-54
3518 // https://promisesaplus.com/#point-75
3519 // Retrieve `then` only once
3520 then = returned &&
3521
3522 // Support: Promises/A+ section 2.3.4
3523 // https://promisesaplus.com/#point-64
3524 // Only check objects and functions for thenability
3525 ( typeof returned === "object" ||
3526 typeof returned === "function" ) &&
3527 returned.then;
3528
3529 // Handle a returned thenable
3530 if ( jQuery.isFunction( then ) ) {
3531
3532 // Special processors (notify) just wait for resolution
3533 if ( special ) {
3534 then.call(
3535 returned,
3536 resolve( maxDepth, deferred, Identity, special ),
3537 resolve( maxDepth, deferred, Thrower, special )
3538 );
3539
3540 // Normal processors (resolve) also hook into progress
3541 } else {
3542
3543 // ...and disregard older resolution values
3544 maxDepth++;
3545
3546 then.call(
3547 returned,
3548 resolve( maxDepth, deferred, Identity, special ),
3549 resolve( maxDepth, deferred, Thrower, special ),
3550 resolve( maxDepth, deferred, Identity,
3551 deferred.notifyWith )
3552 );
3553 }
3554
3555 // Handle all other returned values
3556 } else {
3557
3558 // Only substitute handlers pass on context
3559 // and multiple values (non-spec behavior)
3560 if ( handler !== Identity ) {
3561 that = undefined;
3562 args = [ returned ];
3563 }
3564
3565 // Process the value(s)
3566 // Default process is resolve
3567 ( special || deferred.resolveWith )( that, args );
3568 }
3569 },
3570
3571 // Only normal processors (resolve) catch and reject exceptions
3572 process = special ?
3573 mightThrow :
3574 function() {
3575 try {
3576 mightThrow();
3577 } catch ( e ) {
3578
3579 if ( jQuery.Deferred.exceptionHook ) {
3580 jQuery.Deferred.exceptionHook( e,
3581 process.stackTrace );
3582 }
3583
3584 // Support: Promises/A+ section 2.3.3.3.4.1
3585 // https://promisesaplus.com/#point-61
3586 // Ignore post-resolution exceptions
3587 if ( depth + 1 >= maxDepth ) {
3588
3589 // Only substitute handlers pass on context
3590 // and multiple values (non-spec behavior)
3591 if ( handler !== Thrower ) {
3592 that = undefined;
3593 args = [ e ];
3594 }
3595
3596 deferred.rejectWith( that, args );
3597 }
3598 }
3599 };
3600
3601 // Support: Promises/A+ section 2.3.3.3.1
3602 // https://promisesaplus.com/#point-57
3603 // Re-resolve promises immediately to dodge false rejection from
3604 // subsequent errors
3605 if ( depth ) {
3606 process();
3607 } else {
3608
3609 // Call an optional hook to record the stack, in case of exception
3610 // since it's otherwise lost when execution goes async
3611 if ( jQuery.Deferred.getStackHook ) {
3612 process.stackTrace = jQuery.Deferred.getStackHook();
3613 }
3614 window.setTimeout( process );
3615 }
3616 };
3617 }
3618
3619 return jQuery.Deferred( function( newDefer ) {
3620
3621 // progress_handlers.add( ... )
3622 tuples[ 0 ][ 3 ].add(
3623 resolve(
3624 0,
3625 newDefer,
3626 jQuery.isFunction( onProgress ) ?
3627 onProgress :
3628 Identity,
3629 newDefer.notifyWith
3630 )
3631 );
3632
3633 // fulfilled_handlers.add( ... )
3634 tuples[ 1 ][ 3 ].add(
3635 resolve(
3636 0,
3637 newDefer,
3638 jQuery.isFunction( onFulfilled ) ?
3639 onFulfilled :
3640 Identity
3641 )
3642 );
3643
3644 // rejected_handlers.add( ... )
3645 tuples[ 2 ][ 3 ].add(
3646 resolve(
3647 0,
3648 newDefer,
3649 jQuery.isFunction( onRejected ) ?
3650 onRejected :
3651 Thrower
3652 )
3653 );
3654 } ).promise();
3655 },
3656
3657 // Get a promise for this deferred
3658 // If obj is provided, the promise aspect is added to the object
3659 promise: function( obj ) {
3660 return obj != null ? jQuery.extend( obj, promise ) : promise;
3661 }
3662 },
3663 deferred = {};
3664
3665 // Add list-specific methods
3666 jQuery.each( tuples, function( i, tuple ) {
3667 var list = tuple[ 2 ],
3668 stateString = tuple[ 5 ];
3669
3670 // promise.progress = list.add
3671 // promise.done = list.add
3672 // promise.fail = list.add
3673 promise[ tuple[ 1 ] ] = list.add;
3674
3675 // Handle state
3676 if ( stateString ) {
3677 list.add(
3678 function() {
3679
3680 // state = "resolved" (i.e., fulfilled)
3681 // state = "rejected"
3682 state = stateString;
3683 },
3684
3685 // rejected_callbacks.disable
3686 // fulfilled_callbacks.disable
3687 tuples[ 3 - i ][ 2 ].disable,
3688
3689 // progress_callbacks.lock
3690 tuples[ 0 ][ 2 ].lock
3691 );
3692 }
3693
3694 // progress_handlers.fire
3695 // fulfilled_handlers.fire
3696 // rejected_handlers.fire
3697 list.add( tuple[ 3 ].fire );
3698
3699 // deferred.notify = function() { deferred.notifyWith(...) }
3700 // deferred.resolve = function() { deferred.resolveWith(...) }
3701 // deferred.reject = function() { deferred.rejectWith(...) }
3702 deferred[ tuple[ 0 ] ] = function() {
3703 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
3704 return this;
3705 };
3706
3707 // deferred.notifyWith = list.fireWith
3708 // deferred.resolveWith = list.fireWith
3709 // deferred.rejectWith = list.fireWith
3710 deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
3711 } );
3712
3713 // Make the deferred a promise
3714 promise.promise( deferred );
3715
3716 // Call given func if any
3717 if ( func ) {
3718 func.call( deferred, deferred );
3719 }
3720
3721 // All done!
3722 return deferred;
3723 },
3724
3725 // Deferred helper
3726 when: function( singleValue ) {
3727 var
3728
3729 // count of uncompleted subordinates
3730 remaining = arguments.length,
3731
3732 // count of unprocessed arguments
3733 i = remaining,
3734
3735 // subordinate fulfillment data
3736 resolveContexts = Array( i ),
3737 resolveValues = slice.call( arguments ),
3738
3739 // the master Deferred
3740 master = jQuery.Deferred(),
3741
3742 // subordinate callback factory
3743 updateFunc = function( i ) {
3744 return function( value ) {
3745 resolveContexts[ i ] = this;
3746 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
3747 if ( !( --remaining ) ) {
3748 master.resolveWith( resolveContexts, resolveValues );
3749 }
3750 };
3751 };
3752
3753 // Single- and empty arguments are adopted like Promise.resolve
3754 if ( remaining <= 1 ) {
3755 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );
3756
3757 // Use .then() to unwrap secondary thenables (cf. gh-3000)
3758 if ( master.state() === "pending" ||
3759 jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
3760
3761 return master.then();
3762 }
3763 }
3764
3765 // Multiple arguments are aggregated like Promise.all array elements
3766 while ( i-- ) {
3767 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
3768 }
3769
3770 return master.promise();
3771 }
3772} );
3773
3774
3775// These usually indicate a programmer mistake during development,
3776// warn about them ASAP rather than swallowing them by default.
3777var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
3778
3779jQuery.Deferred.exceptionHook = function( error, stack ) {
3780
3781 // Support: IE 8 - 9 only
3782 // Console exists when dev tools are open, which can happen at any time
3783 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
3784 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
3785 }
3786};
3787
3788
3789
3790
3791jQuery.readyException = function( error ) {
3792 window.setTimeout( function() {
3793 throw error;
3794 } );
3795};
3796
3797
3798
3799
3800// The deferred used on DOM ready
3801var readyList = jQuery.Deferred();
3802
3803jQuery.fn.ready = function( fn ) {
3804
3805 readyList
3806 .then( fn )
3807
3808 // Wrap jQuery.readyException in a function so that the lookup
3809 // happens at the time of error handling instead of callback
3810 // registration.
3811 .catch( function( error ) {
3812 jQuery.readyException( error );
3813 } );
3814
3815 return this;
3816};
3817
3818jQuery.extend( {
3819
3820 // Is the DOM ready to be used? Set to true once it occurs.
3821 isReady: false,
3822
3823 // A counter to track how many items to wait for before
3824 // the ready event fires. See #6781
3825 readyWait: 1,
3826
3827 // Hold (or release) the ready event
3828 holdReady: function( hold ) {
3829 if ( hold ) {
3830 jQuery.readyWait++;
3831 } else {
3832 jQuery.ready( true );
3833 }
3834 },
3835
3836 // Handle when the DOM is ready
3837 ready: function( wait ) {
3838
3839 // Abort if there are pending holds or we're already ready
3840 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
3841 return;
3842 }
3843
3844 // Remember that the DOM is ready
3845 jQuery.isReady = true;
3846
3847 // If a normal DOM Ready event fired, decrement, and wait if need be
3848 if ( wait !== true && --jQuery.readyWait > 0 ) {
3849 return;
3850 }
3851
3852 // If there are functions bound, to execute
3853 readyList.resolveWith( document, [ jQuery ] );
3854 }
3855} );
3856
3857jQuery.ready.then = readyList.then;
3858
3859// The ready event handler and self cleanup method
3860function completed() {
3861 document.removeEventListener( "DOMContentLoaded", completed );
3862 window.removeEventListener( "load", completed );
3863 jQuery.ready();
3864}
3865
3866// Catch cases where $(document).ready() is called
3867// after the browser event has already occurred.
3868// Support: IE <=9 - 10 only
3869// Older IE sometimes signals "interactive" too soon
3870if ( document.readyState === "complete" ||
3871 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
3872
3873 // Handle it asynchronously to allow scripts the opportunity to delay ready
3874 window.setTimeout( jQuery.ready );
3875
3876} else {
3877
3878 // Use the handy event callback
3879 document.addEventListener( "DOMContentLoaded", completed );
3880
3881 // A fallback to window.onload, that will always work
3882 window.addEventListener( "load", completed );
3883}
3884
3885
3886
3887
3888// Multifunctional method to get and set values of a collection
3889// The value/s can optionally be executed if it's a function
3890var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
3891 var i = 0,
3892 len = elems.length,
3893 bulk = key == null;
3894
3895 // Sets many values
3896 if ( jQuery.type( key ) === "object" ) {
3897 chainable = true;
3898 for ( i in key ) {
3899 access( elems, fn, i, key[ i ], true, emptyGet, raw );
3900 }
3901
3902 // Sets one value
3903 } else if ( value !== undefined ) {
3904 chainable = true;
3905
3906 if ( !jQuery.isFunction( value ) ) {
3907 raw = true;
3908 }
3909
3910 if ( bulk ) {
3911
3912 // Bulk operations run against the entire set
3913 if ( raw ) {
3914 fn.call( elems, value );
3915 fn = null;
3916
3917 // ...except when executing function values
3918 } else {
3919 bulk = fn;
3920 fn = function( elem, key, value ) {
3921 return bulk.call( jQuery( elem ), value );
3922 };
3923 }
3924 }
3925
3926 if ( fn ) {
3927 for ( ; i < len; i++ ) {
3928 fn(
3929 elems[ i ], key, raw ?
3930 value :
3931 value.call( elems[ i ], i, fn( elems[ i ], key ) )
3932 );
3933 }
3934 }
3935 }
3936
3937 return chainable ?
3938 elems :
3939
3940 // Gets
3941 bulk ?
3942 fn.call( elems ) :
3943 len ? fn( elems[ 0 ], key ) : emptyGet;
3944};
3945var acceptData = function( owner ) {
3946
3947 // Accepts only:
3948 // - Node
3949 // - Node.ELEMENT_NODE
3950 // - Node.DOCUMENT_NODE
3951 // - Object
3952 // - Any
3953 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
3954};
3955
3956
3957
3958
3959function Data() {
3960 this.expando = jQuery.expando + Data.uid++;
3961}
3962
3963Data.uid = 1;
3964
3965Data.prototype = {
3966
3967 cache: function( owner ) {
3968
3969 // Check if the owner object already has a cache
3970 var value = owner[ this.expando ];
3971
3972 // If not, create one
3973 if ( !value ) {
3974 value = {};
3975
3976 // We can accept data for non-element nodes in modern browsers,
3977 // but we should not, see #8335.
3978 // Always return an empty object.
3979 if ( acceptData( owner ) ) {
3980
3981 // If it is a node unlikely to be stringify-ed or looped over
3982 // use plain assignment
3983 if ( owner.nodeType ) {
3984 owner[ this.expando ] = value;
3985
3986 // Otherwise secure it in a non-enumerable property
3987 // configurable must be true to allow the property to be
3988 // deleted when data is removed
3989 } else {
3990 Object.defineProperty( owner, this.expando, {
3991 value: value,
3992 configurable: true
3993 } );
3994 }
3995 }
3996 }
3997
3998 return value;
3999 },
4000 set: function( owner, data, value ) {
4001 var prop,
4002 cache = this.cache( owner );
4003
4004 // Handle: [ owner, key, value ] args
4005 // Always use camelCase key (gh-2257)
4006 if ( typeof data === "string" ) {
4007 cache[ jQuery.camelCase( data ) ] = value;
4008
4009 // Handle: [ owner, { properties } ] args
4010 } else {
4011
4012 // Copy the properties one-by-one to the cache object
4013 for ( prop in data ) {
4014 cache[ jQuery.camelCase( prop ) ] = data[ prop ];
4015 }
4016 }
4017 return cache;
4018 },
4019 get: function( owner, key ) {
4020 return key === undefined ?
4021 this.cache( owner ) :
4022
4023 // Always use camelCase key (gh-2257)
4024 owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
4025 },
4026 access: function( owner, key, value ) {
4027
4028 // In cases where either:
4029 //
4030 // 1. No key was specified
4031 // 2. A string key was specified, but no value provided
4032 //
4033 // Take the "read" path and allow the get method to determine
4034 // which value to return, respectively either:
4035 //
4036 // 1. The entire cache object
4037 // 2. The data stored at the key
4038 //
4039 if ( key === undefined ||
4040 ( ( key && typeof key === "string" ) && value === undefined ) ) {
4041
4042 return this.get( owner, key );
4043 }
4044
4045 // When the key is not a string, or both a key and value
4046 // are specified, set or extend (existing objects) with either:
4047 //
4048 // 1. An object of properties
4049 // 2. A key and value
4050 //
4051 this.set( owner, key, value );
4052
4053 // Since the "set" path can have two possible entry points
4054 // return the expected data based on which path was taken[*]
4055 return value !== undefined ? value : key;
4056 },
4057 remove: function( owner, key ) {
4058 var i,
4059 cache = owner[ this.expando ];
4060
4061 if ( cache === undefined ) {
4062 return;
4063 }
4064
4065 if ( key !== undefined ) {
4066
4067 // Support array or space separated string of keys
4068 if ( jQuery.isArray( key ) ) {
4069
4070 // If key is an array of keys...
4071 // We always set camelCase keys, so remove that.
4072 key = key.map( jQuery.camelCase );
4073 } else {
4074 key = jQuery.camelCase( key );
4075
4076 // If a key with the spaces exists, use it.
4077 // Otherwise, create an array by matching non-whitespace
4078 key = key in cache ?
4079 [ key ] :
4080 ( key.match( rnotwhite ) || [] );
4081 }
4082
4083 i = key.length;
4084
4085 while ( i-- ) {
4086 delete cache[ key[ i ] ];
4087 }
4088 }
4089
4090 // Remove the expando if there's no more data
4091 if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
4092
4093 // Support: Chrome <=35 - 45
4094 // Webkit & Blink performance suffers when deleting properties
4095 // from DOM nodes, so set to undefined instead
4096 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
4097 if ( owner.nodeType ) {
4098 owner[ this.expando ] = undefined;
4099 } else {
4100 delete owner[ this.expando ];
4101 }
4102 }
4103 },
4104 hasData: function( owner ) {
4105 var cache = owner[ this.expando ];
4106 return cache !== undefined && !jQuery.isEmptyObject( cache );
4107 }
4108};
4109var dataPriv = new Data();
4110
4111var dataUser = new Data();
4112
4113
4114
4115// Implementation Summary
4116//
4117// 1. Enforce API surface and semantic compatibility with 1.9.x branch
4118// 2. Improve the module's maintainability by reducing the storage
4119// paths to a single mechanism.
4120// 3. Use the same single mechanism to support "private" and "user" data.
4121// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
4122// 5. Avoid exposing implementation details on user objects (eg. expando properties)
4123// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
4124
4125var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
4126 rmultiDash = /[A-Z]/g;
4127
4128function dataAttr( elem, key, data ) {
4129 var name;
4130
4131 // If nothing was found internally, try to fetch any
4132 // data from the HTML5 data-* attribute
4133 if ( data === undefined && elem.nodeType === 1 ) {
4134 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
4135 data = elem.getAttribute( name );
4136
4137 if ( typeof data === "string" ) {
4138 try {
4139 data = data === "true" ? true :
4140 data === "false" ? false :
4141 data === "null" ? null :
4142
4143 // Only convert to a number if it doesn't change the string
4144 +data + "" === data ? +data :
4145 rbrace.test( data ) ? JSON.parse( data ) :
4146 data;
4147 } catch ( e ) {}
4148
4149 // Make sure we set the data so it isn't changed later
4150 dataUser.set( elem, key, data );
4151 } else {
4152 data = undefined;
4153 }
4154 }
4155 return data;
4156}
4157
4158jQuery.extend( {
4159 hasData: function( elem ) {
4160 return dataUser.hasData( elem ) || dataPriv.hasData( elem );
4161 },
4162
4163 data: function( elem, name, data ) {
4164 return dataUser.access( elem, name, data );
4165 },
4166
4167 removeData: function( elem, name ) {
4168 dataUser.remove( elem, name );
4169 },
4170
4171 // TODO: Now that all calls to _data and _removeData have been replaced
4172 // with direct calls to dataPriv methods, these can be deprecated.
4173 _data: function( elem, name, data ) {
4174 return dataPriv.access( elem, name, data );
4175 },
4176
4177 _removeData: function( elem, name ) {
4178 dataPriv.remove( elem, name );
4179 }
4180} );
4181
4182jQuery.fn.extend( {
4183 data: function( key, value ) {
4184 var i, name, data,
4185 elem = this[ 0 ],
4186 attrs = elem && elem.attributes;
4187
4188 // Gets all values
4189 if ( key === undefined ) {
4190 if ( this.length ) {
4191 data = dataUser.get( elem );
4192
4193 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
4194 i = attrs.length;
4195 while ( i-- ) {
4196
4197 // Support: IE 11 only
4198 // The attrs elements can be null (#14894)
4199 if ( attrs[ i ] ) {
4200 name = attrs[ i ].name;
4201 if ( name.indexOf( "data-" ) === 0 ) {
4202 name = jQuery.camelCase( name.slice( 5 ) );
4203 dataAttr( elem, name, data[ name ] );
4204 }
4205 }
4206 }
4207 dataPriv.set( elem, "hasDataAttrs", true );
4208 }
4209 }
4210
4211 return data;
4212 }
4213
4214 // Sets multiple values
4215 if ( typeof key === "object" ) {
4216 return this.each( function() {
4217 dataUser.set( this, key );
4218 } );
4219 }
4220
4221 return access( this, function( value ) {
4222 var data;
4223
4224 // The calling jQuery object (element matches) is not empty
4225 // (and therefore has an element appears at this[ 0 ]) and the
4226 // `value` parameter was not undefined. An empty jQuery object
4227 // will result in `undefined` for elem = this[ 0 ] which will
4228 // throw an exception if an attempt to read a data cache is made.
4229 if ( elem && value === undefined ) {
4230
4231 // Attempt to get data from the cache
4232 // The key will always be camelCased in Data
4233 data = dataUser.get( elem, key );
4234 if ( data !== undefined ) {
4235 return data;
4236 }
4237
4238 // Attempt to "discover" the data in
4239 // HTML5 custom data-* attrs
4240 data = dataAttr( elem, key );
4241 if ( data !== undefined ) {
4242 return data;
4243 }
4244
4245 // We tried really hard, but the data doesn't exist.
4246 return;
4247 }
4248
4249 // Set the data...
4250 this.each( function() {
4251
4252 // We always store the camelCased key
4253 dataUser.set( this, key, value );
4254 } );
4255 }, null, value, arguments.length > 1, null, true );
4256 },
4257
4258 removeData: function( key ) {
4259 return this.each( function() {
4260 dataUser.remove( this, key );
4261 } );
4262 }
4263} );
4264
4265
4266jQuery.extend( {
4267 queue: function( elem, type, data ) {
4268 var queue;
4269
4270 if ( elem ) {
4271 type = ( type || "fx" ) + "queue";
4272 queue = dataPriv.get( elem, type );
4273
4274 // Speed up dequeue by getting out quickly if this is just a lookup
4275 if ( data ) {
4276 if ( !queue || jQuery.isArray( data ) ) {
4277 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
4278 } else {
4279 queue.push( data );
4280 }
4281 }
4282 return queue || [];
4283 }
4284 },
4285
4286 dequeue: function( elem, type ) {
4287 type = type || "fx";
4288
4289 var queue = jQuery.queue( elem, type ),
4290 startLength = queue.length,
4291 fn = queue.shift(),
4292 hooks = jQuery._queueHooks( elem, type ),
4293 next = function() {
4294 jQuery.dequeue( elem, type );
4295 };
4296
4297 // If the fx queue is dequeued, always remove the progress sentinel
4298 if ( fn === "inprogress" ) {
4299 fn = queue.shift();
4300 startLength--;
4301 }
4302
4303 if ( fn ) {
4304
4305 // Add a progress sentinel to prevent the fx queue from being
4306 // automatically dequeued
4307 if ( type === "fx" ) {
4308 queue.unshift( "inprogress" );
4309 }
4310
4311 // Clear up the last queue stop function
4312 delete hooks.stop;
4313 fn.call( elem, next, hooks );
4314 }
4315
4316 if ( !startLength && hooks ) {
4317 hooks.empty.fire();
4318 }
4319 },
4320
4321 // Not public - generate a queueHooks object, or return the current one
4322 _queueHooks: function( elem, type ) {
4323 var key = type + "queueHooks";
4324 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
4325 empty: jQuery.Callbacks( "once memory" ).add( function() {
4326 dataPriv.remove( elem, [ type + "queue", key ] );
4327 } )
4328 } );
4329 }
4330} );
4331
4332jQuery.fn.extend( {
4333 queue: function( type, data ) {
4334 var setter = 2;
4335
4336 if ( typeof type !== "string" ) {
4337 data = type;
4338 type = "fx";
4339 setter--;
4340 }
4341
4342 if ( arguments.length < setter ) {
4343 return jQuery.queue( this[ 0 ], type );
4344 }
4345
4346 return data === undefined ?
4347 this :
4348 this.each( function() {
4349 var queue = jQuery.queue( this, type, data );
4350
4351 // Ensure a hooks for this queue
4352 jQuery._queueHooks( this, type );
4353
4354 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
4355 jQuery.dequeue( this, type );
4356 }
4357 } );
4358 },
4359 dequeue: function( type ) {
4360 return this.each( function() {
4361 jQuery.dequeue( this, type );
4362 } );
4363 },
4364 clearQueue: function( type ) {
4365 return this.queue( type || "fx", [] );
4366 },
4367
4368 // Get a promise resolved when queues of a certain type
4369 // are emptied (fx is the type by default)
4370 promise: function( type, obj ) {
4371 var tmp,
4372 count = 1,
4373 defer = jQuery.Deferred(),
4374 elements = this,
4375 i = this.length,
4376 resolve = function() {
4377 if ( !( --count ) ) {
4378 defer.resolveWith( elements, [ elements ] );
4379 }
4380 };
4381
4382 if ( typeof type !== "string" ) {
4383 obj = type;
4384 type = undefined;
4385 }
4386 type = type || "fx";
4387
4388 while ( i-- ) {
4389 tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
4390 if ( tmp && tmp.empty ) {
4391 count++;
4392 tmp.empty.add( resolve );
4393 }
4394 }
4395 resolve();
4396 return defer.promise( obj );
4397 }
4398} );
4399var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
4400
4401var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
4402
4403
4404var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
4405
4406var isHiddenWithinTree = function( elem, el ) {
4407
4408 // isHiddenWithinTree might be called from jQuery#filter function;
4409 // in that case, element will be second argument
4410 elem = el || elem;
4411
4412 // Inline style trumps all
4413 return elem.style.display === "none" ||
4414 elem.style.display === "" &&
4415
4416 // Otherwise, check computed style
4417 // Support: Firefox <=43 - 45
4418 // Disconnected elements can have computed display: none, so first confirm that elem is
4419 // in the document.
4420 jQuery.contains( elem.ownerDocument, elem ) &&
4421
4422 jQuery.css( elem, "display" ) === "none";
4423 };
4424
4425var swap = function( elem, options, callback, args ) {
4426 var ret, name,
4427 old = {};
4428
4429 // Remember the old values, and insert the new ones
4430 for ( name in options ) {
4431 old[ name ] = elem.style[ name ];
4432 elem.style[ name ] = options[ name ];
4433 }
4434
4435 ret = callback.apply( elem, args || [] );
4436
4437 // Revert the old values
4438 for ( name in options ) {
4439 elem.style[ name ] = old[ name ];
4440 }
4441
4442 return ret;
4443};
4444
4445
4446
4447
4448function adjustCSS( elem, prop, valueParts, tween ) {
4449 var adjusted,
4450 scale = 1,
4451 maxIterations = 20,
4452 currentValue = tween ?
4453 function() {
4454 return tween.cur();
4455 } :
4456 function() {
4457 return jQuery.css( elem, prop, "" );
4458 },
4459 initial = currentValue(),
4460 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
4461
4462 // Starting value computation is required for potential unit mismatches
4463 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
4464 rcssNum.exec( jQuery.css( elem, prop ) );
4465
4466 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
4467
4468 // Trust units reported by jQuery.css
4469 unit = unit || initialInUnit[ 3 ];
4470
4471 // Make sure we update the tween properties later on
4472 valueParts = valueParts || [];
4473
4474 // Iteratively approximate from a nonzero starting point
4475 initialInUnit = +initial || 1;
4476
4477 do {
4478
4479 // If previous iteration zeroed out, double until we get *something*.
4480 // Use string for doubling so we don't accidentally see scale as unchanged below
4481 scale = scale || ".5";
4482
4483 // Adjust and apply
4484 initialInUnit = initialInUnit / scale;
4485 jQuery.style( elem, prop, initialInUnit + unit );
4486
4487 // Update scale, tolerating zero or NaN from tween.cur()
4488 // Break the loop if scale is unchanged or perfect, or if we've just had enough.
4489 } while (
4490 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
4491 );
4492 }
4493
4494 if ( valueParts ) {
4495 initialInUnit = +initialInUnit || +initial || 0;
4496
4497 // Apply relative offset (+=/-=) if specified
4498 adjusted = valueParts[ 1 ] ?
4499 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
4500 +valueParts[ 2 ];
4501 if ( tween ) {
4502 tween.unit = unit;
4503 tween.start = initialInUnit;
4504 tween.end = adjusted;
4505 }
4506 }
4507 return adjusted;
4508}
4509
4510
4511var defaultDisplayMap = {};
4512
4513function getDefaultDisplay( elem ) {
4514 var temp,
4515 doc = elem.ownerDocument,
4516 nodeName = elem.nodeName,
4517 display = defaultDisplayMap[ nodeName ];
4518
4519 if ( display ) {
4520 return display;
4521 }
4522
4523 temp = doc.body.appendChild( doc.createElement( nodeName ) ),
4524 display = jQuery.css( temp, "display" );
4525
4526 temp.parentNode.removeChild( temp );
4527
4528 if ( display === "none" ) {
4529 display = "block";
4530 }
4531 defaultDisplayMap[ nodeName ] = display;
4532
4533 return display;
4534}
4535
4536function showHide( elements, show ) {
4537 var display, elem,
4538 values = [],
4539 index = 0,
4540 length = elements.length;
4541
4542 // Determine new display value for elements that need to change
4543 for ( ; index < length; index++ ) {
4544 elem = elements[ index ];
4545 if ( !elem.style ) {
4546 continue;
4547 }
4548
4549 display = elem.style.display;
4550 if ( show ) {
4551
4552 // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
4553 // check is required in this first loop unless we have a nonempty display value (either
4554 // inline or about-to-be-restored)
4555 if ( display === "none" ) {
4556 values[ index ] = dataPriv.get( elem, "display" ) || null;
4557 if ( !values[ index ] ) {
4558 elem.style.display = "";
4559 }
4560 }
4561 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
4562 values[ index ] = getDefaultDisplay( elem );
4563 }
4564 } else {
4565 if ( display !== "none" ) {
4566 values[ index ] = "none";
4567
4568 // Remember what we're overwriting
4569 dataPriv.set( elem, "display", display );
4570 }
4571 }
4572 }
4573
4574 // Set the display of the elements in a second loop to avoid constant reflow
4575 for ( index = 0; index < length; index++ ) {
4576 if ( values[ index ] != null ) {
4577 elements[ index ].style.display = values[ index ];
4578 }
4579 }
4580
4581 return elements;
4582}
4583
4584jQuery.fn.extend( {
4585 show: function() {
4586 return showHide( this, true );
4587 },
4588 hide: function() {
4589 return showHide( this );
4590 },
4591 toggle: function( state ) {
4592 if ( typeof state === "boolean" ) {
4593 return state ? this.show() : this.hide();
4594 }
4595
4596 return this.each( function() {
4597 if ( isHiddenWithinTree( this ) ) {
4598 jQuery( this ).show();
4599 } else {
4600 jQuery( this ).hide();
4601 }
4602 } );
4603 }
4604} );
4605var rcheckableType = ( /^(?:checkbox|radio)$/i );
4606
4607var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
4608
4609var rscriptType = ( /^$|\/(?:java|ecma)script/i );
4610
4611
4612
4613// We have to close these tags to support XHTML (#13200)
4614var wrapMap = {
4615
4616 // Support: IE <=9 only
4617 option: [ 1, "<select multiple='multiple'>", "</select>" ],
4618
4619 // XHTML parsers do not magically insert elements in the
4620 // same way that tag soup parsers do. So we cannot shorten
4621 // this by omitting <tbody> or other required elements.
4622 thead: [ 1, "<table>", "</table>" ],
4623 col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
4624 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
4625 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
4626
4627 _default: [ 0, "", "" ]
4628};
4629
4630// Support: IE <=9 only
4631wrapMap.optgroup = wrapMap.option;
4632
4633wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
4634wrapMap.th = wrapMap.td;
4635
4636
4637function getAll( context, tag ) {
4638
4639 // Support: IE <=9 - 11 only
4640 // Use typeof to avoid zero-argument method invocation on host objects (#15151)
4641 var ret = typeof context.getElementsByTagName !== "undefined" ?
4642 context.getElementsByTagName( tag || "*" ) :
4643 typeof context.querySelectorAll !== "undefined" ?
4644 context.querySelectorAll( tag || "*" ) :
4645 [];
4646
4647 return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
4648 jQuery.merge( [ context ], ret ) :
4649 ret;
4650}
4651
4652
4653// Mark scripts as having already been evaluated
4654function setGlobalEval( elems, refElements ) {
4655 var i = 0,
4656 l = elems.length;
4657
4658 for ( ; i < l; i++ ) {
4659 dataPriv.set(
4660 elems[ i ],
4661 "globalEval",
4662 !refElements || dataPriv.get( refElements[ i ], "globalEval" )
4663 );
4664 }
4665}
4666
4667
4668var rhtml = /<|&#?\w+;/;
4669
4670function buildFragment( elems, context, scripts, selection, ignored ) {
4671 var elem, tmp, tag, wrap, contains, j,
4672 fragment = context.createDocumentFragment(),
4673 nodes = [],
4674 i = 0,
4675 l = elems.length;
4676
4677 for ( ; i < l; i++ ) {
4678 elem = elems[ i ];
4679
4680 if ( elem || elem === 0 ) {
4681
4682 // Add nodes directly
4683 if ( jQuery.type( elem ) === "object" ) {
4684
4685 // Support: Android <=4.0 only, PhantomJS 1 only
4686 // push.apply(_, arraylike) throws on ancient WebKit
4687 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
4688
4689 // Convert non-html into a text node
4690 } else if ( !rhtml.test( elem ) ) {
4691 nodes.push( context.createTextNode( elem ) );
4692
4693 // Convert html into DOM nodes
4694 } else {
4695 tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
4696
4697 // Deserialize a standard representation
4698 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
4699 wrap = wrapMap[ tag ] || wrapMap._default;
4700 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
4701
4702 // Descend through wrappers to the right content
4703 j = wrap[ 0 ];
4704 while ( j-- ) {
4705 tmp = tmp.lastChild;
4706 }
4707
4708 // Support: Android <=4.0 only, PhantomJS 1 only
4709 // push.apply(_, arraylike) throws on ancient WebKit
4710 jQuery.merge( nodes, tmp.childNodes );
4711
4712 // Remember the top-level container
4713 tmp = fragment.firstChild;
4714
4715 // Ensure the created nodes are orphaned (#12392)
4716 tmp.textContent = "";
4717 }
4718 }
4719 }
4720
4721 // Remove wrapper from fragment
4722 fragment.textContent = "";
4723
4724 i = 0;
4725 while ( ( elem = nodes[ i++ ] ) ) {
4726
4727 // Skip elements already in the context collection (trac-4087)
4728 if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
4729 if ( ignored ) {
4730 ignored.push( elem );
4731 }
4732 continue;
4733 }
4734
4735 contains = jQuery.contains( elem.ownerDocument, elem );
4736
4737 // Append to fragment
4738 tmp = getAll( fragment.appendChild( elem ), "script" );
4739
4740 // Preserve script evaluation history
4741 if ( contains ) {
4742 setGlobalEval( tmp );
4743 }
4744
4745 // Capture executables
4746 if ( scripts ) {
4747 j = 0;
4748 while ( ( elem = tmp[ j++ ] ) ) {
4749 if ( rscriptType.test( elem.type || "" ) ) {
4750 scripts.push( elem );
4751 }
4752 }
4753 }
4754 }
4755
4756 return fragment;
4757}
4758
4759
4760( function() {
4761 var fragment = document.createDocumentFragment(),
4762 div = fragment.appendChild( document.createElement( "div" ) ),
4763 input = document.createElement( "input" );
4764
4765 // Support: Android 4.0 - 4.3 only
4766 // Check state lost if the name is set (#11217)
4767 // Support: Windows Web Apps (WWA)
4768 // `name` and `type` must use .setAttribute for WWA (#14901)
4769 input.setAttribute( "type", "radio" );
4770 input.setAttribute( "checked", "checked" );
4771 input.setAttribute( "name", "t" );
4772
4773 div.appendChild( input );
4774
4775 // Support: Android <=4.1 only
4776 // Older WebKit doesn't clone checked state correctly in fragments
4777 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
4778
4779 // Support: IE <=11 only
4780 // Make sure textarea (and checkbox) defaultValue is properly cloned
4781 div.innerHTML = "<textarea>x</textarea>";
4782 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
4783} )();
4784var documentElement = document.documentElement;
4785
4786
4787
4788var
4789 rkeyEvent = /^key/,
4790 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
4791 rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
4792
4793function returnTrue() {
4794 return true;
4795}
4796
4797function returnFalse() {
4798 return false;
4799}
4800
4801// Support: IE <=9 only
4802// See #13393 for more info
4803function safeActiveElement() {
4804 try {
4805 return document.activeElement;
4806 } catch ( err ) { }
4807}
4808
4809function on( elem, types, selector, data, fn, one ) {
4810 var origFn, type;
4811
4812 // Types can be a map of types/handlers
4813 if ( typeof types === "object" ) {
4814
4815 // ( types-Object, selector, data )
4816 if ( typeof selector !== "string" ) {
4817
4818 // ( types-Object, data )
4819 data = data || selector;
4820 selector = undefined;
4821 }
4822 for ( type in types ) {
4823 on( elem, type, selector, data, types[ type ], one );
4824 }
4825 return elem;
4826 }
4827
4828 if ( data == null && fn == null ) {
4829
4830 // ( types, fn )
4831 fn = selector;
4832 data = selector = undefined;
4833 } else if ( fn == null ) {
4834 if ( typeof selector === "string" ) {
4835
4836 // ( types, selector, fn )
4837 fn = data;
4838 data = undefined;
4839 } else {
4840
4841 // ( types, data, fn )
4842 fn = data;
4843 data = selector;
4844 selector = undefined;
4845 }
4846 }
4847 if ( fn === false ) {
4848 fn = returnFalse;
4849 } else if ( !fn ) {
4850 return elem;
4851 }
4852
4853 if ( one === 1 ) {
4854 origFn = fn;
4855 fn = function( event ) {
4856
4857 // Can use an empty set, since event contains the info
4858 jQuery().off( event );
4859 return origFn.apply( this, arguments );
4860 };
4861
4862 // Use same guid so caller can remove using origFn
4863 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
4864 }
4865 return elem.each( function() {
4866 jQuery.event.add( this, types, fn, data, selector );
4867 } );
4868}
4869
4870/*
4871 * Helper functions for managing events -- not part of the public interface.
4872 * Props to Dean Edwards' addEvent library for many of the ideas.
4873 */
4874jQuery.event = {
4875
4876 global: {},
4877
4878 add: function( elem, types, handler, data, selector ) {
4879
4880 var handleObjIn, eventHandle, tmp,
4881 events, t, handleObj,
4882 special, handlers, type, namespaces, origType,
4883 elemData = dataPriv.get( elem );
4884
4885 // Don't attach events to noData or text/comment nodes (but allow plain objects)
4886 if ( !elemData ) {
4887 return;
4888 }
4889
4890 // Caller can pass in an object of custom data in lieu of the handler
4891 if ( handler.handler ) {
4892 handleObjIn = handler;
4893 handler = handleObjIn.handler;
4894 selector = handleObjIn.selector;
4895 }
4896
4897 // Ensure that invalid selectors throw exceptions at attach time
4898 // Evaluate against documentElement in case elem is a non-element node (e.g., document)
4899 if ( selector ) {
4900 jQuery.find.matchesSelector( documentElement, selector );
4901 }
4902
4903 // Make sure that the handler has a unique ID, used to find/remove it later
4904 if ( !handler.guid ) {
4905 handler.guid = jQuery.guid++;
4906 }
4907
4908 // Init the element's event structure and main handler, if this is the first
4909 if ( !( events = elemData.events ) ) {
4910 events = elemData.events = {};
4911 }
4912 if ( !( eventHandle = elemData.handle ) ) {
4913 eventHandle = elemData.handle = function( e ) {
4914
4915 // Discard the second event of a jQuery.event.trigger() and
4916 // when an event is called after a page has unloaded
4917 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
4918 jQuery.event.dispatch.apply( elem, arguments ) : undefined;
4919 };
4920 }
4921
4922 // Handle multiple events separated by a space
4923 types = ( types || "" ).match( rnotwhite ) || [ "" ];
4924 t = types.length;
4925 while ( t-- ) {
4926 tmp = rtypenamespace.exec( types[ t ] ) || [];
4927 type = origType = tmp[ 1 ];
4928 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
4929
4930 // There *must* be a type, no attaching namespace-only handlers
4931 if ( !type ) {
4932 continue;
4933 }
4934
4935 // If event changes its type, use the special event handlers for the changed type
4936 special = jQuery.event.special[ type ] || {};
4937
4938 // If selector defined, determine special event api type, otherwise given type
4939 type = ( selector ? special.delegateType : special.bindType ) || type;
4940
4941 // Update special based on newly reset type
4942 special = jQuery.event.special[ type ] || {};
4943
4944 // handleObj is passed to all event handlers
4945 handleObj = jQuery.extend( {
4946 type: type,
4947 origType: origType,
4948 data: data,
4949 handler: handler,
4950 guid: handler.guid,
4951 selector: selector,
4952 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
4953 namespace: namespaces.join( "." )
4954 }, handleObjIn );
4955
4956 // Init the event handler queue if we're the first
4957 if ( !( handlers = events[ type ] ) ) {
4958 handlers = events[ type ] = [];
4959 handlers.delegateCount = 0;
4960
4961 // Only use addEventListener if the special events handler returns false
4962 if ( !special.setup ||
4963 special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
4964
4965 if ( elem.addEventListener ) {
4966 elem.addEventListener( type, eventHandle );
4967 }
4968 }
4969 }
4970
4971 if ( special.add ) {
4972 special.add.call( elem, handleObj );
4973
4974 if ( !handleObj.handler.guid ) {
4975 handleObj.handler.guid = handler.guid;
4976 }
4977 }
4978
4979 // Add to the element's handler list, delegates in front
4980 if ( selector ) {
4981 handlers.splice( handlers.delegateCount++, 0, handleObj );
4982 } else {
4983 handlers.push( handleObj );
4984 }
4985
4986 // Keep track of which events have ever been used, for event optimization
4987 jQuery.event.global[ type ] = true;
4988 }
4989
4990 },
4991
4992 // Detach an event or set of events from an element
4993 remove: function( elem, types, handler, selector, mappedTypes ) {
4994
4995 var j, origCount, tmp,
4996 events, t, handleObj,
4997 special, handlers, type, namespaces, origType,
4998 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
4999
5000 if ( !elemData || !( events = elemData.events ) ) {
5001 return;
5002 }
5003
5004 // Once for each type.namespace in types; type may be omitted
5005 types = ( types || "" ).match( rnotwhite ) || [ "" ];
5006 t = types.length;
5007 while ( t-- ) {
5008 tmp = rtypenamespace.exec( types[ t ] ) || [];
5009 type = origType = tmp[ 1 ];
5010 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
5011
5012 // Unbind all events (on this namespace, if provided) for the element
5013 if ( !type ) {
5014 for ( type in events ) {
5015 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
5016 }
5017 continue;
5018 }
5019
5020 special = jQuery.event.special[ type ] || {};
5021 type = ( selector ? special.delegateType : special.bindType ) || type;
5022 handlers = events[ type ] || [];
5023 tmp = tmp[ 2 ] &&
5024 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
5025
5026 // Remove matching events
5027 origCount = j = handlers.length;
5028 while ( j-- ) {
5029 handleObj = handlers[ j ];
5030
5031 if ( ( mappedTypes || origType === handleObj.origType ) &&
5032 ( !handler || handler.guid === handleObj.guid ) &&
5033 ( !tmp || tmp.test( handleObj.namespace ) ) &&
5034 ( !selector || selector === handleObj.selector ||
5035 selector === "**" && handleObj.selector ) ) {
5036 handlers.splice( j, 1 );
5037
5038 if ( handleObj.selector ) {
5039 handlers.delegateCount--;
5040 }
5041 if ( special.remove ) {
5042 special.remove.call( elem, handleObj );
5043 }
5044 }
5045 }
5046
5047 // Remove generic event handler if we removed something and no more handlers exist
5048 // (avoids potential for endless recursion during removal of special event handlers)
5049 if ( origCount && !handlers.length ) {
5050 if ( !special.teardown ||
5051 special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
5052
5053 jQuery.removeEvent( elem, type, elemData.handle );
5054 }
5055
5056 delete events[ type ];
5057 }
5058 }
5059
5060 // Remove data and the expando if it's no longer used
5061 if ( jQuery.isEmptyObject( events ) ) {
5062 dataPriv.remove( elem, "handle events" );
5063 }
5064 },
5065
5066 dispatch: function( nativeEvent ) {
5067
5068 // Make a writable jQuery.Event from the native event object
5069 var event = jQuery.event.fix( nativeEvent );
5070
5071 var i, j, ret, matched, handleObj, handlerQueue,
5072 args = new Array( arguments.length ),
5073 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
5074 special = jQuery.event.special[ event.type ] || {};
5075
5076 // Use the fix-ed jQuery.Event rather than the (read-only) native event
5077 args[ 0 ] = event;
5078
5079 for ( i = 1; i < arguments.length; i++ ) {
5080 args[ i ] = arguments[ i ];
5081 }
5082
5083 event.delegateTarget = this;
5084
5085 // Call the preDispatch hook for the mapped type, and let it bail if desired
5086 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
5087 return;
5088 }
5089
5090 // Determine handlers
5091 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
5092
5093 // Run delegates first; they may want to stop propagation beneath us
5094 i = 0;
5095 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
5096 event.currentTarget = matched.elem;
5097
5098 j = 0;
5099 while ( ( handleObj = matched.handlers[ j++ ] ) &&
5100 !event.isImmediatePropagationStopped() ) {
5101
5102 // Triggered event must either 1) have no namespace, or 2) have namespace(s)
5103 // a subset or equal to those in the bound event (both can have no namespace).
5104 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
5105
5106 event.handleObj = handleObj;
5107 event.data = handleObj.data;
5108
5109 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
5110 handleObj.handler ).apply( matched.elem, args );
5111
5112 if ( ret !== undefined ) {
5113 if ( ( event.result = ret ) === false ) {
5114 event.preventDefault();
5115 event.stopPropagation();
5116 }
5117 }
5118 }
5119 }
5120 }
5121
5122 // Call the postDispatch hook for the mapped type
5123 if ( special.postDispatch ) {
5124 special.postDispatch.call( this, event );
5125 }
5126
5127 return event.result;
5128 },
5129
5130 handlers: function( event, handlers ) {
5131 var i, matches, sel, handleObj,
5132 handlerQueue = [],
5133 delegateCount = handlers.delegateCount,
5134 cur = event.target;
5135
5136 // Support: IE <=9
5137 // Find delegate handlers
5138 // Black-hole SVG <use> instance trees (#13180)
5139 //
5140 // Support: Firefox <=42
5141 // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
5142 if ( delegateCount && cur.nodeType &&
5143 ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
5144
5145 for ( ; cur !== this; cur = cur.parentNode || this ) {
5146
5147 // Don't check non-elements (#13208)
5148 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
5149 if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
5150 matches = [];
5151 for ( i = 0; i < delegateCount; i++ ) {
5152 handleObj = handlers[ i ];
5153
5154 // Don't conflict with Object.prototype properties (#13203)
5155 sel = handleObj.selector + " ";
5156
5157 if ( matches[ sel ] === undefined ) {
5158 matches[ sel ] = handleObj.needsContext ?
5159 jQuery( sel, this ).index( cur ) > -1 :
5160 jQuery.find( sel, this, null, [ cur ] ).length;
5161 }
5162 if ( matches[ sel ] ) {
5163 matches.push( handleObj );
5164 }
5165 }
5166 if ( matches.length ) {
5167 handlerQueue.push( { elem: cur, handlers: matches } );
5168 }
5169 }
5170 }
5171 }
5172
5173 // Add the remaining (directly-bound) handlers
5174 if ( delegateCount < handlers.length ) {
5175 handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
5176 }
5177
5178 return handlerQueue;
5179 },
5180
5181 addProp: function( name, hook ) {
5182 Object.defineProperty( jQuery.Event.prototype, name, {
5183 enumerable: true,
5184 configurable: true,
5185
5186 get: jQuery.isFunction( hook ) ?
5187 function() {
5188 if ( this.originalEvent ) {
5189 return hook( this.originalEvent );
5190 }
5191 } :
5192 function() {
5193 if ( this.originalEvent ) {
5194 return this.originalEvent[ name ];
5195 }
5196 },
5197
5198 set: function( value ) {
5199 Object.defineProperty( this, name, {
5200 enumerable: true,
5201 configurable: true,
5202 writable: true,
5203 value: value
5204 } );
5205 }
5206 } );
5207 },
5208
5209 fix: function( originalEvent ) {
5210 return originalEvent[ jQuery.expando ] ?
5211 originalEvent :
5212 new jQuery.Event( originalEvent );
5213 },
5214
5215 special: {
5216 load: {
5217
5218 // Prevent triggered image.load events from bubbling to window.load
5219 noBubble: true
5220 },
5221 focus: {
5222
5223 // Fire native event if possible so blur/focus sequence is correct
5224 trigger: function() {
5225 if ( this !== safeActiveElement() && this.focus ) {
5226 this.focus();
5227 return false;
5228 }
5229 },
5230 delegateType: "focusin"
5231 },
5232 blur: {
5233 trigger: function() {
5234 if ( this === safeActiveElement() && this.blur ) {
5235 this.blur();
5236 return false;
5237 }
5238 },
5239 delegateType: "focusout"
5240 },
5241 click: {
5242
5243 // For checkbox, fire native event so checked state will be right
5244 trigger: function() {
5245 if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
5246 this.click();
5247 return false;
5248 }
5249 },
5250
5251 // For cross-browser consistency, don't fire native .click() on links
5252 _default: function( event ) {
5253 return jQuery.nodeName( event.target, "a" );
5254 }
5255 },
5256
5257 beforeunload: {
5258 postDispatch: function( event ) {
5259
5260 // Support: Firefox 20+
5261 // Firefox doesn't alert if the returnValue field is not set.
5262 if ( event.result !== undefined && event.originalEvent ) {
5263 event.originalEvent.returnValue = event.result;
5264 }
5265 }
5266 }
5267 }
5268};
5269
5270jQuery.removeEvent = function( elem, type, handle ) {
5271
5272 // This "if" is needed for plain objects
5273 if ( elem.removeEventListener ) {
5274 elem.removeEventListener( type, handle );
5275 }
5276};
5277
5278jQuery.Event = function( src, props ) {
5279
5280 // Allow instantiation without the 'new' keyword
5281 if ( !( this instanceof jQuery.Event ) ) {
5282 return new jQuery.Event( src, props );
5283 }
5284
5285 // Event object
5286 if ( src && src.type ) {
5287 this.originalEvent = src;
5288 this.type = src.type;
5289
5290 // Events bubbling up the document may have been marked as prevented
5291 // by a handler lower down the tree; reflect the correct value.
5292 this.isDefaultPrevented = src.defaultPrevented ||
5293 src.defaultPrevented === undefined &&
5294
5295 // Support: Android <=2.3 only
5296 src.returnValue === false ?
5297 returnTrue :
5298 returnFalse;
5299
5300 // Create target properties
5301 // Support: Safari <=6 - 7 only
5302 // Target should not be a text node (#504, #13143)
5303 this.target = ( src.target && src.target.nodeType === 3 ) ?
5304 src.target.parentNode :
5305 src.target;
5306
5307 this.currentTarget = src.currentTarget;
5308 this.relatedTarget = src.relatedTarget;
5309
5310 // Event type
5311 } else {
5312 this.type = src;
5313 }
5314
5315 // Put explicitly provided properties onto the event object
5316 if ( props ) {
5317 jQuery.extend( this, props );
5318 }
5319
5320 // Create a timestamp if incoming event doesn't have one
5321 this.timeStamp = src && src.timeStamp || jQuery.now();
5322
5323 // Mark it as fixed
5324 this[ jQuery.expando ] = true;
5325};
5326
5327// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
5328// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
5329jQuery.Event.prototype = {
5330 constructor: jQuery.Event,
5331 isDefaultPrevented: returnFalse,
5332 isPropagationStopped: returnFalse,
5333 isImmediatePropagationStopped: returnFalse,
5334 isSimulated: false,
5335
5336 preventDefault: function() {
5337 var e = this.originalEvent;
5338
5339 this.isDefaultPrevented = returnTrue;
5340
5341 if ( e && !this.isSimulated ) {
5342 e.preventDefault();
5343 }
5344 },
5345 stopPropagation: function() {
5346 var e = this.originalEvent;
5347
5348 this.isPropagationStopped = returnTrue;
5349
5350 if ( e && !this.isSimulated ) {
5351 e.stopPropagation();
5352 }
5353 },
5354 stopImmediatePropagation: function() {
5355 var e = this.originalEvent;
5356
5357 this.isImmediatePropagationStopped = returnTrue;
5358
5359 if ( e && !this.isSimulated ) {
5360 e.stopImmediatePropagation();
5361 }
5362
5363 this.stopPropagation();
5364 }
5365};
5366
5367// Includes all common event props including KeyEvent and MouseEvent specific props
5368jQuery.each( {
5369 altKey: true,
5370 bubbles: true,
5371 cancelable: true,
5372 changedTouches: true,
5373 ctrlKey: true,
5374 detail: true,
5375 eventPhase: true,
5376 metaKey: true,
5377 pageX: true,
5378 pageY: true,
5379 shiftKey: true,
5380 view: true,
5381 "char": true,
5382 charCode: true,
5383 key: true,
5384 keyCode: true,
5385 button: true,
5386 buttons: true,
5387 clientX: true,
5388 clientY: true,
5389 offsetX: true,
5390 offsetY: true,
5391 pointerId: true,
5392 pointerType: true,
5393 screenX: true,
5394 screenY: true,
5395 targetTouches: true,
5396 toElement: true,
5397 touches: true,
5398
5399 which: function( event ) {
5400 var button = event.button;
5401
5402 // Add which for key events
5403 if ( event.which == null && rkeyEvent.test( event.type ) ) {
5404 return event.charCode != null ? event.charCode : event.keyCode;
5405 }
5406
5407 // Add which for click: 1 === left; 2 === middle; 3 === right
5408 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
5409 return ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
5410 }
5411
5412 return event.which;
5413 }
5414}, jQuery.event.addProp );
5415
5416// Create mouseenter/leave events using mouseover/out and event-time checks
5417// so that event delegation works in jQuery.
5418// Do the same for pointerenter/pointerleave and pointerover/pointerout
5419//
5420// Support: Safari 7 only
5421// Safari sends mouseenter too often; see:
5422// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
5423// for the description of the bug (it existed in older Chrome versions as well).
5424jQuery.each( {
5425 mouseenter: "mouseover",
5426 mouseleave: "mouseout",
5427 pointerenter: "pointerover",
5428 pointerleave: "pointerout"
5429}, function( orig, fix ) {
5430 jQuery.event.special[ orig ] = {
5431 delegateType: fix,
5432 bindType: fix,
5433
5434 handle: function( event ) {
5435 var ret,
5436 target = this,
5437 related = event.relatedTarget,
5438 handleObj = event.handleObj;
5439
5440 // For mouseenter/leave call the handler if related is outside the target.
5441 // NB: No relatedTarget if the mouse left/entered the browser window
5442 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
5443 event.type = handleObj.origType;
5444 ret = handleObj.handler.apply( this, arguments );
5445 event.type = fix;
5446 }
5447 return ret;
5448 }
5449 };
5450} );
5451
5452jQuery.fn.extend( {
5453
5454 on: function( types, selector, data, fn ) {
5455 return on( this, types, selector, data, fn );
5456 },
5457 one: function( types, selector, data, fn ) {
5458 return on( this, types, selector, data, fn, 1 );
5459 },
5460 off: function( types, selector, fn ) {
5461 var handleObj, type;
5462 if ( types && types.preventDefault && types.handleObj ) {
5463
5464 // ( event ) dispatched jQuery.Event
5465 handleObj = types.handleObj;
5466 jQuery( types.delegateTarget ).off(
5467 handleObj.namespace ?
5468 handleObj.origType + "." + handleObj.namespace :
5469 handleObj.origType,
5470 handleObj.selector,
5471 handleObj.handler
5472 );
5473 return this;
5474 }
5475 if ( typeof types === "object" ) {
5476
5477 // ( types-object [, selector] )
5478 for ( type in types ) {
5479 this.off( type, selector, types[ type ] );
5480 }
5481 return this;
5482 }
5483 if ( selector === false || typeof selector === "function" ) {
5484
5485 // ( types [, fn] )
5486 fn = selector;
5487 selector = undefined;
5488 }
5489 if ( fn === false ) {
5490 fn = returnFalse;
5491 }
5492 return this.each( function() {
5493 jQuery.event.remove( this, types, fn, selector );
5494 } );
5495 }
5496} );
5497
5498
5499var
5500
5501 /* eslint-disable max-len */
5502
5503 // See https://github.com/eslint/eslint/issues/3229
5504 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
5505
5506 /* eslint-enable */
5507
5508 // Support: IE <=10 - 11, Edge 12 - 13
5509 // In IE/Edge using regex groups here causes severe slowdowns.
5510 // See https://connect.microsoft.com/IE/feedback/details/1736512/
5511 rnoInnerhtml = /<script|<style|<link/i,
5512
5513 // checked="checked" or checked
5514 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
5515 rscriptTypeMasked = /^true\/(.*)/,
5516 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
5517
5518function manipulationTarget( elem, content ) {
5519 if ( jQuery.nodeName( elem, "table" ) &&
5520 jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
5521
5522 return elem.getElementsByTagName( "tbody" )[ 0 ] || elem;
5523 }
5524
5525 return elem;
5526}
5527
5528// Replace/restore the type attribute of script elements for safe DOM manipulation
5529function disableScript( elem ) {
5530 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
5531 return elem;
5532}
5533function restoreScript( elem ) {
5534 var match = rscriptTypeMasked.exec( elem.type );
5535
5536 if ( match ) {
5537 elem.type = match[ 1 ];
5538 } else {
5539 elem.removeAttribute( "type" );
5540 }
5541
5542 return elem;
5543}
5544
5545function cloneCopyEvent( src, dest ) {
5546 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
5547
5548 if ( dest.nodeType !== 1 ) {
5549 return;
5550 }
5551
5552 // 1. Copy private data: events, handlers, etc.
5553 if ( dataPriv.hasData( src ) ) {
5554 pdataOld = dataPriv.access( src );
5555 pdataCur = dataPriv.set( dest, pdataOld );
5556 events = pdataOld.events;
5557
5558 if ( events ) {
5559 delete pdataCur.handle;
5560 pdataCur.events = {};
5561
5562 for ( type in events ) {
5563 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
5564 jQuery.event.add( dest, type, events[ type ][ i ] );
5565 }
5566 }
5567 }
5568 }
5569
5570 // 2. Copy user data
5571 if ( dataUser.hasData( src ) ) {
5572 udataOld = dataUser.access( src );
5573 udataCur = jQuery.extend( {}, udataOld );
5574
5575 dataUser.set( dest, udataCur );
5576 }
5577}
5578
5579// Fix IE bugs, see support tests
5580function fixInput( src, dest ) {
5581 var nodeName = dest.nodeName.toLowerCase();
5582
5583 // Fails to persist the checked state of a cloned checkbox or radio button.
5584 if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
5585 dest.checked = src.checked;
5586
5587 // Fails to return the selected option to the default selected state when cloning options
5588 } else if ( nodeName === "input" || nodeName === "textarea" ) {
5589 dest.defaultValue = src.defaultValue;
5590 }
5591}
5592
5593function domManip( collection, args, callback, ignored ) {
5594
5595 // Flatten any nested arrays
5596 args = concat.apply( [], args );
5597
5598 var fragment, first, scripts, hasScripts, node, doc,
5599 i = 0,
5600 l = collection.length,
5601 iNoClone = l - 1,
5602 value = args[ 0 ],
5603 isFunction = jQuery.isFunction( value );
5604
5605 // We can't cloneNode fragments that contain checked, in WebKit
5606 if ( isFunction ||
5607 ( l > 1 && typeof value === "string" &&
5608 !support.checkClone && rchecked.test( value ) ) ) {
5609 return collection.each( function( index ) {
5610 var self = collection.eq( index );
5611 if ( isFunction ) {
5612 args[ 0 ] = value.call( this, index, self.html() );
5613 }
5614 domManip( self, args, callback, ignored );
5615 } );
5616 }
5617
5618 if ( l ) {
5619 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
5620 first = fragment.firstChild;
5621
5622 if ( fragment.childNodes.length === 1 ) {
5623 fragment = first;
5624 }
5625
5626 // Require either new content or an interest in ignored elements to invoke the callback
5627 if ( first || ignored ) {
5628 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
5629 hasScripts = scripts.length;
5630
5631 // Use the original fragment for the last item
5632 // instead of the first because it can end up
5633 // being emptied incorrectly in certain situations (#8070).
5634 for ( ; i < l; i++ ) {
5635 node = fragment;
5636
5637 if ( i !== iNoClone ) {
5638 node = jQuery.clone( node, true, true );
5639
5640 // Keep references to cloned scripts for later restoration
5641 if ( hasScripts ) {
5642
5643 // Support: Android <=4.0 only, PhantomJS 1 only
5644 // push.apply(_, arraylike) throws on ancient WebKit
5645 jQuery.merge( scripts, getAll( node, "script" ) );
5646 }
5647 }
5648
5649 callback.call( collection[ i ], node, i );
5650 }
5651
5652 if ( hasScripts ) {
5653 doc = scripts[ scripts.length - 1 ].ownerDocument;
5654
5655 // Reenable scripts
5656 jQuery.map( scripts, restoreScript );
5657
5658 // Evaluate executable scripts on first document insertion
5659 for ( i = 0; i < hasScripts; i++ ) {
5660 node = scripts[ i ];
5661 if ( rscriptType.test( node.type || "" ) &&
5662 !dataPriv.access( node, "globalEval" ) &&
5663 jQuery.contains( doc, node ) ) {
5664
5665 if ( node.src ) {
5666
5667 // Optional AJAX dependency, but won't run scripts if not present
5668 if ( jQuery._evalUrl ) {
5669 jQuery._evalUrl( node.src );
5670 }
5671 } else {
5672 DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
5673 }
5674 }
5675 }
5676 }
5677 }
5678 }
5679
5680 return collection;
5681}
5682
5683function remove( elem, selector, keepData ) {
5684 var node,
5685 nodes = selector ? jQuery.filter( selector, elem ) : elem,
5686 i = 0;
5687
5688 for ( ; ( node = nodes[ i ] ) != null; i++ ) {
5689 if ( !keepData && node.nodeType === 1 ) {
5690 jQuery.cleanData( getAll( node ) );
5691 }
5692
5693 if ( node.parentNode ) {
5694 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
5695 setGlobalEval( getAll( node, "script" ) );
5696 }
5697 node.parentNode.removeChild( node );
5698 }
5699 }
5700
5701 return elem;
5702}
5703
5704jQuery.extend( {
5705 htmlPrefilter: function( html ) {
5706 return html.replace( rxhtmlTag, "<$1></$2>" );
5707 },
5708
5709 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
5710 var i, l, srcElements, destElements,
5711 clone = elem.cloneNode( true ),
5712 inPage = jQuery.contains( elem.ownerDocument, elem );
5713
5714 // Fix IE cloning issues
5715 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
5716 !jQuery.isXMLDoc( elem ) ) {
5717
5718 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
5719 destElements = getAll( clone );
5720 srcElements = getAll( elem );
5721
5722 for ( i = 0, l = srcElements.length; i < l; i++ ) {
5723 fixInput( srcElements[ i ], destElements[ i ] );
5724 }
5725 }
5726
5727 // Copy the events from the original to the clone
5728 if ( dataAndEvents ) {
5729 if ( deepDataAndEvents ) {
5730 srcElements = srcElements || getAll( elem );
5731 destElements = destElements || getAll( clone );
5732
5733 for ( i = 0, l = srcElements.length; i < l; i++ ) {
5734 cloneCopyEvent( srcElements[ i ], destElements[ i ] );
5735 }
5736 } else {
5737 cloneCopyEvent( elem, clone );
5738 }
5739 }
5740
5741 // Preserve script evaluation history
5742 destElements = getAll( clone, "script" );
5743 if ( destElements.length > 0 ) {
5744 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
5745 }
5746
5747 // Return the cloned set
5748 return clone;
5749 },
5750
5751 cleanData: function( elems ) {
5752 var data, elem, type,
5753 special = jQuery.event.special,
5754 i = 0;
5755
5756 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
5757 if ( acceptData( elem ) ) {
5758 if ( ( data = elem[ dataPriv.expando ] ) ) {
5759 if ( data.events ) {
5760 for ( type in data.events ) {
5761 if ( special[ type ] ) {
5762 jQuery.event.remove( elem, type );
5763
5764 // This is a shortcut to avoid jQuery.event.remove's overhead
5765 } else {
5766 jQuery.removeEvent( elem, type, data.handle );
5767 }
5768 }
5769 }
5770
5771 // Support: Chrome <=35 - 45+
5772 // Assign undefined instead of using delete, see Data#remove
5773 elem[ dataPriv.expando ] = undefined;
5774 }
5775 if ( elem[ dataUser.expando ] ) {
5776
5777 // Support: Chrome <=35 - 45+
5778 // Assign undefined instead of using delete, see Data#remove
5779 elem[ dataUser.expando ] = undefined;
5780 }
5781 }
5782 }
5783 }
5784} );
5785
5786jQuery.fn.extend( {
5787 detach: function( selector ) {
5788 return remove( this, selector, true );
5789 },
5790
5791 remove: function( selector ) {
5792 return remove( this, selector );
5793 },
5794
5795 text: function( value ) {
5796 return access( this, function( value ) {
5797 return value === undefined ?
5798 jQuery.text( this ) :
5799 this.empty().each( function() {
5800 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
5801 this.textContent = value;
5802 }
5803 } );
5804 }, null, value, arguments.length );
5805 },
5806
5807 append: function() {
5808 return domManip( this, arguments, function( elem ) {
5809 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
5810 var target = manipulationTarget( this, elem );
5811 target.appendChild( elem );
5812 }
5813 } );
5814 },
5815
5816 prepend: function() {
5817 return domManip( this, arguments, function( elem ) {
5818 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
5819 var target = manipulationTarget( this, elem );
5820 target.insertBefore( elem, target.firstChild );
5821 }
5822 } );
5823 },
5824
5825 before: function() {
5826 return domManip( this, arguments, function( elem ) {
5827 if ( this.parentNode ) {
5828 this.parentNode.insertBefore( elem, this );
5829 }
5830 } );
5831 },
5832
5833 after: function() {
5834 return domManip( this, arguments, function( elem ) {
5835 if ( this.parentNode ) {
5836 this.parentNode.insertBefore( elem, this.nextSibling );
5837 }
5838 } );
5839 },
5840
5841 empty: function() {
5842 var elem,
5843 i = 0;
5844
5845 for ( ; ( elem = this[ i ] ) != null; i++ ) {
5846 if ( elem.nodeType === 1 ) {
5847
5848 // Prevent memory leaks
5849 jQuery.cleanData( getAll( elem, false ) );
5850
5851 // Remove any remaining nodes
5852 elem.textContent = "";
5853 }
5854 }
5855
5856 return this;
5857 },
5858
5859 clone: function( dataAndEvents, deepDataAndEvents ) {
5860 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
5861 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
5862
5863 return this.map( function() {
5864 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
5865 } );
5866 },
5867
5868 html: function( value ) {
5869 return access( this, function( value ) {
5870 var elem = this[ 0 ] || {},
5871 i = 0,
5872 l = this.length;
5873
5874 if ( value === undefined && elem.nodeType === 1 ) {
5875 return elem.innerHTML;
5876 }
5877
5878 // See if we can take a shortcut and just use innerHTML
5879 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
5880 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
5881
5882 value = jQuery.htmlPrefilter( value );
5883
5884 try {
5885 for ( ; i < l; i++ ) {
5886 elem = this[ i ] || {};
5887
5888 // Remove element nodes and prevent memory leaks
5889 if ( elem.nodeType === 1 ) {
5890 jQuery.cleanData( getAll( elem, false ) );
5891 elem.innerHTML = value;
5892 }
5893 }
5894
5895 elem = 0;
5896
5897 // If using innerHTML throws an exception, use the fallback method
5898 } catch ( e ) {}
5899 }
5900
5901 if ( elem ) {
5902 this.empty().append( value );
5903 }
5904 }, null, value, arguments.length );
5905 },
5906
5907 replaceWith: function() {
5908 var ignored = [];
5909
5910 // Make the changes, replacing each non-ignored context element with the new content
5911 return domManip( this, arguments, function( elem ) {
5912 var parent = this.parentNode;
5913
5914 if ( jQuery.inArray( this, ignored ) < 0 ) {
5915 jQuery.cleanData( getAll( this ) );
5916 if ( parent ) {
5917 parent.replaceChild( elem, this );
5918 }
5919 }
5920
5921 // Force callback invocation
5922 }, ignored );
5923 }
5924} );
5925
5926jQuery.each( {
5927 appendTo: "append",
5928 prependTo: "prepend",
5929 insertBefore: "before",
5930 insertAfter: "after",
5931 replaceAll: "replaceWith"
5932}, function( name, original ) {
5933 jQuery.fn[ name ] = function( selector ) {
5934 var elems,
5935 ret = [],
5936 insert = jQuery( selector ),
5937 last = insert.length - 1,
5938 i = 0;
5939
5940 for ( ; i <= last; i++ ) {
5941 elems = i === last ? this : this.clone( true );
5942 jQuery( insert[ i ] )[ original ]( elems );
5943
5944 // Support: Android <=4.0 only, PhantomJS 1 only
5945 // .get() because push.apply(_, arraylike) throws on ancient WebKit
5946 push.apply( ret, elems.get() );
5947 }
5948
5949 return this.pushStack( ret );
5950 };
5951} );
5952var rmargin = ( /^margin/ );
5953
5954var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
5955
5956var getStyles = function( elem ) {
5957
5958 // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
5959 // IE throws on elements created in popups
5960 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
5961 var view = elem.ownerDocument.defaultView;
5962
5963 if ( !view || !view.opener ) {
5964 view = window;
5965 }
5966
5967 return view.getComputedStyle( elem );
5968 };
5969
5970
5971
5972( function() {
5973
5974 // Executing both pixelPosition & boxSizingReliable tests require only one layout
5975 // so they're executed at the same time to save the second computation.
5976 function computeStyleTests() {
5977
5978 // This is a singleton, we need to execute it only once
5979 if ( !div ) {
5980 return;
5981 }
5982
5983 div.style.cssText =
5984 "box-sizing:border-box;" +
5985 "position:relative;display:block;" +
5986 "margin:auto;border:1px;padding:1px;" +
5987 "top:1%;width:50%";
5988 div.innerHTML = "";
5989 documentElement.appendChild( container );
5990
5991 var divStyle = window.getComputedStyle( div );
5992 pixelPositionVal = divStyle.top !== "1%";
5993
5994 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
5995 reliableMarginLeftVal = divStyle.marginLeft === "2px";
5996 boxSizingReliableVal = divStyle.width === "4px";
5997
5998 // Support: Android 4.0 - 4.3 only
5999 // Some styles come back with percentage values, even though they shouldn't
6000 div.style.marginRight = "50%";
6001 pixelMarginRightVal = divStyle.marginRight === "4px";
6002
6003 documentElement.removeChild( container );
6004
6005 // Nullify the div so it wouldn't be stored in the memory and
6006 // it will also be a sign that checks already performed
6007 div = null;
6008 }
6009
6010 var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
6011 container = document.createElement( "div" ),
6012 div = document.createElement( "div" );
6013
6014 // Finish early in limited (non-browser) environments
6015 if ( !div.style ) {
6016 return;
6017 }
6018
6019 // Support: IE <=9 - 11 only
6020 // Style of cloned element affects source element cloned (#8908)
6021 div.style.backgroundClip = "content-box";
6022 div.cloneNode( true ).style.backgroundClip = "";
6023 support.clearCloneStyle = div.style.backgroundClip === "content-box";
6024
6025 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
6026 "padding:0;margin-top:1px;position:absolute";
6027 container.appendChild( div );
6028
6029 jQuery.extend( support, {
6030 pixelPosition: function() {
6031 computeStyleTests();
6032 return pixelPositionVal;
6033 },
6034 boxSizingReliable: function() {
6035 computeStyleTests();
6036 return boxSizingReliableVal;
6037 },
6038 pixelMarginRight: function() {
6039 computeStyleTests();
6040 return pixelMarginRightVal;
6041 },
6042 reliableMarginLeft: function() {
6043 computeStyleTests();
6044 return reliableMarginLeftVal;
6045 }
6046 } );
6047} )();
6048
6049
6050function curCSS( elem, name, computed ) {
6051 var width, minWidth, maxWidth, ret,
6052 style = elem.style;
6053
6054 computed = computed || getStyles( elem );
6055
6056 // Support: IE <=9 only
6057 // getPropertyValue is only needed for .css('filter') (#12537)
6058 if ( computed ) {
6059 ret = computed.getPropertyValue( name ) || computed[ name ];
6060
6061 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
6062 ret = jQuery.style( elem, name );
6063 }
6064
6065 // A tribute to the "awesome hack by Dean Edwards"
6066 // Android Browser returns percentage for some values,
6067 // but width seems to be reliably pixels.
6068 // This is against the CSSOM draft spec:
6069 // https://drafts.csswg.org/cssom/#resolved-values
6070 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
6071
6072 // Remember the original values
6073 width = style.width;
6074 minWidth = style.minWidth;
6075 maxWidth = style.maxWidth;
6076
6077 // Put in the new values to get a computed value out
6078 style.minWidth = style.maxWidth = style.width = ret;
6079 ret = computed.width;
6080
6081 // Revert the changed values
6082 style.width = width;
6083 style.minWidth = minWidth;
6084 style.maxWidth = maxWidth;
6085 }
6086 }
6087
6088 return ret !== undefined ?
6089
6090 // Support: IE <=9 - 11 only
6091 // IE returns zIndex value as an integer.
6092 ret + "" :
6093 ret;
6094}
6095
6096
6097function addGetHookIf( conditionFn, hookFn ) {
6098
6099 // Define the hook, we'll check on the first run if it's really needed.
6100 return {
6101 get: function() {
6102 if ( conditionFn() ) {
6103
6104 // Hook not needed (or it's not possible to use it due
6105 // to missing dependency), remove it.
6106 delete this.get;
6107 return;
6108 }
6109
6110 // Hook needed; redefine it so that the support test is not executed again.
6111 return ( this.get = hookFn ).apply( this, arguments );
6112 }
6113 };
6114}
6115
6116
6117var
6118
6119 // Swappable if display is none or starts with table
6120 // except "table", "table-cell", or "table-caption"
6121 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
6122 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
6123 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
6124 cssNormalTransform = {
6125 letterSpacing: "0",
6126 fontWeight: "400"
6127 },
6128
6129 cssPrefixes = [ "Webkit", "Moz", "ms" ],
6130 emptyStyle = document.createElement( "div" ).style;
6131
6132// Return a css property mapped to a potentially vendor prefixed property
6133function vendorPropName( name ) {
6134
6135 // Shortcut for names that are not vendor prefixed
6136 if ( name in emptyStyle ) {
6137 return name;
6138 }
6139
6140 // Check for vendor prefixed names
6141 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
6142 i = cssPrefixes.length;
6143
6144 while ( i-- ) {
6145 name = cssPrefixes[ i ] + capName;
6146 if ( name in emptyStyle ) {
6147 return name;
6148 }
6149 }
6150}
6151
6152function setPositiveNumber( elem, value, subtract ) {
6153
6154 // Any relative (+/-) values have already been
6155 // normalized at this point
6156 var matches = rcssNum.exec( value );
6157 return matches ?
6158
6159 // Guard against undefined "subtract", e.g., when used as in cssHooks
6160 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
6161 value;
6162}
6163
6164function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
6165 var i = extra === ( isBorderBox ? "border" : "content" ) ?
6166
6167 // If we already have the right measurement, avoid augmentation
6168 4 :
6169
6170 // Otherwise initialize for horizontal or vertical properties
6171 name === "width" ? 1 : 0,
6172
6173 val = 0;
6174
6175 for ( ; i < 4; i += 2 ) {
6176
6177 // Both box models exclude margin, so add it if we want it
6178 if ( extra === "margin" ) {
6179 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
6180 }
6181
6182 if ( isBorderBox ) {
6183
6184 // border-box includes padding, so remove it if we want content
6185 if ( extra === "content" ) {
6186 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
6187 }
6188
6189 // At this point, extra isn't border nor margin, so remove border
6190 if ( extra !== "margin" ) {
6191 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6192 }
6193 } else {
6194
6195 // At this point, extra isn't content, so add padding
6196 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
6197
6198 // At this point, extra isn't content nor padding, so add border
6199 if ( extra !== "padding" ) {
6200 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6201 }
6202 }
6203 }
6204
6205 return val;
6206}
6207
6208function getWidthOrHeight( elem, name, extra ) {
6209
6210 // Start with offset property, which is equivalent to the border-box value
6211 var val,
6212 valueIsBorderBox = true,
6213 styles = getStyles( elem ),
6214 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
6215
6216 // Support: IE <=11 only
6217 // Running getBoundingClientRect on a disconnected node
6218 // in IE throws an error.
6219 if ( elem.getClientRects().length ) {
6220 val = elem.getBoundingClientRect()[ name ];
6221 }
6222
6223 // Some non-html elements return undefined for offsetWidth, so check for null/undefined
6224 // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
6225 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
6226 if ( val <= 0 || val == null ) {
6227
6228 // Fall back to computed then uncomputed css if necessary
6229 val = curCSS( elem, name, styles );
6230 if ( val < 0 || val == null ) {
6231 val = elem.style[ name ];
6232 }
6233
6234 // Computed unit is not pixels. Stop here and return.
6235 if ( rnumnonpx.test( val ) ) {
6236 return val;
6237 }
6238
6239 // Check for style in case a browser which returns unreliable values
6240 // for getComputedStyle silently falls back to the reliable elem.style
6241 valueIsBorderBox = isBorderBox &&
6242 ( support.boxSizingReliable() || val === elem.style[ name ] );
6243
6244 // Normalize "", auto, and prepare for extra
6245 val = parseFloat( val ) || 0;
6246 }
6247
6248 // Use the active box-sizing model to add/subtract irrelevant styles
6249 return ( val +
6250 augmentWidthOrHeight(
6251 elem,
6252 name,
6253 extra || ( isBorderBox ? "border" : "content" ),
6254 valueIsBorderBox,
6255 styles
6256 )
6257 ) + "px";
6258}
6259
6260jQuery.extend( {
6261
6262 // Add in style property hooks for overriding the default
6263 // behavior of getting and setting a style property
6264 cssHooks: {
6265 opacity: {
6266 get: function( elem, computed ) {
6267 if ( computed ) {
6268
6269 // We should always get a number back from opacity
6270 var ret = curCSS( elem, "opacity" );
6271 return ret === "" ? "1" : ret;
6272 }
6273 }
6274 }
6275 },
6276
6277 // Don't automatically add "px" to these possibly-unitless properties
6278 cssNumber: {
6279 "animationIterationCount": true,
6280 "columnCount": true,
6281 "fillOpacity": true,
6282 "flexGrow": true,
6283 "flexShrink": true,
6284 "fontWeight": true,
6285 "lineHeight": true,
6286 "opacity": true,
6287 "order": true,
6288 "orphans": true,
6289 "widows": true,
6290 "zIndex": true,
6291 "zoom": true
6292 },
6293
6294 // Add in properties whose names you wish to fix before
6295 // setting or getting the value
6296 cssProps: {
6297 "float": "cssFloat"
6298 },
6299
6300 // Get and set the style property on a DOM Node
6301 style: function( elem, name, value, extra ) {
6302
6303 // Don't set styles on text and comment nodes
6304 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
6305 return;
6306 }
6307
6308 // Make sure that we're working with the right name
6309 var ret, type, hooks,
6310 origName = jQuery.camelCase( name ),
6311 style = elem.style;
6312
6313 name = jQuery.cssProps[ origName ] ||
6314 ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
6315
6316 // Gets hook for the prefixed version, then unprefixed version
6317 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
6318
6319 // Check if we're setting a value
6320 if ( value !== undefined ) {
6321 type = typeof value;
6322
6323 // Convert "+=" or "-=" to relative numbers (#7345)
6324 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
6325 value = adjustCSS( elem, name, ret );
6326
6327 // Fixes bug #9237
6328 type = "number";
6329 }
6330
6331 // Make sure that null and NaN values aren't set (#7116)
6332 if ( value == null || value !== value ) {
6333 return;
6334 }
6335
6336 // If a number was passed in, add the unit (except for certain CSS properties)
6337 if ( type === "number" ) {
6338 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
6339 }
6340
6341 // background-* props affect original clone's values
6342 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
6343 style[ name ] = "inherit";
6344 }
6345
6346 // If a hook was provided, use that value, otherwise just set the specified value
6347 if ( !hooks || !( "set" in hooks ) ||
6348 ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
6349
6350 style[ name ] = value;
6351 }
6352
6353 } else {
6354
6355 // If a hook was provided get the non-computed value from there
6356 if ( hooks && "get" in hooks &&
6357 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
6358
6359 return ret;
6360 }
6361
6362 // Otherwise just get the value from the style object
6363 return style[ name ];
6364 }
6365 },
6366
6367 css: function( elem, name, extra, styles ) {
6368 var val, num, hooks,
6369 origName = jQuery.camelCase( name );
6370
6371 // Make sure that we're working with the right name
6372 name = jQuery.cssProps[ origName ] ||
6373 ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
6374
6375 // Try prefixed name followed by the unprefixed name
6376 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
6377
6378 // If a hook was provided get the computed value from there
6379 if ( hooks && "get" in hooks ) {
6380 val = hooks.get( elem, true, extra );
6381 }
6382
6383 // Otherwise, if a way to get the computed value exists, use that
6384 if ( val === undefined ) {
6385 val = curCSS( elem, name, styles );
6386 }
6387
6388 // Convert "normal" to computed value
6389 if ( val === "normal" && name in cssNormalTransform ) {
6390 val = cssNormalTransform[ name ];
6391 }
6392
6393 // Make numeric if forced or a qualifier was provided and val looks numeric
6394 if ( extra === "" || extra ) {
6395 num = parseFloat( val );
6396 return extra === true || isFinite( num ) ? num || 0 : val;
6397 }
6398 return val;
6399 }
6400} );
6401
6402jQuery.each( [ "height", "width" ], function( i, name ) {
6403 jQuery.cssHooks[ name ] = {
6404 get: function( elem, computed, extra ) {
6405 if ( computed ) {
6406
6407 // Certain elements can have dimension info if we invisibly show them
6408 // but it must have a current display style that would benefit
6409 return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
6410
6411 // Support: Safari 8+
6412 // Table columns in Safari have non-zero offsetWidth & zero
6413 // getBoundingClientRect().width unless display is changed.
6414 // Support: IE <=11 only
6415 // Running getBoundingClientRect on a disconnected node
6416 // in IE throws an error.
6417 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
6418 swap( elem, cssShow, function() {
6419 return getWidthOrHeight( elem, name, extra );
6420 } ) :
6421 getWidthOrHeight( elem, name, extra );
6422 }
6423 },
6424
6425 set: function( elem, value, extra ) {
6426 var matches,
6427 styles = extra && getStyles( elem ),
6428 subtract = extra && augmentWidthOrHeight(
6429 elem,
6430 name,
6431 extra,
6432 jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
6433 styles
6434 );
6435
6436 // Convert to pixels if value adjustment is needed
6437 if ( subtract && ( matches = rcssNum.exec( value ) ) &&
6438 ( matches[ 3 ] || "px" ) !== "px" ) {
6439
6440 elem.style[ name ] = value;
6441 value = jQuery.css( elem, name );
6442 }
6443
6444 return setPositiveNumber( elem, value, subtract );
6445 }
6446 };
6447} );
6448
6449jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
6450 function( elem, computed ) {
6451 if ( computed ) {
6452 return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
6453 elem.getBoundingClientRect().left -
6454 swap( elem, { marginLeft: 0 }, function() {
6455 return elem.getBoundingClientRect().left;
6456 } )
6457 ) + "px";
6458 }
6459 }
6460);
6461
6462// These hooks are used by animate to expand properties
6463jQuery.each( {
6464 margin: "",
6465 padding: "",
6466 border: "Width"
6467}, function( prefix, suffix ) {
6468 jQuery.cssHooks[ prefix + suffix ] = {
6469 expand: function( value ) {
6470 var i = 0,
6471 expanded = {},
6472
6473 // Assumes a single number if not a string
6474 parts = typeof value === "string" ? value.split( " " ) : [ value ];
6475
6476 for ( ; i < 4; i++ ) {
6477 expanded[ prefix + cssExpand[ i ] + suffix ] =
6478 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
6479 }
6480
6481 return expanded;
6482 }
6483 };
6484
6485 if ( !rmargin.test( prefix ) ) {
6486 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
6487 }
6488} );
6489
6490jQuery.fn.extend( {
6491 css: function( name, value ) {
6492 return access( this, function( elem, name, value ) {
6493 var styles, len,
6494 map = {},
6495 i = 0;
6496
6497 if ( jQuery.isArray( name ) ) {
6498 styles = getStyles( elem );
6499 len = name.length;
6500
6501 for ( ; i < len; i++ ) {
6502 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
6503 }
6504
6505 return map;
6506 }
6507
6508 return value !== undefined ?
6509 jQuery.style( elem, name, value ) :
6510 jQuery.css( elem, name );
6511 }, name, value, arguments.length > 1 );
6512 }
6513} );
6514
6515
6516function Tween( elem, options, prop, end, easing ) {
6517 return new Tween.prototype.init( elem, options, prop, end, easing );
6518}
6519jQuery.Tween = Tween;
6520
6521Tween.prototype = {
6522 constructor: Tween,
6523 init: function( elem, options, prop, end, easing, unit ) {
6524 this.elem = elem;
6525 this.prop = prop;
6526 this.easing = easing || jQuery.easing._default;
6527 this.options = options;
6528 this.start = this.now = this.cur();
6529 this.end = end;
6530 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
6531 },
6532 cur: function() {
6533 var hooks = Tween.propHooks[ this.prop ];
6534
6535 return hooks && hooks.get ?
6536 hooks.get( this ) :
6537 Tween.propHooks._default.get( this );
6538 },
6539 run: function( percent ) {
6540 var eased,
6541 hooks = Tween.propHooks[ this.prop ];
6542
6543 if ( this.options.duration ) {
6544 this.pos = eased = jQuery.easing[ this.easing ](
6545 percent, this.options.duration * percent, 0, 1, this.options.duration
6546 );
6547 } else {
6548 this.pos = eased = percent;
6549 }
6550 this.now = ( this.end - this.start ) * eased + this.start;
6551
6552 if ( this.options.step ) {
6553 this.options.step.call( this.elem, this.now, this );
6554 }
6555
6556 if ( hooks && hooks.set ) {
6557 hooks.set( this );
6558 } else {
6559 Tween.propHooks._default.set( this );
6560 }
6561 return this;
6562 }
6563};
6564
6565Tween.prototype.init.prototype = Tween.prototype;
6566
6567Tween.propHooks = {
6568 _default: {
6569 get: function( tween ) {
6570 var result;
6571
6572 // Use a property on the element directly when it is not a DOM element,
6573 // or when there is no matching style property that exists.
6574 if ( tween.elem.nodeType !== 1 ||
6575 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
6576 return tween.elem[ tween.prop ];
6577 }
6578
6579 // Passing an empty string as a 3rd parameter to .css will automatically
6580 // attempt a parseFloat and fallback to a string if the parse fails.
6581 // Simple values such as "10px" are parsed to Float;
6582 // complex values such as "rotate(1rad)" are returned as-is.
6583 result = jQuery.css( tween.elem, tween.prop, "" );
6584
6585 // Empty strings, null, undefined and "auto" are converted to 0.
6586 return !result || result === "auto" ? 0 : result;
6587 },
6588 set: function( tween ) {
6589
6590 // Use step hook for back compat.
6591 // Use cssHook if its there.
6592 // Use .style if available and use plain properties where available.
6593 if ( jQuery.fx.step[ tween.prop ] ) {
6594 jQuery.fx.step[ tween.prop ]( tween );
6595 } else if ( tween.elem.nodeType === 1 &&
6596 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
6597 jQuery.cssHooks[ tween.prop ] ) ) {
6598 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
6599 } else {
6600 tween.elem[ tween.prop ] = tween.now;
6601 }
6602 }
6603 }
6604};
6605
6606// Support: IE <=9 only
6607// Panic based approach to setting things on disconnected nodes
6608Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
6609 set: function( tween ) {
6610 if ( tween.elem.nodeType && tween.elem.parentNode ) {
6611 tween.elem[ tween.prop ] = tween.now;
6612 }
6613 }
6614};
6615
6616jQuery.easing = {
6617 linear: function( p ) {
6618 return p;
6619 },
6620 swing: function( p ) {
6621 return 0.5 - Math.cos( p * Math.PI ) / 2;
6622 },
6623 _default: "swing"
6624};
6625
6626jQuery.fx = Tween.prototype.init;
6627
6628// Back compat <1.8 extension point
6629jQuery.fx.step = {};
6630
6631
6632
6633
6634var
6635 fxNow, timerId,
6636 rfxtypes = /^(?:toggle|show|hide)$/,
6637 rrun = /queueHooks$/;
6638
6639function raf() {
6640 if ( timerId ) {
6641 window.requestAnimationFrame( raf );
6642 jQuery.fx.tick();
6643 }
6644}
6645
6646// Animations created synchronously will run synchronously
6647function createFxNow() {
6648 window.setTimeout( function() {
6649 fxNow = undefined;
6650 } );
6651 return ( fxNow = jQuery.now() );
6652}
6653
6654// Generate parameters to create a standard animation
6655function genFx( type, includeWidth ) {
6656 var which,
6657 i = 0,
6658 attrs = { height: type };
6659
6660 // If we include width, step value is 1 to do all cssExpand values,
6661 // otherwise step value is 2 to skip over Left and Right
6662 includeWidth = includeWidth ? 1 : 0;
6663 for ( ; i < 4; i += 2 - includeWidth ) {
6664 which = cssExpand[ i ];
6665 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
6666 }
6667
6668 if ( includeWidth ) {
6669 attrs.opacity = attrs.width = type;
6670 }
6671
6672 return attrs;
6673}
6674
6675function createTween( value, prop, animation ) {
6676 var tween,
6677 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
6678 index = 0,
6679 length = collection.length;
6680 for ( ; index < length; index++ ) {
6681 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
6682
6683 // We're done with this property
6684 return tween;
6685 }
6686 }
6687}
6688
6689function defaultPrefilter( elem, props, opts ) {
6690 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
6691 isBox = "width" in props || "height" in props,
6692 anim = this,
6693 orig = {},
6694 style = elem.style,
6695 hidden = elem.nodeType && isHiddenWithinTree( elem ),
6696 dataShow = dataPriv.get( elem, "fxshow" );
6697
6698 // Queue-skipping animations hijack the fx hooks
6699 if ( !opts.queue ) {
6700 hooks = jQuery._queueHooks( elem, "fx" );
6701 if ( hooks.unqueued == null ) {
6702 hooks.unqueued = 0;
6703 oldfire = hooks.empty.fire;
6704 hooks.empty.fire = function() {
6705 if ( !hooks.unqueued ) {
6706 oldfire();
6707 }
6708 };
6709 }
6710 hooks.unqueued++;
6711
6712 anim.always( function() {
6713
6714 // Ensure the complete handler is called before this completes
6715 anim.always( function() {
6716 hooks.unqueued--;
6717 if ( !jQuery.queue( elem, "fx" ).length ) {
6718 hooks.empty.fire();
6719 }
6720 } );
6721 } );
6722 }
6723
6724 // Detect show/hide animations
6725 for ( prop in props ) {
6726 value = props[ prop ];
6727 if ( rfxtypes.test( value ) ) {
6728 delete props[ prop ];
6729 toggle = toggle || value === "toggle";
6730 if ( value === ( hidden ? "hide" : "show" ) ) {
6731
6732 // Pretend to be hidden if this is a "show" and
6733 // there is still data from a stopped show/hide
6734 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
6735 hidden = true;
6736
6737 // Ignore all other no-op show/hide data
6738 } else {
6739 continue;
6740 }
6741 }
6742 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
6743 }
6744 }
6745
6746 // Bail out if this is a no-op like .hide().hide()
6747 propTween = !jQuery.isEmptyObject( props );
6748 if ( !propTween && jQuery.isEmptyObject( orig ) ) {
6749 return;
6750 }
6751
6752 // Restrict "overflow" and "display" styles during box animations
6753 if ( isBox && elem.nodeType === 1 ) {
6754
6755 // Support: IE <=9 - 11, Edge 12 - 13
6756 // Record all 3 overflow attributes because IE does not infer the shorthand
6757 // from identically-valued overflowX and overflowY
6758 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
6759
6760 // Identify a display type, preferring old show/hide data over the CSS cascade
6761 restoreDisplay = dataShow && dataShow.display;
6762 if ( restoreDisplay == null ) {
6763 restoreDisplay = dataPriv.get( elem, "display" );
6764 }
6765 display = jQuery.css( elem, "display" );
6766 if ( display === "none" ) {
6767 if ( restoreDisplay ) {
6768 display = restoreDisplay;
6769 } else {
6770
6771 // Get nonempty value(s) by temporarily forcing visibility
6772 showHide( [ elem ], true );
6773 restoreDisplay = elem.style.display || restoreDisplay;
6774 display = jQuery.css( elem, "display" );
6775 showHide( [ elem ] );
6776 }
6777 }
6778
6779 // Animate inline elements as inline-block
6780 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
6781 if ( jQuery.css( elem, "float" ) === "none" ) {
6782
6783 // Restore the original display value at the end of pure show/hide animations
6784 if ( !propTween ) {
6785 anim.done( function() {
6786 style.display = restoreDisplay;
6787 } );
6788 if ( restoreDisplay == null ) {
6789 display = style.display;
6790 restoreDisplay = display === "none" ? "" : display;
6791 }
6792 }
6793 style.display = "inline-block";
6794 }
6795 }
6796 }
6797
6798 if ( opts.overflow ) {
6799 style.overflow = "hidden";
6800 anim.always( function() {
6801 style.overflow = opts.overflow[ 0 ];
6802 style.overflowX = opts.overflow[ 1 ];
6803 style.overflowY = opts.overflow[ 2 ];
6804 } );
6805 }
6806
6807 // Implement show/hide animations
6808 propTween = false;
6809 for ( prop in orig ) {
6810
6811 // General show/hide setup for this element animation
6812 if ( !propTween ) {
6813 if ( dataShow ) {
6814 if ( "hidden" in dataShow ) {
6815 hidden = dataShow.hidden;
6816 }
6817 } else {
6818 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
6819 }
6820
6821 // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
6822 if ( toggle ) {
6823 dataShow.hidden = !hidden;
6824 }
6825
6826 // Show elements before animating them
6827 if ( hidden ) {
6828 showHide( [ elem ], true );
6829 }
6830
6831 /* eslint-disable no-loop-func */
6832
6833 anim.done( function() {
6834
6835 /* eslint-enable no-loop-func */
6836
6837 // The final step of a "hide" animation is actually hiding the element
6838 if ( !hidden ) {
6839 showHide( [ elem ] );
6840 }
6841 dataPriv.remove( elem, "fxshow" );
6842 for ( prop in orig ) {
6843 jQuery.style( elem, prop, orig[ prop ] );
6844 }
6845 } );
6846 }
6847
6848 // Per-property setup
6849 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
6850 if ( !( prop in dataShow ) ) {
6851 dataShow[ prop ] = propTween.start;
6852 if ( hidden ) {
6853 propTween.end = propTween.start;
6854 propTween.start = 0;
6855 }
6856 }
6857 }
6858}
6859
6860function propFilter( props, specialEasing ) {
6861 var index, name, easing, value, hooks;
6862
6863 // camelCase, specialEasing and expand cssHook pass
6864 for ( index in props ) {
6865 name = jQuery.camelCase( index );
6866 easing = specialEasing[ name ];
6867 value = props[ index ];
6868 if ( jQuery.isArray( value ) ) {
6869 easing = value[ 1 ];
6870 value = props[ index ] = value[ 0 ];
6871 }
6872
6873 if ( index !== name ) {
6874 props[ name ] = value;
6875 delete props[ index ];
6876 }
6877
6878 hooks = jQuery.cssHooks[ name ];
6879 if ( hooks && "expand" in hooks ) {
6880 value = hooks.expand( value );
6881 delete props[ name ];
6882
6883 // Not quite $.extend, this won't overwrite existing keys.
6884 // Reusing 'index' because we have the correct "name"
6885 for ( index in value ) {
6886 if ( !( index in props ) ) {
6887 props[ index ] = value[ index ];
6888 specialEasing[ index ] = easing;
6889 }
6890 }
6891 } else {
6892 specialEasing[ name ] = easing;
6893 }
6894 }
6895}
6896
6897function Animation( elem, properties, options ) {
6898 var result,
6899 stopped,
6900 index = 0,
6901 length = Animation.prefilters.length,
6902 deferred = jQuery.Deferred().always( function() {
6903
6904 // Don't match elem in the :animated selector
6905 delete tick.elem;
6906 } ),
6907 tick = function() {
6908 if ( stopped ) {
6909 return false;
6910 }
6911 var currentTime = fxNow || createFxNow(),
6912 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
6913
6914 // Support: Android 2.3 only
6915 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
6916 temp = remaining / animation.duration || 0,
6917 percent = 1 - temp,
6918 index = 0,
6919 length = animation.tweens.length;
6920
6921 for ( ; index < length; index++ ) {
6922 animation.tweens[ index ].run( percent );
6923 }
6924
6925 deferred.notifyWith( elem, [ animation, percent, remaining ] );
6926
6927 if ( percent < 1 && length ) {
6928 return remaining;
6929 } else {
6930 deferred.resolveWith( elem, [ animation ] );
6931 return false;
6932 }
6933 },
6934 animation = deferred.promise( {
6935 elem: elem,
6936 props: jQuery.extend( {}, properties ),
6937 opts: jQuery.extend( true, {
6938 specialEasing: {},
6939 easing: jQuery.easing._default
6940 }, options ),
6941 originalProperties: properties,
6942 originalOptions: options,
6943 startTime: fxNow || createFxNow(),
6944 duration: options.duration,
6945 tweens: [],
6946 createTween: function( prop, end ) {
6947 var tween = jQuery.Tween( elem, animation.opts, prop, end,
6948 animation.opts.specialEasing[ prop ] || animation.opts.easing );
6949 animation.tweens.push( tween );
6950 return tween;
6951 },
6952 stop: function( gotoEnd ) {
6953 var index = 0,
6954
6955 // If we are going to the end, we want to run all the tweens
6956 // otherwise we skip this part
6957 length = gotoEnd ? animation.tweens.length : 0;
6958 if ( stopped ) {
6959 return this;
6960 }
6961 stopped = true;
6962 for ( ; index < length; index++ ) {
6963 animation.tweens[ index ].run( 1 );
6964 }
6965
6966 // Resolve when we played the last frame; otherwise, reject
6967 if ( gotoEnd ) {
6968 deferred.notifyWith( elem, [ animation, 1, 0 ] );
6969 deferred.resolveWith( elem, [ animation, gotoEnd ] );
6970 } else {
6971 deferred.rejectWith( elem, [ animation, gotoEnd ] );
6972 }
6973 return this;
6974 }
6975 } ),
6976 props = animation.props;
6977
6978 propFilter( props, animation.opts.specialEasing );
6979
6980 for ( ; index < length; index++ ) {
6981 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
6982 if ( result ) {
6983 if ( jQuery.isFunction( result.stop ) ) {
6984 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
6985 jQuery.proxy( result.stop, result );
6986 }
6987 return result;
6988 }
6989 }
6990
6991 jQuery.map( props, createTween, animation );
6992
6993 if ( jQuery.isFunction( animation.opts.start ) ) {
6994 animation.opts.start.call( elem, animation );
6995 }
6996
6997 jQuery.fx.timer(
6998 jQuery.extend( tick, {
6999 elem: elem,
7000 anim: animation,
7001 queue: animation.opts.queue
7002 } )
7003 );
7004
7005 // attach callbacks from options
7006 return animation.progress( animation.opts.progress )
7007 .done( animation.opts.done, animation.opts.complete )
7008 .fail( animation.opts.fail )
7009 .always( animation.opts.always );
7010}
7011
7012jQuery.Animation = jQuery.extend( Animation, {
7013
7014 tweeners: {
7015 "*": [ function( prop, value ) {
7016 var tween = this.createTween( prop, value );
7017 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
7018 return tween;
7019 } ]
7020 },
7021
7022 tweener: function( props, callback ) {
7023 if ( jQuery.isFunction( props ) ) {
7024 callback = props;
7025 props = [ "*" ];
7026 } else {
7027 props = props.match( rnotwhite );
7028 }
7029
7030 var prop,
7031 index = 0,
7032 length = props.length;
7033
7034 for ( ; index < length; index++ ) {
7035 prop = props[ index ];
7036 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
7037 Animation.tweeners[ prop ].unshift( callback );
7038 }
7039 },
7040
7041 prefilters: [ defaultPrefilter ],
7042
7043 prefilter: function( callback, prepend ) {
7044 if ( prepend ) {
7045 Animation.prefilters.unshift( callback );
7046 } else {
7047 Animation.prefilters.push( callback );
7048 }
7049 }
7050} );
7051
7052jQuery.speed = function( speed, easing, fn ) {
7053 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
7054 complete: fn || !fn && easing ||
7055 jQuery.isFunction( speed ) && speed,
7056 duration: speed,
7057 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
7058 };
7059
7060 // Go to the end state if fx are off or if document is hidden
7061 if ( jQuery.fx.off || document.hidden ) {
7062 opt.duration = 0;
7063
7064 } else {
7065 opt.duration = typeof opt.duration === "number" ?
7066 opt.duration : opt.duration in jQuery.fx.speeds ?
7067 jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
7068 }
7069
7070 // Normalize opt.queue - true/undefined/null -> "fx"
7071 if ( opt.queue == null || opt.queue === true ) {
7072 opt.queue = "fx";
7073 }
7074
7075 // Queueing
7076 opt.old = opt.complete;
7077
7078 opt.complete = function() {
7079 if ( jQuery.isFunction( opt.old ) ) {
7080 opt.old.call( this );
7081 }
7082
7083 if ( opt.queue ) {
7084 jQuery.dequeue( this, opt.queue );
7085 }
7086 };
7087
7088 return opt;
7089};
7090
7091jQuery.fn.extend( {
7092 fadeTo: function( speed, to, easing, callback ) {
7093
7094 // Show any hidden elements after setting opacity to 0
7095 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
7096
7097 // Animate to the value specified
7098 .end().animate( { opacity: to }, speed, easing, callback );
7099 },
7100 animate: function( prop, speed, easing, callback ) {
7101 var empty = jQuery.isEmptyObject( prop ),
7102 optall = jQuery.speed( speed, easing, callback ),
7103 doAnimation = function() {
7104
7105 // Operate on a copy of prop so per-property easing won't be lost
7106 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
7107
7108 // Empty animations, or finishing resolves immediately
7109 if ( empty || dataPriv.get( this, "finish" ) ) {
7110 anim.stop( true );
7111 }
7112 };
7113 doAnimation.finish = doAnimation;
7114
7115 return empty || optall.queue === false ?
7116 this.each( doAnimation ) :
7117 this.queue( optall.queue, doAnimation );
7118 },
7119 stop: function( type, clearQueue, gotoEnd ) {
7120 var stopQueue = function( hooks ) {
7121 var stop = hooks.stop;
7122 delete hooks.stop;
7123 stop( gotoEnd );
7124 };
7125
7126 if ( typeof type !== "string" ) {
7127 gotoEnd = clearQueue;
7128 clearQueue = type;
7129 type = undefined;
7130 }
7131 if ( clearQueue && type !== false ) {
7132 this.queue( type || "fx", [] );
7133 }
7134
7135 return this.each( function() {
7136 var dequeue = true,
7137 index = type != null && type + "queueHooks",
7138 timers = jQuery.timers,
7139 data = dataPriv.get( this );
7140
7141 if ( index ) {
7142 if ( data[ index ] && data[ index ].stop ) {
7143 stopQueue( data[ index ] );
7144 }
7145 } else {
7146 for ( index in data ) {
7147 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
7148 stopQueue( data[ index ] );
7149 }
7150 }
7151 }
7152
7153 for ( index = timers.length; index--; ) {
7154 if ( timers[ index ].elem === this &&
7155 ( type == null || timers[ index ].queue === type ) ) {
7156
7157 timers[ index ].anim.stop( gotoEnd );
7158 dequeue = false;
7159 timers.splice( index, 1 );
7160 }
7161 }
7162
7163 // Start the next in the queue if the last step wasn't forced.
7164 // Timers currently will call their complete callbacks, which
7165 // will dequeue but only if they were gotoEnd.
7166 if ( dequeue || !gotoEnd ) {
7167 jQuery.dequeue( this, type );
7168 }
7169 } );
7170 },
7171 finish: function( type ) {
7172 if ( type !== false ) {
7173 type = type || "fx";
7174 }
7175 return this.each( function() {
7176 var index,
7177 data = dataPriv.get( this ),
7178 queue = data[ type + "queue" ],
7179 hooks = data[ type + "queueHooks" ],
7180 timers = jQuery.timers,
7181 length = queue ? queue.length : 0;
7182
7183 // Enable finishing flag on private data
7184 data.finish = true;
7185
7186 // Empty the queue first
7187 jQuery.queue( this, type, [] );
7188
7189 if ( hooks && hooks.stop ) {
7190 hooks.stop.call( this, true );
7191 }
7192
7193 // Look for any active animations, and finish them
7194 for ( index = timers.length; index--; ) {
7195 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
7196 timers[ index ].anim.stop( true );
7197 timers.splice( index, 1 );
7198 }
7199 }
7200
7201 // Look for any animations in the old queue and finish them
7202 for ( index = 0; index < length; index++ ) {
7203 if ( queue[ index ] && queue[ index ].finish ) {
7204 queue[ index ].finish.call( this );
7205 }
7206 }
7207
7208 // Turn off finishing flag
7209 delete data.finish;
7210 } );
7211 }
7212} );
7213
7214jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
7215 var cssFn = jQuery.fn[ name ];
7216 jQuery.fn[ name ] = function( speed, easing, callback ) {
7217 return speed == null || typeof speed === "boolean" ?
7218 cssFn.apply( this, arguments ) :
7219 this.animate( genFx( name, true ), speed, easing, callback );
7220 };
7221} );
7222
7223// Generate shortcuts for custom animations
7224jQuery.each( {
7225 slideDown: genFx( "show" ),
7226 slideUp: genFx( "hide" ),
7227 slideToggle: genFx( "toggle" ),
7228 fadeIn: { opacity: "show" },
7229 fadeOut: { opacity: "hide" },
7230 fadeToggle: { opacity: "toggle" }
7231}, function( name, props ) {
7232 jQuery.fn[ name ] = function( speed, easing, callback ) {
7233 return this.animate( props, speed, easing, callback );
7234 };
7235} );
7236
7237jQuery.timers = [];
7238jQuery.fx.tick = function() {
7239 var timer,
7240 i = 0,
7241 timers = jQuery.timers;
7242
7243 fxNow = jQuery.now();
7244
7245 for ( ; i < timers.length; i++ ) {
7246 timer = timers[ i ];
7247
7248 // Checks the timer has not already been removed
7249 if ( !timer() && timers[ i ] === timer ) {
7250 timers.splice( i--, 1 );
7251 }
7252 }
7253
7254 if ( !timers.length ) {
7255 jQuery.fx.stop();
7256 }
7257 fxNow = undefined;
7258};
7259
7260jQuery.fx.timer = function( timer ) {
7261 jQuery.timers.push( timer );
7262 if ( timer() ) {
7263 jQuery.fx.start();
7264 } else {
7265 jQuery.timers.pop();
7266 }
7267};
7268
7269jQuery.fx.interval = 13;
7270jQuery.fx.start = function() {
7271 if ( !timerId ) {
7272 timerId = window.requestAnimationFrame ?
7273 window.requestAnimationFrame( raf ) :
7274 window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
7275 }
7276};
7277
7278jQuery.fx.stop = function() {
7279 if ( window.cancelAnimationFrame ) {
7280 window.cancelAnimationFrame( timerId );
7281 } else {
7282 window.clearInterval( timerId );
7283 }
7284
7285 timerId = null;
7286};
7287
7288jQuery.fx.speeds = {
7289 slow: 600,
7290 fast: 200,
7291
7292 // Default speed
7293 _default: 400
7294};
7295
7296
7297// Based off of the plugin by Clint Helfers, with permission.
7298// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
7299jQuery.fn.delay = function( time, type ) {
7300 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
7301 type = type || "fx";
7302
7303 return this.queue( type, function( next, hooks ) {
7304 var timeout = window.setTimeout( next, time );
7305 hooks.stop = function() {
7306 window.clearTimeout( timeout );
7307 };
7308 } );
7309};
7310
7311
7312( function() {
7313 var input = document.createElement( "input" ),
7314 select = document.createElement( "select" ),
7315 opt = select.appendChild( document.createElement( "option" ) );
7316
7317 input.type = "checkbox";
7318
7319 // Support: Android <=4.3 only
7320 // Default value for a checkbox should be "on"
7321 support.checkOn = input.value !== "";
7322
7323 // Support: IE <=11 only
7324 // Must access selectedIndex to make default options select
7325 support.optSelected = opt.selected;
7326
7327 // Support: IE <=11 only
7328 // An input loses its value after becoming a radio
7329 input = document.createElement( "input" );
7330 input.value = "t";
7331 input.type = "radio";
7332 support.radioValue = input.value === "t";
7333} )();
7334
7335
7336var boolHook,
7337 attrHandle = jQuery.expr.attrHandle;
7338
7339jQuery.fn.extend( {
7340 attr: function( name, value ) {
7341 return access( this, jQuery.attr, name, value, arguments.length > 1 );
7342 },
7343
7344 removeAttr: function( name ) {
7345 return this.each( function() {
7346 jQuery.removeAttr( this, name );
7347 } );
7348 }
7349} );
7350
7351jQuery.extend( {
7352 attr: function( elem, name, value ) {
7353 var ret, hooks,
7354 nType = elem.nodeType;
7355
7356 // Don't get/set attributes on text, comment and attribute nodes
7357 if ( nType === 3 || nType === 8 || nType === 2 ) {
7358 return;
7359 }
7360
7361 // Fallback to prop when attributes are not supported
7362 if ( typeof elem.getAttribute === "undefined" ) {
7363 return jQuery.prop( elem, name, value );
7364 }
7365
7366 // Attribute hooks are determined by the lowercase version
7367 // Grab necessary hook if one is defined
7368 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
7369 hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
7370 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
7371 }
7372
7373 if ( value !== undefined ) {
7374 if ( value === null ) {
7375 jQuery.removeAttr( elem, name );
7376 return;
7377 }
7378
7379 if ( hooks && "set" in hooks &&
7380 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
7381 return ret;
7382 }
7383
7384 elem.setAttribute( name, value + "" );
7385 return value;
7386 }
7387
7388 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
7389 return ret;
7390 }
7391
7392 ret = jQuery.find.attr( elem, name );
7393
7394 // Non-existent attributes return null, we normalize to undefined
7395 return ret == null ? undefined : ret;
7396 },
7397
7398 attrHooks: {
7399 type: {
7400 set: function( elem, value ) {
7401 if ( !support.radioValue && value === "radio" &&
7402 jQuery.nodeName( elem, "input" ) ) {
7403 var val = elem.value;
7404 elem.setAttribute( "type", value );
7405 if ( val ) {
7406 elem.value = val;
7407 }
7408 return value;
7409 }
7410 }
7411 }
7412 },
7413
7414 removeAttr: function( elem, value ) {
7415 var name,
7416 i = 0,
7417 attrNames = value && value.match( rnotwhite );
7418
7419 if ( attrNames && elem.nodeType === 1 ) {
7420 while ( ( name = attrNames[ i++ ] ) ) {
7421 elem.removeAttribute( name );
7422 }
7423 }
7424 }
7425} );
7426
7427// Hooks for boolean attributes
7428boolHook = {
7429 set: function( elem, value, name ) {
7430 if ( value === false ) {
7431
7432 // Remove boolean attributes when set to false
7433 jQuery.removeAttr( elem, name );
7434 } else {
7435 elem.setAttribute( name, name );
7436 }
7437 return name;
7438 }
7439};
7440
7441jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
7442 var getter = attrHandle[ name ] || jQuery.find.attr;
7443
7444 attrHandle[ name ] = function( elem, name, isXML ) {
7445 var ret, handle,
7446 lowercaseName = name.toLowerCase();
7447
7448 if ( !isXML ) {
7449
7450 // Avoid an infinite loop by temporarily removing this function from the getter
7451 handle = attrHandle[ lowercaseName ];
7452 attrHandle[ lowercaseName ] = ret;
7453 ret = getter( elem, name, isXML ) != null ?
7454 lowercaseName :
7455 null;
7456 attrHandle[ lowercaseName ] = handle;
7457 }
7458 return ret;
7459 };
7460} );
7461
7462
7463
7464
7465var rfocusable = /^(?:input|select|textarea|button)$/i,
7466 rclickable = /^(?:a|area)$/i;
7467
7468jQuery.fn.extend( {
7469 prop: function( name, value ) {
7470 return access( this, jQuery.prop, name, value, arguments.length > 1 );
7471 },
7472
7473 removeProp: function( name ) {
7474 return this.each( function() {
7475 delete this[ jQuery.propFix[ name ] || name ];
7476 } );
7477 }
7478} );
7479
7480jQuery.extend( {
7481 prop: function( elem, name, value ) {
7482 var ret, hooks,
7483 nType = elem.nodeType;
7484
7485 // Don't get/set properties on text, comment and attribute nodes
7486 if ( nType === 3 || nType === 8 || nType === 2 ) {
7487 return;
7488 }
7489
7490 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
7491
7492 // Fix name and attach hooks
7493 name = jQuery.propFix[ name ] || name;
7494 hooks = jQuery.propHooks[ name ];
7495 }
7496
7497 if ( value !== undefined ) {
7498 if ( hooks && "set" in hooks &&
7499 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
7500 return ret;
7501 }
7502
7503 return ( elem[ name ] = value );
7504 }
7505
7506 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
7507 return ret;
7508 }
7509
7510 return elem[ name ];
7511 },
7512
7513 propHooks: {
7514 tabIndex: {
7515 get: function( elem ) {
7516
7517 // Support: IE <=9 - 11 only
7518 // elem.tabIndex doesn't always return the
7519 // correct value when it hasn't been explicitly set
7520 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
7521 // Use proper attribute retrieval(#12072)
7522 var tabindex = jQuery.find.attr( elem, "tabindex" );
7523
7524 return tabindex ?
7525 parseInt( tabindex, 10 ) :
7526 rfocusable.test( elem.nodeName ) ||
7527 rclickable.test( elem.nodeName ) && elem.href ?
7528 0 :
7529 -1;
7530 }
7531 }
7532 },
7533
7534 propFix: {
7535 "for": "htmlFor",
7536 "class": "className"
7537 }
7538} );
7539
7540// Support: IE <=11 only
7541// Accessing the selectedIndex property
7542// forces the browser to respect setting selected
7543// on the option
7544// The getter ensures a default option is selected
7545// when in an optgroup
7546if ( !support.optSelected ) {
7547 jQuery.propHooks.selected = {
7548 get: function( elem ) {
7549 var parent = elem.parentNode;
7550 if ( parent && parent.parentNode ) {
7551 parent.parentNode.selectedIndex;
7552 }
7553 return null;
7554 },
7555 set: function( elem ) {
7556 var parent = elem.parentNode;
7557 if ( parent ) {
7558 parent.selectedIndex;
7559
7560 if ( parent.parentNode ) {
7561 parent.parentNode.selectedIndex;
7562 }
7563 }
7564 }
7565 };
7566}
7567
7568jQuery.each( [
7569 "tabIndex",
7570 "readOnly",
7571 "maxLength",
7572 "cellSpacing",
7573 "cellPadding",
7574 "rowSpan",
7575 "colSpan",
7576 "useMap",
7577 "frameBorder",
7578 "contentEditable"
7579], function() {
7580 jQuery.propFix[ this.toLowerCase() ] = this;
7581} );
7582
7583
7584
7585
7586var rclass = /[\t\r\n\f]/g;
7587
7588function getClass( elem ) {
7589 return elem.getAttribute && elem.getAttribute( "class" ) || "";
7590}
7591
7592jQuery.fn.extend( {
7593 addClass: function( value ) {
7594 var classes, elem, cur, curValue, clazz, j, finalValue,
7595 i = 0;
7596
7597 if ( jQuery.isFunction( value ) ) {
7598 return this.each( function( j ) {
7599 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
7600 } );
7601 }
7602
7603 if ( typeof value === "string" && value ) {
7604 classes = value.match( rnotwhite ) || [];
7605
7606 while ( ( elem = this[ i++ ] ) ) {
7607 curValue = getClass( elem );
7608 cur = elem.nodeType === 1 &&
7609 ( " " + curValue + " " ).replace( rclass, " " );
7610
7611 if ( cur ) {
7612 j = 0;
7613 while ( ( clazz = classes[ j++ ] ) ) {
7614 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
7615 cur += clazz + " ";
7616 }
7617 }
7618
7619 // Only assign if different to avoid unneeded rendering.
7620 finalValue = jQuery.trim( cur );
7621 if ( curValue !== finalValue ) {
7622 elem.setAttribute( "class", finalValue );
7623 }
7624 }
7625 }
7626 }
7627
7628 return this;
7629 },
7630
7631 removeClass: function( value ) {
7632 var classes, elem, cur, curValue, clazz, j, finalValue,
7633 i = 0;
7634
7635 if ( jQuery.isFunction( value ) ) {
7636 return this.each( function( j ) {
7637 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
7638 } );
7639 }
7640
7641 if ( !arguments.length ) {
7642 return this.attr( "class", "" );
7643 }
7644
7645 if ( typeof value === "string" && value ) {
7646 classes = value.match( rnotwhite ) || [];
7647
7648 while ( ( elem = this[ i++ ] ) ) {
7649 curValue = getClass( elem );
7650
7651 // This expression is here for better compressibility (see addClass)
7652 cur = elem.nodeType === 1 &&
7653 ( " " + curValue + " " ).replace( rclass, " " );
7654
7655 if ( cur ) {
7656 j = 0;
7657 while ( ( clazz = classes[ j++ ] ) ) {
7658
7659 // Remove *all* instances
7660 while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
7661 cur = cur.replace( " " + clazz + " ", " " );
7662 }
7663 }
7664
7665 // Only assign if different to avoid unneeded rendering.
7666 finalValue = jQuery.trim( cur );
7667 if ( curValue !== finalValue ) {
7668 elem.setAttribute( "class", finalValue );
7669 }
7670 }
7671 }
7672 }
7673
7674 return this;
7675 },
7676
7677 toggleClass: function( value, stateVal ) {
7678 var type = typeof value;
7679
7680 if ( typeof stateVal === "boolean" && type === "string" ) {
7681 return stateVal ? this.addClass( value ) : this.removeClass( value );
7682 }
7683
7684 if ( jQuery.isFunction( value ) ) {
7685 return this.each( function( i ) {
7686 jQuery( this ).toggleClass(
7687 value.call( this, i, getClass( this ), stateVal ),
7688 stateVal
7689 );
7690 } );
7691 }
7692
7693 return this.each( function() {
7694 var className, i, self, classNames;
7695
7696 if ( type === "string" ) {
7697
7698 // Toggle individual class names
7699 i = 0;
7700 self = jQuery( this );
7701 classNames = value.match( rnotwhite ) || [];
7702
7703 while ( ( className = classNames[ i++ ] ) ) {
7704
7705 // Check each className given, space separated list
7706 if ( self.hasClass( className ) ) {
7707 self.removeClass( className );
7708 } else {
7709 self.addClass( className );
7710 }
7711 }
7712
7713 // Toggle whole class name
7714 } else if ( value === undefined || type === "boolean" ) {
7715 className = getClass( this );
7716 if ( className ) {
7717
7718 // Store className if set
7719 dataPriv.set( this, "__className__", className );
7720 }
7721
7722 // If the element has a class name or if we're passed `false`,
7723 // then remove the whole classname (if there was one, the above saved it).
7724 // Otherwise bring back whatever was previously saved (if anything),
7725 // falling back to the empty string if nothing was stored.
7726 if ( this.setAttribute ) {
7727 this.setAttribute( "class",
7728 className || value === false ?
7729 "" :
7730 dataPriv.get( this, "__className__" ) || ""
7731 );
7732 }
7733 }
7734 } );
7735 },
7736
7737 hasClass: function( selector ) {
7738 var className, elem,
7739 i = 0;
7740
7741 className = " " + selector + " ";
7742 while ( ( elem = this[ i++ ] ) ) {
7743 if ( elem.nodeType === 1 &&
7744 ( " " + getClass( elem ) + " " ).replace( rclass, " " )
7745 .indexOf( className ) > -1
7746 ) {
7747 return true;
7748 }
7749 }
7750
7751 return false;
7752 }
7753} );
7754
7755
7756
7757
7758var rreturn = /\r/g,
7759 rspaces = /[\x20\t\r\n\f]+/g;
7760
7761jQuery.fn.extend( {
7762 val: function( value ) {
7763 var hooks, ret, isFunction,
7764 elem = this[ 0 ];
7765
7766 if ( !arguments.length ) {
7767 if ( elem ) {
7768 hooks = jQuery.valHooks[ elem.type ] ||
7769 jQuery.valHooks[ elem.nodeName.toLowerCase() ];
7770
7771 if ( hooks &&
7772 "get" in hooks &&
7773 ( ret = hooks.get( elem, "value" ) ) !== undefined
7774 ) {
7775 return ret;
7776 }
7777
7778 ret = elem.value;
7779
7780 return typeof ret === "string" ?
7781
7782 // Handle most common string cases
7783 ret.replace( rreturn, "" ) :
7784
7785 // Handle cases where value is null/undef or number
7786 ret == null ? "" : ret;
7787 }
7788
7789 return;
7790 }
7791
7792 isFunction = jQuery.isFunction( value );
7793
7794 return this.each( function( i ) {
7795 var val;
7796
7797 if ( this.nodeType !== 1 ) {
7798 return;
7799 }
7800
7801 if ( isFunction ) {
7802 val = value.call( this, i, jQuery( this ).val() );
7803 } else {
7804 val = value;
7805 }
7806
7807 // Treat null/undefined as ""; convert numbers to string
7808 if ( val == null ) {
7809 val = "";
7810
7811 } else if ( typeof val === "number" ) {
7812 val += "";
7813
7814 } else if ( jQuery.isArray( val ) ) {
7815 val = jQuery.map( val, function( value ) {
7816 return value == null ? "" : value + "";
7817 } );
7818 }
7819
7820 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
7821
7822 // If set returns undefined, fall back to normal setting
7823 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
7824 this.value = val;
7825 }
7826 } );
7827 }
7828} );
7829
7830jQuery.extend( {
7831 valHooks: {
7832 option: {
7833 get: function( elem ) {
7834
7835 var val = jQuery.find.attr( elem, "value" );
7836 return val != null ?
7837 val :
7838
7839 // Support: IE <=10 - 11 only
7840 // option.text throws exceptions (#14686, #14858)
7841 // Strip and collapse whitespace
7842 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
7843 jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
7844 }
7845 },
7846 select: {
7847 get: function( elem ) {
7848 var value, option,
7849 options = elem.options,
7850 index = elem.selectedIndex,
7851 one = elem.type === "select-one",
7852 values = one ? null : [],
7853 max = one ? index + 1 : options.length,
7854 i = index < 0 ?
7855 max :
7856 one ? index : 0;
7857
7858 // Loop through all the selected options
7859 for ( ; i < max; i++ ) {
7860 option = options[ i ];
7861
7862 // Support: IE <=9 only
7863 // IE8-9 doesn't update selected after form reset (#2551)
7864 if ( ( option.selected || i === index ) &&
7865
7866 // Don't return options that are disabled or in a disabled optgroup
7867 !option.disabled &&
7868 ( !option.parentNode.disabled ||
7869 !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
7870
7871 // Get the specific value for the option
7872 value = jQuery( option ).val();
7873
7874 // We don't need an array for one selects
7875 if ( one ) {
7876 return value;
7877 }
7878
7879 // Multi-Selects return an array
7880 values.push( value );
7881 }
7882 }
7883
7884 return values;
7885 },
7886
7887 set: function( elem, value ) {
7888 var optionSet, option,
7889 options = elem.options,
7890 values = jQuery.makeArray( value ),
7891 i = options.length;
7892
7893 while ( i-- ) {
7894 option = options[ i ];
7895
7896 /* eslint-disable no-cond-assign */
7897
7898 if ( option.selected =
7899 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
7900 ) {
7901 optionSet = true;
7902 }
7903
7904 /* eslint-enable no-cond-assign */
7905 }
7906
7907 // Force browsers to behave consistently when non-matching value is set
7908 if ( !optionSet ) {
7909 elem.selectedIndex = -1;
7910 }
7911 return values;
7912 }
7913 }
7914 }
7915} );
7916
7917// Radios and checkboxes getter/setter
7918jQuery.each( [ "radio", "checkbox" ], function() {
7919 jQuery.valHooks[ this ] = {
7920 set: function( elem, value ) {
7921 if ( jQuery.isArray( value ) ) {
7922 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
7923 }
7924 }
7925 };
7926 if ( !support.checkOn ) {
7927 jQuery.valHooks[ this ].get = function( elem ) {
7928 return elem.getAttribute( "value" ) === null ? "on" : elem.value;
7929 };
7930 }
7931} );
7932
7933
7934
7935
7936// Return jQuery for attributes-only inclusion
7937
7938
7939var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
7940
7941jQuery.extend( jQuery.event, {
7942
7943 trigger: function( event, data, elem, onlyHandlers ) {
7944
7945 var i, cur, tmp, bubbleType, ontype, handle, special,
7946 eventPath = [ elem || document ],
7947 type = hasOwn.call( event, "type" ) ? event.type : event,
7948 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
7949
7950 cur = tmp = elem = elem || document;
7951
7952 // Don't do events on text and comment nodes
7953 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
7954 return;
7955 }
7956
7957 // focus/blur morphs to focusin/out; ensure we're not firing them right now
7958 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
7959 return;
7960 }
7961
7962 if ( type.indexOf( "." ) > -1 ) {
7963
7964 // Namespaced trigger; create a regexp to match event type in handle()
7965 namespaces = type.split( "." );
7966 type = namespaces.shift();
7967 namespaces.sort();
7968 }
7969 ontype = type.indexOf( ":" ) < 0 && "on" + type;
7970
7971 // Caller can pass in a jQuery.Event object, Object, or just an event type string
7972 event = event[ jQuery.expando ] ?
7973 event :
7974 new jQuery.Event( type, typeof event === "object" && event );
7975
7976 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
7977 event.isTrigger = onlyHandlers ? 2 : 3;
7978 event.namespace = namespaces.join( "." );
7979 event.rnamespace = event.namespace ?
7980 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
7981 null;
7982
7983 // Clean up the event in case it is being reused
7984 event.result = undefined;
7985 if ( !event.target ) {
7986 event.target = elem;
7987 }
7988
7989 // Clone any incoming data and prepend the event, creating the handler arg list
7990 data = data == null ?
7991 [ event ] :
7992 jQuery.makeArray( data, [ event ] );
7993
7994 // Allow special events to draw outside the lines
7995 special = jQuery.event.special[ type ] || {};
7996 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
7997 return;
7998 }
7999
8000 // Determine event propagation path in advance, per W3C events spec (#9951)
8001 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
8002 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
8003
8004 bubbleType = special.delegateType || type;
8005 if ( !rfocusMorph.test( bubbleType + type ) ) {
8006 cur = cur.parentNode;
8007 }
8008 for ( ; cur; cur = cur.parentNode ) {
8009 eventPath.push( cur );
8010 tmp = cur;
8011 }
8012
8013 // Only add window if we got to document (e.g., not plain obj or detached DOM)
8014 if ( tmp === ( elem.ownerDocument || document ) ) {
8015 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
8016 }
8017 }
8018
8019 // Fire handlers on the event path
8020 i = 0;
8021 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
8022
8023 event.type = i > 1 ?
8024 bubbleType :
8025 special.bindType || type;
8026
8027 // jQuery handler
8028 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
8029 dataPriv.get( cur, "handle" );
8030 if ( handle ) {
8031 handle.apply( cur, data );
8032 }
8033
8034 // Native handler
8035 handle = ontype && cur[ ontype ];
8036 if ( handle && handle.apply && acceptData( cur ) ) {
8037 event.result = handle.apply( cur, data );
8038 if ( event.result === false ) {
8039 event.preventDefault();
8040 }
8041 }
8042 }
8043 event.type = type;
8044
8045 // If nobody prevented the default action, do it now
8046 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
8047
8048 if ( ( !special._default ||
8049 special._default.apply( eventPath.pop(), data ) === false ) &&
8050 acceptData( elem ) ) {
8051
8052 // Call a native DOM method on the target with the same name as the event.
8053 // Don't do default actions on window, that's where global variables be (#6170)
8054 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
8055
8056 // Don't re-trigger an onFOO event when we call its FOO() method
8057 tmp = elem[ ontype ];
8058
8059 if ( tmp ) {
8060 elem[ ontype ] = null;
8061 }
8062
8063 // Prevent re-triggering of the same event, since we already bubbled it above
8064 jQuery.event.triggered = type;
8065 elem[ type ]();
8066 jQuery.event.triggered = undefined;
8067
8068 if ( tmp ) {
8069 elem[ ontype ] = tmp;
8070 }
8071 }
8072 }
8073 }
8074
8075 return event.result;
8076 },
8077
8078 // Piggyback on a donor event to simulate a different one
8079 // Used only for `focus(in | out)` events
8080 simulate: function( type, elem, event ) {
8081 var e = jQuery.extend(
8082 new jQuery.Event(),
8083 event,
8084 {
8085 type: type,
8086 isSimulated: true
8087 }
8088 );
8089
8090 jQuery.event.trigger( e, null, elem );
8091 }
8092
8093} );
8094
8095jQuery.fn.extend( {
8096
8097 trigger: function( type, data ) {
8098 return this.each( function() {
8099 jQuery.event.trigger( type, data, this );
8100 } );
8101 },
8102 triggerHandler: function( type, data ) {
8103 var elem = this[ 0 ];
8104 if ( elem ) {
8105 return jQuery.event.trigger( type, data, elem, true );
8106 }
8107 }
8108} );
8109
8110
8111jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
8112 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
8113 "change select submit keydown keypress keyup contextmenu" ).split( " " ),
8114 function( i, name ) {
8115
8116 // Handle event binding
8117 jQuery.fn[ name ] = function( data, fn ) {
8118 return arguments.length > 0 ?
8119 this.on( name, null, data, fn ) :
8120 this.trigger( name );
8121 };
8122} );
8123
8124jQuery.fn.extend( {
8125 hover: function( fnOver, fnOut ) {
8126 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
8127 }
8128} );
8129
8130
8131
8132
8133support.focusin = "onfocusin" in window;
8134
8135
8136// Support: Firefox <=44
8137// Firefox doesn't have focus(in | out) events
8138// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
8139//
8140// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
8141// focus(in | out) events fire after focus & blur events,
8142// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
8143// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
8144if ( !support.focusin ) {
8145 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
8146
8147 // Attach a single capturing handler on the document while someone wants focusin/focusout
8148 var handler = function( event ) {
8149 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
8150 };
8151
8152 jQuery.event.special[ fix ] = {
8153 setup: function() {
8154 var doc = this.ownerDocument || this,
8155 attaches = dataPriv.access( doc, fix );
8156
8157 if ( !attaches ) {
8158 doc.addEventListener( orig, handler, true );
8159 }
8160 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
8161 },
8162 teardown: function() {
8163 var doc = this.ownerDocument || this,
8164 attaches = dataPriv.access( doc, fix ) - 1;
8165
8166 if ( !attaches ) {
8167 doc.removeEventListener( orig, handler, true );
8168 dataPriv.remove( doc, fix );
8169
8170 } else {
8171 dataPriv.access( doc, fix, attaches );
8172 }
8173 }
8174 };
8175 } );
8176}
8177var location = window.location;
8178
8179var nonce = jQuery.now();
8180
8181var rquery = ( /\?/ );
8182
8183
8184
8185// Cross-browser xml parsing
8186jQuery.parseXML = function( data ) {
8187 var xml;
8188 if ( !data || typeof data !== "string" ) {
8189 return null;
8190 }
8191
8192 // Support: IE 9 - 11 only
8193 // IE throws on parseFromString with invalid input.
8194 try {
8195 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
8196 } catch ( e ) {
8197 xml = undefined;
8198 }
8199
8200 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
8201 jQuery.error( "Invalid XML: " + data );
8202 }
8203 return xml;
8204};
8205
8206
8207var
8208 rbracket = /\[\]$/,
8209 rCRLF = /\r?\n/g,
8210 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
8211 rsubmittable = /^(?:input|select|textarea|keygen)/i;
8212
8213function buildParams( prefix, obj, traditional, add ) {
8214 var name;
8215
8216 if ( jQuery.isArray( obj ) ) {
8217
8218 // Serialize array item.
8219 jQuery.each( obj, function( i, v ) {
8220 if ( traditional || rbracket.test( prefix ) ) {
8221
8222 // Treat each array item as a scalar.
8223 add( prefix, v );
8224
8225 } else {
8226
8227 // Item is non-scalar (array or object), encode its numeric index.
8228 buildParams(
8229 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
8230 v,
8231 traditional,
8232 add
8233 );
8234 }
8235 } );
8236
8237 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
8238
8239 // Serialize object item.
8240 for ( name in obj ) {
8241 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
8242 }
8243
8244 } else {
8245
8246 // Serialize scalar item.
8247 add( prefix, obj );
8248 }
8249}
8250
8251// Serialize an array of form elements or a set of
8252// key/values into a query string
8253jQuery.param = function( a, traditional ) {
8254 var prefix,
8255 s = [],
8256 add = function( key, valueOrFunction ) {
8257
8258 // If value is a function, invoke it and use its return value
8259 var value = jQuery.isFunction( valueOrFunction ) ?
8260 valueOrFunction() :
8261 valueOrFunction;
8262
8263 s[ s.length ] = encodeURIComponent( key ) + "=" +
8264 encodeURIComponent( value == null ? "" : value );
8265 };
8266
8267 // If an array was passed in, assume that it is an array of form elements.
8268 if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
8269
8270 // Serialize the form elements
8271 jQuery.each( a, function() {
8272 add( this.name, this.value );
8273 } );
8274
8275 } else {
8276
8277 // If traditional, encode the "old" way (the way 1.3.2 or older
8278 // did it), otherwise encode params recursively.
8279 for ( prefix in a ) {
8280 buildParams( prefix, a[ prefix ], traditional, add );
8281 }
8282 }
8283
8284 // Return the resulting serialization
8285 return s.join( "&" );
8286};
8287
8288jQuery.fn.extend( {
8289 serialize: function() {
8290 return jQuery.param( this.serializeArray() );
8291 },
8292 serializeArray: function() {
8293 return this.map( function() {
8294
8295 // Can add propHook for "elements" to filter or add form elements
8296 var elements = jQuery.prop( this, "elements" );
8297 return elements ? jQuery.makeArray( elements ) : this;
8298 } )
8299 .filter( function() {
8300 var type = this.type;
8301
8302 // Use .is( ":disabled" ) so that fieldset[disabled] works
8303 return this.name && !jQuery( this ).is( ":disabled" ) &&
8304 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
8305 ( this.checked || !rcheckableType.test( type ) );
8306 } )
8307 .map( function( i, elem ) {
8308 var val = jQuery( this ).val();
8309
8310 return val == null ?
8311 null :
8312 jQuery.isArray( val ) ?
8313 jQuery.map( val, function( val ) {
8314 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
8315 } ) :
8316 { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
8317 } ).get();
8318 }
8319} );
8320
8321
8322var
8323 r20 = /%20/g,
8324 rhash = /#.*$/,
8325 rts = /([?&])_=[^&]*/,
8326 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
8327
8328 // #7653, #8125, #8152: local protocol detection
8329 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
8330 rnoContent = /^(?:GET|HEAD)$/,
8331 rprotocol = /^\/\//,
8332
8333 /* Prefilters
8334 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
8335 * 2) These are called:
8336 * - BEFORE asking for a transport
8337 * - AFTER param serialization (s.data is a string if s.processData is true)
8338 * 3) key is the dataType
8339 * 4) the catchall symbol "*" can be used
8340 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
8341 */
8342 prefilters = {},
8343
8344 /* Transports bindings
8345 * 1) key is the dataType
8346 * 2) the catchall symbol "*" can be used
8347 * 3) selection will start with transport dataType and THEN go to "*" if needed
8348 */
8349 transports = {},
8350
8351 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
8352 allTypes = "*/".concat( "*" ),
8353
8354 // Anchor tag for parsing the document origin
8355 originAnchor = document.createElement( "a" );
8356 originAnchor.href = location.href;
8357
8358// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
8359function addToPrefiltersOrTransports( structure ) {
8360
8361 // dataTypeExpression is optional and defaults to "*"
8362 return function( dataTypeExpression, func ) {
8363
8364 if ( typeof dataTypeExpression !== "string" ) {
8365 func = dataTypeExpression;
8366 dataTypeExpression = "*";
8367 }
8368
8369 var dataType,
8370 i = 0,
8371 dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
8372
8373 if ( jQuery.isFunction( func ) ) {
8374
8375 // For each dataType in the dataTypeExpression
8376 while ( ( dataType = dataTypes[ i++ ] ) ) {
8377
8378 // Prepend if requested
8379 if ( dataType[ 0 ] === "+" ) {
8380 dataType = dataType.slice( 1 ) || "*";
8381 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
8382
8383 // Otherwise append
8384 } else {
8385 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
8386 }
8387 }
8388 }
8389 };
8390}
8391
8392// Base inspection function for prefilters and transports
8393function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
8394
8395 var inspected = {},
8396 seekingTransport = ( structure === transports );
8397
8398 function inspect( dataType ) {
8399 var selected;
8400 inspected[ dataType ] = true;
8401 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
8402 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
8403 if ( typeof dataTypeOrTransport === "string" &&
8404 !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
8405
8406 options.dataTypes.unshift( dataTypeOrTransport );
8407 inspect( dataTypeOrTransport );
8408 return false;
8409 } else if ( seekingTransport ) {
8410 return !( selected = dataTypeOrTransport );
8411 }
8412 } );
8413 return selected;
8414 }
8415
8416 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
8417}
8418
8419// A special extend for ajax options
8420// that takes "flat" options (not to be deep extended)
8421// Fixes #9887
8422function ajaxExtend( target, src ) {
8423 var key, deep,
8424 flatOptions = jQuery.ajaxSettings.flatOptions || {};
8425
8426 for ( key in src ) {
8427 if ( src[ key ] !== undefined ) {
8428 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
8429 }
8430 }
8431 if ( deep ) {
8432 jQuery.extend( true, target, deep );
8433 }
8434
8435 return target;
8436}
8437
8438/* Handles responses to an ajax request:
8439 * - finds the right dataType (mediates between content-type and expected dataType)
8440 * - returns the corresponding response
8441 */
8442function ajaxHandleResponses( s, jqXHR, responses ) {
8443
8444 var ct, type, finalDataType, firstDataType,
8445 contents = s.contents,
8446 dataTypes = s.dataTypes;
8447
8448 // Remove auto dataType and get content-type in the process
8449 while ( dataTypes[ 0 ] === "*" ) {
8450 dataTypes.shift();
8451 if ( ct === undefined ) {
8452 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
8453 }
8454 }
8455
8456 // Check if we're dealing with a known content-type
8457 if ( ct ) {
8458 for ( type in contents ) {
8459 if ( contents[ type ] && contents[ type ].test( ct ) ) {
8460 dataTypes.unshift( type );
8461 break;
8462 }
8463 }
8464 }
8465
8466 // Check to see if we have a response for the expected dataType
8467 if ( dataTypes[ 0 ] in responses ) {
8468 finalDataType = dataTypes[ 0 ];
8469 } else {
8470
8471 // Try convertible dataTypes
8472 for ( type in responses ) {
8473 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
8474 finalDataType = type;
8475 break;
8476 }
8477 if ( !firstDataType ) {
8478 firstDataType = type;
8479 }
8480 }
8481
8482 // Or just use first one
8483 finalDataType = finalDataType || firstDataType;
8484 }
8485
8486 // If we found a dataType
8487 // We add the dataType to the list if needed
8488 // and return the corresponding response
8489 if ( finalDataType ) {
8490 if ( finalDataType !== dataTypes[ 0 ] ) {
8491 dataTypes.unshift( finalDataType );
8492 }
8493 return responses[ finalDataType ];
8494 }
8495}
8496
8497/* Chain conversions given the request and the original response
8498 * Also sets the responseXXX fields on the jqXHR instance
8499 */
8500function ajaxConvert( s, response, jqXHR, isSuccess ) {
8501 var conv2, current, conv, tmp, prev,
8502 converters = {},
8503
8504 // Work with a copy of dataTypes in case we need to modify it for conversion
8505 dataTypes = s.dataTypes.slice();
8506
8507 // Create converters map with lowercased keys
8508 if ( dataTypes[ 1 ] ) {
8509 for ( conv in s.converters ) {
8510 converters[ conv.toLowerCase() ] = s.converters[ conv ];
8511 }
8512 }
8513
8514 current = dataTypes.shift();
8515
8516 // Convert to each sequential dataType
8517 while ( current ) {
8518
8519 if ( s.responseFields[ current ] ) {
8520 jqXHR[ s.responseFields[ current ] ] = response;
8521 }
8522
8523 // Apply the dataFilter if provided
8524 if ( !prev && isSuccess && s.dataFilter ) {
8525 response = s.dataFilter( response, s.dataType );
8526 }
8527
8528 prev = current;
8529 current = dataTypes.shift();
8530
8531 if ( current ) {
8532
8533 // There's only work to do if current dataType is non-auto
8534 if ( current === "*" ) {
8535
8536 current = prev;
8537
8538 // Convert response if prev dataType is non-auto and differs from current
8539 } else if ( prev !== "*" && prev !== current ) {
8540
8541 // Seek a direct converter
8542 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
8543
8544 // If none found, seek a pair
8545 if ( !conv ) {
8546 for ( conv2 in converters ) {
8547
8548 // If conv2 outputs current
8549 tmp = conv2.split( " " );
8550 if ( tmp[ 1 ] === current ) {
8551
8552 // If prev can be converted to accepted input
8553 conv = converters[ prev + " " + tmp[ 0 ] ] ||
8554 converters[ "* " + tmp[ 0 ] ];
8555 if ( conv ) {
8556
8557 // Condense equivalence converters
8558 if ( conv === true ) {
8559 conv = converters[ conv2 ];
8560
8561 // Otherwise, insert the intermediate dataType
8562 } else if ( converters[ conv2 ] !== true ) {
8563 current = tmp[ 0 ];
8564 dataTypes.unshift( tmp[ 1 ] );
8565 }
8566 break;
8567 }
8568 }
8569 }
8570 }
8571
8572 // Apply converter (if not an equivalence)
8573 if ( conv !== true ) {
8574
8575 // Unless errors are allowed to bubble, catch and return them
8576 if ( conv && s.throws ) {
8577 response = conv( response );
8578 } else {
8579 try {
8580 response = conv( response );
8581 } catch ( e ) {
8582 return {
8583 state: "parsererror",
8584 error: conv ? e : "No conversion from " + prev + " to " + current
8585 };
8586 }
8587 }
8588 }
8589 }
8590 }
8591 }
8592
8593 return { state: "success", data: response };
8594}
8595
8596jQuery.extend( {
8597
8598 // Counter for holding the number of active queries
8599 active: 0,
8600
8601 // Last-Modified header cache for next request
8602 lastModified: {},
8603 etag: {},
8604
8605 ajaxSettings: {
8606 url: location.href,
8607 type: "GET",
8608 isLocal: rlocalProtocol.test( location.protocol ),
8609 global: true,
8610 processData: true,
8611 async: true,
8612 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
8613
8614 /*
8615 timeout: 0,
8616 data: null,
8617 dataType: null,
8618 username: null,
8619 password: null,
8620 cache: null,
8621 throws: false,
8622 traditional: false,
8623 headers: {},
8624 */
8625
8626 accepts: {
8627 "*": allTypes,
8628 text: "text/plain",
8629 html: "text/html",
8630 xml: "application/xml, text/xml",
8631 json: "application/json, text/javascript"
8632 },
8633
8634 contents: {
8635 xml: /\bxml\b/,
8636 html: /\bhtml/,
8637 json: /\bjson\b/
8638 },
8639
8640 responseFields: {
8641 xml: "responseXML",
8642 text: "responseText",
8643 json: "responseJSON"
8644 },
8645
8646 // Data converters
8647 // Keys separate source (or catchall "*") and destination types with a single space
8648 converters: {
8649
8650 // Convert anything to text
8651 "* text": String,
8652
8653 // Text to html (true = no transformation)
8654 "text html": true,
8655
8656 // Evaluate text as a json expression
8657 "text json": JSON.parse,
8658
8659 // Parse text as xml
8660 "text xml": jQuery.parseXML
8661 },
8662
8663 // For options that shouldn't be deep extended:
8664 // you can add your own custom options here if
8665 // and when you create one that shouldn't be
8666 // deep extended (see ajaxExtend)
8667 flatOptions: {
8668 url: true,
8669 context: true
8670 }
8671 },
8672
8673 // Creates a full fledged settings object into target
8674 // with both ajaxSettings and settings fields.
8675 // If target is omitted, writes into ajaxSettings.
8676 ajaxSetup: function( target, settings ) {
8677 return settings ?
8678
8679 // Building a settings object
8680 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
8681
8682 // Extending ajaxSettings
8683 ajaxExtend( jQuery.ajaxSettings, target );
8684 },
8685
8686 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
8687 ajaxTransport: addToPrefiltersOrTransports( transports ),
8688
8689 // Main method
8690 ajax: function( url, options ) {
8691
8692 // If url is an object, simulate pre-1.5 signature
8693 if ( typeof url === "object" ) {
8694 options = url;
8695 url = undefined;
8696 }
8697
8698 // Force options to be an object
8699 options = options || {};
8700
8701 var transport,
8702
8703 // URL without anti-cache param
8704 cacheURL,
8705
8706 // Response headers
8707 responseHeadersString,
8708 responseHeaders,
8709
8710 // timeout handle
8711 timeoutTimer,
8712
8713 // Url cleanup var
8714 urlAnchor,
8715
8716 // Request state (becomes false upon send and true upon completion)
8717 completed,
8718
8719 // To know if global events are to be dispatched
8720 fireGlobals,
8721
8722 // Loop variable
8723 i,
8724
8725 // uncached part of the url
8726 uncached,
8727
8728 // Create the final options object
8729 s = jQuery.ajaxSetup( {}, options ),
8730
8731 // Callbacks context
8732 callbackContext = s.context || s,
8733
8734 // Context for global events is callbackContext if it is a DOM node or jQuery collection
8735 globalEventContext = s.context &&
8736 ( callbackContext.nodeType || callbackContext.jquery ) ?
8737 jQuery( callbackContext ) :
8738 jQuery.event,
8739
8740 // Deferreds
8741 deferred = jQuery.Deferred(),
8742 completeDeferred = jQuery.Callbacks( "once memory" ),
8743
8744 // Status-dependent callbacks
8745 statusCode = s.statusCode || {},
8746
8747 // Headers (they are sent all at once)
8748 requestHeaders = {},
8749 requestHeadersNames = {},
8750
8751 // Default abort message
8752 strAbort = "canceled",
8753
8754 // Fake xhr
8755 jqXHR = {
8756 readyState: 0,
8757
8758 // Builds headers hashtable if needed
8759 getResponseHeader: function( key ) {
8760 var match;
8761 if ( completed ) {
8762 if ( !responseHeaders ) {
8763 responseHeaders = {};
8764 while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
8765 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
8766 }
8767 }
8768 match = responseHeaders[ key.toLowerCase() ];
8769 }
8770 return match == null ? null : match;
8771 },
8772
8773 // Raw string
8774 getAllResponseHeaders: function() {
8775 return completed ? responseHeadersString : null;
8776 },
8777
8778 // Caches the header
8779 setRequestHeader: function( name, value ) {
8780 if ( completed == null ) {
8781 name = requestHeadersNames[ name.toLowerCase() ] =
8782 requestHeadersNames[ name.toLowerCase() ] || name;
8783 requestHeaders[ name ] = value;
8784 }
8785 return this;
8786 },
8787
8788 // Overrides response content-type header
8789 overrideMimeType: function( type ) {
8790 if ( completed == null ) {
8791 s.mimeType = type;
8792 }
8793 return this;
8794 },
8795
8796 // Status-dependent callbacks
8797 statusCode: function( map ) {
8798 var code;
8799 if ( map ) {
8800 if ( completed ) {
8801
8802 // Execute the appropriate callbacks
8803 jqXHR.always( map[ jqXHR.status ] );
8804 } else {
8805
8806 // Lazy-add the new callbacks in a way that preserves old ones
8807 for ( code in map ) {
8808 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
8809 }
8810 }
8811 }
8812 return this;
8813 },
8814
8815 // Cancel the request
8816 abort: function( statusText ) {
8817 var finalText = statusText || strAbort;
8818 if ( transport ) {
8819 transport.abort( finalText );
8820 }
8821 done( 0, finalText );
8822 return this;
8823 }
8824 };
8825
8826 // Attach deferreds
8827 deferred.promise( jqXHR );
8828
8829 // Add protocol if not provided (prefilters might expect it)
8830 // Handle falsy url in the settings object (#10093: consistency with old signature)
8831 // We also use the url parameter if available
8832 s.url = ( ( url || s.url || location.href ) + "" )
8833 .replace( rprotocol, location.protocol + "//" );
8834
8835 // Alias method option to type as per ticket #12004
8836 s.type = options.method || options.type || s.method || s.type;
8837
8838 // Extract dataTypes list
8839 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
8840
8841 // A cross-domain request is in order when the origin doesn't match the current origin.
8842 if ( s.crossDomain == null ) {
8843 urlAnchor = document.createElement( "a" );
8844
8845 // Support: IE <=8 - 11, Edge 12 - 13
8846 // IE throws exception on accessing the href property if url is malformed,
8847 // e.g. http://example.com:80x/
8848 try {
8849 urlAnchor.href = s.url;
8850
8851 // Support: IE <=8 - 11 only
8852 // Anchor's host property isn't correctly set when s.url is relative
8853 urlAnchor.href = urlAnchor.href;
8854 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
8855 urlAnchor.protocol + "//" + urlAnchor.host;
8856 } catch ( e ) {
8857
8858 // If there is an error parsing the URL, assume it is crossDomain,
8859 // it can be rejected by the transport if it is invalid
8860 s.crossDomain = true;
8861 }
8862 }
8863
8864 // Convert data if not already a string
8865 if ( s.data && s.processData && typeof s.data !== "string" ) {
8866 s.data = jQuery.param( s.data, s.traditional );
8867 }
8868
8869 // Apply prefilters
8870 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
8871
8872 // If request was aborted inside a prefilter, stop there
8873 if ( completed ) {
8874 return jqXHR;
8875 }
8876
8877 // We can fire global events as of now if asked to
8878 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
8879 fireGlobals = jQuery.event && s.global;
8880
8881 // Watch for a new set of requests
8882 if ( fireGlobals && jQuery.active++ === 0 ) {
8883 jQuery.event.trigger( "ajaxStart" );
8884 }
8885
8886 // Uppercase the type
8887 s.type = s.type.toUpperCase();
8888
8889 // Determine if request has content
8890 s.hasContent = !rnoContent.test( s.type );
8891
8892 // Save the URL in case we're toying with the If-Modified-Since
8893 // and/or If-None-Match header later on
8894 // Remove hash to simplify url manipulation
8895 cacheURL = s.url.replace( rhash, "" );
8896
8897 // More options handling for requests with no content
8898 if ( !s.hasContent ) {
8899
8900 // Remember the hash so we can put it back
8901 uncached = s.url.slice( cacheURL.length );
8902
8903 // If data is available, append data to url
8904 if ( s.data ) {
8905 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
8906
8907 // #9682: remove data so that it's not used in an eventual retry
8908 delete s.data;
8909 }
8910
8911 // Add anti-cache in uncached url if needed
8912 if ( s.cache === false ) {
8913 cacheURL = cacheURL.replace( rts, "" );
8914 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
8915 }
8916
8917 // Put hash and anti-cache on the URL that will be requested (gh-1732)
8918 s.url = cacheURL + uncached;
8919
8920 // Change '%20' to '+' if this is encoded form body content (gh-2658)
8921 } else if ( s.data && s.processData &&
8922 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
8923 s.data = s.data.replace( r20, "+" );
8924 }
8925
8926 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
8927 if ( s.ifModified ) {
8928 if ( jQuery.lastModified[ cacheURL ] ) {
8929 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
8930 }
8931 if ( jQuery.etag[ cacheURL ] ) {
8932 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
8933 }
8934 }
8935
8936 // Set the correct header, if data is being sent
8937 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
8938 jqXHR.setRequestHeader( "Content-Type", s.contentType );
8939 }
8940
8941 // Set the Accepts header for the server, depending on the dataType
8942 jqXHR.setRequestHeader(
8943 "Accept",
8944 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
8945 s.accepts[ s.dataTypes[ 0 ] ] +
8946 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
8947 s.accepts[ "*" ]
8948 );
8949
8950 // Check for headers option
8951 for ( i in s.headers ) {
8952 jqXHR.setRequestHeader( i, s.headers[ i ] );
8953 }
8954
8955 // Allow custom headers/mimetypes and early abort
8956 if ( s.beforeSend &&
8957 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
8958
8959 // Abort if not done already and return
8960 return jqXHR.abort();
8961 }
8962
8963 // Aborting is no longer a cancellation
8964 strAbort = "abort";
8965
8966 // Install callbacks on deferreds
8967 completeDeferred.add( s.complete );
8968 jqXHR.done( s.success );
8969 jqXHR.fail( s.error );
8970
8971 // Get transport
8972 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
8973
8974 // If no transport, we auto-abort
8975 if ( !transport ) {
8976 done( -1, "No Transport" );
8977 } else {
8978 jqXHR.readyState = 1;
8979
8980 // Send global event
8981 if ( fireGlobals ) {
8982 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
8983 }
8984
8985 // If request was aborted inside ajaxSend, stop there
8986 if ( completed ) {
8987 return jqXHR;
8988 }
8989
8990 // Timeout
8991 if ( s.async && s.timeout > 0 ) {
8992 timeoutTimer = window.setTimeout( function() {
8993 jqXHR.abort( "timeout" );
8994 }, s.timeout );
8995 }
8996
8997 try {
8998 completed = false;
8999 transport.send( requestHeaders, done );
9000 } catch ( e ) {
9001
9002 // Rethrow post-completion exceptions
9003 if ( completed ) {
9004 throw e;
9005 }
9006
9007 // Propagate others as results
9008 done( -1, e );
9009 }
9010 }
9011
9012 // Callback for when everything is done
9013 function done( status, nativeStatusText, responses, headers ) {
9014 var isSuccess, success, error, response, modified,
9015 statusText = nativeStatusText;
9016
9017 // Ignore repeat invocations
9018 if ( completed ) {
9019 return;
9020 }
9021
9022 completed = true;
9023
9024 // Clear timeout if it exists
9025 if ( timeoutTimer ) {
9026 window.clearTimeout( timeoutTimer );
9027 }
9028
9029 // Dereference transport for early garbage collection
9030 // (no matter how long the jqXHR object will be used)
9031 transport = undefined;
9032
9033 // Cache response headers
9034 responseHeadersString = headers || "";
9035
9036 // Set readyState
9037 jqXHR.readyState = status > 0 ? 4 : 0;
9038
9039 // Determine if successful
9040 isSuccess = status >= 200 && status < 300 || status === 304;
9041
9042 // Get response data
9043 if ( responses ) {
9044 response = ajaxHandleResponses( s, jqXHR, responses );
9045 }
9046
9047 // Convert no matter what (that way responseXXX fields are always set)
9048 response = ajaxConvert( s, response, jqXHR, isSuccess );
9049
9050 // If successful, handle type chaining
9051 if ( isSuccess ) {
9052
9053 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
9054 if ( s.ifModified ) {
9055 modified = jqXHR.getResponseHeader( "Last-Modified" );
9056 if ( modified ) {
9057 jQuery.lastModified[ cacheURL ] = modified;
9058 }
9059 modified = jqXHR.getResponseHeader( "etag" );
9060 if ( modified ) {
9061 jQuery.etag[ cacheURL ] = modified;
9062 }
9063 }
9064
9065 // if no content
9066 if ( status === 204 || s.type === "HEAD" ) {
9067 statusText = "nocontent";
9068
9069 // if not modified
9070 } else if ( status === 304 ) {
9071 statusText = "notmodified";
9072
9073 // If we have data, let's convert it
9074 } else {
9075 statusText = response.state;
9076 success = response.data;
9077 error = response.error;
9078 isSuccess = !error;
9079 }
9080 } else {
9081
9082 // Extract error from statusText and normalize for non-aborts
9083 error = statusText;
9084 if ( status || !statusText ) {
9085 statusText = "error";
9086 if ( status < 0 ) {
9087 status = 0;
9088 }
9089 }
9090 }
9091
9092 // Set data for the fake xhr object
9093 jqXHR.status = status;
9094 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
9095
9096 // Success/Error
9097 if ( isSuccess ) {
9098 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
9099 } else {
9100 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
9101 }
9102
9103 // Status-dependent callbacks
9104 jqXHR.statusCode( statusCode );
9105 statusCode = undefined;
9106
9107 if ( fireGlobals ) {
9108 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
9109 [ jqXHR, s, isSuccess ? success : error ] );
9110 }
9111
9112 // Complete
9113 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
9114
9115 if ( fireGlobals ) {
9116 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
9117
9118 // Handle the global AJAX counter
9119 if ( !( --jQuery.active ) ) {
9120 jQuery.event.trigger( "ajaxStop" );
9121 }
9122 }
9123 }
9124
9125 return jqXHR;
9126 },
9127
9128 getJSON: function( url, data, callback ) {
9129 return jQuery.get( url, data, callback, "json" );
9130 },
9131
9132 getScript: function( url, callback ) {
9133 return jQuery.get( url, undefined, callback, "script" );
9134 }
9135} );
9136
9137jQuery.each( [ "get", "post" ], function( i, method ) {
9138 jQuery[ method ] = function( url, data, callback, type ) {
9139
9140 // Shift arguments if data argument was omitted
9141 if ( jQuery.isFunction( data ) ) {
9142 type = type || callback;
9143 callback = data;
9144 data = undefined;
9145 }
9146
9147 // The url can be an options object (which then must have .url)
9148 return jQuery.ajax( jQuery.extend( {
9149 url: url,
9150 type: method,
9151 dataType: type,
9152 data: data,
9153 success: callback
9154 }, jQuery.isPlainObject( url ) && url ) );
9155 };
9156} );
9157
9158
9159jQuery._evalUrl = function( url ) {
9160 return jQuery.ajax( {
9161 url: url,
9162
9163 // Make this explicit, since user can override this through ajaxSetup (#11264)
9164 type: "GET",
9165 dataType: "script",
9166 cache: true,
9167 async: false,
9168 global: false,
9169 "throws": true
9170 } );
9171};
9172
9173
9174jQuery.fn.extend( {
9175 wrapAll: function( html ) {
9176 var wrap;
9177
9178 if ( this[ 0 ] ) {
9179 if ( jQuery.isFunction( html ) ) {
9180 html = html.call( this[ 0 ] );
9181 }
9182
9183 // The elements to wrap the target around
9184 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
9185
9186 if ( this[ 0 ].parentNode ) {
9187 wrap.insertBefore( this[ 0 ] );
9188 }
9189
9190 wrap.map( function() {
9191 var elem = this;
9192
9193 while ( elem.firstElementChild ) {
9194 elem = elem.firstElementChild;
9195 }
9196
9197 return elem;
9198 } ).append( this );
9199 }
9200
9201 return this;
9202 },
9203
9204 wrapInner: function( html ) {
9205 if ( jQuery.isFunction( html ) ) {
9206 return this.each( function( i ) {
9207 jQuery( this ).wrapInner( html.call( this, i ) );
9208 } );
9209 }
9210
9211 return this.each( function() {
9212 var self = jQuery( this ),
9213 contents = self.contents();
9214
9215 if ( contents.length ) {
9216 contents.wrapAll( html );
9217
9218 } else {
9219 self.append( html );
9220 }
9221 } );
9222 },
9223
9224 wrap: function( html ) {
9225 var isFunction = jQuery.isFunction( html );
9226
9227 return this.each( function( i ) {
9228 jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
9229 } );
9230 },
9231
9232 unwrap: function( selector ) {
9233 this.parent( selector ).not( "body" ).each( function() {
9234 jQuery( this ).replaceWith( this.childNodes );
9235 } );
9236 return this;
9237 }
9238} );
9239
9240
9241jQuery.expr.pseudos.hidden = function( elem ) {
9242 return !jQuery.expr.pseudos.visible( elem );
9243};
9244jQuery.expr.pseudos.visible = function( elem ) {
9245 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
9246};
9247
9248
9249
9250
9251jQuery.ajaxSettings.xhr = function() {
9252 try {
9253 return new window.XMLHttpRequest();
9254 } catch ( e ) {}
9255};
9256
9257var xhrSuccessStatus = {
9258
9259 // File protocol always yields status code 0, assume 200
9260 0: 200,
9261
9262 // Support: IE <=9 only
9263 // #1450: sometimes IE returns 1223 when it should be 204
9264 1223: 204
9265 },
9266 xhrSupported = jQuery.ajaxSettings.xhr();
9267
9268support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
9269support.ajax = xhrSupported = !!xhrSupported;
9270
9271jQuery.ajaxTransport( function( options ) {
9272 var callback, errorCallback;
9273
9274 // Cross domain only allowed if supported through XMLHttpRequest
9275 if ( support.cors || xhrSupported && !options.crossDomain ) {
9276 return {
9277 send: function( headers, complete ) {
9278 var i,
9279 xhr = options.xhr();
9280
9281 xhr.open(
9282 options.type,
9283 options.url,
9284 options.async,
9285 options.username,
9286 options.password
9287 );
9288
9289 // Apply custom fields if provided
9290 if ( options.xhrFields ) {
9291 for ( i in options.xhrFields ) {
9292 xhr[ i ] = options.xhrFields[ i ];
9293 }
9294 }
9295
9296 // Override mime type if needed
9297 if ( options.mimeType && xhr.overrideMimeType ) {
9298 xhr.overrideMimeType( options.mimeType );
9299 }
9300
9301 // X-Requested-With header
9302 // For cross-domain requests, seeing as conditions for a preflight are
9303 // akin to a jigsaw puzzle, we simply never set it to be sure.
9304 // (it can always be set on a per-request basis or even using ajaxSetup)
9305 // For same-domain requests, won't change header if already provided.
9306 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
9307 headers[ "X-Requested-With" ] = "XMLHttpRequest";
9308 }
9309
9310 // Set headers
9311 for ( i in headers ) {
9312 xhr.setRequestHeader( i, headers[ i ] );
9313 }
9314
9315 // Callback
9316 callback = function( type ) {
9317 return function() {
9318 if ( callback ) {
9319 callback = errorCallback = xhr.onload =
9320 xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
9321
9322 if ( type === "abort" ) {
9323 xhr.abort();
9324 } else if ( type === "error" ) {
9325
9326 // Support: IE <=9 only
9327 // On a manual native abort, IE9 throws
9328 // errors on any property access that is not readyState
9329 if ( typeof xhr.status !== "number" ) {
9330 complete( 0, "error" );
9331 } else {
9332 complete(
9333
9334 // File: protocol always yields status 0; see #8605, #14207
9335 xhr.status,
9336 xhr.statusText
9337 );
9338 }
9339 } else {
9340 complete(
9341 xhrSuccessStatus[ xhr.status ] || xhr.status,
9342 xhr.statusText,
9343
9344 // Support: IE <=9 only
9345 // IE9 has no XHR2 but throws on binary (trac-11426)
9346 // For XHR2 non-text, let the caller handle it (gh-2498)
9347 ( xhr.responseType || "text" ) !== "text" ||
9348 typeof xhr.responseText !== "string" ?
9349 { binary: xhr.response } :
9350 { text: xhr.responseText },
9351 xhr.getAllResponseHeaders()
9352 );
9353 }
9354 }
9355 };
9356 };
9357
9358 // Listen to events
9359 xhr.onload = callback();
9360 errorCallback = xhr.onerror = callback( "error" );
9361
9362 // Support: IE 9 only
9363 // Use onreadystatechange to replace onabort
9364 // to handle uncaught aborts
9365 if ( xhr.onabort !== undefined ) {
9366 xhr.onabort = errorCallback;
9367 } else {
9368 xhr.onreadystatechange = function() {
9369
9370 // Check readyState before timeout as it changes
9371 if ( xhr.readyState === 4 ) {
9372
9373 // Allow onerror to be called first,
9374 // but that will not handle a native abort
9375 // Also, save errorCallback to a variable
9376 // as xhr.onerror cannot be accessed
9377 window.setTimeout( function() {
9378 if ( callback ) {
9379 errorCallback();
9380 }
9381 } );
9382 }
9383 };
9384 }
9385
9386 // Create the abort callback
9387 callback = callback( "abort" );
9388
9389 try {
9390
9391 // Do send the request (this may raise an exception)
9392 xhr.send( options.hasContent && options.data || null );
9393 } catch ( e ) {
9394
9395 // #14683: Only rethrow if this hasn't been notified as an error yet
9396 if ( callback ) {
9397 throw e;
9398 }
9399 }
9400 },
9401
9402 abort: function() {
9403 if ( callback ) {
9404 callback();
9405 }
9406 }
9407 };
9408 }
9409} );
9410
9411
9412
9413
9414// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
9415jQuery.ajaxPrefilter( function( s ) {
9416 if ( s.crossDomain ) {
9417 s.contents.script = false;
9418 }
9419} );
9420
9421// Install script dataType
9422jQuery.ajaxSetup( {
9423 accepts: {
9424 script: "text/javascript, application/javascript, " +
9425 "application/ecmascript, application/x-ecmascript"
9426 },
9427 contents: {
9428 script: /\b(?:java|ecma)script\b/
9429 },
9430 converters: {
9431 "text script": function( text ) {
9432 jQuery.globalEval( text );
9433 return text;
9434 }
9435 }
9436} );
9437
9438// Handle cache's special case and crossDomain
9439jQuery.ajaxPrefilter( "script", function( s ) {
9440 if ( s.cache === undefined ) {
9441 s.cache = false;
9442 }
9443 if ( s.crossDomain ) {
9444 s.type = "GET";
9445 }
9446} );
9447
9448// Bind script tag hack transport
9449jQuery.ajaxTransport( "script", function( s ) {
9450
9451 // This transport only deals with cross domain requests
9452 if ( s.crossDomain ) {
9453 var script, callback;
9454 return {
9455 send: function( _, complete ) {
9456 script = jQuery( "<script>" ).prop( {
9457 charset: s.scriptCharset,
9458 src: s.url
9459 } ).on(
9460 "load error",
9461 callback = function( evt ) {
9462 script.remove();
9463 callback = null;
9464 if ( evt ) {
9465 complete( evt.type === "error" ? 404 : 200, evt.type );
9466 }
9467 }
9468 );
9469
9470 // Use native DOM manipulation to avoid our domManip AJAX trickery
9471 document.head.appendChild( script[ 0 ] );
9472 },
9473 abort: function() {
9474 if ( callback ) {
9475 callback();
9476 }
9477 }
9478 };
9479 }
9480} );
9481
9482
9483
9484
9485var oldCallbacks = [],
9486 rjsonp = /(=)\?(?=&|$)|\?\?/;
9487
9488// Default jsonp settings
9489jQuery.ajaxSetup( {
9490 jsonp: "callback",
9491 jsonpCallback: function() {
9492 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
9493 this[ callback ] = true;
9494 return callback;
9495 }
9496} );
9497
9498// Detect, normalize options and install callbacks for jsonp requests
9499jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
9500
9501 var callbackName, overwritten, responseContainer,
9502 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
9503 "url" :
9504 typeof s.data === "string" &&
9505 ( s.contentType || "" )
9506 .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
9507 rjsonp.test( s.data ) && "data"
9508 );
9509
9510 // Handle iff the expected data type is "jsonp" or we have a parameter to set
9511 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
9512
9513 // Get callback name, remembering preexisting value associated with it
9514 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
9515 s.jsonpCallback() :
9516 s.jsonpCallback;
9517
9518 // Insert callback into url or form data
9519 if ( jsonProp ) {
9520 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
9521 } else if ( s.jsonp !== false ) {
9522 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
9523 }
9524
9525 // Use data converter to retrieve json after script execution
9526 s.converters[ "script json" ] = function() {
9527 if ( !responseContainer ) {
9528 jQuery.error( callbackName + " was not called" );
9529 }
9530 return responseContainer[ 0 ];
9531 };
9532
9533 // Force json dataType
9534 s.dataTypes[ 0 ] = "json";
9535
9536 // Install callback
9537 overwritten = window[ callbackName ];
9538 window[ callbackName ] = function() {
9539 responseContainer = arguments;
9540 };
9541
9542 // Clean-up function (fires after converters)
9543 jqXHR.always( function() {
9544
9545 // If previous value didn't exist - remove it
9546 if ( overwritten === undefined ) {
9547 jQuery( window ).removeProp( callbackName );
9548
9549 // Otherwise restore preexisting value
9550 } else {
9551 window[ callbackName ] = overwritten;
9552 }
9553
9554 // Save back as free
9555 if ( s[ callbackName ] ) {
9556
9557 // Make sure that re-using the options doesn't screw things around
9558 s.jsonpCallback = originalSettings.jsonpCallback;
9559
9560 // Save the callback name for future use
9561 oldCallbacks.push( callbackName );
9562 }
9563
9564 // Call if it was a function and we have a response
9565 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
9566 overwritten( responseContainer[ 0 ] );
9567 }
9568
9569 responseContainer = overwritten = undefined;
9570 } );
9571
9572 // Delegate to script
9573 return "script";
9574 }
9575} );
9576
9577
9578
9579
9580// Support: Safari 8 only
9581// In Safari 8 documents created via document.implementation.createHTMLDocument
9582// collapse sibling forms: the second one becomes a child of the first one.
9583// Because of that, this security measure has to be disabled in Safari 8.
9584// https://bugs.webkit.org/show_bug.cgi?id=137337
9585support.createHTMLDocument = ( function() {
9586 var body = document.implementation.createHTMLDocument( "" ).body;
9587 body.innerHTML = "<form></form><form></form>";
9588 return body.childNodes.length === 2;
9589} )();
9590
9591
9592// Argument "data" should be string of html
9593// context (optional): If specified, the fragment will be created in this context,
9594// defaults to document
9595// keepScripts (optional): If true, will include scripts passed in the html string
9596jQuery.parseHTML = function( data, context, keepScripts ) {
9597 if ( typeof data !== "string" ) {
9598 return [];
9599 }
9600 if ( typeof context === "boolean" ) {
9601 keepScripts = context;
9602 context = false;
9603 }
9604
9605 var base, parsed, scripts;
9606
9607 if ( !context ) {
9608
9609 // Stop scripts or inline event handlers from being executed immediately
9610 // by using document.implementation
9611 if ( support.createHTMLDocument ) {
9612 context = document.implementation.createHTMLDocument( "" );
9613
9614 // Set the base href for the created document
9615 // so any parsed elements with URLs
9616 // are based on the document's URL (gh-2965)
9617 base = context.createElement( "base" );
9618 base.href = document.location.href;
9619 context.head.appendChild( base );
9620 } else {
9621 context = document;
9622 }
9623 }
9624
9625 parsed = rsingleTag.exec( data );
9626 scripts = !keepScripts && [];
9627
9628 // Single tag
9629 if ( parsed ) {
9630 return [ context.createElement( parsed[ 1 ] ) ];
9631 }
9632
9633 parsed = buildFragment( [ data ], context, scripts );
9634
9635 if ( scripts && scripts.length ) {
9636 jQuery( scripts ).remove();
9637 }
9638
9639 return jQuery.merge( [], parsed.childNodes );
9640};
9641
9642
9643/**
9644 * Load a url into a page
9645 */
9646jQuery.fn.load = function( url, params, callback ) {
9647 var selector, type, response,
9648 self = this,
9649 off = url.indexOf( " " );
9650
9651 if ( off > -1 ) {
9652 selector = jQuery.trim( url.slice( off ) );
9653 url = url.slice( 0, off );
9654 }
9655
9656 // If it's a function
9657 if ( jQuery.isFunction( params ) ) {
9658
9659 // We assume that it's the callback
9660 callback = params;
9661 params = undefined;
9662
9663 // Otherwise, build a param string
9664 } else if ( params && typeof params === "object" ) {
9665 type = "POST";
9666 }
9667
9668 // If we have elements to modify, make the request
9669 if ( self.length > 0 ) {
9670 jQuery.ajax( {
9671 url: url,
9672
9673 // If "type" variable is undefined, then "GET" method will be used.
9674 // Make value of this field explicit since
9675 // user can override it through ajaxSetup method
9676 type: type || "GET",
9677 dataType: "html",
9678 data: params
9679 } ).done( function( responseText ) {
9680
9681 // Save response for use in complete callback
9682 response = arguments;
9683
9684 self.html( selector ?
9685
9686 // If a selector was specified, locate the right elements in a dummy div
9687 // Exclude scripts to avoid IE 'Permission Denied' errors
9688 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
9689
9690 // Otherwise use the full result
9691 responseText );
9692
9693 // If the request succeeds, this function gets "data", "status", "jqXHR"
9694 // but they are ignored because response was set above.
9695 // If it fails, this function gets "jqXHR", "status", "error"
9696 } ).always( callback && function( jqXHR, status ) {
9697 self.each( function() {
9698 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
9699 } );
9700 } );
9701 }
9702
9703 return this;
9704};
9705
9706
9707
9708
9709// Attach a bunch of functions for handling common AJAX events
9710jQuery.each( [
9711 "ajaxStart",
9712 "ajaxStop",
9713 "ajaxComplete",
9714 "ajaxError",
9715 "ajaxSuccess",
9716 "ajaxSend"
9717], function( i, type ) {
9718 jQuery.fn[ type ] = function( fn ) {
9719 return this.on( type, fn );
9720 };
9721} );
9722
9723
9724
9725
9726jQuery.expr.pseudos.animated = function( elem ) {
9727 return jQuery.grep( jQuery.timers, function( fn ) {
9728 return elem === fn.elem;
9729 } ).length;
9730};
9731
9732
9733
9734
9735/**
9736 * Gets a window from an element
9737 */
9738function getWindow( elem ) {
9739 return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
9740}
9741
9742jQuery.offset = {
9743 setOffset: function( elem, options, i ) {
9744 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
9745 position = jQuery.css( elem, "position" ),
9746 curElem = jQuery( elem ),
9747 props = {};
9748
9749 // Set position first, in-case top/left are set even on static elem
9750 if ( position === "static" ) {
9751 elem.style.position = "relative";
9752 }
9753
9754 curOffset = curElem.offset();
9755 curCSSTop = jQuery.css( elem, "top" );
9756 curCSSLeft = jQuery.css( elem, "left" );
9757 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
9758 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
9759
9760 // Need to be able to calculate position if either
9761 // top or left is auto and position is either absolute or fixed
9762 if ( calculatePosition ) {
9763 curPosition = curElem.position();
9764 curTop = curPosition.top;
9765 curLeft = curPosition.left;
9766
9767 } else {
9768 curTop = parseFloat( curCSSTop ) || 0;
9769 curLeft = parseFloat( curCSSLeft ) || 0;
9770 }
9771
9772 if ( jQuery.isFunction( options ) ) {
9773
9774 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
9775 options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
9776 }
9777
9778 if ( options.top != null ) {
9779 props.top = ( options.top - curOffset.top ) + curTop;
9780 }
9781 if ( options.left != null ) {
9782 props.left = ( options.left - curOffset.left ) + curLeft;
9783 }
9784
9785 if ( "using" in options ) {
9786 options.using.call( elem, props );
9787
9788 } else {
9789 curElem.css( props );
9790 }
9791 }
9792};
9793
9794jQuery.fn.extend( {
9795 offset: function( options ) {
9796
9797 // Preserve chaining for setter
9798 if ( arguments.length ) {
9799 return options === undefined ?
9800 this :
9801 this.each( function( i ) {
9802 jQuery.offset.setOffset( this, options, i );
9803 } );
9804 }
9805
9806 var docElem, win, rect, doc,
9807 elem = this[ 0 ];
9808
9809 if ( !elem ) {
9810 return;
9811 }
9812
9813 // Support: IE <=11 only
9814 // Running getBoundingClientRect on a
9815 // disconnected node in IE throws an error
9816 if ( !elem.getClientRects().length ) {
9817 return { top: 0, left: 0 };
9818 }
9819
9820 rect = elem.getBoundingClientRect();
9821
9822 // Make sure element is not hidden (display: none)
9823 if ( rect.width || rect.height ) {
9824 doc = elem.ownerDocument;
9825 win = getWindow( doc );
9826 docElem = doc.documentElement;
9827
9828 return {
9829 top: rect.top + win.pageYOffset - docElem.clientTop,
9830 left: rect.left + win.pageXOffset - docElem.clientLeft
9831 };
9832 }
9833
9834 // Return zeros for disconnected and hidden elements (gh-2310)
9835 return rect;
9836 },
9837
9838 position: function() {
9839 if ( !this[ 0 ] ) {
9840 return;
9841 }
9842
9843 var offsetParent, offset,
9844 elem = this[ 0 ],
9845 parentOffset = { top: 0, left: 0 };
9846
9847 // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
9848 // because it is its only offset parent
9849 if ( jQuery.css( elem, "position" ) === "fixed" ) {
9850
9851 // Assume getBoundingClientRect is there when computed position is fixed
9852 offset = elem.getBoundingClientRect();
9853
9854 } else {
9855
9856 // Get *real* offsetParent
9857 offsetParent = this.offsetParent();
9858
9859 // Get correct offsets
9860 offset = this.offset();
9861 if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
9862 parentOffset = offsetParent.offset();
9863 }
9864
9865 // Add offsetParent borders
9866 parentOffset = {
9867 top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
9868 left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
9869 };
9870 }
9871
9872 // Subtract parent offsets and element margins
9873 return {
9874 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
9875 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
9876 };
9877 },
9878
9879 // This method will return documentElement in the following cases:
9880 // 1) For the element inside the iframe without offsetParent, this method will return
9881 // documentElement of the parent window
9882 // 2) For the hidden or detached element
9883 // 3) For body or html element, i.e. in case of the html node - it will return itself
9884 //
9885 // but those exceptions were never presented as a real life use-cases
9886 // and might be considered as more preferable results.
9887 //
9888 // This logic, however, is not guaranteed and can change at any point in the future
9889 offsetParent: function() {
9890 return this.map( function() {
9891 var offsetParent = this.offsetParent;
9892
9893 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
9894 offsetParent = offsetParent.offsetParent;
9895 }
9896
9897 return offsetParent || documentElement;
9898 } );
9899 }
9900} );
9901
9902// Create scrollLeft and scrollTop methods
9903jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
9904 var top = "pageYOffset" === prop;
9905
9906 jQuery.fn[ method ] = function( val ) {
9907 return access( this, function( elem, method, val ) {
9908 var win = getWindow( elem );
9909
9910 if ( val === undefined ) {
9911 return win ? win[ prop ] : elem[ method ];
9912 }
9913
9914 if ( win ) {
9915 win.scrollTo(
9916 !top ? val : win.pageXOffset,
9917 top ? val : win.pageYOffset
9918 );
9919
9920 } else {
9921 elem[ method ] = val;
9922 }
9923 }, method, val, arguments.length );
9924 };
9925} );
9926
9927// Support: Safari <=7 - 9.1, Chrome <=37 - 49
9928// Add the top/left cssHooks using jQuery.fn.position
9929// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
9930// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
9931// getComputedStyle returns percent when specified for top/left/bottom/right;
9932// rather than make the css module depend on the offset module, just check for it here
9933jQuery.each( [ "top", "left" ], function( i, prop ) {
9934 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
9935 function( elem, computed ) {
9936 if ( computed ) {
9937 computed = curCSS( elem, prop );
9938
9939 // If curCSS returns percentage, fallback to offset
9940 return rnumnonpx.test( computed ) ?
9941 jQuery( elem ).position()[ prop ] + "px" :
9942 computed;
9943 }
9944 }
9945 );
9946} );
9947
9948
9949// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
9950jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
9951 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
9952 function( defaultExtra, funcName ) {
9953
9954 // Margin is only for outerHeight, outerWidth
9955 jQuery.fn[ funcName ] = function( margin, value ) {
9956 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
9957 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
9958
9959 return access( this, function( elem, type, value ) {
9960 var doc;
9961
9962 if ( jQuery.isWindow( elem ) ) {
9963
9964 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
9965 return funcName.indexOf( "outer" ) === 0 ?
9966 elem[ "inner" + name ] :
9967 elem.document.documentElement[ "client" + name ];
9968 }
9969
9970 // Get document width or height
9971 if ( elem.nodeType === 9 ) {
9972 doc = elem.documentElement;
9973
9974 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
9975 // whichever is greatest
9976 return Math.max(
9977 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
9978 elem.body[ "offset" + name ], doc[ "offset" + name ],
9979 doc[ "client" + name ]
9980 );
9981 }
9982
9983 return value === undefined ?
9984
9985 // Get width or height on the element, requesting but not forcing parseFloat
9986 jQuery.css( elem, type, extra ) :
9987
9988 // Set width or height on the element
9989 jQuery.style( elem, type, value, extra );
9990 }, type, chainable ? margin : undefined, chainable );
9991 };
9992 } );
9993} );
9994
9995
9996jQuery.fn.extend( {
9997
9998 bind: function( types, data, fn ) {
9999 return this.on( types, null, data, fn );
10000 },
10001 unbind: function( types, fn ) {
10002 return this.off( types, null, fn );
10003 },
10004
10005 delegate: function( selector, types, data, fn ) {
10006 return this.on( types, selector, data, fn );
10007 },
10008 undelegate: function( selector, types, fn ) {
10009
10010 // ( namespace ) or ( selector, types [, fn] )
10011 return arguments.length === 1 ?
10012 this.off( selector, "**" ) :
10013 this.off( types, selector || "**", fn );
10014 }
10015} );
10016
10017jQuery.parseJSON = JSON.parse;
10018
10019
10020
10021
10022// Register as a named AMD module, since jQuery can be concatenated with other
10023// files that may use define, but not via a proper concatenation script that
10024// understands anonymous AMD modules. A named AMD is safest and most robust
10025// way to register. Lowercase jquery is used because AMD module names are
10026// derived from file names, and jQuery is normally delivered in a lowercase
10027// file name. Do this after creating the global so that if an AMD module wants
10028// to call noConflict to hide this version of jQuery, it will work.
10029
10030// Note that for maximum portability, libraries that are not jQuery should
10031// declare themselves as anonymous modules, and avoid setting a global if an
10032// AMD loader is present. jQuery is a special case. For more information, see
10033// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
10034
10035if ( typeof define === "function" && define.amd ) {
10036 define( "jquery", [], function() {
10037 return jQuery;
10038 } );
10039}
10040
10041
10042
10043
10044
10045var
10046
10047 // Map over jQuery in case of overwrite
10048 _jQuery = window.jQuery,
10049
10050 // Map over the $ in case of overwrite
10051 _$ = window.$;
10052
10053jQuery.noConflict = function( deep ) {
10054 if ( window.$ === jQuery ) {
10055 window.$ = _$;
10056 }
10057
10058 if ( deep && window.jQuery === jQuery ) {
10059 window.jQuery = _jQuery;
10060 }
10061
10062 return jQuery;
10063};
10064
10065// Expose jQuery and $ identifiers, even in AMD
10066// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
10067// and CommonJS for browser emulators (#13566)
10068if ( !noGlobal ) {
10069 window.jQuery = window.$ = jQuery;
10070}
10071
10072
10073return jQuery;
10074} );
diff --git a/_static/jquery.js b/_static/jquery.js
index ab28a24..f6a6a99 100644..100755
--- a/_static/jquery.js
+++ b/_static/jquery.js
@@ -1,4 +1,4 @@
1/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ 1/*! jQuery v3.1.0 | (c) jQuery Foundation | jquery.org/license */
2!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; 2!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null!=a?a<0?this[a+this.length]:this[a]:f.call(this)},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=r.isArray(d)))?(e?(e=!1,f=c&&r.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"label"in b&&b.disabled===a||"form"in b&&b.disabled===a||"form"in b&&b.disabled===!1&&(b.isDisabled===a||b.isDisabled!==!a&&("label"in b||!ea(b))!==a)}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e)}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(_,aa),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=V.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(_,aa),$.test(j[0].type)&&qa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&sa(j),!a)return G.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||$.test(a)&&qa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return r.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(C.test(b))return r.filter(b,a,c);b=r.filter(b,a)}return r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType})}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/\S+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,M,e),g(f,c,N,e)):(f++,j.call(a,g(f,c,M,e),g(f,c,N,e),g(f,c,M,c.notifyWith))):(d!==M&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R),a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,
3if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px") 3r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},T=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function U(){this.expando=r.expando+U.uid++}U.uid=1,U.prototype={cache:function(a){var b=a[this.expando];return b||(b={},T(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){r.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(K)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var V=new U,W=new U,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Y=/[A-Z]/g;function Z(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Y,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:X.test(c)?JSON.parse(c):c)}catch(e){}W.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return W.hasData(a)||V.hasData(a)},data:function(a,b,c){return W.access(a,b,c)},removeData:function(a,b){W.remove(a,b)},_data:function(a,b,c){return V.access(a,b,c)},_removeData:function(a,b){V.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=W.get(f),1===f.nodeType&&!V.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),Z(f,d,e[d])));V.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){W.set(this,a)}):S(this,function(b){var c;if(f&&void 0===b){if(c=W.get(f,a),void 0!==c)return c;if(c=Z(f,a),void 0!==c)return c}else this.each(function(){W.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=V.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var $=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,_=new RegExp("^(?:([+-])=|)("+$+")([a-z%]*)$","i"),aa=["Top","Right","Bottom","Left"],ba=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ca=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function da(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&_.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ea={};function fa(a){var b,c=a.ownerDocument,d=a.nodeName,e=ea[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ea[d]=e,e)}function ga(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=V.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&ba(d)&&(e[f]=fa(d))):"none"!==c&&(e[f]="none",V.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ga(this,!0)},hide:function(){return ga(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){ba(this)?r(this).show():r(this).hide()})}});var ha=/^(?:checkbox|radio)$/i,ia=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,ja=/^$|\/(?:java|ecma)script/i,ka={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ka.optgroup=ka.option,ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead,ka.th=ka.td;function la(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function ma(a,b){for(var c=0,d=a.length;c<d;c++)V.set(a[c],"globalEval",!b||V.get(b[c],"globalEval"))}var na=/<|&#?\w+;/;function oa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(na.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ia.exec(f)||["",""])[1].toLowerCase(),i=ka[h]||ka._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=la(l.appendChild(f),"script"),j&&ma(g),c){k=0;while(f=g[k++])ja.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var pa=d.documentElement,qa=/^key/,ra=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,sa=/^([^.]*)(?:\.(.+)|)/;function ta(){return!0}function ua(){return!1}function va(){try{return d.activeElement}catch(a){}}function wa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)wa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ua;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(pa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;c<h;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?r(e,this).index(i)>-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==va()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===va()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&r.nodeName(this,"input"))return this.click(),!1},_default:function(a){return r.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ta:ua,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:ua,isPropagationStopped:ua,isImmediatePropagationStopped:ua,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ta,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ta,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ta,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&qa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ra.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return wa(this,a,b,c,d)},one:function(a,b,c,d){return wa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=ua),this.each(function(){r.event.remove(this,a,c,b)})}});var xa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,ya=/<script|<style|<link/i,za=/checked\s*(?:[^=]|=\s*.checked.)/i,Aa=/^true\/(.*)/,Ba=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ca(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Da(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ea(a){var b=Aa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}W.hasData(a)&&(h=W.access(a),i=r.extend({},h),W.set(b,i))}}function Ga(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ha.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ha(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&za.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(m&&(e=oa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(la(e,"script"),Da),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,la(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ea),l=0;l<i;l++)j=h[l],ja.test(j.type||"")&&!V.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Ba,""),k))}return a}function Ia(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(la(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&ma(la(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(xa,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=la(h),f=la(a),d=0,e=f.length;d<e;d++)Ga(f[d],g[d]);if(b)if(c)for(f=f||la(a),g=g||la(h),d=0,e=f.length;d<e;d++)Fa(f[d],g[d]);else Fa(a,h);return g=la(h,"script"),g.length>0&&ma(g,!i&&la(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(la(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!ya.test(a)&&!ka[(ia.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(la(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(la(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var Ja=/^margin/,Ka=new RegExp("^("+$+")(?!px)[a-z%]+$","i"),La=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",pa.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,pa.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Ma(a,b,c){var d,e,f,g,h=a.style;return c=c||La(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ka.test(g)&&Ja.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Na(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Oa=/^(none|table(?!-c[ea]).+)/,Pa={position:"absolute",visibility:"hidden",display:"block"},Qa={letterSpacing:"0",fontWeight:"400"},Ra=["Webkit","Moz","ms"],Sa=d.createElement("div").style;function Ta(a){if(a in Sa)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ra.length;while(c--)if(a=Ra[c]+b,a in Sa)return a}function Ua(a,b,c){var d=_.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Va(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+aa[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+aa[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+aa[f]+"Width",!0,e))):(g+=r.css(a,"padding"+aa[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+aa[f]+"Width",!0,e)));return g}function Wa(a,b,c){var d,e=!0,f=La(a),g="border-box"===r.css(a,"boxSizing",!1,f);if(a.getClientRects().length&&(d=a.getBoundingClientRect()[b]),d<=0||null==d){if(d=Ma(a,b,f),(d<0||null==d)&&(d=a.style[b]),Ka.test(d))return d;e=g&&(o.boxSizingReliable()||d===a.style[b]),d=parseFloat(d)||0}return d+Va(a,b,c||(g?"border":"content"),e,f)+"px"}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ma(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=a.style;return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=_.exec(c))&&e[1]&&(c=da(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b);return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Ma(a,b,d)),"normal"===e&&b in Qa&&(e=Qa[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Oa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?Wa(a,b,d):ca(a,Pa,function(){return Wa(a,b,d)})},set:function(a,c,d){var e,f=d&&La(a),g=d&&Va(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=_.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ua(a,c,g)}}}),r.cssHooks.marginLeft=Na(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Ma(a,"marginLeft"))||a.getBoundingClientRect().left-ca(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+aa[d]+b]=f[d]||f[d-2]||f[0];return e}},Ja.test(a)||(r.cssHooks[a+b].set=Ua)}),r.fn.extend({css:function(a,b){return S(this,function(a,b,c){var d,e,f={},g=0;if(r.isArray(b)){for(d=La(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function Xa(a,b,c,d,e){return new Xa.prototype.init(a,b,c,d,e)}r.Tween=Xa,Xa.prototype={constructor:Xa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Xa.propHooks[this.prop];return a&&a.get?a.get(this):Xa.propHooks._default.get(this)},run:function(a){var b,c=Xa.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Xa.propHooks._default.set(this),this}},Xa.prototype.init.prototype=Xa.prototype,Xa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Xa.propHooks.scrollTop=Xa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Xa.prototype.init,r.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=/queueHooks$/;function ab(){Za&&(a.requestAnimationFrame(ab),r.fx.tick())}function bb(){return a.setTimeout(function(){Ya=void 0}),Ya=r.now()}function cb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=aa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function db(a,b,c){for(var d,e=(gb.tweeners[b]||[]).concat(gb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function eb(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&ba(a),q=V.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],$a.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=V.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ga([a],!0),j=a.style.display||j,k=r.css(a,"display"),ga([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=V.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ga([a],!0),m.done(function(){p||ga([a]),V.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=db(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function fb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],r.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function gb(a,b,c){var d,e,f=0,g=gb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||bb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:Ya||bb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(fb(k,j.opts.specialEasing);f<g;f++)if(d=gb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,db,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}r.Animation=r.extend(gb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return da(c.elem,a,_.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(K);for(var c,d=0,e=a.length;d<e;d++)c=a[d],gb.tweeners[c]=gb.tweeners[c]||[],gb.tweeners[c].unshift(b)},prefilters:[eb],prefilter:function(a,b){b?gb.prefilters.unshift(a):gb.prefilters.push(a)}}),r.speed=function(a,b,c){var e=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off||d.hidden?e.duration=0:e.duration="number"==typeof e.duration?e.duration:e.duration in r.fx.speeds?r.fx.speeds[e.duration]:r.fx.speeds._default,null!=e.queue&&e.queue!==!0||(e.queue="fx"),e.old=e.complete,e.complete=function(){r.isFunction(e.old)&&e.old.call(this),e.queue&&r.dequeue(this,e.queue)},e},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(ba).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=gb(this,r.extend({},a),f);(e||V.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=V.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&_a.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=V.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(cb(b,!0),a,d,e)}}),r.each({slideDown:cb("show"),slideUp:cb("hide"),slideToggle:cb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(Ya=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),Ya=void 0},r.fx.timer=function(a){r.timers.push(a),a()?r.fx.start():r.timers.pop()},r.fx.interval=13,r.fx.start=function(){Za||(Za=a.requestAnimationFrame?a.requestAnimationFrame(ab):a.setInterval(r.fx.tick,r.fx.interval))},r.fx.stop=function(){a.cancelAnimationFrame?a.cancelAnimationFrame(Za):a.clearInterval(Za),Za=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var hb,ib=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return S(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?hb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);
4},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.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 contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m}); 4if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):jb.test(a.nodeName)||kb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});var lb=/[\t\r\n\f]/g;function mb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,mb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,mb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,mb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=mb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(c)+" ").replace(lb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:r.trim(r.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i<h;i++)if(c=d[i],(c.selected||i===e)&&!c.disabled&&(!c.parentNode.disabled||!r.nodeName(c.parentNode,"optgroup"))){if(b=r(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ha.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,""),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Qb=[],Rb=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Qb.pop()||r.expando+"_"+rb++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Rb.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Rb.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Rb,"$1"+e):b.jsonp!==!1&&(b.url+=(sb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Qb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=B.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=oa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=r.trim(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length};function Sb(a){return r.isWindow(a)?a:9===a.nodeType&&a.defaultView}r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),d.width||d.height?(e=f.ownerDocument,c=Sb(e),b=e.documentElement,{top:d.top+c.pageYOffset-b.clientTop,left:d.left+c.pageXOffset-b.clientLeft}):d):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),r.nodeName(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||pa})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return S(this,function(a,d,e){var f=Sb(a);return void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Na(o.pixelPosition,function(a,c){if(c)return c=Ma(a,b),Ka.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return S(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.parseJSON=JSON.parse,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Tb=a.jQuery,Ub=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Ub),b&&a.jQuery===r&&(a.jQuery=Tb),r},b||(a.jQuery=a.$=r),r});
diff --git a/_static/js/modernizr.min.js b/_static/js/modernizr.min.js
index f65d479..f65d479 100644..100755
--- a/_static/js/modernizr.min.js
+++ b/_static/js/modernizr.min.js
diff --git a/_static/js/theme.js b/_static/js/theme.js
index 48a9f06..48a9f06 100644..100755
--- a/_static/js/theme.js
+++ b/_static/js/theme.js
diff --git a/_static/minus.png b/_static/minus.png
index 0f22b16..d96755f 100644..100755
--- a/_static/minus.png
+++ b/_static/minus.png
Binary files differ
diff --git a/_static/plus.png b/_static/plus.png
index 0cfe084..7107cec 100644..100755
--- a/_static/plus.png
+++ b/_static/plus.png
Binary files differ
diff --git a/_static/pygments.css b/_static/pygments.css
index 8213e90..20c4814 100644..100755
--- a/_static/pygments.css
+++ b/_static/pygments.css
@@ -47,8 +47,10 @@
47.highlight .mh { color: #208050 } /* Literal.Number.Hex */ 47.highlight .mh { color: #208050 } /* Literal.Number.Hex */
48.highlight .mi { color: #208050 } /* Literal.Number.Integer */ 48.highlight .mi { color: #208050 } /* Literal.Number.Integer */
49.highlight .mo { color: #208050 } /* Literal.Number.Oct */ 49.highlight .mo { color: #208050 } /* Literal.Number.Oct */
50.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
50.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ 51.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
51.highlight .sc { color: #4070a0 } /* Literal.String.Char */ 52.highlight .sc { color: #4070a0 } /* Literal.String.Char */
53.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
52.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ 54.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
53.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ 55.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
54.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ 56.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
@@ -59,7 +61,9 @@
59.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ 61.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
60.highlight .ss { color: #517918 } /* Literal.String.Symbol */ 62.highlight .ss { color: #517918 } /* Literal.String.Symbol */
61.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ 63.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
64.highlight .fm { color: #06287e } /* Name.Function.Magic */
62.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ 65.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
63.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ 66.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
64.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ 67.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
68.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
65.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file 69.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file
diff --git a/_static/searchtools.js b/_static/searchtools.js
index 0e794fd..bbfb3ac 100644..100755
--- a/_static/searchtools.js
+++ b/_static/searchtools.js
@@ -2,14 +2,15 @@
2 * searchtools.js_t 2 * searchtools.js_t
3 * ~~~~~~~~~~~~~~~~ 3 * ~~~~~~~~~~~~~~~~
4 * 4 *
5 * Sphinx JavaScript utilties for the full-text search. 5 * Sphinx JavaScript utilities for the full-text search.
6 * 6 *
7 * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. 7 * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
8 * :license: BSD, see LICENSE for details. 8 * :license: BSD, see LICENSE for details.
9 * 9 *
10 */ 10 */
11 11
12 12
13/* Non-minified version JS is _stemmer.js if file is provided */
13/** 14/**
14 * Porter Stemmer 15 * Porter Stemmer
15 */ 16 */
@@ -225,6 +226,106 @@ var Scorer = {
225}; 226};
226 227
227 228
229
230
231
232var splitChars = (function() {
233 var result = {};
234 var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
235 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
236 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
237 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
238 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
239 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
240 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
241 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
242 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
243 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
244 var i, j, start, end;
245 for (i = 0; i < singles.length; i++) {
246 result[singles[i]] = true;
247 }
248 var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
249 [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
250 [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
251 [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
252 [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
253 [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
254 [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
255 [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
256 [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
257 [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
258 [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
259 [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
260 [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
261 [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
262 [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
263 [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
264 [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
265 [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
266 [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
267 [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
268 [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
269 [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
270 [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
271 [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
272 [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
273 [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
274 [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
275 [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
276 [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
277 [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
278 [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
279 [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
280 [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
281 [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
282 [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
283 [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
284 [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
285 [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
286 [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
287 [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
288 [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
289 [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
290 [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
291 [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
292 [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
293 [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
294 [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
295 [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
296 [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
297 for (i = 0; i < ranges.length; i++) {
298 start = ranges[i][0];
299 end = ranges[i][1];
300 for (j = start; j <= end; j++) {
301 result[j] = true;
302 }
303 }
304 return result;
305})();
306
307function splitQuery(query) {
308 var result = [];
309 var start = -1;
310 for (var i = 0; i < query.length; i++) {
311 if (splitChars[query.charCodeAt(i)]) {
312 if (start !== -1) {
313 result.push(query.slice(start, i));
314 start = -1;
315 }
316 } else if (start === -1) {
317 start = i;
318 }
319 }
320 if (start !== -1) {
321 result.push(query.slice(start));
322 }
323 return result;
324}
325
326
327
328
228/** 329/**
229 * Search Module 330 * Search Module
230 */ 331 */
@@ -323,7 +424,7 @@ var Search = {
323 var searchterms = []; 424 var searchterms = [];
324 var excluded = []; 425 var excluded = [];
325 var hlterms = []; 426 var hlterms = [];
326 var tmp = query.split(/\s+/); 427 var tmp = splitQuery(query);
327 var objectterms = []; 428 var objectterms = [];
328 for (i = 0; i < tmp.length; i++) { 429 for (i = 0; i < tmp.length; i++) {
329 if (tmp[i] !== "") { 430 if (tmp[i] !== "") {
@@ -337,6 +438,10 @@ var Search = {
337 } 438 }
338 // stem the word 439 // stem the word
339 var word = stemmer.stemWord(tmp[i].toLowerCase()); 440 var word = stemmer.stemWord(tmp[i].toLowerCase());
441 // prevent stemmer from cutting word smaller than two chars
442 if(word.length < 3 && tmp[i].length >= 3) {
443 word = tmp[i];
444 }
340 var toAppend; 445 var toAppend;
341 // select the correct list 446 // select the correct list
342 if (word[0] == '-') { 447 if (word[0] == '-') {
@@ -373,8 +478,7 @@ var Search = {
373 } 478 }
374 479
375 // lookup as search terms in fulltext 480 // lookup as search terms in fulltext
376 results = results.concat(this.performTermsSearch(searchterms, excluded, terms, Scorer.term)) 481 results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
377 .concat(this.performTermsSearch(searchterms, excluded, titleterms, Scorer.title));
378 482
379 // let the scorer override scores with a custom scoring function 483 // let the scorer override scores with a custom scoring function
380 if (Scorer.score) { 484 if (Scorer.score) {
@@ -435,7 +539,8 @@ var Search = {
435 displayNextItem(); 539 displayNextItem();
436 }); 540 });
437 } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) { 541 } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
438 $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt', 542 var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX;
543 $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix),
439 dataType: "text", 544 dataType: "text",
440 complete: function(jqxhr, textstatus) { 545 complete: function(jqxhr, textstatus) {
441 var data = jqxhr.responseText; 546 var data = jqxhr.responseText;
@@ -474,6 +579,7 @@ var Search = {
474 */ 579 */
475 performObjectSearch : function(object, otherterms) { 580 performObjectSearch : function(object, otherterms) {
476 var filenames = this._index.filenames; 581 var filenames = this._index.filenames;
582 var docnames = this._index.docnames;
477 var objects = this._index.objects; 583 var objects = this._index.objects;
478 var objnames = this._index.objnames; 584 var objnames = this._index.objnames;
479 var titles = this._index.titles; 585 var titles = this._index.titles;
@@ -527,7 +633,7 @@ var Search = {
527 } else { 633 } else {
528 score += Scorer.objPrioDefault; 634 score += Scorer.objPrioDefault;
529 } 635 }
530 results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]); 636 results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
531 } 637 }
532 } 638 }
533 } 639 }
@@ -538,23 +644,48 @@ var Search = {
538 /** 644 /**
539 * search for full-text terms in the index 645 * search for full-text terms in the index
540 */ 646 */
541 performTermsSearch : function(searchterms, excluded, terms, score) { 647 performTermsSearch : function(searchterms, excluded, terms, titleterms) {
648 var docnames = this._index.docnames;
542 var filenames = this._index.filenames; 649 var filenames = this._index.filenames;
543 var titles = this._index.titles; 650 var titles = this._index.titles;
544 651
545 var i, j, file, files; 652 var i, j, file;
546 var fileMap = {}; 653 var fileMap = {};
654 var scoreMap = {};
547 var results = []; 655 var results = [];
548 656
549 // perform the search on the required terms 657 // perform the search on the required terms
550 for (i = 0; i < searchterms.length; i++) { 658 for (i = 0; i < searchterms.length; i++) {
551 var word = searchterms[i]; 659 var word = searchterms[i];
660 var files = [];
661 var _o = [
662 {files: terms[word], score: Scorer.term},
663 {files: titleterms[word], score: Scorer.title}
664 ];
665
552 // no match but word was a required one 666 // no match but word was a required one
553 if ((files = terms[word]) === undefined) 667 if ($u.every(_o, function(o){return o.files === undefined;})) {
554 break; 668 break;
555 if (files.length === undefined) {
556 files = [files];
557 } 669 }
670 // found search word in contents
671 $u.each(_o, function(o) {
672 var _files = o.files;
673 if (_files === undefined)
674 return
675
676 if (_files.length === undefined)
677 _files = [_files];
678 files = files.concat(_files);
679
680 // set score for the word in each file to Scorer.term
681 for (j = 0; j < _files.length; j++) {
682 file = _files[j];
683 if (!(file in scoreMap))
684 scoreMap[file] = {}
685 scoreMap[file][word] = o.score;
686 }
687 });
688
558 // create the mapping 689 // create the mapping
559 for (j = 0; j < files.length; j++) { 690 for (j = 0; j < files.length; j++) {
560 file = files[j]; 691 file = files[j];
@@ -576,7 +707,9 @@ var Search = {
576 // ensure that none of the excluded terms is in the search result 707 // ensure that none of the excluded terms is in the search result
577 for (i = 0; i < excluded.length; i++) { 708 for (i = 0; i < excluded.length; i++) {
578 if (terms[excluded[i]] == file || 709 if (terms[excluded[i]] == file ||
579 $u.contains(terms[excluded[i]] || [], file)) { 710 titleterms[excluded[i]] == file ||
711 $u.contains(terms[excluded[i]] || [], file) ||
712 $u.contains(titleterms[excluded[i]] || [], file)) {
580 valid = false; 713 valid = false;
581 break; 714 break;
582 } 715 }
@@ -584,7 +717,10 @@ var Search = {
584 717
585 // if we have still a valid result we can add it to the result list 718 // if we have still a valid result we can add it to the result list
586 if (valid) { 719 if (valid) {
587 results.push([filenames[file], titles[file], '', null, score]); 720 // select one (max) score for the file.
721 // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
722 var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
723 results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
588 } 724 }
589 } 725 }
590 return results; 726 return results;
@@ -594,7 +730,7 @@ var Search = {
594 * helper function to return a node containing the 730 * helper function to return a node containing the
595 * search summary for a given text. keywords is a list 731 * search summary for a given text. keywords is a list
596 * of stemmed words, hlwords is the list of normal, unstemmed 732 * of stemmed words, hlwords is the list of normal, unstemmed
597 * words. the first one is used to find the occurance, the 733 * words. the first one is used to find the occurrence, the
598 * latter for highlighting it. 734 * latter for highlighting it.
599 */ 735 */
600 makeSearchSummary : function(text, keywords, hlwords) { 736 makeSearchSummary : function(text, keywords, hlwords) {
diff --git a/_static/sidebar.js b/_static/sidebar.js
index 5882ecf..5882ecf 100644..100755
--- a/_static/sidebar.js
+++ b/_static/sidebar.js
diff --git a/_static/underscore-1.3.1.js b/_static/underscore-1.3.1.js
index 208d4cd..208d4cd 100644..100755
--- a/_static/underscore-1.3.1.js
+++ b/_static/underscore-1.3.1.js
diff --git a/_static/underscore.js b/_static/underscore.js
index 5b55f32..5b55f32 100644..100755
--- a/_static/underscore.js
+++ b/_static/underscore.js
diff --git a/_static/up-pressed.png b/_static/up-pressed.png
index 99e7210..acee3b6 100644..100755
--- a/_static/up-pressed.png
+++ b/_static/up-pressed.png
Binary files differ
diff --git a/_static/up.png b/_static/up.png
index 26de002..2a940a7 100644..100755
--- a/_static/up.png
+++ b/_static/up.png
Binary files differ
diff --git a/_static/websupport.js b/_static/websupport.js
index 28d65db..98e7f40 100644..100755
--- a/_static/websupport.js
+++ b/_static/websupport.js
@@ -2,9 +2,9 @@
2 * websupport.js 2 * websupport.js
3 * ~~~~~~~~~~~~~ 3 * ~~~~~~~~~~~~~
4 * 4 *
5 * sphinx.websupport utilties for all documentation. 5 * sphinx.websupport utilities for all documentation.
6 * 6 *
7 * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. 7 * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
8 * :license: BSD, see LICENSE for details. 8 * :license: BSD, see LICENSE for details.
9 * 9 *
10 */ 10 */
diff --git a/api.html b/api.html
index f7e62d8..6019db7 100644..100755
--- a/api.html
+++ b/api.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="next" title="client – Client Utilities" href="client.html"/> 37 <link rel="next" title="client – Client Utilities" href="client.html"/>
35 <link rel="prev" title="Server Settings (eventmq.conf)" href="settings_file.html"/> 38 <link rel="prev" title="Server Settings (eventmq.conf)" href="settings_file.html"/>
@@ -60,7 +63,7 @@
60 63
61 64
62 <div class="version"> 65 <div class="version">
63 0.2.7.1 66 0.3-rc8
64 </div> 67 </div>
65 68
66 69
@@ -83,7 +86,7 @@
83 86
84 <ul class="current"> 87 <ul class="current">
85<li class="toctree-l1"><a class="reference internal" href="using.html">Using EventMQ</a></li> 88<li class="toctree-l1"><a class="reference internal" href="using.html">Using EventMQ</a></li>
86<li class="toctree-l1 current"><a class="current reference internal" href="">API Documentation</a><ul> 89<li class="toctree-l1 current"><a class="current reference internal" href="#">API Documentation</a><ul>
87<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li> 90<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
88<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 91<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
89<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 92<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
@@ -117,7 +120,7 @@
117 <div class="rst-content"> 120 <div class="rst-content">
118 121
119 122
120 123
121 124
122 125
123 126
@@ -129,7 +132,7 @@
129 <li class="wy-breadcrumbs-aside"> 132 <li class="wy-breadcrumbs-aside">
130 133
131 134
132 <a href="_sources/api.txt" rel="nofollow"> View page source</a> 135 <a href="_sources/api.rst.txt" rel="nofollow"> View page source</a>
133 136
134 137
135 </li> 138 </li>
diff --git a/client.html b/client.html
index 0a1b7c2..377e004 100644..100755
--- a/client.html
+++ b/client.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="up" title="API Documentation" href="api.html"/> 37 <link rel="up" title="API Documentation" href="api.html"/>
35 <link rel="next" title="messages – Client Messaging" href="client/messages.html"/> 38 <link rel="next" title="messages – Client Messaging" href="client/messages.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -85,7 +88,7 @@
85 <ul class="current"> 88 <ul class="current">
86<li class="toctree-l1"><a class="reference internal" href="using.html">Using EventMQ</a></li> 89<li class="toctree-l1"><a class="reference internal" href="using.html">Using EventMQ</a></li>
87<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current"> 90<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current">
88<li class="toctree-l2 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a><ul> 91<li class="toctree-l2 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a><ul>
89<li class="toctree-l3"><a class="reference internal" href="client/messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Client Messaging</a></li> 92<li class="toctree-l3"><a class="reference internal" href="client/messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Client Messaging</a></li>
90<li class="toctree-l3"><a class="reference internal" href="client/jobs.html"><code class="docutils literal"><span class="pre">jobs</span></code> &#8211; Client Job Helpers</a></li> 93<li class="toctree-l3"><a class="reference internal" href="client/jobs.html"><code class="docutils literal"><span class="pre">jobs</span></code> &#8211; Client Job Helpers</a></li>
91</ul> 94</ul>
@@ -122,7 +125,7 @@
122 <div class="rst-content"> 125 <div class="rst-content">
123 126
124 127
125 128
126 129
127 130
128 131
@@ -136,7 +139,7 @@
136 <li class="wy-breadcrumbs-aside"> 139 <li class="wy-breadcrumbs-aside">
137 140
138 141
139 <a href="_sources/client.txt" rel="nofollow"> View page source</a> 142 <a href="_sources/client.rst.txt" rel="nofollow"> View page source</a>
140 143
141 144
142 </li> 145 </li>
diff --git a/client/jobs.html b/client/jobs.html
index 1cf76bf..c40d15b 100644..100755
--- a/client/jobs.html
+++ b/client/jobs.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="../genindex.html"/>
35 <link rel="search" title="Search" href="../search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/>
34 <link rel="up" title="client – Client Utilities" href="../client.html"/> 37 <link rel="up" title="client – Client Utilities" href="../client.html"/>
35 <link rel="next" title="exceptions – Exceptions" href="../exceptions.html"/> 38 <link rel="next" title="exceptions – Exceptions" href="../exceptions.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -87,7 +90,7 @@
87<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Documentation</a><ul class="current"> 90<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Documentation</a><ul class="current">
88<li class="toctree-l2 current"><a class="reference internal" href="../client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a><ul class="current"> 91<li class="toctree-l2 current"><a class="reference internal" href="../client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a><ul class="current">
89<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Client Messaging</a></li> 92<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Client Messaging</a></li>
90<li class="toctree-l3 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">jobs</span></code> &#8211; Client Job Helpers</a></li> 93<li class="toctree-l3 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">jobs</span></code> &#8211; Client Job Helpers</a></li>
91</ul> 94</ul>
92</li> 95</li>
93<li class="toctree-l2"><a class="reference internal" href="../exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 96<li class="toctree-l2"><a class="reference internal" href="../exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
@@ -122,7 +125,7 @@
122 <div class="rst-content"> 125 <div class="rst-content">
123 126
124 127
125 128
126 129
127 130
128 131
@@ -138,7 +141,7 @@
138 <li class="wy-breadcrumbs-aside"> 141 <li class="wy-breadcrumbs-aside">
139 142
140 143
141 <a href="../_sources/client/jobs.txt" rel="nofollow"> View page source</a> 144 <a href="../_sources/client/jobs.rst.txt" rel="nofollow"> View page source</a>
142 145
143 146
144 </li> 147 </li>
@@ -183,13 +186,13 @@
183<col class="field-body" /> 186<col class="field-body" />
184<tbody valign="top"> 187<tbody valign="top">
185<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 188<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
186<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the queue this function should be executed 189<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the queue this function should be executed
187in. If no queue provided <code class="docutils literal"><span class="pre">default</span></code> is used.</li> 190in. If no queue provided <code class="docutils literal"><span class="pre">default</span></code> is used.</li>
188<li><strong>broker_addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address of the broker to send the job to. If no 191<li><strong>broker_addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address of the broker to send the job to. If no
189address is given then the value of the environment variable 192address is given then the value of the environment variable
190<code class="docutils literal"><span class="pre">EMQ_BROKER_ADDR</span></code> will be used, If that is undefined a 193<code class="docutils literal"><span class="pre">EMQ_BROKER_ADDR</span></code> will be used, If that is undefined a
191warning will be emitted and the job will be run synchronously.</li> 194warning will be emitted and the job will be run synchronously.</li>
192<li><strong>async</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)"><em>bool</em></a>) &#8211; If you want to run all executions of a particular job 195<li><strong>async</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)"><em>bool</em></a>) &#8211; If you want to run all executions of a particular job
193synchronously but still decorate it with the job decorator you 196synchronously but still decorate it with the job decorator you
194can set this to False. This is useful for unit tests.</li> 197can set this to False. This is useful for unit tests.</li>
195</ul> 198</ul>
diff --git a/client/messages.html b/client/messages.html
index 78b4424..e5813f5 100644..100755
--- a/client/messages.html
+++ b/client/messages.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="../genindex.html"/>
35 <link rel="search" title="Search" href="../search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/>
34 <link rel="up" title="client – Client Utilities" href="../client.html"/> 37 <link rel="up" title="client – Client Utilities" href="../client.html"/>
35 <link rel="next" title="jobs – Client Job Helpers" href="jobs.html"/> 38 <link rel="next" title="jobs – Client Job Helpers" href="jobs.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -86,7 +89,7 @@
86<li class="toctree-l1"><a class="reference internal" href="../using.html">Using EventMQ</a></li> 89<li class="toctree-l1"><a class="reference internal" href="../using.html">Using EventMQ</a></li>
87<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Documentation</a><ul class="current"> 90<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Documentation</a><ul class="current">
88<li class="toctree-l2 current"><a class="reference internal" href="../client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a><ul class="current"> 91<li class="toctree-l2 current"><a class="reference internal" href="../client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a><ul class="current">
89<li class="toctree-l3 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Client Messaging</a></li> 92<li class="toctree-l3 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Client Messaging</a></li>
90<li class="toctree-l3"><a class="reference internal" href="jobs.html"><code class="docutils literal"><span class="pre">jobs</span></code> &#8211; Client Job Helpers</a></li> 93<li class="toctree-l3"><a class="reference internal" href="jobs.html"><code class="docutils literal"><span class="pre">jobs</span></code> &#8211; Client Job Helpers</a></li>
91</ul> 94</ul>
92</li> 95</li>
@@ -122,7 +125,7 @@
122 <div class="rst-content"> 125 <div class="rst-content">
123 126
124 127
125 128
126 129
127 130
128 131
@@ -138,7 +141,7 @@
138 <li class="wy-breadcrumbs-aside"> 141 <li class="wy-breadcrumbs-aside">
139 142
140 143
141 <a href="../_sources/client/messages.txt" rel="nofollow"> View page source</a> 144 <a href="../_sources/client/messages.rst.txt" rel="nofollow"> View page source</a>
142 145
143 146
144 </li> 147 </li>
@@ -165,40 +168,43 @@ guarentee things.</p>
165<col class="field-body" /> 168<col class="field-body" />
166<tbody valign="top"> 169<tbody valign="top">
167<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> 170<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
168<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; eventmq socket to use for sending the message</li> 171<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/2/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; eventmq socket to use for sending the message</li>
169<li><strong>func</strong> (<em>callable or str</em>) &#8211; the callable (or string path to callable) to be 172<li><strong>func</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#callable" title="(in Python v2.7)"><em>callable</em></a><em> or </em><a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; the callable (or string path to callable) to be
170deferred to a worker</li> 173deferred to a worker</li>
171<li><strong>wrapper</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#callable" title="(in Python v2.7)"><em>callable</em></a>) &#8211; optional wrapper for the call to func to be 174<li><strong>wrapper</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#callable" title="(in Python v2.7)"><em>callable</em></a>) &#8211; optional wrapper for the call to func to be
172wrapped with</li> 175wrapped with</li>
173<li><strong>args</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of <a href="#id1"><span class="problematic" id="id2">*</span></a>args for the callable</li> 176<li><strong>args</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of <a href="#id1"><span class="problematic" id="id2">*</span></a>args for the callable</li>
174<li><strong>kwargs</strong> (<a class="reference external" href="https://docs.python.org/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; dict of <a href="#id3"><span class="problematic" id="id4">**</span></a>kwargs for the callable</li> 177<li><strong>kwargs</strong> (<a class="reference external" href="https://docs.python.org/2/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; dict of <a href="#id3"><span class="problematic" id="id4">**</span></a>kwargs for the callable</li>
175<li><strong>class_args</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of <a href="#id5"><span class="problematic" id="id6">*</span></a>args to pass to the the class when 178<li><strong>class_args</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of <a href="#id5"><span class="problematic" id="id6">*</span></a>args to pass to the the class when
176initializing (if applicable).</li> 179initializing (if applicable).</li>
177<li><strong>class_kwargs</strong> (<a class="reference external" href="https://docs.python.org/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; dict of <a href="#id7"><span class="problematic" id="id8">**</span></a>kwargs to pass to the class when 180<li><strong>class_kwargs</strong> (<a class="reference external" href="https://docs.python.org/2/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; dict of <a href="#id7"><span class="problematic" id="id8">**</span></a>kwargs to pass to the class when
178initializing (if applicable).</li> 181initializing (if applicable).</li>
179<li><strong>reply_requested</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)"><em>bool</em></a>) &#8211; request the return value of func as a reply</li> 182<li><strong>reply_requested</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)"><em>bool</em></a>) &#8211; request the return value of func as a reply</li>
180<li><strong>retry_count</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; How many times should be retried when encountering 183<li><strong>retry_count</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; How many times should be retried when encountering
181an Exception or some other failure before giving up. (default: 0 184an Exception or some other failure before giving up. (default: 0
182or immediately fail)</li> 185or immediately fail)</li>
183<li><strong>timeout</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; How many seconds should we wait before killing the job 186<li><strong>timeout</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; How many seconds should we wait before killing the job
184default: 0 which means infinite timeout</li> 187default: 0 which means infinite timeout</li>
185<li><strong>debounce_secs</strong> (<em>secs</em>) &#8211; Number of seconds to debounce the job. See 188<li><strong>debounce_secs</strong> (<em>secs</em>) &#8211; Number of seconds to debounce the job. See
186<cite>debounce_deferred_job</cite> for more information.</li> 189<cite>debounce_deferred_job</cite> for more information.</li>
187<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of queue to use when executing the job. If this value 190<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of queue to use when executing the job. If this value
188evaluates to False, the default is used. Default: is configured 191evaluates to False, the default is used. Default: is configured
189default queue name</li> 192default queue name</li>
190</ul> 193</ul>
191</td> 194</td>
192</tr> 195</tr>
193<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><p class="first"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code> &#8211; 196<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><p class="first"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code> &#8211; When one or more parameters are not JSON serializable.</p>
194When one or more parameters are not JSON serializable.</p>
195</td> 197</td>
196</tr> 198</tr>
197<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">ID for the message/deferred job. This value will be None if there 199<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><dl class="docutils">
198was an error.</p> 200<dt>ID for the message/deferred job. This value will be None if there</dt>
201<dd><p class="first last">was an error.</p>
202</dd>
203</dl>
204</p>
199</td> 205</td>
200</tr> 206</tr>
201<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)">str</a></p> 207<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)">str</a></p>
202</td> 208</td>
203</tr> 209</tr>
204</tbody> 210</tbody>
@@ -218,34 +224,37 @@ was an error.</p>
218<col class="field-body" /> 224<col class="field-body" />
219<tbody valign="top"> 225<tbody valign="top">
220<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> 226<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
221<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; eventmq socket to use for sending the message</li> 227<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/2/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; eventmq socket to use for sending the message</li>
222<li><strong>func</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#callable" title="(in Python v2.7)"><em>callable</em></a>) &#8211; the callable (or string path to calable) to be 228<li><strong>func</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#callable" title="(in Python v2.7)"><em>callable</em></a>) &#8211; the callable (or string path to calable) to be
223scheduled on a worker</li> 229scheduled on a worker</li>
224<li><strong>minutes</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; minutes to wait in between executions</li> 230<li><strong>minutes</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; minutes to wait in between executions</li>
225<li><strong>args</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of <a href="#id9"><span class="problematic" id="id10">*</span></a>args to pass to the callable</li> 231<li><strong>args</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of <a href="#id9"><span class="problematic" id="id10">*</span></a>args to pass to the callable</li>
226<li><strong>interval_secs</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Run job every interval_secs or None if using cron</li> 232<li><strong>interval_secs</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Run job every interval_secs or None if using cron</li>
227<li><strong>cron</strong> (<a class="reference external" href="https://docs.python.org/library/string.html#module-string" title="(in Python v2.7)"><em>string</em></a>) &#8211; cron formatted string used for job schedule if 233<li><strong>cron</strong> (<a class="reference external" href="https://docs.python.org/2/library/string.html#module-string" title="(in Python v2.7)"><em>string</em></a>) &#8211; cron formatted string used for job schedule if
228interval_secs is None, i.e. &#8216;* * * * <a href="#id11"><span class="problematic" id="id12">*</span></a>&#8216; (every minute)</li> 234interval_secs is None, i.e. &#8216;* * * * <a href="#id11"><span class="problematic" id="id12">*</span></a>&#8216; (every minute)</li>
229<li><strong>kwargs</strong> (<a class="reference external" href="https://docs.python.org/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; dict of <a href="#id13"><span class="problematic" id="id14">**</span></a>kwargs to pass to the callable</li> 235<li><strong>kwargs</strong> (<a class="reference external" href="https://docs.python.org/2/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; dict of <a href="#id13"><span class="problematic" id="id14">**</span></a>kwargs to pass to the callable</li>
230<li><strong>class_args</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of <a href="#id15"><span class="problematic" id="id16">*</span></a>args to pass to the class (if applicable)</li> 236<li><strong>class_args</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of <a href="#id15"><span class="problematic" id="id16">*</span></a>args to pass to the class (if applicable)</li>
231<li><strong>class_kwargs</strong> (<a class="reference external" href="https://docs.python.org/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; dict of <a href="#id17"><span class="problematic" id="id18">**</span></a>kwargs to pass to the class (if 237<li><strong>class_kwargs</strong> (<a class="reference external" href="https://docs.python.org/2/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; dict of <a href="#id17"><span class="problematic" id="id18">**</span></a>kwargs to pass to the class (if
232applicable)</li> 238applicable)</li>
233<li><strong>headers</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of strings denoting enabled headers. Default: 239<li><strong>headers</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of strings denoting enabled headers. Default:
234guarantee is enabled to ensure the scheduler schedules the job.</li> 240guarantee is enabled to ensure the scheduler schedules the job.</li>
235<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; name of the queue to use when executing the job. The 241<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; name of the queue to use when executing the job. The
236default value is the default queue.</li> 242default value is the default queue.</li>
237</ul> 243</ul>
238</td> 244</td>
239</tr> 245</tr>
240<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><p class="first"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code> &#8211; 246<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><p class="first"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code> &#8211; When one or more parameters are not JSON serializable.</p>
241When one or more parameters are not JSON serializable.</p>
242</td> 247</td>
243</tr> 248</tr>
244<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">ID of the schedule message that was sent. None if there was an 249<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><dl class="docutils">
245error</p> 250<dt>ID of the schedule message that was sent. None if there was an</dt>
251<dd><p class="first last">error</p>
252</dd>
253</dl>
254</p>
246</td> 255</td>
247</tr> 256</tr>
248<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)">str</a></p> 257<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)">str</a></p>
249</td> 258</td>
250</tr> 259</tr>
251</tbody> 260</tbody>
@@ -291,12 +300,12 @@ the headers then they have been enabled.</p>
291<col class="field-body" /> 300<col class="field-body" />
292<tbody valign="top"> 301<tbody valign="top">
293<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> 302<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
294<li><strong>retry_count</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; How many times should be retried when encountering 303<li><strong>retry_count</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; How many times should be retried when encountering
295an Exception or some other failure before giving up. (default: 0 304an Exception or some other failure before giving up. (default: 0
296or immediatly fail)</li> 305or immediatly fail)</li>
297<li><strong>timeout</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; How many seconds should we wait before killing the job 306<li><strong>timeout</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; How many seconds should we wait before killing the job
298default: 0 which means infinite timeout</li> 307default: 0 which means infinite timeout</li>
299<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of queue to use when executing the job. Default: is 308<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of queue to use when executing the job. Default: is
300configured default queue name</li> 309configured default queue name</li>
301</ul> 310</ul>
302</td> 311</td>
@@ -304,7 +313,7 @@ configured default queue name</li>
304<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">ID of the message</p> 313<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">ID of the message</p>
305</td> 314</td>
306</tr> 315</tr>
307<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)">str</a></p> 316<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)">str</a></p>
308</td> 317</td>
309</tr> 318</tr>
310</tbody> 319</tbody>
@@ -322,18 +331,18 @@ interval for the scheduler.</p>
322<col class="field-body" /> 331<col class="field-body" />
323<tbody valign="top"> 332<tbody valign="top">
324<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> 333<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
325<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; </li> 334<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/2/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; </li>
326<li><strong>(str)</strong> (<em>job_schedule</em>) &#8211; </li> 335<li><strong>job_schedule</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; </li>
327<li><strong>message</strong> &#8211; Message to send socket.</li> 336<li><strong>message</strong> &#8211; Message to send socket.</li>
328<li><strong>headers</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; List of headers for the message</li> 337<li><strong>headers</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; List of headers for the message</li>
329<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; name of queue the job should be executed in</li> 338<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; name of queue the job should be executed in</li>
330</ul> 339</ul>
331</td> 340</td>
332</tr> 341</tr>
333<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">ID of the message</p> 342<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">ID of the message</p>
334</td> 343</td>
335</tr> 344</tr>
336<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)">str</a></p> 345<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)">str</a></p>
337</td> 346</td>
338</tr> 347</tr>
339</tbody> 348</tbody>
diff --git a/contributing.html b/contributing.html
index cda4d9f..1441ea4 100644..100755
--- a/contributing.html
+++ b/contributing.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="next" title="EventMQ Protocol Specification" href="protocol.html"/> 37 <link rel="next" title="EventMQ Protocol Specification" href="protocol.html"/>
35 <link rel="prev" title="timeutils – Time Utilites" href="utils/timeutils.html"/> 38 <link rel="prev" title="timeutils – Time Utilites" href="utils/timeutils.html"/>
@@ -60,7 +63,7 @@
60 63
61 64
62 <div class="version"> 65 <div class="version">
63 0.2.7.1 66 0.3-rc8
64 </div> 67 </div>
65 68
66 69
@@ -84,7 +87,7 @@
84 <ul class="current"> 87 <ul class="current">
85<li class="toctree-l1"><a class="reference internal" href="using.html">Using EventMQ</a></li> 88<li class="toctree-l1"><a class="reference internal" href="using.html">Using EventMQ</a></li>
86<li class="toctree-l1"><a class="reference internal" href="api.html">API Documentation</a></li> 89<li class="toctree-l1"><a class="reference internal" href="api.html">API Documentation</a></li>
87<li class="toctree-l1 current"><a class="current reference internal" href="">Contributing to EventMQ</a><ul> 90<li class="toctree-l1 current"><a class="current reference internal" href="#">Contributing to EventMQ</a><ul>
88<li class="toctree-l2"><a class="reference internal" href="protocol.html">EventMQ Protocol Specification</a></li> 91<li class="toctree-l2"><a class="reference internal" href="protocol.html">EventMQ Protocol Specification</a></li>
89<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq">Source Code</a></li> 92<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq">Source Code</a></li>
90<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq/issues">Issues</a></li> 93<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq/issues">Issues</a></li>
@@ -112,7 +115,7 @@
112 <div class="rst-content"> 115 <div class="rst-content">
113 116
114 117
115 118
116 119
117 120
118 121
@@ -124,7 +127,7 @@
124 <li class="wy-breadcrumbs-aside"> 127 <li class="wy-breadcrumbs-aside">
125 128
126 129
127 <a href="_sources/contributing.txt" rel="nofollow"> View page source</a> 130 <a href="_sources/contributing.rst.txt" rel="nofollow"> View page source</a>
128 131
129 132
130 </li> 133 </li>
diff --git a/exceptions.html b/exceptions.html
index 9ced5ed..bf2eb34 100644..100755
--- a/exceptions.html
+++ b/exceptions.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="up" title="API Documentation" href="api.html"/> 37 <link rel="up" title="API Documentation" href="api.html"/>
35 <link rel="next" title="jobmanager – Job Manager" href="jobmanager.html"/> 38 <link rel="next" title="jobmanager – Job Manager" href="jobmanager.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -86,7 +89,7 @@
86<li class="toctree-l1"><a class="reference internal" href="using.html">Using EventMQ</a></li> 89<li class="toctree-l1"><a class="reference internal" href="using.html">Using EventMQ</a></li>
87<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current"> 90<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current">
88<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li> 91<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
89<li class="toctree-l2 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 92<li class="toctree-l2 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
90<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 93<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
91<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 94<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
92<li class="toctree-l2"><a class="reference internal" href="receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li> 95<li class="toctree-l2"><a class="reference internal" href="receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li>
@@ -118,7 +121,7 @@
118 <div class="rst-content"> 121 <div class="rst-content">
119 122
120 123
121 124
122 125
123 126
124 127
@@ -132,7 +135,7 @@
132 <li class="wy-breadcrumbs-aside"> 135 <li class="wy-breadcrumbs-aside">
133 136
134 137
135 <a href="_sources/exceptions.txt" rel="nofollow"> View page source</a> 138 <a href="_sources/exceptions.rst.txt" rel="nofollow"> View page source</a>
136 139
137 140
138 </li> 141 </li>
@@ -143,7 +146,7 @@
143 <div itemprop="articleBody"> 146 <div itemprop="articleBody">
144 147
145 <span class="target" id="module-eventmq.exceptions"></span><div class="section" id="exceptions-exceptions"> 148 <span class="target" id="module-eventmq.exceptions"></span><div class="section" id="exceptions-exceptions">
146<h1><a class="reference external" href="https://docs.python.org/library/exceptions.html#module-exceptions" title="(in Python v2.7)"><code class="xref py py-mod docutils literal"><span class="pre">exceptions</span></code></a> &#8211; Exceptions<a class="headerlink" href="#exceptions-exceptions" title="Permalink to this headline">¶</a></h1> 149<h1><a class="reference external" href="https://docs.python.org/2/library/exceptions.html#module-exceptions" title="(in Python v2.7)"><code class="xref py py-mod docutils literal"><span class="pre">exceptions</span></code></a> &#8211; Exceptions<a class="headerlink" href="#exceptions-exceptions" title="Permalink to this headline">¶</a></h1>
147<p>These are the exceptions that are raised by EventMQ. All exceptions should 150<p>These are the exceptions that are raised by EventMQ. All exceptions should
148be subclasses of <a class="reference internal" href="#eventmq.exceptions.EventMQError" title="eventmq.exceptions.EventMQError"><code class="xref py py-class docutils literal"><span class="pre">EventMQError</span></code></a></p> 151be subclasses of <a class="reference internal" href="#eventmq.exceptions.EventMQError" title="eventmq.exceptions.EventMQError"><code class="xref py py-class docutils literal"><span class="pre">EventMQError</span></code></a></p>
149<dl class="exception"> 152<dl class="exception">
diff --git a/genindex.html b/genindex.html
index 5576f73..5227f42 100644..100755
--- a/genindex.html
+++ b/genindex.html
@@ -31,6 +31,9 @@
31 31
32 32
33 33
34 <link rel="index" title="Index"
35 href="#"/>
36 <link rel="search" title="Search" href="search.html"/>
34 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 37 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
35 38
36 39
@@ -59,7 +62,7 @@
59 62
60 63
61 <div class="version"> 64 <div class="version">
62 0.2.7.1 65 0.3-rc8
63 </div> 66 </div>
64 67
65 68
@@ -114,7 +117,7 @@
114 <ul class="wy-breadcrumbs"> 117 <ul class="wy-breadcrumbs">
115 <li><a href="index.html">Docs</a> &raquo;</li> 118 <li><a href="index.html">Docs</a> &raquo;</li>
116 119
117 <li></li> 120 <li>Index</li>
118 <li class="wy-breadcrumbs-aside"> 121 <li class="wy-breadcrumbs-aside">
119 122
120 123
@@ -156,806 +159,502 @@
156</div> 159</div>
157<h2 id="_">_</h2> 160<h2 id="_">_</h2>
158<table style="width: 100%" class="indextable genindextable"><tr> 161<table style="width: 100%" class="indextable genindextable"><tr>
159 <td style="width: 33%" valign="top"><dl> 162 <td style="width: 33%; vertical-align: top;"><ul>
160 163 <li><a href="client/jobs.html#eventmq.client.jobs.Job.__init__">__init__() (eventmq.client.jobs.Job method)</a>
161 <dt><a href="client/jobs.html#eventmq.client.jobs.Job.__init__">__init__() (eventmq.client.jobs.Job method)</a> 164
162 </dt> 165 <ul>
163 166 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.__init__">(eventmq.jobmanager.JobManager method)</a>
164 <dd><dl> 167</li>
165 168 <li><a href="poller.html#eventmq.poller.Poller.__init__">(eventmq.poller.Poller method)</a>
166 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.__init__">(eventmq.jobmanager.JobManager method)</a> 169</li>
167 </dt> 170 <li><a href="receiver.html#eventmq.receiver.Receiver.__init__">(eventmq.receiver.Receiver method)</a>
168 171</li>
169 172 <li><a href="sender.html#eventmq.sender.Sender.__init__">(eventmq.sender.Sender method)</a>
170 <dt><a href="poller.html#eventmq.poller.Poller.__init__">(eventmq.poller.Poller method)</a> 173</li>
171 </dt> 174 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.__init__">(eventmq.utils.classes.EMQdeque method)</a>
172 175</li>
173 176 <li><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.__init__">(eventmq.utils.classes.HeartbeatMixin method)</a>
174 <dt><a href="receiver.html#eventmq.receiver.Receiver.__init__">(eventmq.receiver.Receiver method)</a> 177</li>
175 </dt> 178 <li><a href="utils/timeutils.html#eventmq.utils.timeutils.IntervalIter.__init__">(eventmq.utils.timeutils.IntervalIter method)</a>
176 179</li>
177 180 </ul></li>
178 <dt><a href="sender.html#eventmq.sender.Sender.__init__">(eventmq.sender.Sender method)</a> 181 </ul></td>
179 </dt> 182 <td style="width: 33%; vertical-align: top;"><ul>
180 183 <li><a href="client/jobs.html#eventmq.client.jobs.Job.__weakref__">__weakref__ (eventmq.client.jobs.Job attribute)</a>
181 184
182 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.__init__">(eventmq.utils.classes.EMQdeque method)</a> 185 <ul>
183 </dt> 186 <li><a href="utils/classes.html#eventmq.utils.classes.EMQPService.__weakref__">(eventmq.utils.classes.EMQPService attribute)</a>
184 187</li>
185 188 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.__weakref__">(eventmq.utils.classes.EMQdeque attribute)</a>
186 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.__init__">(eventmq.utils.classes.HeartbeatMixin method)</a> 189</li>
187 </dt> 190 <li><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.__weakref__">(eventmq.utils.classes.HeartbeatMixin attribute)</a>
188 191</li>
189 192 <li><a href="utils/classes.html#eventmq.utils.classes.ZMQReceiveMixin.__weakref__">(eventmq.utils.classes.ZMQReceiveMixin attribute)</a>
190 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.IntervalIter.__init__">(eventmq.utils.timeutils.IntervalIter method)</a> 193</li>
191 </dt> 194 <li><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.__weakref__">(eventmq.utils.classes.ZMQSendMixin attribute)</a>
192 195</li>
193 </dl></dd> 196 <li><a href="utils/timeutils.html#eventmq.utils.timeutils.IntervalIter.__weakref__">(eventmq.utils.timeutils.IntervalIter attribute)</a>
194 </dl></td> 197</li>
195 <td style="width: 33%" valign="top"><dl> 198 </ul></li>
196 199 </ul></td>
197 <dt><a href="client/jobs.html#eventmq.client.jobs.Job.__weakref__">__weakref__ (eventmq.client.jobs.Job attribute)</a>
198 </dt>
199
200 <dd><dl>
201
202 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.__weakref__">(eventmq.utils.classes.EMQPService attribute)</a>
203 </dt>
204
205
206 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.__weakref__">(eventmq.utils.classes.EMQdeque attribute)</a>
207 </dt>
208
209
210 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.__weakref__">(eventmq.utils.classes.HeartbeatMixin attribute)</a>
211 </dt>
212
213
214 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQReceiveMixin.__weakref__">(eventmq.utils.classes.ZMQReceiveMixin attribute)</a>
215 </dt>
216
217
218 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.__weakref__">(eventmq.utils.classes.ZMQSendMixin attribute)</a>
219 </dt>
220
221
222 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.IntervalIter.__weakref__">(eventmq.utils.timeutils.IntervalIter attribute)</a>
223 </dt>
224
225 </dl></dd>
226 </dl></td>
227</tr></table> 200</tr></table>
228 201
229<h2 id="A">A</h2> 202<h2 id="A">A</h2>
230<table style="width: 100%" class="indextable genindextable"><tr> 203<table style="width: 100%" class="indextable genindextable"><tr>
231 <td style="width: 33%" valign="top"><dl> 204 <td style="width: 33%; vertical-align: top;"><ul>
232 205 <li><a href="router.html#eventmq.router.Router.add_scheduler">add_scheduler() (eventmq.router.Router method)</a>
233 <dt><a href="router.html#eventmq.router.Router.add_scheduler">add_scheduler() (eventmq.router.Router method)</a> 206</li>
234 </dt> 207 <li><a href="router.html#eventmq.router.Router.add_worker">add_worker() (eventmq.router.Router method)</a>
235 208</li>
236 209 </ul></td>
237 <dt><a href="router.html#eventmq.router.Router.add_worker">add_worker() (eventmq.router.Router method)</a> 210 <td style="width: 33%; vertical-align: top;"><ul>
238 </dt> 211 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.append">append() (eventmq.utils.classes.EMQdeque method)</a>
239 212</li>
240 </dl></td> 213 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.appendleft">appendleft() (eventmq.utils.classes.EMQdeque method)</a>
241 <td style="width: 33%" valign="top"><dl> 214</li>
242 215 </ul></td>
243 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.append">append() (eventmq.utils.classes.EMQdeque method)</a>
244 </dt>
245
246
247 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.appendleft">appendleft() (eventmq.utils.classes.EMQdeque method)</a>
248 </dt>
249
250 </dl></td>
251</tr></table> 216</tr></table>
252 217
253<h2 id="C">C</h2> 218<h2 id="C">C</h2>
254<table style="width: 100%" class="indextable genindextable"><tr> 219<table style="width: 100%" class="indextable genindextable"><tr>
255 <td style="width: 33%" valign="top"><dl> 220 <td style="width: 33%; vertical-align: top;"><ul>
256 221 <li><a href="exceptions.html#eventmq.exceptions.CallableFromPathError">CallableFromPathError</a>
257 <dt><a href="exceptions.html#eventmq.exceptions.CallableFromPathError">CallableFromPathError</a> 222</li>
258 </dt> 223 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.check_worker_health">check_worker_health() (eventmq.jobmanager.JobManager method)</a>
259 224</li>
260 225 <li><a href="router.html#eventmq.router.Router.clean_up_dead_schedulers">clean_up_dead_schedulers() (eventmq.router.Router method)</a>
261 <dt><a href="router.html#eventmq.router.Router.clean_up_dead_schedulers">clean_up_dead_schedulers() (eventmq.router.Router method)</a> 226</li>
262 </dt> 227 </ul></td>
263 228 <td style="width: 33%; vertical-align: top;"><ul>
264 229 <li><a href="router.html#eventmq.router.Router.clean_up_dead_workers">clean_up_dead_workers() (eventmq.router.Router method)</a>
265 <dt><a href="router.html#eventmq.router.Router.clean_up_dead_workers">clean_up_dead_workers() (eventmq.router.Router method)</a> 230</li>
266 </dt> 231 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.concurrent_jobs">concurrent_jobs (eventmq.jobmanager.JobManager attribute)</a>
267 232</li>
268 </dl></td> 233 <li><a href="receiver.html#eventmq.receiver.Receiver.connect">connect() (eventmq.receiver.Receiver method)</a>
269 <td style="width: 33%" valign="top"><dl> 234
270 235 <ul>
271 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.concurrent_jobs">concurrent_jobs (eventmq.jobmanager.JobManager attribute)</a> 236 <li><a href="sender.html#eventmq.sender.Sender.connect">(eventmq.sender.Sender method)</a>
272 </dt> 237</li>
273 238 </ul></li>
274 239 </ul></td>
275 <dt><a href="receiver.html#eventmq.receiver.Receiver.connect">connect() (eventmq.receiver.Receiver method)</a>
276 </dt>
277
278 <dd><dl>
279
280 <dt><a href="sender.html#eventmq.sender.Sender.connect">(eventmq.sender.Sender method)</a>
281 </dt>
282
283 </dl></dd>
284 </dl></td>
285</tr></table> 240</tr></table>
286 241
287<h2 id="D">D</h2> 242<h2 id="D">D</h2>
288<table style="width: 100%" class="indextable genindextable"><tr> 243<table style="width: 100%" class="indextable genindextable"><tr>
289 <td style="width: 33%" valign="top"><dl> 244 <td style="width: 33%; vertical-align: top;"><ul>
290 245 <li><a href="client/messages.html#eventmq.client.messages.defer_job">defer_job() (in module eventmq.client.messages)</a>
291 <dt><a href="client/messages.html#eventmq.client.messages.defer_job">defer_job() (in module eventmq.client.messages)</a> 246</li>
292 </dt> 247 </ul></td>
293
294 </dl></td>
295</tr></table> 248</tr></table>
296 249
297<h2 id="E">E</h2> 250<h2 id="E">E</h2>
298<table style="width: 100%" class="indextable genindextable"><tr> 251<table style="width: 100%" class="indextable genindextable"><tr>
299 <td style="width: 33%" valign="top"><dl> 252 <td style="width: 33%; vertical-align: top;"><ul>
300 253 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque">EMQdeque (class in eventmq.utils.classes)</a>
301 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque">EMQdeque (class in eventmq.utils.classes)</a> 254</li>
302 </dt> 255 <li><a href="utils/classes.html#eventmq.utils.classes.EMQPService">EMQPService (class in eventmq.utils.classes)</a>
303 256</li>
304 257 <li><a href="client.html#module-eventmq.client">eventmq.client (module)</a>
305 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService">EMQPService (class in eventmq.utils.classes)</a> 258</li>
306 </dt> 259 <li><a href="client/jobs.html#module-eventmq.client.jobs">eventmq.client.jobs (module)</a>
307 260</li>
308 261 <li><a href="client/messages.html#module-eventmq.client.messages">eventmq.client.messages (module)</a>
309 <dt><a href="client.html#module-eventmq.client">eventmq.client (module)</a> 262</li>
310 </dt> 263 <li><a href="exceptions.html#module-eventmq.exceptions">eventmq.exceptions (module)</a>
311 264</li>
312 265 <li><a href="jobmanager.html#module-eventmq.jobmanager">eventmq.jobmanager (module)</a>
313 <dt><a href="client/jobs.html#module-eventmq.client.jobs">eventmq.client.jobs (module)</a> 266</li>
314 </dt> 267 <li><a href="poller.html#module-eventmq.poller">eventmq.poller (module)</a>
315 268</li>
316 269 <li><a href="receiver.html#module-eventmq.receiver">eventmq.receiver (module)</a>
317 <dt><a href="client/messages.html#module-eventmq.client.messages">eventmq.client.messages (module)</a> 270</li>
318 </dt> 271 <li><a href="router.html#module-eventmq.router">eventmq.router (module)</a>
319 272</li>
320 273 </ul></td>
321 <dt><a href="exceptions.html#module-eventmq.exceptions">eventmq.exceptions (module)</a> 274 <td style="width: 33%; vertical-align: top;"><ul>
322 </dt> 275 <li><a href="sender.html#module-eventmq.sender">eventmq.sender (module)</a>
323 276</li>
324 277 <li><a href="utils/index.html#module-eventmq.utils">eventmq.utils (module)</a>
325 <dt><a href="jobmanager.html#module-eventmq.jobmanager">eventmq.jobmanager (module)</a> 278</li>
326 </dt> 279 <li><a href="utils/classes.html#module-eventmq.utils.classes">eventmq.utils.classes (module)</a>
327 280</li>
328 281 <li><a href="utils/devices.html#module-eventmq.utils.devices">eventmq.utils.devices (module)</a>
329 <dt><a href="poller.html#module-eventmq.poller">eventmq.poller (module)</a> 282</li>
330 </dt> 283 <li><a href="utils/messages.html#module-eventmq.utils.messages">eventmq.utils.messages (module)</a>
331 284</li>
332 285 <li><a href="utils/settings.html#module-eventmq.utils.settings">eventmq.utils.settings (module)</a>
333 <dt><a href="receiver.html#module-eventmq.receiver">eventmq.receiver (module)</a> 286</li>
334 </dt> 287 <li><a href="utils/timeutils.html#module-eventmq.utils.timeutils">eventmq.utils.timeutils (module)</a>
335 288</li>
336 289 <li><a href="exceptions.html#eventmq.exceptions.EventMQError">EventMQError</a>
337 <dt><a href="router.html#module-eventmq.router">eventmq.router (module)</a> 290</li>
338 </dt> 291 <li><a href="router.html#eventmq.router.Router.executed_functions">executed_functions (eventmq.router.Router attribute)</a>
339 292</li>
340 </dl></td> 293 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.extend">extend() (eventmq.utils.classes.EMQdeque method)</a>
341 <td style="width: 33%" valign="top"><dl> 294</li>
342 295 </ul></td>
343 <dt><a href="sender.html#module-eventmq.sender">eventmq.sender (module)</a>
344 </dt>
345
346
347 <dt><a href="utils/index.html#module-eventmq.utils">eventmq.utils (module)</a>
348 </dt>
349
350
351 <dt><a href="utils/classes.html#module-eventmq.utils.classes">eventmq.utils.classes (module)</a>
352 </dt>
353
354
355 <dt><a href="utils/devices.html#module-eventmq.utils.devices">eventmq.utils.devices (module)</a>
356 </dt>
357
358
359 <dt><a href="utils/messages.html#module-eventmq.utils.messages">eventmq.utils.messages (module)</a>
360 </dt>
361
362
363 <dt><a href="utils/settings.html#module-eventmq.utils.settings">eventmq.utils.settings (module)</a>
364 </dt>
365
366
367 <dt><a href="utils/timeutils.html#module-eventmq.utils.timeutils">eventmq.utils.timeutils (module)</a>
368 </dt>
369
370
371 <dt><a href="exceptions.html#eventmq.exceptions.EventMQError">EventMQError</a>
372 </dt>
373
374
375 <dt><a href="router.html#eventmq.router.Router.executed_functions">executed_functions (eventmq.router.Router attribute)</a>
376 </dt>
377
378
379 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.extend">extend() (eventmq.utils.classes.EMQdeque method)</a>
380 </dt>
381
382 </dl></td>
383</tr></table> 296</tr></table>
384 297
385<h2 id="F">F</h2> 298<h2 id="F">F</h2>
386<table style="width: 100%" class="indextable genindextable"><tr> 299<table style="width: 100%" class="indextable genindextable"><tr>
387 <td style="width: 33%" valign="top"><dl> 300 <td style="width: 33%; vertical-align: top;"><ul>
388 301 <li><a href="utils/messages.html#eventmq.utils.messages.fwd_emqp_router_message">fwd_emqp_router_message() (in module eventmq.utils.messages)</a>
389 <dt><a href="utils/messages.html#eventmq.utils.messages.fwd_emqp_router_message">fwd_emqp_router_message() (in module eventmq.utils.messages)</a> 302</li>
390 </dt> 303 </ul></td>
391
392 </dl></td>
393</tr></table> 304</tr></table>
394 305
395<h2 id="G">G</h2> 306<h2 id="G">G</h2>
396<table style="width: 100%" class="indextable genindextable"><tr> 307<table style="width: 100%" class="indextable genindextable"><tr>
397 <td style="width: 33%" valign="top"><dl> 308 <td style="width: 33%; vertical-align: top;"><ul>
398 309 <li><a href="utils/devices.html#eventmq.utils.devices.generate_device_name">generate_device_name() (in module eventmq.utils.devices)</a>
399 <dt><a href="utils/devices.html#eventmq.utils.devices.generate_device_name">generate_device_name() (in module eventmq.utils.devices)</a> 310</li>
400 </dt> 311 <li><a href="utils/messages.html#eventmq.utils.messages.generate_msgid">generate_msgid() (in module eventmq.utils.messages)</a>
401 312</li>
402 313 </ul></td>
403 <dt><a href="utils/messages.html#eventmq.utils.messages.generate_msgid">generate_msgid() (in module eventmq.utils.messages)</a> 314 <td style="width: 33%; vertical-align: top;"><ul>
404 </dt> 315 <li><a href="router.html#eventmq.router.Router.get_available_worker">get_available_worker() (eventmq.router.Router method)</a>
405 316</li>
406 </dl></td> 317 <li><a href="router.html#eventmq.router.Router.get_status">get_status() (eventmq.router.Router method)</a>
407 <td style="width: 33%" valign="top"><dl> 318</li>
408 319 </ul></td>
409 <dt><a href="router.html#eventmq.router.Router.get_available_worker">get_available_worker() (eventmq.router.Router method)</a>
410 </dt>
411
412
413 <dt><a href="router.html#eventmq.router.Router.get_status">get_status() (eventmq.router.Router method)</a>
414 </dt>
415
416 </dl></td>
417</tr></table> 320</tr></table>
418 321
419<h2 id="H">H</h2> 322<h2 id="H">H</h2>
420<table style="width: 100%" class="indextable genindextable"><tr> 323<table style="width: 100%" class="indextable genindextable"><tr>
421 <td style="width: 33%" valign="top"><dl> 324 <td style="width: 33%; vertical-align: top;"><ul>
422 325 <li><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin">HeartbeatMixin (class in eventmq.utils.classes)</a>
423 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin">HeartbeatMixin (class in eventmq.utils.classes)</a> 326</li>
424 </dt> 327 </ul></td>
425
426 </dl></td>
427</tr></table> 328</tr></table>
428 329
429<h2 id="I">I</h2> 330<h2 id="I">I</h2>
430<table style="width: 100%" class="indextable genindextable"><tr> 331<table style="width: 100%" class="indextable genindextable"><tr>
431 <td style="width: 33%" valign="top"><dl> 332 <td style="width: 33%; vertical-align: top;"><ul>
432 333 <li><a href="utils/settings.html#eventmq.utils.settings.import_settings">import_settings() (in module eventmq.utils.settings)</a>
433 <dt><a href="utils/settings.html#eventmq.utils.settings.import_settings">import_settings() (in module eventmq.utils.settings)</a> 334</li>
434 </dt> 335 <li><a href="utils/timeutils.html#eventmq.utils.timeutils.IntervalIter">IntervalIter (class in eventmq.utils.timeutils)</a>
435 336</li>
436 337 <li><a href="exceptions.html#eventmq.exceptions.InvalidMessageError">InvalidMessageError</a>
437 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.IntervalIter">IntervalIter (class in eventmq.utils.timeutils)</a> 338</li>
438 </dt> 339 <li><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.is_dead">is_dead() (eventmq.utils.classes.HeartbeatMixin method)</a>
439 340</li>
440 341 </ul></td>
441 <dt><a href="exceptions.html#eventmq.exceptions.InvalidMessageError">InvalidMessageError</a> 342 <td style="width: 33%; vertical-align: top;"><ul>
442 </dt> 343 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.is_empty">is_empty() (eventmq.utils.classes.EMQdeque method)</a>
443 344</li>
444 345 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.is_full">is_full() (eventmq.utils.classes.EMQdeque method)</a>
445 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.is_dead">is_dead() (eventmq.utils.classes.HeartbeatMixin method)</a> 346</li>
446 </dt> 347 <li><a href="utils/classes.html#eventmq.utils.classes.EMQPService.is_heartbeat_enabled">is_heartbeat_enabled (eventmq.utils.classes.EMQPService attribute)</a>
447 348</li>
448 </dl></td> 349 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.is_pfull">is_pfull() (eventmq.utils.classes.EMQdeque method)</a>
449 <td style="width: 33%" valign="top"><dl> 350</li>
450 351 </ul></td>
451 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.is_empty">is_empty() (eventmq.utils.classes.EMQdeque method)</a>
452 </dt>
453
454
455 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.is_full">is_full() (eventmq.utils.classes.EMQdeque method)</a>
456 </dt>
457
458
459 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.is_heartbeat_enabled">is_heartbeat_enabled (eventmq.utils.classes.EMQPService attribute)</a>
460 </dt>
461
462
463 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.is_pfull">is_pfull() (eventmq.utils.classes.EMQdeque method)</a>
464 </dt>
465
466 </dl></td>
467</tr></table> 352</tr></table>
468 353
469<h2 id="J">J</h2> 354<h2 id="J">J</h2>
470<table style="width: 100%" class="indextable genindextable"><tr> 355<table style="width: 100%" class="indextable genindextable"><tr>
471 <td style="width: 33%" valign="top"><dl> 356 <td style="width: 33%; vertical-align: top;"><ul>
472 357 <li><a href="client/jobs.html#eventmq.client.jobs.Job">Job (class in eventmq.client.jobs)</a>
473 <dt><a href="client/jobs.html#eventmq.client.jobs.Job">Job (class in eventmq.client.jobs)</a> 358</li>
474 </dt> 359 <li><a href="client/jobs.html#eventmq.client.jobs.job">job() (in module eventmq.client.jobs)</a>
475 360</li>
476 361 </ul></td>
477 <dt><a href="client/jobs.html#eventmq.client.jobs.job">job() (in module eventmq.client.jobs)</a> 362 <td style="width: 33%; vertical-align: top;"><ul>
478 </dt> 363 <li><a href="router.html#eventmq.router.Router.job_latencies">job_latencies (eventmq.router.Router attribute)</a>
479 364</li>
480 365 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager">JobManager (class in eventmq.jobmanager)</a>
481 <dt><a href="router.html#eventmq.router.Router.job_latencies">job_latencies (eventmq.router.Router attribute)</a> 366</li>
482 </dt> 367 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.jobmanager_main">jobmanager_main() (eventmq.jobmanager.JobManager method)</a>
483 368</li>
484 </dl></td> 369 </ul></td>
485 <td style="width: 33%" valign="top"><dl>
486
487 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager">JobManager (class in eventmq.jobmanager)</a>
488 </dt>
489
490
491 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.jobmanager_main">jobmanager_main() (eventmq.jobmanager.JobManager method)</a>
492 </dt>
493
494 </dl></td>
495</tr></table> 370</tr></table>
496 371
497<h2 id="L">L</h2> 372<h2 id="L">L</h2>
498<table style="width: 100%" class="indextable genindextable"><tr> 373<table style="width: 100%" class="indextable genindextable"><tr>
499 <td style="width: 33%" valign="top"><dl> 374 <td style="width: 33%; vertical-align: top;"><ul>
500 375 <li><a href="receiver.html#eventmq.receiver.Receiver.listen">listen() (eventmq.receiver.Receiver method)</a>
501 <dt><a href="receiver.html#eventmq.receiver.Receiver.listen">listen() (eventmq.receiver.Receiver method)</a> 376
502 </dt> 377 <ul>
503 378 <li><a href="sender.html#eventmq.sender.Sender.listen">(eventmq.sender.Sender method)</a>
504 <dd><dl> 379</li>
505 380 </ul></li>
506 <dt><a href="sender.html#eventmq.sender.Sender.listen">(eventmq.sender.Sender method)</a> 381 </ul></td>
507 </dt>
508
509 </dl></dd>
510 </dl></td>
511</tr></table> 382</tr></table>
512 383
513<h2 id="M">M</h2> 384<h2 id="M">M</h2>
514<table style="width: 100%" class="indextable genindextable"><tr> 385<table style="width: 100%" class="indextable genindextable"><tr>
515 <td style="width: 33%" valign="top"><dl> 386 <td style="width: 33%; vertical-align: top;"><ul>
516 387 <li><a href="exceptions.html#eventmq.exceptions.MessageError">MessageError</a>
517 <dt><a href="exceptions.html#eventmq.exceptions.MessageError">MessageError</a> 388</li>
518 </dt> 389 </ul></td>
519 390 <td style="width: 33%; vertical-align: top;"><ul>
520 391 <li><a href="utils/timeutils.html#eventmq.utils.timeutils.monotonic">monotonic() (in module eventmq.utils.timeutils)</a>
521 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.monotonic">monotonic() (in module eventmq.utils.timeutils)</a> 392</li>
522 </dt> 393 </ul></td>
523
524 </dl></td>
525 <td style="width: 33%" valign="top"><dl>
526
527 <dt><a href="jobmanager.html#eventmq.jobmanager.mp_init">mp_init() (in module eventmq.jobmanager)</a>
528 </dt>
529
530 </dl></td>
531</tr></table> 394</tr></table>
532 395
533<h2 id="N">N</h2> 396<h2 id="N">N</h2>
534<table style="width: 100%" class="indextable genindextable"><tr> 397<table style="width: 100%" class="indextable genindextable"><tr>
535 <td style="width: 33%" valign="top"><dl> 398 <td style="width: 33%; vertical-align: top;"><ul>
536 399 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.name">name (eventmq.jobmanager.JobManager attribute)</a>
537 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.name">name (eventmq.jobmanager.JobManager attribute)</a> 400
538 </dt> 401 <ul>
539 402 <li><a href="receiver.html#eventmq.receiver.Receiver.name">(eventmq.receiver.Receiver attribute)</a>
540 <dd><dl> 403</li>
541 404 <li><a href="sender.html#eventmq.sender.Sender.name">(eventmq.sender.Sender attribute)</a>
542 <dt><a href="receiver.html#eventmq.receiver.Receiver.name">(eventmq.receiver.Receiver attribute)</a> 405</li>
543 </dt> 406 </ul></li>
544 407 </ul></td>
545 408 <td style="width: 33%; vertical-align: top;"><ul>
546 <dt><a href="sender.html#eventmq.sender.Sender.name">(eventmq.sender.Sender attribute)</a> 409 <li><a href="exceptions.html#eventmq.exceptions.NoAvailableWorkerSlotsError">NoAvailableWorkerSlotsError</a>
547 </dt> 410</li>
548 411 </ul></td>
549 </dl></dd>
550 </dl></td>
551 <td style="width: 33%" valign="top"><dl>
552
553 <dt><a href="exceptions.html#eventmq.exceptions.NoAvailableWorkerSlotsError">NoAvailableWorkerSlotsError</a>
554 </dt>
555
556 </dl></td>
557</tr></table> 412</tr></table>
558 413
559<h2 id="O">O</h2> 414<h2 id="O">O</h2>
560<table style="width: 100%" class="indextable genindextable"><tr> 415<table style="width: 100%" class="indextable genindextable"><tr>
561 <td style="width: 33%" valign="top"><dl> 416 <td style="width: 33%; vertical-align: top;"><ul>
562 417 <li><a href="utils/classes.html#eventmq.utils.classes.EMQPService.on_ack">on_ack() (eventmq.utils.classes.EMQPService method)</a>
563 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.on_ack">on_ack() (eventmq.utils.classes.EMQPService method)</a> 418</li>
564 </dt> 419 <li><a href="router.html#eventmq.router.Router.on_disconnect">on_disconnect() (eventmq.router.Router method)</a>
565 420</li>
566 421 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.on_heartbeat">on_heartbeat() (eventmq.jobmanager.JobManager method)</a>
567 <dt><a href="router.html#eventmq.router.Router.on_disconnect">on_disconnect() (eventmq.router.Router method)</a> 422
568 </dt> 423 <ul>
569 424 <li><a href="router.html#eventmq.router.Router.on_heartbeat">(eventmq.router.Router method)</a>
570 425</li>
571 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.on_heartbeat">on_heartbeat() (eventmq.jobmanager.JobManager method)</a> 426 </ul></li>
572 </dt> 427 <li><a href="router.html#eventmq.router.Router.on_inform">on_inform() (eventmq.router.Router method)</a>
573 428</li>
574 <dd><dl> 429 </ul></td>
575 430 <td style="width: 33%; vertical-align: top;"><ul>
576 <dt><a href="router.html#eventmq.router.Router.on_heartbeat">(eventmq.router.Router method)</a> 431 <li><a href="router.html#eventmq.router.Router.on_ready">on_ready() (eventmq.router.Router method)</a>
577 </dt> 432</li>
578 433 <li><a href="router.html#eventmq.router.Router.on_reply">on_reply() (eventmq.router.Router method)</a>
579 </dl></dd> 434</li>
580 435 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.on_request">on_request() (eventmq.jobmanager.JobManager method)</a>
581 <dt><a href="router.html#eventmq.router.Router.on_inform">on_inform() (eventmq.router.Router method)</a> 436
582 </dt> 437 <ul>
583 438 <li><a href="router.html#eventmq.router.Router.on_request">(eventmq.router.Router method)</a>
584 </dl></td> 439</li>
585 <td style="width: 33%" valign="top"><dl> 440 </ul></li>
586 441 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.outgoing">outgoing (eventmq.jobmanager.JobManager attribute)</a>
587 <dt><a href="router.html#eventmq.router.Router.on_ready">on_ready() (eventmq.router.Router method)</a> 442</li>
588 </dt> 443 </ul></td>
589
590
591 <dt><a href="router.html#eventmq.router.Router.on_reply">on_reply() (eventmq.router.Router method)</a>
592 </dt>
593
594
595 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.on_request">on_request() (eventmq.jobmanager.JobManager method)</a>
596 </dt>
597
598 <dd><dl>
599
600 <dt><a href="router.html#eventmq.router.Router.on_request">(eventmq.router.Router method)</a>
601 </dt>
602
603 </dl></dd>
604
605 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.outgoing">outgoing (eventmq.jobmanager.JobManager attribute)</a>
606 </dt>
607
608 </dl></td>
609</tr></table> 444</tr></table>
610 445
611<h2 id="P">P</h2> 446<h2 id="P">P</h2>
612<table style="width: 100%" class="indextable genindextable"><tr> 447<table style="width: 100%" class="indextable genindextable"><tr>
613 <td style="width: 33%" valign="top"><dl> 448 <td style="width: 33%; vertical-align: top;"><ul>
614 449 <li><a href="utils/messages.html#eventmq.utils.messages.parse_message">parse_message() (in module eventmq.utils.messages)</a>
615 <dt><a href="utils/messages.html#eventmq.utils.messages.parse_message">parse_message() (in module eventmq.utils.messages)</a> 450</li>
616 </dt> 451 <li><a href="utils/messages.html#eventmq.utils.messages.parse_router_message">parse_router_message() (in module eventmq.utils.messages)</a>
617 452</li>
618 453 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.peek">peek() (eventmq.utils.classes.EMQdeque method)</a>
619 <dt><a href="utils/messages.html#eventmq.utils.messages.parse_router_message">parse_router_message() (in module eventmq.utils.messages)</a> 454</li>
620 </dt> 455 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.peekleft">peekleft() (eventmq.utils.classes.EMQdeque method)</a>
621 456</li>
622 457 <li><a href="exceptions.html#eventmq.exceptions.PeerGoneAwayError">PeerGoneAwayError</a>
623 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.peek">peek() (eventmq.utils.classes.EMQdeque method)</a> 458</li>
624 </dt> 459 <li><a href="poller.html#eventmq.poller.Poller.poll">poll() (eventmq.poller.Poller method)</a>
625 460</li>
626 461 </ul></td>
627 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.peekleft">peekleft() (eventmq.utils.classes.EMQdeque method)</a> 462 <td style="width: 33%; vertical-align: top;"><ul>
628 </dt> 463 <li><a href="poller.html#eventmq.poller.Poller">Poller (class in eventmq.poller)</a>
629 464</li>
630 465 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.pop">pop() (eventmq.utils.classes.EMQdeque method)</a>
631 <dt><a href="exceptions.html#eventmq.exceptions.PeerGoneAwayError">PeerGoneAwayError</a> 466</li>
632 </dt> 467 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.popleft">popleft() (eventmq.utils.classes.EMQdeque method)</a>
633 468</li>
634 469 <li><a href="router.html#eventmq.router.Router.prioritize_queue_list">prioritize_queue_list() (eventmq.router.Router class method)</a>
635 <dt><a href="poller.html#eventmq.poller.Poller.poll">poll() (eventmq.poller.Poller method)</a> 470</li>
636 </dt> 471 <li><a href="router.html#eventmq.router.Router.process_client_message">process_client_message() (eventmq.router.Router method)</a>
637 472</li>
638 473 <li><a href="utils/classes.html#eventmq.utils.classes.EMQPService.process_message">process_message() (eventmq.utils.classes.EMQPService method)</a>
639 <dt><a href="poller.html#eventmq.poller.Poller">Poller (class in eventmq.poller)</a> 474</li>
640 </dt> 475 <li><a href="router.html#eventmq.router.Router.process_worker_message">process_worker_message() (eventmq.router.Router method)</a>
641 476</li>
642 </dl></td> 477 </ul></td>
643 <td style="width: 33%" valign="top"><dl>
644
645 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.pop">pop() (eventmq.utils.classes.EMQdeque method)</a>
646 </dt>
647
648
649 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.popleft">popleft() (eventmq.utils.classes.EMQdeque method)</a>
650 </dt>
651
652
653 <dt><a href="router.html#eventmq.router.Router.prioritize_queue_list">prioritize_queue_list() (eventmq.router.Router class method)</a>
654 </dt>
655
656
657 <dt><a href="router.html#eventmq.router.Router.process_client_message">process_client_message() (eventmq.router.Router method)</a>
658 </dt>
659
660
661 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.process_message">process_message() (eventmq.utils.classes.EMQPService method)</a>
662 </dt>
663
664
665 <dt><a href="router.html#eventmq.router.Router.process_worker_message">process_worker_message() (eventmq.router.Router method)</a>
666 </dt>
667
668 </dl></td>
669</tr></table> 478</tr></table>
670 479
671<h2 id="Q">Q</h2> 480<h2 id="Q">Q</h2>
672<table style="width: 100%" class="indextable genindextable"><tr> 481<table style="width: 100%" class="indextable genindextable"><tr>
673 <td style="width: 33%" valign="top"><dl> 482 <td style="width: 33%; vertical-align: top;"><ul>
674 483 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.queues">queues (eventmq.jobmanager.JobManager attribute)</a>
675 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.queues">queues (eventmq.jobmanager.JobManager attribute)</a> 484
676 </dt> 485 <ul>
677 486 <li><a href="router.html#eventmq.router.Router.queues">(eventmq.router.Router attribute)</a>
678 <dd><dl> 487</li>
679 488 </ul></li>
680 <dt><a href="router.html#eventmq.router.Router.queues">(eventmq.router.Router attribute)</a> 489 </ul></td>
681 </dt>
682
683 </dl></dd>
684 </dl></td>
685</tr></table> 490</tr></table>
686 491
687<h2 id="R">R</h2> 492<h2 id="R">R</h2>
688<table style="width: 100%" class="indextable genindextable"><tr> 493<table style="width: 100%" class="indextable genindextable"><tr>
689 <td style="width: 33%" valign="top"><dl> 494 <td style="width: 33%; vertical-align: top;"><ul>
690 495 <li><a href="utils/index.html#eventmq.utils.random_characters">random_characters() (in module eventmq.utils)</a>
691 <dt><a href="utils/index.html#eventmq.utils.random_characters">random_characters() (in module eventmq.utils)</a> 496</li>
692 </dt> 497 <li><a href="receiver.html#eventmq.receiver.Receiver.ready">ready (eventmq.receiver.Receiver attribute)</a>
693 498
694 499 <ul>
695 <dt><a href="receiver.html#eventmq.receiver.Receiver.ready">ready (eventmq.receiver.Receiver attribute)</a> 500 <li><a href="sender.html#eventmq.sender.Sender.ready">(eventmq.sender.Sender attribute)</a>
696 </dt> 501</li>
697 502 </ul></li>
698 <dd><dl> 503 <li><a href="sender.html#eventmq.sender.Sender.rebuild">rebuild() (eventmq.sender.Sender method)</a>
699 504</li>
700 <dt><a href="sender.html#eventmq.sender.Sender.ready">(eventmq.sender.Sender attribute)</a> 505 <li><a href="router.html#eventmq.router.Router.received_disconnect">received_disconnect (eventmq.router.Router attribute)</a>
701 </dt> 506</li>
702 507 <li><a href="receiver.html#eventmq.receiver.Receiver">Receiver (class in eventmq.receiver)</a>
703 </dl></dd> 508</li>
704 509 <li><a href="utils/classes.html#eventmq.utils.classes.ZMQReceiveMixin.recv">recv() (eventmq.utils.classes.ZMQReceiveMixin method)</a>
705 <dt><a href="sender.html#eventmq.sender.Sender.rebuild">rebuild() (eventmq.sender.Sender method)</a> 510</li>
706 </dt> 511 <li><a href="utils/classes.html#eventmq.utils.classes.ZMQReceiveMixin.recv_multipart">recv_multipart() (eventmq.utils.classes.ZMQReceiveMixin method)</a>
707 512</li>
708 513 </ul></td>
709 <dt><a href="router.html#eventmq.router.Router.received_disconnect">received_disconnect (eventmq.router.Router attribute)</a> 514 <td style="width: 33%; vertical-align: top;"><ul>
710 </dt> 515 <li><a href="poller.html#eventmq.poller.Poller.register">register() (eventmq.poller.Poller method)</a>
711 516</li>
712 517 <li><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.remove">remove() (eventmq.utils.classes.EMQdeque method)</a>
713 <dt><a href="receiver.html#eventmq.receiver.Receiver">Receiver (class in eventmq.receiver)</a> 518</li>
714 </dt> 519 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.request_queue">request_queue (eventmq.jobmanager.JobManager attribute)</a>
715 520</li>
716 521 <li><a href="router.html#eventmq.router.Router.requeue_worker">requeue_worker() (eventmq.router.Router method)</a>
717 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQReceiveMixin.recv">recv() (eventmq.utils.classes.ZMQReceiveMixin method)</a> 522</li>
718 </dt> 523 <li><a href="utils/classes.html#eventmq.utils.classes.EMQPService.reset">reset() (eventmq.utils.classes.EMQPService method)</a>
719 524</li>
720 525 <li><a href="router.html#eventmq.router.Router.reset_heartbeat_counters">reset_heartbeat_counters() (eventmq.router.Router method)</a>
721 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQReceiveMixin.recv_multipart">recv_multipart() (eventmq.utils.classes.ZMQReceiveMixin method)</a> 526
722 </dt> 527 <ul>
723 528 <li><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.reset_heartbeat_counters">(eventmq.utils.classes.HeartbeatMixin method)</a>
724 </dl></td> 529</li>
725 <td style="width: 33%" valign="top"><dl> 530 </ul></li>
726 531 <li><a href="router.html#eventmq.router.Router">Router (class in eventmq.router)</a>
727 <dt><a href="poller.html#eventmq.poller.Poller.register">register() (eventmq.poller.Poller method)</a> 532</li>
728 </dt> 533 <li><a href="router.html#eventmq.router.Router.router_main">router_main() (eventmq.router.Router method)</a>
729 534</li>
730 535 </ul></td>
731 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQdeque.remove">remove() (eventmq.utils.classes.EMQdeque method)</a>
732 </dt>
733
734
735 <dt><a href="router.html#eventmq.router.Router.requeue_worker">requeue_worker() (eventmq.router.Router method)</a>
736 </dt>
737
738
739 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.reset">reset() (eventmq.utils.classes.EMQPService method)</a>
740 </dt>
741
742
743 <dt><a href="router.html#eventmq.router.Router.reset_heartbeat_counters">reset_heartbeat_counters() (eventmq.router.Router method)</a>
744 </dt>
745
746 <dd><dl>
747
748 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.reset_heartbeat_counters">(eventmq.utils.classes.HeartbeatMixin method)</a>
749 </dt>
750
751 </dl></dd>
752
753 <dt><a href="router.html#eventmq.router.Router">Router (class in eventmq.router)</a>
754 </dt>
755
756
757 <dt><a href="router.html#eventmq.router.Router.router_main">router_main() (eventmq.router.Router method)</a>
758 </dt>
759
760 </dl></td>
761</tr></table> 536</tr></table>
762 537
763<h2 id="S">S</h2> 538<h2 id="S">S</h2>
764<table style="width: 100%" class="indextable genindextable"><tr> 539<table style="width: 100%" class="indextable genindextable"><tr>
765 <td style="width: 33%" valign="top"><dl> 540 <td style="width: 33%; vertical-align: top;"><ul>
766 541 <li><a href="client/messages.html#eventmq.client.messages.schedule">schedule() (in module eventmq.client.messages)</a>
767 <dt><a href="client/messages.html#eventmq.client.messages.schedule">schedule() (in module eventmq.client.messages)</a> 542</li>
768 </dt> 543 <li><a href="router.html#eventmq.router.Router.scheduler_queue">scheduler_queue (eventmq.router.Router attribute)</a>
769 544</li>
770 545 <li><a href="router.html#eventmq.router.Router.schedulers">schedulers (eventmq.router.Router attribute)</a>
771 <dt><a href="router.html#eventmq.router.Router.scheduler_queue">scheduler_queue (eventmq.router.Router attribute)</a> 546</li>
772 </dt> 547 <li><a href="utils/timeutils.html#eventmq.utils.timeutils.seconds_until">seconds_until() (in module eventmq.utils.timeutils)</a>
773 548</li>
774 549 <li><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.send">send() (eventmq.utils.classes.ZMQSendMixin method)</a>
775 <dt><a href="router.html#eventmq.router.Router.schedulers">schedulers (eventmq.router.Router attribute)</a> 550</li>
776 </dt> 551 <li><a href="router.html#eventmq.router.Router.send_ack">send_ack() (eventmq.router.Router method)</a>
777 552</li>
778 553 <li><a href="utils/messages.html#eventmq.utils.messages.send_emqp_message">send_emqp_message() (in module eventmq.utils.messages)</a>
779 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.seconds_until">seconds_until() (in module eventmq.utils.timeutils)</a> 554</li>
780 </dt> 555 <li><a href="utils/messages.html#eventmq.utils.messages.send_emqp_router_message">send_emqp_router_message() (in module eventmq.utils.messages)</a>
781 556</li>
782 557 <li><a href="router.html#eventmq.router.Router.send_heartbeat">send_heartbeat() (eventmq.router.Router method)</a>
783 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.send">send() (eventmq.utils.classes.ZMQSendMixin method)</a> 558
784 </dt> 559 <ul>
785 560 <li><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.send_heartbeat">(eventmq.utils.classes.HeartbeatMixin method)</a>
786 561</li>
787 <dt><a href="router.html#eventmq.router.Router.send_ack">send_ack() (eventmq.router.Router method)</a> 562 </ul></li>
788 </dt> 563 <li><a href="utils/classes.html#eventmq.utils.classes.EMQPService.send_inform">send_inform() (eventmq.utils.classes.EMQPService method)</a>
789 564</li>
790 565 </ul></td>
791 <dt><a href="utils/messages.html#eventmq.utils.messages.send_emqp_message">send_emqp_message() (in module eventmq.utils.messages)</a> 566 <td style="width: 33%; vertical-align: top;"><ul>
792 </dt> 567 <li><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.send_multipart">send_multipart() (eventmq.utils.classes.ZMQSendMixin method)</a>
793 568</li>
794 569 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.send_ready">send_ready() (eventmq.jobmanager.JobManager method)</a>
795 <dt><a href="utils/messages.html#eventmq.utils.messages.send_emqp_router_message">send_emqp_router_message() (in module eventmq.utils.messages)</a> 570</li>
796 </dt> 571 <li><a href="jobmanager.html#eventmq.jobmanager.JobManager.send_reply">send_reply() (eventmq.jobmanager.JobManager method)</a>
797 572</li>
798 573 <li><a href="client/messages.html#eventmq.client.messages.send_request">send_request() (in module eventmq.client.messages)</a>
799 <dt><a href="router.html#eventmq.router.Router.send_heartbeat">send_heartbeat() (eventmq.router.Router method)</a> 574</li>
800 </dt> 575 <li><a href="client/messages.html#eventmq.client.messages.send_schedule_request">send_schedule_request() (in module eventmq.client.messages)</a>
801 576</li>
802 <dd><dl> 577 <li><a href="router.html#eventmq.router.Router.send_schedulers_heartbeats">send_schedulers_heartbeats() (eventmq.router.Router method)</a>
803 578</li>
804 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.send_heartbeat">(eventmq.utils.classes.HeartbeatMixin method)</a> 579 <li><a href="router.html#eventmq.router.Router.send_workers_heartbeats">send_workers_heartbeats() (eventmq.router.Router method)</a>
805 </dt> 580</li>
806 581 <li><a href="sender.html#eventmq.sender.Sender">Sender (class in eventmq.sender)</a>
807 </dl></dd> 582</li>
808 583 <li><a href="router.html#eventmq.router.Router.sighup_handler">sighup_handler() (eventmq.router.Router method)</a>
809 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.send_inform">send_inform() (eventmq.utils.classes.EMQPService method)</a> 584</li>
810 </dt> 585 <li><a href="router.html#eventmq.router.Router.start">start() (eventmq.router.Router method)</a>
811 586
812 </dl></td> 587 <ul>
813 <td style="width: 33%" valign="top"><dl> 588 <li><a href="utils/classes.html#eventmq.utils.classes.EMQPService.start">(eventmq.utils.classes.EMQPService method)</a>
814 589</li>
815 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.send_multipart">send_multipart() (eventmq.utils.classes.ZMQSendMixin method)</a> 590 </ul></li>
816 </dt> 591 </ul></td>
817
818
819 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.send_ready">send_ready() (eventmq.jobmanager.JobManager method)</a>
820 </dt>
821
822
823 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.send_reply">send_reply() (eventmq.jobmanager.JobManager method)</a>
824 </dt>
825
826
827 <dt><a href="client/messages.html#eventmq.client.messages.send_request">send_request() (in module eventmq.client.messages)</a>
828 </dt>
829
830
831 <dt><a href="client/messages.html#eventmq.client.messages.send_schedule_request">send_schedule_request() (in module eventmq.client.messages)</a>
832 </dt>
833
834
835 <dt><a href="router.html#eventmq.router.Router.send_schedulers_heartbeats">send_schedulers_heartbeats() (eventmq.router.Router method)</a>
836 </dt>
837
838
839 <dt><a href="router.html#eventmq.router.Router.send_workers_heartbeats">send_workers_heartbeats() (eventmq.router.Router method)</a>
840 </dt>
841
842
843 <dt><a href="sender.html#eventmq.sender.Sender">Sender (class in eventmq.sender)</a>
844 </dt>
845
846
847 <dt><a href="router.html#eventmq.router.Router.sighup_handler">sighup_handler() (eventmq.router.Router method)</a>
848 </dt>
849
850
851 <dt><a href="router.html#eventmq.router.Router.start">start() (eventmq.router.Router method)</a>
852 </dt>
853
854 <dd><dl>
855
856 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.start">(eventmq.utils.classes.EMQPService method)</a>
857 </dt>
858
859 </dl></dd>
860 </dl></td>
861</tr></table> 592</tr></table>
862 593
863<h2 id="T">T</h2> 594<h2 id="T">T</h2>
864<table style="width: 100%" class="indextable genindextable"><tr> 595<table style="width: 100%" class="indextable genindextable"><tr>
865 <td style="width: 33%" valign="top"><dl> 596 <td style="width: 33%; vertical-align: top;"><ul>
866 597 <li><a href="utils/timeutils.html#eventmq.utils.timeutils.timestamp">timestamp() (in module eventmq.utils.timeutils)</a>
867 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.timestamp">timestamp() (in module eventmq.utils.timeutils)</a> 598</li>
868 </dt> 599 </ul></td>
869 600 <td style="width: 33%; vertical-align: top;"><ul>
870 </dl></td> 601 <li><a href="utils/index.html#eventmq.utils.tuplify">tuplify() (in module eventmq.utils)</a>
871 <td style="width: 33%" valign="top"><dl> 602</li>
872 603 </ul></td>
873 <dt><a href="utils/index.html#eventmq.utils.tuplify">tuplify() (in module eventmq.utils)</a>
874 </dt>
875
876 </dl></td>
877</tr></table> 604</tr></table>
878 605
879<h2 id="U">U</h2> 606<h2 id="U">U</h2>
880<table style="width: 100%" class="indextable genindextable"><tr> 607<table style="width: 100%" class="indextable genindextable"><tr>
881 <td style="width: 33%" valign="top"><dl> 608 <td style="width: 33%; vertical-align: top;"><ul>
882 609 <li><a href="receiver.html#eventmq.receiver.Receiver.unbind">unbind() (eventmq.receiver.Receiver method)</a>
883 <dt><a href="receiver.html#eventmq.receiver.Receiver.unbind">unbind() (eventmq.receiver.Receiver method)</a> 610
884 </dt> 611 <ul>
885 612 <li><a href="sender.html#eventmq.sender.Sender.unbind">(eventmq.sender.Sender method)</a>
886 <dd><dl> 613</li>
887 614 </ul></li>
888 <dt><a href="sender.html#eventmq.sender.Sender.unbind">(eventmq.sender.Sender method)</a> 615 </ul></td>
889 </dt> 616 <td style="width: 33%; vertical-align: top;"><ul>
890 617 <li><a href="exceptions.html#eventmq.exceptions.UnknownQueueError">UnknownQueueError</a>
891 </dl></dd> 618</li>
892 619 <li><a href="poller.html#eventmq.poller.Poller.unregister">unregister() (eventmq.poller.Poller method)</a>
893 <dt><a href="exceptions.html#eventmq.exceptions.UnknownQueueError">UnknownQueueError</a> 620</li>
894 </dt> 621 </ul></td>
895
896 </dl></td>
897 <td style="width: 33%" valign="top"><dl>
898
899 <dt><a href="poller.html#eventmq.poller.Poller.unregister">unregister() (eventmq.poller.Poller method)</a>
900 </dt>
901
902 </dl></td>
903</tr></table> 622</tr></table>
904 623
905<h2 id="W">W</h2> 624<h2 id="W">W</h2>
906<table style="width: 100%" class="indextable genindextable"><tr> 625<table style="width: 100%" class="indextable genindextable"><tr>
907 <td style="width: 33%" valign="top"><dl> 626 <td style="width: 33%; vertical-align: top;"><ul>
908 627 <li><a href="router.html#eventmq.router.Router.waiting_messages">waiting_messages (eventmq.router.Router attribute)</a>
909 <dt><a href="router.html#eventmq.router.Router.waiting_messages">waiting_messages (eventmq.router.Router attribute)</a> 628</li>
910 </dt> 629 </ul></td>
911 630 <td style="width: 33%; vertical-align: top;"><ul>
912 </dl></td> 631 <li><a href="router.html#eventmq.router.Router.workers">workers (eventmq.router.Router attribute)</a>
913 <td style="width: 33%" valign="top"><dl> 632</li>
914 633 </ul></td>
915 <dt><a href="router.html#eventmq.router.Router.workers">workers (eventmq.router.Router attribute)</a>
916 </dt>
917
918 </dl></td>
919</tr></table> 634</tr></table>
920 635
921<h2 id="Z">Z</h2> 636<h2 id="Z">Z</h2>
922<table style="width: 100%" class="indextable genindextable"><tr> 637<table style="width: 100%" class="indextable genindextable"><tr>
923 <td style="width: 33%" valign="top"><dl> 638 <td style="width: 33%; vertical-align: top;"><ul>
924 639 <li><a href="receiver.html#eventmq.receiver.Receiver.zcontext">zcontext (eventmq.receiver.Receiver attribute)</a>
925 <dt><a href="receiver.html#eventmq.receiver.Receiver.zcontext">zcontext (eventmq.receiver.Receiver attribute)</a> 640
926 </dt> 641 <ul>
927 642 <li><a href="sender.html#eventmq.sender.Sender.zcontext">(eventmq.sender.Sender attribute)</a>
928 <dd><dl> 643</li>
929 644 </ul></li>
930 <dt><a href="sender.html#eventmq.sender.Sender.zcontext">(eventmq.sender.Sender attribute)</a> 645 <li><a href="utils/classes.html#eventmq.utils.classes.ZMQReceiveMixin">ZMQReceiveMixin (class in eventmq.utils.classes)</a>
931 </dt> 646</li>
932 647 </ul></td>
933 </dl></dd> 648 <td style="width: 33%; vertical-align: top;"><ul>
934 649 <li><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin">ZMQSendMixin (class in eventmq.utils.classes)</a>
935 <dt><a href="utils/index.html#eventmq.utils.zero_index_cmp">zero_index_cmp() (in module eventmq.utils)</a> 650</li>
936 </dt> 651 <li><a href="receiver.html#eventmq.receiver.Receiver.zsocket">zsocket (eventmq.receiver.Receiver attribute)</a>
937 652
938 653 <ul>
939 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQReceiveMixin">ZMQReceiveMixin (class in eventmq.utils.classes)</a> 654 <li><a href="sender.html#eventmq.sender.Sender.zsocket">(eventmq.sender.Sender attribute)</a>
940 </dt> 655</li>
941 656 </ul></li>
942 </dl></td> 657 </ul></td>
943 <td style="width: 33%" valign="top"><dl>
944
945 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin">ZMQSendMixin (class in eventmq.utils.classes)</a>
946 </dt>
947
948
949 <dt><a href="receiver.html#eventmq.receiver.Receiver.zsocket">zsocket (eventmq.receiver.Receiver attribute)</a>
950 </dt>
951
952 <dd><dl>
953
954 <dt><a href="sender.html#eventmq.sender.Sender.zsocket">(eventmq.sender.Sender attribute)</a>
955 </dt>
956
957 </dl></dd>
958 </dl></td>
959</tr></table> 658</tr></table>
960 659
961 660
diff --git a/getting_started.html b/getting_started.html
index 5b254f8..5b254f8 100644..100755
--- a/getting_started.html
+++ b/getting_started.html
diff --git a/glossary.html b/glossary.html
index d49f7f6..d49f7f6 100644..100755
--- a/glossary.html
+++ b/glossary.html
diff --git a/index.html b/index.html
index 7b7bdd4..fedeb56 100644..100755
--- a/index.html
+++ b/index.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="#"/> 36 <link rel="top" title="EventMQ 0 documentation" href="#"/>
34 <link rel="next" title="Using EventMQ" href="using.html"/> 37 <link rel="next" title="Using EventMQ" href="using.html"/>
35 38
@@ -59,7 +62,7 @@
59 62
60 63
61 <div class="version"> 64 <div class="version">
62 0.2.7.1 65 0.3-rc8
63 </div> 66 </div>
64 67
65 68
@@ -106,7 +109,7 @@
106 <div class="rst-content"> 109 <div class="rst-content">
107 110
108 111
109 112
110 113
111 114
112 115
@@ -118,7 +121,7 @@
118 <li class="wy-breadcrumbs-aside"> 121 <li class="wy-breadcrumbs-aside">
119 122
120 123
121 <a href="_sources/index.txt" rel="nofollow"> View page source</a> 124 <a href="_sources/index.rst.txt" rel="nofollow"> View page source</a>
122 125
123 126
124 </li> 127 </li>
@@ -159,9 +162,9 @@
159<div class="section" id="indices-and-tables"> 162<div class="section" id="indices-and-tables">
160<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h2> 163<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h2>
161<ul class="simple"> 164<ul class="simple">
162<li><a class="reference internal" href="genindex.html"><span>Index</span></a></li> 165<li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li>
163<li><a class="reference internal" href="py-modindex.html"><span>Module Index</span></a></li> 166<li><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></li>
164<li><a class="reference internal" href="search.html"><span>Search Page</span></a></li> 167<li><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></li>
165</ul> 168</ul>
166</div> 169</div>
167</div> 170</div>
diff --git a/jobmanager.html b/jobmanager.html
index 840922d..f5053fc 100644..100755
--- a/jobmanager.html
+++ b/jobmanager.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="up" title="API Documentation" href="api.html"/> 37 <link rel="up" title="API Documentation" href="api.html"/>
35 <link rel="next" title="poller – Poller" href="poller.html"/> 38 <link rel="next" title="poller – Poller" href="poller.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -87,7 +90,7 @@
87<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current"> 90<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current">
88<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li> 91<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
89<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 92<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
90<li class="toctree-l2 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 93<li class="toctree-l2 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
91<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 94<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
92<li class="toctree-l2"><a class="reference internal" href="receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li> 95<li class="toctree-l2"><a class="reference internal" href="receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li>
93<li class="toctree-l2"><a class="reference internal" href="router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li> 96<li class="toctree-l2"><a class="reference internal" href="router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li>
@@ -118,7 +121,7 @@
118 <div class="rst-content"> 121 <div class="rst-content">
119 122
120 123
121 124
122 125
123 126
124 127
@@ -132,7 +135,7 @@
132 <li class="wy-breadcrumbs-aside"> 135 <li class="wy-breadcrumbs-aside">
133 136
134 137
135 <a href="_sources/jobmanager.txt" rel="nofollow"> View page source</a> 138 <a href="_sources/jobmanager.rst.txt" rel="nofollow"> View page source</a>
136 139
137 140
138 </li> 141 </li>
@@ -163,10 +166,10 @@ to manage the resources on the server it&#8217;s running.</p>
163<col class="field-body" /> 166<col class="field-body" />
164<tbody valign="top"> 167<tbody valign="top">
165<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 168<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
166<li><strong>name</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; unique name of this instance. By default a uuid will be 169<li><strong>name</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; unique name of this instance. By default a uuid will be
167generated.</li> 170generated.</li>
168<li><strong>queues</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#tuple" title="(in Python v2.7)"><em>tuple</em></a>) &#8211; List of queue names to listen on.</li> 171<li><strong>queues</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#tuple" title="(in Python v2.7)"><em>tuple</em></a>) &#8211; List of queue names to listen on.</li>
169<li><strong>skip_signal</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)"><em>bool</em></a>) &#8211; Don&#8217;t register the signal handlers. Useful for 172<li><strong>skip_signal</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)"><em>bool</em></a>) &#8211; Don&#8217;t register the signal handlers. Useful for
170testing.</li> 173testing.</li>
171</ul> 174</ul>
172</td> 175</td>
@@ -175,6 +178,13 @@ testing.</li>
175</table> 178</table>
176</dd></dl> 179</dd></dl>
177 180
181<dl class="method">
182<dt id="eventmq.jobmanager.JobManager.check_worker_health">
183<code class="descname">check_worker_health</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.check_worker_health" title="Permalink to this definition">¶</a></dt>
184<dd><p>Checks for any dead processes in the pool and recreates them if
185necessary</p>
186</dd></dl>
187
178<dl class="attribute"> 188<dl class="attribute">
179<dt id="eventmq.jobmanager.JobManager.concurrent_jobs"> 189<dt id="eventmq.jobmanager.JobManager.concurrent_jobs">
180<code class="descname">concurrent_jobs</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.jobmanager.JobManager.concurrent_jobs" title="Permalink to this definition">¶</a></dt> 190<code class="descname">concurrent_jobs</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.jobmanager.JobManager.concurrent_jobs" title="Permalink to this definition">¶</a></dt>
@@ -189,7 +199,7 @@ testing.</li>
189<col class="field-name" /> 199<col class="field-name" />
190<col class="field-body" /> 200<col class="field-body" />
191<tbody valign="top"> 201<tbody valign="top">
192<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>broker_addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; The address of the broker to connect to.</td> 202<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>broker_addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; The address of the broker to connect to.</td>
193</tr> 203</tr>
194</tbody> 204</tbody>
195</table> 205</table>
@@ -256,6 +266,12 @@ of work.</p>
256<dd><p>List of queues that this job manager is listening on</p> 266<dd><p>List of queues that this job manager is listening on</p>
257</dd></dl> 267</dd></dl>
258 268
269<dl class="attribute">
270<dt id="eventmq.jobmanager.JobManager.request_queue">
271<code class="descname">request_queue</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.jobmanager.JobManager.request_queue" title="Permalink to this definition">¶</a></dt>
272<dd><p>Setup worker queues</p>
273</dd></dl>
274
259<dl class="method"> 275<dl class="method">
260<dt id="eventmq.jobmanager.JobManager.send_ready"> 276<dt id="eventmq.jobmanager.JobManager.send_ready">
261<code class="descname">send_ready</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.send_ready" title="Permalink to this definition">¶</a></dt> 277<code class="descname">send_ready</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.send_ready" title="Permalink to this definition">¶</a></dt>
@@ -265,15 +281,15 @@ for another REQUEST message.</p>
265 281
266<dl class="method"> 282<dl class="method">
267<dt id="eventmq.jobmanager.JobManager.send_reply"> 283<dt id="eventmq.jobmanager.JobManager.send_reply">
268<code class="descname">send_reply</code><span class="sig-paren">(</span><em>res</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.send_reply" title="Permalink to this definition">¶</a></dt> 284<code class="descname">send_reply</code><span class="sig-paren">(</span><em>reply</em>, <em>msgid</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.send_reply" title="Permalink to this definition">¶</a></dt>
269<dd><p>Sends an REPLY response</p> 285<dd><p>Sends an REPLY response</p>
270<table class="docutils field-list" frame="void" rules="none"> 286<table class="docutils field-list" frame="void" rules="none">
271<col class="field-name" /> 287<col class="field-name" />
272<col class="field-body" /> 288<col class="field-body" />
273<tbody valign="top"> 289<tbody valign="top">
274<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 290<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
275<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; The socket to use for this ack</li> 291<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/2/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; The socket to use for this ack</li>
276<li><strong>recipient</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; The recipient id for the ack</li> 292<li><strong>recipient</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; The recipient id for the ack</li>
277<li><strong>msgid</strong> &#8211; The unique id that we are acknowledging</li> 293<li><strong>msgid</strong> &#8211; The unique id that we are acknowledging</li>
278</ul> 294</ul>
279</td> 295</td>
@@ -284,15 +300,6 @@ for another REQUEST message.</p>
284 300
285</dd></dl> 301</dd></dl>
286 302
287<dl class="function">
288<dt id="eventmq.jobmanager.mp_init">
289<code class="descclassname">eventmq.jobmanager.</code><code class="descname">mp_init</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.mp_init" title="Permalink to this definition">¶</a></dt>
290<dd><p>The instance of Context is copied when python multiprocessing fork()s the
291worker processes, so we need to terminate that Context so a new one can be
292rebuilt. Without doing this, messages sent from functions in those child
293processes will never be delivered.</p>
294</dd></dl>
295
296</div> 303</div>
297 304
298 305
diff --git a/objects.inv b/objects.inv
index db575b0..bd785e5 100644..100755
--- a/objects.inv
+++ b/objects.inv
Binary files differ
diff --git a/poller.html b/poller.html
index 4357018..1db3662 100644..100755
--- a/poller.html
+++ b/poller.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="up" title="API Documentation" href="api.html"/> 37 <link rel="up" title="API Documentation" href="api.html"/>
35 <link rel="next" title="receiver – Receiver" href="receiver.html"/> 38 <link rel="next" title="receiver – Receiver" href="receiver.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -88,7 +91,7 @@
88<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li> 91<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
89<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 92<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
90<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 93<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
91<li class="toctree-l2 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 94<li class="toctree-l2 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
92<li class="toctree-l2"><a class="reference internal" href="receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li> 95<li class="toctree-l2"><a class="reference internal" href="receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li>
93<li class="toctree-l2"><a class="reference internal" href="router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li> 96<li class="toctree-l2"><a class="reference internal" href="router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li>
94<li class="toctree-l2"><a class="reference internal" href="sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li> 97<li class="toctree-l2"><a class="reference internal" href="sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li>
@@ -118,7 +121,7 @@
118 <div class="rst-content"> 121 <div class="rst-content">
119 122
120 123
121 124
122 125
123 126
124 127
@@ -132,7 +135,7 @@
132 <li class="wy-breadcrumbs-aside"> 135 <li class="wy-breadcrumbs-aside">
133 136
134 137
135 <a href="_sources/poller.txt" rel="nofollow"> View page source</a> 138 <a href="_sources/poller.rst.txt" rel="nofollow"> View page source</a>
136 139
137 140
138 </li> 141 </li>
@@ -148,17 +151,17 @@
148<dl class="class"> 151<dl class="class">
149<dt id="eventmq.poller.Poller"> 152<dt id="eventmq.poller.Poller">
150<em class="property">class </em><code class="descclassname">eventmq.poller.</code><code class="descname">Poller</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.poller.Poller" title="Permalink to this definition">¶</a></dt> 153<em class="property">class </em><code class="descclassname">eventmq.poller.</code><code class="descname">Poller</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.poller.Poller" title="Permalink to this definition">¶</a></dt>
151<dd><p><a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Poller" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Poller</span></code></a> based class.</p> 154<dd><p><a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Poller" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Poller</span></code></a> based class.</p>
152<dl class="method"> 155<dl class="method">
153<dt id="eventmq.poller.Poller.__init__"> 156<dt id="eventmq.poller.Poller.__init__">
154<code class="descname">__init__</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.poller.Poller.__init__" title="Permalink to this definition">¶</a></dt> 157<code class="descname">__init__</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.poller.Poller.__init__" title="Permalink to this definition">¶</a></dt>
155<dd><p>See <a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Poller" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Poller</span></code></a></p> 158<dd><p>See <a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Poller" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Poller</span></code></a></p>
156</dd></dl> 159</dd></dl>
157 160
158<dl class="method"> 161<dl class="method">
159<dt id="eventmq.poller.Poller.poll"> 162<dt id="eventmq.poller.Poller.poll">
160<code class="descname">poll</code><span class="sig-paren">(</span><em>timeout=1</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.poller.Poller.poll" title="Permalink to this definition">¶</a></dt> 163<code class="descname">poll</code><span class="sig-paren">(</span><em>timeout=1</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.poller.Poller.poll" title="Permalink to this definition">¶</a></dt>
161<dd><p>Calling <a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Poller.poll" title="(in PyZMQ v15.0.0)"><code class="xref py py-meth docutils literal"><span class="pre">zmq.Poller.poll()</span></code></a> directly returns a tuple set. This 164<dd><p>Calling <a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Poller.poll" title="(in PyZMQ v15.0.0)"><code class="xref py py-meth docutils literal"><span class="pre">zmq.Poller.poll()</span></code></a> directly returns a tuple set. This
162method typecasts to a dictionary for convience using the socket object 165method typecasts to a dictionary for convience using the socket object
163as the key. If a socket doesn&#8217;t appear in the returned dictionary then 166as the key. If a socket doesn&#8217;t appear in the returned dictionary then
164no events happened.</p> 167no events happened.</p>
@@ -166,7 +169,7 @@ no events happened.</p>
166<col class="field-name" /> 169<col class="field-name" />
167<col class="field-body" /> 170<col class="field-body" />
168<tbody valign="top"> 171<tbody valign="top">
169<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>timeout</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; How long should poller wait for before iterating 172<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>timeout</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; How long should poller wait for before iterating
170the next loop.</td> 173the next loop.</td>
171</tr> 174</tr>
172</tbody> 175</tbody>
@@ -186,8 +189,8 @@ the next loop.</td>
186<col class="field-body" /> 189<col class="field-body" />
187<tbody valign="top"> 190<tbody valign="top">
188<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 191<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
189<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; The socket object to register</li> 192<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/2/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; The socket object to register</li>
190<li><strong>flags</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; <code class="xref py py-attr docutils literal"><span class="pre">POLLIN</span></code>, <code class="xref py py-attr docutils literal"><span class="pre">POLLOUT</span></code>, or 193<li><strong>flags</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; <code class="xref py py-attr docutils literal"><span class="pre">POLLIN</span></code>, <code class="xref py py-attr docutils literal"><span class="pre">POLLOUT</span></code>, or
191<code class="xref py py-attr docutils literal"><span class="pre">POLLIN`|:attr:`POLLOUT</span></code> for both. If undefined the 194<code class="xref py py-attr docutils literal"><span class="pre">POLLIN`|:attr:`POLLOUT</span></code> for both. If undefined the
192socket remains unregistered.</li> 195socket remains unregistered.</li>
193</ul> 196</ul>
@@ -205,7 +208,7 @@ socket remains unregistered.</li>
205<col class="field-name" /> 208<col class="field-name" />
206<col class="field-body" /> 209<col class="field-body" />
207<tbody valign="top"> 210<tbody valign="top">
208<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; The socket object to registering</td> 211<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/2/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; The socket object to registering</td>
209</tr> 212</tr>
210</tbody> 213</tbody>
211</table> 214</table>
diff --git a/protocol.html b/protocol.html
index 56d4ea0..52b56a1 100644..100755
--- a/protocol.html
+++ b/protocol.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="up" title="Contributing to EventMQ" href="contributing.html"/> 37 <link rel="up" title="Contributing to EventMQ" href="contributing.html"/>
35 <link rel="prev" title="Contributing to EventMQ" href="contributing.html"/> 38 <link rel="prev" title="Contributing to EventMQ" href="contributing.html"/>
@@ -60,7 +63,7 @@
60 63
61 64
62 <div class="version"> 65 <div class="version">
63 0.2.7.1 66 0.3-rc8
64 </div> 67 </div>
65 68
66 69
@@ -85,7 +88,7 @@
85<li class="toctree-l1"><a class="reference internal" href="using.html">Using EventMQ</a></li> 88<li class="toctree-l1"><a class="reference internal" href="using.html">Using EventMQ</a></li>
86<li class="toctree-l1"><a class="reference internal" href="api.html">API Documentation</a></li> 89<li class="toctree-l1"><a class="reference internal" href="api.html">API Documentation</a></li>
87<li class="toctree-l1 current"><a class="reference internal" href="contributing.html">Contributing to EventMQ</a><ul class="current"> 90<li class="toctree-l1 current"><a class="reference internal" href="contributing.html">Contributing to EventMQ</a><ul class="current">
88<li class="toctree-l2 current"><a class="current reference internal" href="">EventMQ Protocol Specification</a><ul> 91<li class="toctree-l2 current"><a class="current reference internal" href="#">EventMQ Protocol Specification</a><ul>
89<li class="toctree-l3"><a class="reference internal" href="#goals">Goals</a></li> 92<li class="toctree-l3"><a class="reference internal" href="#goals">Goals</a></li>
90<li class="toctree-l3"><a class="reference internal" href="#license">License</a></li> 93<li class="toctree-l3"><a class="reference internal" href="#license">License</a></li>
91<li class="toctree-l3"><a class="reference internal" href="#language">Language</a></li> 94<li class="toctree-l3"><a class="reference internal" href="#language">Language</a></li>
@@ -96,6 +99,7 @@
96<li class="toctree-l4"><a class="reference internal" href="#emqp-client">eMQP / Client</a></li> 99<li class="toctree-l4"><a class="reference internal" href="#emqp-client">eMQP / Client</a></li>
97<li class="toctree-l4"><a class="reference internal" href="#emqp-scheduler">eMQP / Scheduler</a></li> 100<li class="toctree-l4"><a class="reference internal" href="#emqp-scheduler">eMQP / Scheduler</a></li>
98<li class="toctree-l4"><a class="reference internal" href="#emqp-worker">eMQP / Worker</a></li> 101<li class="toctree-l4"><a class="reference internal" href="#emqp-worker">eMQP / Worker</a></li>
102<li class="toctree-l4"><a class="reference internal" href="#emqp-publisher">eMQP / Publisher</a></li>
99<li class="toctree-l4"><a class="reference internal" href="#heartbeating">Heartbeating</a></li> 103<li class="toctree-l4"><a class="reference internal" href="#heartbeating">Heartbeating</a></li>
100<li class="toctree-l4"><a class="reference internal" href="#headers">Headers</a></li> 104<li class="toctree-l4"><a class="reference internal" href="#headers">Headers</a></li>
101</ul> 105</ul>
@@ -129,7 +133,7 @@
129 <div class="rst-content"> 133 <div class="rst-content">
130 134
131 135
132 136
133 137
134 138
135 139
@@ -143,7 +147,7 @@
143 <li class="wy-breadcrumbs-aside"> 147 <li class="wy-breadcrumbs-aside">
144 148
145 149
146 <a href="_sources/protocol.txt" rel="nofollow"> View page source</a> 150 <a href="_sources/protocol.rst.txt" rel="nofollow"> View page source</a>
147 151
148 152
149 </li> 153 </li>
@@ -666,6 +670,49 @@
666</tbody> 670</tbody>
667</table> 671</table>
668</div> 672</div>
673<div class="section" id="emqp-publisher">
674<h3>eMQP / Publisher<a class="headerlink" href="#emqp-publisher" title="Permalink to this headline">¶</a></h3>
675<p>A <strong>PUBLISH</strong> frame consists of a 6-frame multipart message, formatted as follows.</p>
676<table border="1" class="docutils">
677<colgroup>
678<col width="14%" />
679<col width="33%" />
680<col width="53%" />
681</colgroup>
682<thead valign="bottom">
683<tr class="row-odd"><th class="head">FRAME</th>
684<th class="head">Value</th>
685<th class="head">Description</th>
686</tr>
687</thead>
688<tbody valign="top">
689<tr class="row-even"><td>0</td>
690<td>_EMPTY_</td>
691<td>leave empty</td>
692</tr>
693<tr class="row-odd"><td>1</td>
694<td>eMQP/1.0</td>
695<td>Protocol version</td>
696</tr>
697<tr class="row-even"><td>2</td>
698<td>PUBLISH</td>
699<td>command</td>
700</tr>
701<tr class="row-odd"><td>3</td>
702<td>_MSGID_</td>
703<td>A unique id for the msg</td>
704</tr>
705<tr class="row-even"><td>4</td>
706<td>TOPIC</td>
707<td>A topic to publish to</td>
708</tr>
709<tr class="row-odd"><td>5</td>
710<td>MSG</td>
711<td>Message to be published</td>
712</tr>
713</tbody>
714</table>
715</div>
669<div class="section" id="heartbeating"> 716<div class="section" id="heartbeating">
670<h3>Heartbeating<a class="headerlink" href="#heartbeating" title="Permalink to this headline">¶</a></h3> 717<h3>Heartbeating<a class="headerlink" href="#heartbeating" title="Permalink to this headline">¶</a></h3>
671<blockquote> 718<blockquote>
diff --git a/py-modindex.html b/py-modindex.html
index 4909bf9..099c40c 100644..100755
--- a/py-modindex.html
+++ b/py-modindex.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 37
35 38
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -116,7 +119,7 @@
116 <ul class="wy-breadcrumbs"> 119 <ul class="wy-breadcrumbs">
117 <li><a href="index.html">Docs</a> &raquo;</li> 120 <li><a href="index.html">Docs</a> &raquo;</li>
118 121
119 <li></li> 122 <li>Python Module Index</li>
120 <li class="wy-breadcrumbs-aside"> 123 <li class="wy-breadcrumbs-aside">
121 124
122 125
@@ -135,8 +138,8 @@
135 <a href="#cap-e"><strong>e</strong></a> 138 <a href="#cap-e"><strong>e</strong></a>
136 </div> 139 </div>
137 140
138 <table class="indextable modindextable" cellspacing="0" cellpadding="2"> 141 <table class="indextable modindextable">
139 <tr class="pcap"><td></td><td>&nbsp;</td><td></td></tr> 142 <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
140 <tr class="cap" id="cap-e"><td></td><td> 143 <tr class="cap" id="cap-e"><td></td><td>
141 <strong>e</strong></td><td></td></tr> 144 <strong>e</strong></td><td></td></tr>
142 <tr> 145 <tr>
@@ -147,77 +150,77 @@
147 <em></em></td></tr> 150 <em></em></td></tr>
148 <tr class="cg-1"> 151 <tr class="cg-1">
149 <td></td> 152 <td></td>
150 <td>&nbsp;&nbsp;&nbsp; 153 <td>&#160;&#160;&#160;
151 <a href="client.html#module-eventmq.client"><code class="xref">eventmq.client</code></a></td><td> 154 <a href="client.html#module-eventmq.client"><code class="xref">eventmq.client</code></a></td><td>
152 <em></em></td></tr> 155 <em></em></td></tr>
153 <tr class="cg-1"> 156 <tr class="cg-1">
154 <td></td> 157 <td></td>
155 <td>&nbsp;&nbsp;&nbsp; 158 <td>&#160;&#160;&#160;
156 <a href="client/jobs.html#module-eventmq.client.jobs"><code class="xref">eventmq.client.jobs</code></a></td><td> 159 <a href="client/jobs.html#module-eventmq.client.jobs"><code class="xref">eventmq.client.jobs</code></a></td><td>
157 <em></em></td></tr> 160 <em></em></td></tr>
158 <tr class="cg-1"> 161 <tr class="cg-1">
159 <td></td> 162 <td></td>
160 <td>&nbsp;&nbsp;&nbsp; 163 <td>&#160;&#160;&#160;
161 <a href="client/messages.html#module-eventmq.client.messages"><code class="xref">eventmq.client.messages</code></a></td><td> 164 <a href="client/messages.html#module-eventmq.client.messages"><code class="xref">eventmq.client.messages</code></a></td><td>
162 <em></em></td></tr> 165 <em></em></td></tr>
163 <tr class="cg-1"> 166 <tr class="cg-1">
164 <td></td> 167 <td></td>
165 <td>&nbsp;&nbsp;&nbsp; 168 <td>&#160;&#160;&#160;
166 <a href="exceptions.html#module-eventmq.exceptions"><code class="xref">eventmq.exceptions</code></a></td><td> 169 <a href="exceptions.html#module-eventmq.exceptions"><code class="xref">eventmq.exceptions</code></a></td><td>
167 <em></em></td></tr> 170 <em></em></td></tr>
168 <tr class="cg-1"> 171 <tr class="cg-1">
169 <td></td> 172 <td></td>
170 <td>&nbsp;&nbsp;&nbsp; 173 <td>&#160;&#160;&#160;
171 <a href="jobmanager.html#module-eventmq.jobmanager"><code class="xref">eventmq.jobmanager</code></a></td><td> 174 <a href="jobmanager.html#module-eventmq.jobmanager"><code class="xref">eventmq.jobmanager</code></a></td><td>
172 <em></em></td></tr> 175 <em></em></td></tr>
173 <tr class="cg-1"> 176 <tr class="cg-1">
174 <td></td> 177 <td></td>
175 <td>&nbsp;&nbsp;&nbsp; 178 <td>&#160;&#160;&#160;
176 <a href="poller.html#module-eventmq.poller"><code class="xref">eventmq.poller</code></a></td><td> 179 <a href="poller.html#module-eventmq.poller"><code class="xref">eventmq.poller</code></a></td><td>
177 <em></em></td></tr> 180 <em></em></td></tr>
178 <tr class="cg-1"> 181 <tr class="cg-1">
179 <td></td> 182 <td></td>
180 <td>&nbsp;&nbsp;&nbsp; 183 <td>&#160;&#160;&#160;
181 <a href="receiver.html#module-eventmq.receiver"><code class="xref">eventmq.receiver</code></a></td><td> 184 <a href="receiver.html#module-eventmq.receiver"><code class="xref">eventmq.receiver</code></a></td><td>
182 <em></em></td></tr> 185 <em></em></td></tr>
183 <tr class="cg-1"> 186 <tr class="cg-1">
184 <td></td> 187 <td></td>
185 <td>&nbsp;&nbsp;&nbsp; 188 <td>&#160;&#160;&#160;
186 <a href="router.html#module-eventmq.router"><code class="xref">eventmq.router</code></a></td><td> 189 <a href="router.html#module-eventmq.router"><code class="xref">eventmq.router</code></a></td><td>
187 <em></em></td></tr> 190 <em></em></td></tr>
188 <tr class="cg-1"> 191 <tr class="cg-1">
189 <td></td> 192 <td></td>
190 <td>&nbsp;&nbsp;&nbsp; 193 <td>&#160;&#160;&#160;
191 <a href="sender.html#module-eventmq.sender"><code class="xref">eventmq.sender</code></a></td><td> 194 <a href="sender.html#module-eventmq.sender"><code class="xref">eventmq.sender</code></a></td><td>
192 <em></em></td></tr> 195 <em></em></td></tr>
193 <tr class="cg-1"> 196 <tr class="cg-1">
194 <td></td> 197 <td></td>
195 <td>&nbsp;&nbsp;&nbsp; 198 <td>&#160;&#160;&#160;
196 <a href="utils/index.html#module-eventmq.utils"><code class="xref">eventmq.utils</code></a></td><td> 199 <a href="utils/index.html#module-eventmq.utils"><code class="xref">eventmq.utils</code></a></td><td>
197 <em></em></td></tr> 200 <em></em></td></tr>
198 <tr class="cg-1"> 201 <tr class="cg-1">
199 <td></td> 202 <td></td>
200 <td>&nbsp;&nbsp;&nbsp; 203 <td>&#160;&#160;&#160;
201 <a href="utils/classes.html#module-eventmq.utils.classes"><code class="xref">eventmq.utils.classes</code></a></td><td> 204 <a href="utils/classes.html#module-eventmq.utils.classes"><code class="xref">eventmq.utils.classes</code></a></td><td>
202 <em></em></td></tr> 205 <em></em></td></tr>
203 <tr class="cg-1"> 206 <tr class="cg-1">
204 <td></td> 207 <td></td>
205 <td>&nbsp;&nbsp;&nbsp; 208 <td>&#160;&#160;&#160;
206 <a href="utils/devices.html#module-eventmq.utils.devices"><code class="xref">eventmq.utils.devices</code></a></td><td> 209 <a href="utils/devices.html#module-eventmq.utils.devices"><code class="xref">eventmq.utils.devices</code></a></td><td>
207 <em></em></td></tr> 210 <em></em></td></tr>
208 <tr class="cg-1"> 211 <tr class="cg-1">
209 <td></td> 212 <td></td>
210 <td>&nbsp;&nbsp;&nbsp; 213 <td>&#160;&#160;&#160;
211 <a href="utils/messages.html#module-eventmq.utils.messages"><code class="xref">eventmq.utils.messages</code></a></td><td> 214 <a href="utils/messages.html#module-eventmq.utils.messages"><code class="xref">eventmq.utils.messages</code></a></td><td>
212 <em></em></td></tr> 215 <em></em></td></tr>
213 <tr class="cg-1"> 216 <tr class="cg-1">
214 <td></td> 217 <td></td>
215 <td>&nbsp;&nbsp;&nbsp; 218 <td>&#160;&#160;&#160;
216 <a href="utils/settings.html#module-eventmq.utils.settings"><code class="xref">eventmq.utils.settings</code></a></td><td> 219 <a href="utils/settings.html#module-eventmq.utils.settings"><code class="xref">eventmq.utils.settings</code></a></td><td>
217 <em></em></td></tr> 220 <em></em></td></tr>
218 <tr class="cg-1"> 221 <tr class="cg-1">
219 <td></td> 222 <td></td>
220 <td>&nbsp;&nbsp;&nbsp; 223 <td>&#160;&#160;&#160;
221 <a href="utils/timeutils.html#module-eventmq.utils.timeutils"><code class="xref">eventmq.utils.timeutils</code></a></td><td> 224 <a href="utils/timeutils.html#module-eventmq.utils.timeutils"><code class="xref">eventmq.utils.timeutils</code></a></td><td>
222 <em></em></td></tr> 225 <em></em></td></tr>
223 </table> 226 </table>
diff --git a/receiver.html b/receiver.html
index 6e13f51..0a1db1d 100644..100755
--- a/receiver.html
+++ b/receiver.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="up" title="API Documentation" href="api.html"/> 37 <link rel="up" title="API Documentation" href="api.html"/>
35 <link rel="next" title="router – Router" href="router.html"/> 38 <link rel="next" title="router – Router" href="router.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -89,7 +92,7 @@
89<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 92<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
90<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 93<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
91<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 94<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
92<li class="toctree-l2 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li> 95<li class="toctree-l2 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li>
93<li class="toctree-l2"><a class="reference internal" href="router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li> 96<li class="toctree-l2"><a class="reference internal" href="router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li>
94<li class="toctree-l2"><a class="reference internal" href="sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li> 97<li class="toctree-l2"><a class="reference internal" href="sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li>
95<li class="toctree-l2"><a class="reference internal" href="utils/index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a></li> 98<li class="toctree-l2"><a class="reference internal" href="utils/index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a></li>
@@ -118,7 +121,7 @@
118 <div class="rst-content"> 121 <div class="rst-content">
119 122
120 123
121 124
122 125
123 126
124 127
@@ -132,7 +135,7 @@
132 <li class="wy-breadcrumbs-aside"> 135 <li class="wy-breadcrumbs-aside">
133 136
134 137
135 <a href="_sources/receiver.txt" rel="nofollow"> View page source</a> 138 <a href="_sources/receiver.rst.txt" rel="nofollow"> View page source</a>
136 139
137 140
138 </li> 141 </li>
@@ -152,21 +155,19 @@
152<dl class="attribute"> 155<dl class="attribute">
153<dt id="eventmq.receiver.Receiver.name"> 156<dt id="eventmq.receiver.Receiver.name">
154<code class="descname">name</code><a class="headerlink" href="#eventmq.receiver.Receiver.name" title="Permalink to this definition">¶</a></dt> 157<code class="descname">name</code><a class="headerlink" href="#eventmq.receiver.Receiver.name" title="Permalink to this definition">¶</a></dt>
155<dd><p><em>str</em></p> 158<dd><p><em>str</em> &#8211; Name of this socket</p>
156<p>Name of this socket</p>
157</dd></dl> 159</dd></dl>
158 160
159<dl class="attribute"> 161<dl class="attribute">
160<dt id="eventmq.receiver.Receiver.zcontext"> 162<dt id="eventmq.receiver.Receiver.zcontext">
161<code class="descname">zcontext</code><a class="headerlink" href="#eventmq.receiver.Receiver.zcontext" title="Permalink to this definition">¶</a></dt> 163<code class="descname">zcontext</code><a class="headerlink" href="#eventmq.receiver.Receiver.zcontext" title="Permalink to this definition">¶</a></dt>
162<dd><p><a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Context" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Context</span></code></a></p> 164<dd><p><a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Context" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Context</span></code></a> &#8211; socket context</p>
163<p>socket context</p>
164</dd></dl> 165</dd></dl>
165 166
166<dl class="attribute"> 167<dl class="attribute">
167<dt id="eventmq.receiver.Receiver.zsocket"> 168<dt id="eventmq.receiver.Receiver.zsocket">
168<code class="descname">zsocket</code><a class="headerlink" href="#eventmq.receiver.Receiver.zsocket" title="Permalink to this definition">¶</a></dt> 169<code class="descname">zsocket</code><a class="headerlink" href="#eventmq.receiver.Receiver.zsocket" title="Permalink to this definition">¶</a></dt>
169<dd><p><a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a></p> 170<dd><p><a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a></p>
170</dd></dl> 171</dd></dl>
171 172
172<dl class="method"> 173<dl class="method">
@@ -181,17 +182,16 @@
181<col class="field-body" /> 182<col class="field-body" />
182<tbody valign="top"> 183<tbody valign="top">
183<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> 184<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
184<li><strong>name</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; name of this socket. By default a uuid will be 185<li><strong>name</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; name of this socket. By default a uuid will be
185generated</li> 186generated</li>
186<li><strong>context</strong> (<a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Context" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Context</span></code></a>) &#8211; Context to use when buliding the 187<li><strong>context</strong> (<a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Context" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Context</span></code></a>) &#8211; Context to use when buliding the
187socket</li> 188socket</li>
188<li><strong>socket</strong> (<a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a>) &#8211; Should be one of <code class="xref py py-attr docutils literal"><span class="pre">zmq.REP</span></code> or 189<li><strong>socket</strong> (<a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a>) &#8211; Should be one of <code class="xref py py-attr docutils literal"><span class="pre">zmq.REP</span></code> or
189<code class="xref py py-attr docutils literal"><span class="pre">zmq.ROUTER</span></code>. By default a <cite>ROUTER</cite> is used</li> 190<code class="xref py py-attr docutils literal"><span class="pre">zmq.ROUTER</span></code>. By default a <cite>ROUTER</cite> is used</li>
190</ul> 191</ul>
191</td> 192</td>
192</tr> 193</tr>
193<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><p class="first last"><code class="xref py py-exc docutils literal"><span class="pre">:class</span></code> &#8211; 194<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><p class="first last"><code class="xref py py-class docutils literal"><span class="pre">TypeError</span></code> &#8211; when <cite>callable</cite> is not callable</p>
194<cite>TypeError</cite>: when <cite>callable</cite> is not callable</p>
195</td> 195</td>
196</tr> 196</tr>
197</tbody> 197</tbody>
@@ -206,10 +206,9 @@ socket</li>
206<col class="field-name" /> 206<col class="field-name" />
207<col class="field-body" /> 207<col class="field-body" />
208<tbody valign="top"> 208<tbody valign="top">
209<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to connect to as a connection string</td> 209<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to connect to as a connection string</td>
210</tr> 210</tr>
211<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-exc docutils literal"><span class="pre">:class</span></code> &#8211; 211<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">Exception</span></code></td>
212<cite>Exception</cite></td>
213</tr> 212</tr>
214</tbody> 213</tbody>
215</table> 214</table>
@@ -223,10 +222,9 @@ socket</li>
223<col class="field-name" /> 222<col class="field-name" />
224<col class="field-body" /> 223<col class="field-body" />
225<tbody valign="top"> 224<tbody valign="top">
226<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to listen on as a connction string</td> 225<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to listen on as a connction string</td>
227</tr> 226</tr>
228<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-exc docutils literal"><span class="pre">:class</span></code> &#8211; 227<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">Exception</span></code></td>
229<cite>Exception</cite></td>
230</tr> 228</tr>
231</tbody> 229</tbody>
232</table> 230</table>
@@ -240,10 +238,13 @@ socket</li>
240<col class="field-name" /> 238<col class="field-name" />
241<col class="field-body" /> 239<col class="field-body" />
242<tbody valign="top"> 240<tbody valign="top">
243<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">True if the receiver is ready to connect or listen, otherwise 241<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><dl class="docutils">
244False</td> 242<dt>True if the receiver is ready to connect or listen, otherwise</dt>
243<dd>False</dd>
244</dl>
245</td>
245</tr> 246</tr>
246<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)">bool</a></td> 247<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)">bool</a></td>
247</tr> 248</tr>
248</tbody> 249</tbody>
249</table> 250</table>
@@ -257,10 +258,9 @@ False</td>
257<col class="field-name" /> 258<col class="field-name" />
258<col class="field-body" /> 259<col class="field-body" />
259<tbody valign="top"> 260<tbody valign="top">
260<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to disconnect from as a string</td> 261<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to disconnect from as a string</td>
261</tr> 262</tr>
262<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-exc docutils literal"><span class="pre">:class</span></code> &#8211; 263<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">Exception</span></code></td>
263<cite>Exception</cite></td>
264</tr> 264</tr>
265</tbody> 265</tbody>
266</table> 266</table>
diff --git a/router.html b/router.html
index 805edec..0db5b9e 100644..100755
--- a/router.html
+++ b/router.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="up" title="API Documentation" href="api.html"/> 37 <link rel="up" title="API Documentation" href="api.html"/>
35 <link rel="next" title="sender – Sender" href="sender.html"/> 38 <link rel="next" title="sender – Sender" href="sender.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -90,7 +93,7 @@
90<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 93<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
91<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 94<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
92<li class="toctree-l2"><a class="reference internal" href="receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li> 95<li class="toctree-l2"><a class="reference internal" href="receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li>
93<li class="toctree-l2 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li> 96<li class="toctree-l2 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li>
94<li class="toctree-l2"><a class="reference internal" href="sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li> 97<li class="toctree-l2"><a class="reference internal" href="sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li>
95<li class="toctree-l2"><a class="reference internal" href="utils/index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a></li> 98<li class="toctree-l2"><a class="reference internal" href="utils/index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a></li>
96</ul> 99</ul>
@@ -118,7 +121,7 @@
118 <div class="rst-content"> 121 <div class="rst-content">
119 122
120 123
121 124
122 125
123 126
124 127
@@ -132,7 +135,7 @@
132 <li class="wy-breadcrumbs-aside"> 135 <li class="wy-breadcrumbs-aside">
133 136
134 137
135 <a href="_sources/router.txt" rel="nofollow"> View page source</a> 138 <a href="_sources/router.rst.txt" rel="nofollow"> View page source</a>
136 139
137 140
138 </li> 141 </li>
@@ -157,7 +160,7 @@
157<col class="field-name" /> 160<col class="field-name" />
158<col class="field-body" /> 161<col class="field-body" />
159<tbody valign="top"> 162<tbody valign="top">
160<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>scheduler_id</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; unique id of the scheduler to add</td> 163<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>scheduler_id</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; unique id of the scheduler to add</td>
161</tr> 164</tr>
162</tbody> 165</tbody>
163</table> 166</table>
@@ -172,7 +175,7 @@
172<col class="field-body" /> 175<col class="field-body" />
173<tbody valign="top"> 176<tbody valign="top">
174<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 177<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
175<li><strong>worker_id</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; unique id of the worker to add</li> 178<li><strong>worker_id</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; unique id of the worker to add</li>
176<li><strong>queues</strong> &#8211; queue or queues this worker should be a member of</li> 179<li><strong>queues</strong> &#8211; queue or queues this worker should be a member of</li>
177</ul> 180</ul>
178</td> 181</td>
@@ -212,15 +215,13 @@ queue.</p>
212<col class="field-name" /> 215<col class="field-name" />
213<col class="field-body" /> 216<col class="field-body" />
214<tbody valign="top"> 217<tbody valign="top">
215<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><p class="first"><strong>queue_name</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the queue</p> 218<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><p class="first"><strong>queue_name</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the queue</p>
216</td> 219</td>
217</tr> 220</tr>
218<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><ul class="first simple"> 221<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><ul class="first simple">
219<li><code class="xref py py-exc docutils literal"><span class="pre">NoAvailableWorkerSlotsError</span></code> &#8211; 222<li><code class="xref py py-exc docutils literal"><span class="pre">NoAvailableWorkerSlotsError</span></code> &#8211; Raised when there are no available</li>
220Raised when there are no available</li> 223<li>slots in any the job managers.</li>
221<li><strong>slots in any the job managers.</strong> &#8211;</li> 224<li><code class="xref py py-exc docutils literal"><span class="pre">UnknownQueueError</span></code> &#8211; Raised when <code class="docutils literal"><span class="pre">queue_name</span></code> is not found in
222<li><code class="xref py py-exc docutils literal"><span class="pre">UnknownQueueError</span></code> &#8211;
223Raised when <code class="docutils literal"><span class="pre">queue_name</span></code> is not found in
224self.queues</li> 225self.queues</li>
225</ul> 226</ul>
226</td> 227</td>
@@ -228,7 +229,7 @@ self.queues</li>
228<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">uuid of the job manager with an available worker slot</p> 229<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">uuid of the job manager with an available worker slot</p>
229</td> 230</td>
230</tr> 231</tr>
231<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">(str)</p> 232<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">(<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)">str</a>)</p>
232</td> 233</td>
233</tr> 234</tr>
234</tbody> 235</tbody>
@@ -238,14 +239,10 @@ self.queues</li>
238<dl class="method"> 239<dl class="method">
239<dt id="eventmq.router.Router.get_status"> 240<dt id="eventmq.router.Router.get_status">
240<code class="descname">get_status</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.get_status" title="Permalink to this definition">¶</a></dt> 241<code class="descname">get_status</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.get_status" title="Permalink to this definition">¶</a></dt>
241<dd><table class="docutils field-list" frame="void" rules="none"> 242<dd><dl class="docutils">
242<col class="field-name" /> 243<dt>Return</dt>
243<col class="field-body" /> 244<dd>(str) Serialized information about the current state of the router.</dd>
244<tbody valign="top"> 245</dl>
245<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">(str) Serialized information about the current state of the router.</td>
246</tr>
247</tbody>
248</table>
249</dd></dl> 246</dd></dl>
250 247
251<dl class="attribute"> 248<dl class="attribute">
@@ -287,8 +284,8 @@ and announces itself.</p>
287<col class="field-body" /> 284<col class="field-body" />
288<tbody valign="top"> 285<tbody valign="top">
289<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 286<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
290<li><strong>sender</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; The id of the sender</li> 287<li><strong>sender</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; The id of the sender</li>
291<li><strong>msgid</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Unique identifier for this message</li> 288<li><strong>msgid</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Unique identifier for this message</li>
292<li><strong>msg</strong> &#8211; The actual message that was sent</li> 289<li><strong>msg</strong> &#8211; The actual message that was sent</li>
293</ul> 290</ul>
294</td> 291</td>
@@ -316,7 +313,7 @@ measurements</p>
316<li><strong>sender</strong> &#8211; </li> 313<li><strong>sender</strong> &#8211; </li>
317<li><strong>msgid</strong> &#8211; </li> 314<li><strong>msgid</strong> &#8211; </li>
318<li><strong>msgid</strong> &#8211; </li> 315<li><strong>msgid</strong> &#8211; </li>
319<li><strong>depth</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; The recusion depth in retrying when PeerGoneAwayError 316<li><strong>depth</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; The recusion depth in retrying when PeerGoneAwayError
320is raised.</li> 317is raised.</li>
321</ul> 318</ul>
322</td> 319</td>
@@ -333,11 +330,11 @@ is raised.</li>
333<col class="field-name" /> 330<col class="field-name" />
334<col class="field-body" /> 331<col class="field-body" />
335<tbody valign="top"> 332<tbody valign="top">
336<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>unprioritized_iterable</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#iter" title="(in Python v2.7)"><em>iter</em></a>) &#8211; Any list, tuple, etc where the 333<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>unprioritized_iterable</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#iter" title="(in Python v2.7)"><em>iter</em></a>) &#8211; Any list, tuple, etc where the
3370-index key is an integer to use as priority. Largest numbers 3340-index key is an integer to use as priority. Largest numbers
338come first.</td> 335come first.</td>
339</tr> 336</tr>
340<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><strong>IndexError - There was no 0-index element.</strong> &#8211;</td> 337<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body">IndexError - There was no 0-index element.</td>
341</tr> 338</tr>
342<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">decsending order list. E.g. ((20, &#8216;a&#8217;), (14, &#8216;b&#8217;), (12, &#8216;c&#8217;))</td> 339<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">decsending order list. E.g. ((20, &#8216;a&#8217;), (14, &#8216;b&#8217;), (12, &#8216;c&#8217;))</td>
343</tr> 340</tr>
@@ -359,8 +356,7 @@ called. This is used to short circuit message retry attempts.</li>
359</ul> 356</ul>
360</td> 357</td>
361</tr> 358</tr>
362<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><p class="first last"><code class="xref py py-exc docutils literal"><span class="pre">InvalidMessageError</span></code> &#8211; 359<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><p class="first last"><code class="xref py py-exc docutils literal"><span class="pre">InvalidMessageError</span></code> &#8211; Unable to parse the message</p>
363Unable to parse the message</p>
364</td> 360</td>
365</tr> 361</tr>
366</tbody> 362</tbody>
@@ -421,7 +417,7 @@ worker slot, so you may see duplicate addresses.</p>
421<dl class="attribute"> 417<dl class="attribute">
422<dt id="eventmq.router.Router.scheduler_queue"> 418<dt id="eventmq.router.Router.scheduler_queue">
423<code class="descname">scheduler_queue</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.router.Router.scheduler_queue" title="Permalink to this definition">¶</a></dt> 419<code class="descname">scheduler_queue</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.router.Router.scheduler_queue" title="Permalink to this definition">¶</a></dt>
424<dd><p>Queue for schedulers to use:</p> 420<dd><p><em>Queue for schedulers to use</em></p>
425</dd></dl> 421</dd></dl>
426 422
427<dl class="attribute"> 423<dl class="attribute">
@@ -449,8 +445,8 @@ Contains dictionaries:</p>
449<col class="field-body" /> 445<col class="field-body" />
450<tbody valign="top"> 446<tbody valign="top">
451<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> 447<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
452<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; The socket to use for this ack</li> 448<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/2/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; The socket to use for this ack</li>
453<li><strong>recipient</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; The recipient id for the ack</li> 449<li><strong>recipient</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; The recipient id for the ack</li>
454<li><strong>msgid</strong> &#8211; The unique id that we are acknowledging</li> 450<li><strong>msgid</strong> &#8211; The unique id that we are acknowledging</li>
455</ul> 451</ul>
456</td> 452</td>
@@ -475,8 +471,8 @@ needed when building messages</p>
475<col class="field-body" /> 471<col class="field-body" />
476<tbody valign="top"> 472<tbody valign="top">
477<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> 473<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
478<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; the socket to send the heartbeat with</li> 474<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/2/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; the socket to send the heartbeat with</li>
479<li><strong>recipient</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Worker I</li> 475<li><strong>recipient</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Worker I</li>
480</ul> 476</ul>
481</td> 477</td>
482</tr> 478</tr>
@@ -518,9 +514,9 @@ process receives a SIGHUP from the system.</p>
518<col class="field-body" /> 514<col class="field-body" />
519<tbody valign="top"> 515<tbody valign="top">
520<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 516<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
521<li><strong>frontend_addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; connection string to listen for requests</li> 517<li><strong>frontend_addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; connection string to listen for requests</li>
522<li><strong>backend_addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; connection string to listen for workers</li> 518<li><strong>backend_addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; connection string to listen for workers</li>
523<li><strong>administrative_addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; connection string to listen for emq-cli 519<li><strong>administrative_addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; connection string to listen for emq-cli
524commands on.</li> 520commands on.</li>
525</ul> 521</ul>
526</td> 522</td>
diff --git a/search.html b/search.html
index b9b5a01..e92f8cd 100644..100755
--- a/search.html
+++ b/search.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="#"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 37
35 38
@@ -58,7 +61,7 @@
58 61
59 62
60 <div class="version"> 63 <div class="version">
61 0.2.7.1 64 0.3-rc8
62 </div> 65 </div>
63 66
64 67
@@ -113,7 +116,7 @@
113 <ul class="wy-breadcrumbs"> 116 <ul class="wy-breadcrumbs">
114 <li><a href="index.html">Docs</a> &raquo;</li> 117 <li><a href="index.html">Docs</a> &raquo;</li>
115 118
116 <li></li> 119 <li>Search</li>
117 <li class="wy-breadcrumbs-aside"> 120 <li class="wy-breadcrumbs-aside">
118 121
119 </li> 122 </li>
diff --git a/searchindex.js b/searchindex.js
index da74dc4..26c791a 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
Search.setIndex({envversion:46,filenames:["api","client","client/jobs","client/messages","contributing","exceptions","index","jobmanager","poller","protocol","receiver","router","sender","settings_file","using","utils/classes","utils/devices","utils/index","utils/messages","utils/settings","utils/timeutils"],objects:{"eventmq.client":{jobs:[2,0,0,"-"],messages:[3,0,0,"-"]},"eventmq.client.jobs":{Job:[2,4,1,""],job:[2,3,1,""]},"eventmq.client.jobs.Job":{"__init__":[2,2,1,""],"__weakref__":[2,1,1,""]},"eventmq.client.messages":{defer_job:[3,3,1,""],schedule:[3,3,1,""],send_request:[3,3,1,""],send_schedule_request:[3,3,1,""]},"eventmq.exceptions":{CallableFromPathError:[5,5,1,""],EventMQError:[5,5,1,""],InvalidMessageError:[5,5,1,""],MessageError:[5,5,1,""],NoAvailableWorkerSlotsError:[5,5,1,""],PeerGoneAwayError:[5,5,1,""],UnknownQueueError:[5,5,1,""]},"eventmq.jobmanager":{JobManager:[7,4,1,""],mp_init:[7,3,1,""]},"eventmq.jobmanager.JobManager":{"__init__":[7,2,1,""],concurrent_jobs:[7,1,1,""],jobmanager_main:[7,2,1,""],name:[7,1,1,""],on_heartbeat:[7,2,1,""],on_request:[7,2,1,""],outgoing:[7,1,1,""],queues:[7,1,1,""],send_ready:[7,2,1,""],send_reply:[7,2,1,""]},"eventmq.poller":{Poller:[8,4,1,""]},"eventmq.poller.Poller":{"__init__":[8,2,1,""],poll:[8,2,1,""],register:[8,2,1,""],unregister:[8,2,1,""]},"eventmq.receiver":{Receiver:[10,4,1,""]},"eventmq.receiver.Receiver":{"__init__":[10,2,1,""],connect:[10,2,1,""],listen:[10,2,1,""],name:[10,1,1,""],ready:[10,1,1,""],unbind:[10,2,1,""],zcontext:[10,1,1,""],zsocket:[10,1,1,""]},"eventmq.router":{Router:[11,4,1,""]},"eventmq.router.Router":{add_scheduler:[11,2,1,""],add_worker:[11,2,1,""],clean_up_dead_schedulers:[11,2,1,""],clean_up_dead_workers:[11,2,1,""],executed_functions:[11,1,1,""],get_available_worker:[11,2,1,""],get_status:[11,2,1,""],job_latencies:[11,1,1,""],on_disconnect:[11,2,1,""],on_heartbeat:[11,2,1,""],on_inform:[11,2,1,""],on_ready:[11,2,1,""],on_reply:[11,2,1,""],on_request:[11,2,1,""],prioritize_queue_list:[11,6,1,""],process_client_message:[11,2,1,""],process_worker_message:[11,2,1,""],queues:[11,1,1,""],received_disconnect:[11,1,1,""],requeue_worker:[11,2,1,""],reset_heartbeat_counters:[11,2,1,""],router_main:[11,2,1,""],scheduler_queue:[11,1,1,""],schedulers:[11,1,1,""],send_ack:[11,2,1,""],send_heartbeat:[11,2,1,""],send_schedulers_heartbeats:[11,2,1,""],send_workers_heartbeats:[11,2,1,""],sighup_handler:[11,2,1,""],start:[11,2,1,""],waiting_messages:[11,1,1,""],workers:[11,1,1,""]},"eventmq.sender":{Sender:[12,4,1,""]},"eventmq.sender.Sender":{"__init__":[12,2,1,""],connect:[12,2,1,""],listen:[12,2,1,""],name:[12,1,1,""],ready:[12,1,1,""],rebuild:[12,2,1,""],unbind:[12,2,1,""],zcontext:[12,1,1,""],zsocket:[12,1,1,""]},"eventmq.utils":{classes:[15,0,0,"-"],devices:[16,0,0,"-"],messages:[18,0,0,"-"],random_characters:[17,3,1,""],settings:[19,0,0,"-"],timeutils:[20,0,0,"-"],tuplify:[17,3,1,""],zero_index_cmp:[17,3,1,""]},"eventmq.utils.classes":{EMQPService:[15,4,1,""],EMQdeque:[15,4,1,""],HeartbeatMixin:[15,4,1,""],ZMQReceiveMixin:[15,4,1,""],ZMQSendMixin:[15,4,1,""]},"eventmq.utils.classes.EMQPService":{"__weakref__":[15,1,1,""],is_heartbeat_enabled:[15,1,1,""],on_ack:[15,2,1,""],process_message:[15,2,1,""],reset:[15,2,1,""],send_inform:[15,2,1,""],start:[15,2,1,""]},"eventmq.utils.classes.EMQdeque":{"__init__":[15,2,1,""],"__weakref__":[15,1,1,""],append:[15,2,1,""],appendleft:[15,2,1,""],extend:[15,2,1,""],is_empty:[15,2,1,""],is_full:[15,2,1,""],is_pfull:[15,2,1,""],peek:[15,2,1,""],peekleft:[15,2,1,""],pop:[15,2,1,""],popleft:[15,2,1,""],remove:[15,2,1,""]},"eventmq.utils.classes.HeartbeatMixin":{"__init__":[15,2,1,""],"__weakref__":[15,1,1,""],is_dead:[15,2,1,""],reset_heartbeat_counters:[15,2,1,""],send_heartbeat:[15,2,1,""]},"eventmq.utils.classes.ZMQReceiveMixin":{"__weakref__":[15,1,1,""],recv:[15,2,1,""],recv_multipart:[15,2,1,""]},"eventmq.utils.classes.ZMQSendMixin":{"__weakref__":[15,1,1,""],send:[15,2,1,""],send_multipart:[15,2,1,""]},"eventmq.utils.devices":{generate_device_name:[16,3,1,""]},"eventmq.utils.messages":{fwd_emqp_router_message:[18,3,1,""],generate_msgid:[18,3,1,""],parse_message:[18,3,1,""],parse_router_message:[18,3,1,""],send_emqp_message:[18,3,1,""],send_emqp_router_message:[18,3,1,""]},"eventmq.utils.settings":{import_settings:[19,3,1,""]},"eventmq.utils.timeutils":{IntervalIter:[20,4,1,""],monotonic:[20,3,1,""],seconds_until:[20,3,1,""],timestamp:[20,3,1,""]},"eventmq.utils.timeutils.IntervalIter":{"__init__":[20,2,1,""],"__weakref__":[20,1,1,""]},eventmq:{client:[1,0,0,"-"],exceptions:[5,0,0,"-"],jobmanager:[7,0,0,"-"],poller:[8,0,0,"-"],receiver:[10,0,0,"-"],router:[11,0,0,"-"],sender:[12,0,0,"-"],utils:[17,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","attribute","Python attribute"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","class","Python class"],"5":["py","exception","Python exception"],"6":["py","classmethod","Python class method"]},objtypes:{"0":"py:module","1":"py:attribute","2":"py:method","3":"py:function","4":"py:class","5":"py:exception","6":"py:classmethod"},terms:{"0mq":[9,15],"5min":20,"__init__":[2,7,8,10,12,15,20],"__weakref__":[2,15,20],"_empty_":9,"_headers_":9,"_msg_":9,"_msgid_":9,"_queue_name_":9,"_queues_":9,"_recipient_id":15,"_topic_name_":9,"_unix_ts_":9,"abstract":9,"boolean":15,"case":[9,15,20],"class":[],"default":[2,3,7,9,10,11,12,13,15],"float":[15,20],"function":[2,3,7,11],"import":[2,3,4,7,11,13,19],"int":[3,8,9,11,15,20],"long":[8,15],"new":[7,11,15],"public":9,"return":[3,4,8,10,11,12,15,16,17,18,20],"short":11,"true":[2,9,10,11,12,15],"while":9,abl:[11,13],about:[7,9,11],absolut:4,accept:[9,13,15],account:[11,18],ack:[7,9,11],ackd_msgid:15,acknowledg:[7,9,11],across:9,act:[1,9],actual:[7,11],add:11,add_schedul:11,add_work:11,addr:[10,12,15],address:[],administrative_addr:11,after:9,agre:9,all:[2,3,5,7,9,10,11,12,15],allow:9,alpha:9,alreadi:11,also:15,alwai:3,and_data:18,ani:[3,9,11,14,17],announc:11,anoth:[7,11,13],anyth:13,app:[2,15],appear:8,append:15,appendleft:15,appened:11,appli:19,applic:[3,9,14],arg2:3,arg3:3,arg:[2,3,7,8,10,11,12,15],argument:15,arithmet:20,arrai:9,as_str:2,ascii:16,assign:13,assum:20,async:2,attempt:[5,11],attr:8,automat:15,avail:[5,11],available_slot:11,awaiting_ack:15,back:[9,11,15],backend_addr:11,backward:15,base:[5,8,13,15],basi:9,becaus:[11,15],becom:13,been:[3,11,15],befor:[3,8,9],begin:[11,13,15,20],belong:11,below:9,best:3,between:[3,9,20],block:13,bool:[2,3,7,10,12,15],boot:20,both:[8,9],box:13,broadcast:9,broker:[2,7,9,14,15],broker_addr:[2,7],buffer:11,build:[11,12],built:9,bulid:10,calabl:3,calcul:20,call:[3,8,11,15],callabl:[3,5,7,10],callable_nam:5,callablefrompatherror:5,callback:15,can:[1,2,3,7,9,11,14,15,16,18],captur:15,care:16,caus:16,certain:15,chang:9,charact:17,check:[10,12,15],child:7,choos:13,circuit:11,class_arg:[3,7],class_kwarg:[3,7],classmethod:11,clean:9,clean_up_dead_schedul:11,clean_up_dead_work:11,clear:11,cli:11,client:[],clock:20,close:[15,20],cmp:17,code:[4,6,15],collect:15,colon:[3,13],com:2,come:[3,11],comma:9,command:[3,7,9,11,15,18],compar:17,compat:15,complet:9,compon:9,concurr:13,concurrent_job:[],conf:[],config:13,configur:[3,11,19],connction:[10,12],connect:[7,9,10,11,12,14,15,18],consist:9,construct:5,contact:5,contain:[1,9,11,15,17],context:[7,10,12],control:13,contruct:15,convers:9,convert:17,convienc:[8,15],copi:7,core:13,count:[7,9,11,20],counter:[11,15],cpu:13,creat:[2,11,12,17],cron:3,csv:9,current:[10,11,12,15],custom:11,cycl:13,data:[11,18],data_process:13,deal:17,dealer:12,death:15,debounc:3,debounce_deferred_job:3,debounce_sec:3,debug:9,decor:2,decsend:11,def:2,defeat:9,defer:[2,3],defer_job:3,defin:[2,3,7,9,10,12,15,20],deliv:[7,9],denot:3,depth:11,dequ:15,describ:9,descript:9,detail:9,detect:9,determin:9,devic:[],dialog:9,dict:[3,7,8],dictionari:[8,9,11],die:11,differ:4,directli:[8,15],disabl:3,distribut:9,doe:15,doesn:8,don:[7,9],dot:3,down:[13,20],dst:20,duplic:11,dure:12,each:11,effici:13,effort:3,either:[9,15],elaps:9,element:[11,15],els:[4,9],email:[2,9,13],emit:2,empti:[9,18],emq:11,emq_broker_addr:[2,14],emqdequ:15,emqpservic:15,enabl:[3,15],encod:16,encount:[3,5],end:[3,15],ensur:[3,7,9,15],entri:11,environ:[],equal:13,error:[3,15,16],etc:[11,13],evalu:3,even:9,event:[8,15],eventmq:[],eventmqerror:5,everi:[3,7],everyth:16,exampl:[11,13,15,20],excecut:11,except:[],exectu:11,execut:[2,3,9,13,20],executed_funct:11,exist:[5,7],explicitli:[13,15],expos:7,extend:15,extra:9,fail:[3,5,9],failur:3,fair:9,fals:[2,3,9,10,12,15],featur:16,few:4,field:9,file:13,find:15,finish:[9,11],first:[9,11,15,18],fit:9,flag:[3,8],follow:[3,9,15],foobar:2,fork:7,form:15,format:[3,7,9,11,18],forward:[11,15,18],found:[5,11,13],foundat:9,free:9,from:[2,5,7,8,9,10,11,12,15,20],frontend_addr:11,fuction:3,full:15,func:[2,3,7,15],function_nam:11,fwd_emqp_router_messag:18,gener:[7,8,9,10,12,18],generate_device_nam:16,generate_msgid:18,get:11,get_available_work:11,get_statu:11,give:3,given:[2,11],gmail:2,gnu:9,good:15,gotten:20,group:13,guarante:[3,9],guarente:3,hand:17,handl:[7,9,11,15],handler:7,happen:[3,8,11,12],hard:15,hasn:11,have:[3,13,15,18],haven:11,header:[],heartbeat:[],heartbeat_timeout:11,heartbeati:15,heartbeatmixin:15,heavi:9,help:13,helper:[],here:[9,11],highest:13,hit:15,hope:9,how:[3,8],html:9,http:9,ident:[9,16],identifi:11,ietf:9,ignor:[9,15],immedi:[3,9],immediatli:3,implement:[9,15],impli:9,import_set:19,includ:[3,9,15],index:[6,11,17],indexerror:11,indiviud:13,infinit:3,inform:[2,3,7,9,11,15],inherit:5,ini:[13,19],initi:[3,15],insert:[9,15],instal:4,instanc:7,instanti:[3,7],instead:9,integ:11,intens:13,interest:17,intern:5,interpret:9,interv:[3,9,20],interval_sec:[3,20],intervalit:20,invalidmessageerror:[5,11],is_dead:15,is_empti:15,is_ful:15,is_heartbeat_en:15,is_pful:15,isn:[11,15],issu:[4,6,9],item:15,iter:[8,11,15],iterat:15,itself:11,job:[],job_lat:11,job_schedul:3,jobmanag:[],jobmanager_main:7,json:3,keep:[7,11],kei:[8,9,11],kick:[7,11],kill:[3,9],know:[3,7,11],kwarg2:3,kwarg:[2,3,7,8,10,11,12,15],larg:13,larger:13,largest:11,last:[3,11,15],last_recv_heartbeat:11,lataneci:11,latenc:11,later:9,least:[9,15],leav:[9,13],left:15,length:[15,17],lesser:9,let:9,like:[7,15,17],limit:15,list:[2,3,5,7,9,11,13,15,17,20],listen:[7,10,11,12,13,15],load:13,local:13,locat:3,log:[3,7,11],logic:[7,11],login:2,longer:[5,13],look:15,loop:[8,11,15],lot:13,lower:11,mai:[9,11,15],main:7,make:17,malform:5,manag:[],mani:[3,9,12],manual:9,master:9,match:15,mean:3,measur:11,member:11,memebership:11,merchant:9,mess:20,messag:[],message_bodi:18,message_id:18,messageerror:5,met:15,meta:[11,18],method:[3,7,8,11,15],mime:2,mimetext:2,minut:3,model:13,modifi:9,modul:[1,6,7,17],monoton:[11,15,20],more:[2,3,9,15,17],most:15,mp_init:7,msg:[2,7,9,11,15,18],msgid:[7,11,15],multipart:[9,15],multiprocess:[7,13],must:[3,9,15],name:[2,3,7,9,10,11,12,13,19],need:[7,11,12],never:[7,9,20],next:[8,11,13,20],noavailableworkerslotserror:[5,11],nohast:9,none:[2,3,7,10,11,12,15,16,18],noop:7,normal:15,note:[7,10,12],notifi:15,now:15,number:[3,11,13,20],numer:20,obj:11,object:[2,8,15,17,20],occur:15,off:[7,11],on_ack:15,on_command:[11,15],on_disconnect:11,on_emqp_command:15,on_ful:15,on_heartbeat:[7,11],on_inform:11,on_readi:11,on_recv:10,on_repli:11,on_request:[7,11],on_schedul:15,onc:9,onlin:[11,15],option:[3,7,9,10,12,18],order:11,org:9,orient:9,origin:9,original_msg:11,other:[3,9,13],otherwis:[7,10,12,15],out:[7,9,15],outgo:[7,15],own:15,page:6,param:3,paramet:[2,3,7,8,10,11,12,15,16,17,18,19,20],pars:[11,15,18],parse_messag:18,parse_router_messag:18,part:[9,18],particular:[2,9,12],pass:[3,9,10,15],password:2,path:[3,5,7],payload:18,peek:15,peekleft:15,peer:[5,9,15],peergoneawayerror:[5,11],pend:9,per:11,pfull:15,pictur:9,placehold:[7,11],point:13,poll:8,poller:[],pollin:8,pollout:8,pool:[9,11],pop:[11,15],popleft:15,port:11,portion:7,possibl:4,practic:15,prefix:[16,18],prepar:11,prepend:9,pretti:[9,13],priorit:11,prioriti:11,prioritiess:11,prioritize_queue_list:11,problem:5,process:[7,9,11,12,13,15],process_client_messag:11,process_messag:[7,15],process_worker_messag:11,programm:15,proper:15,properti:[10,12,15],protocol:[],protocol_vers:15,provid:[2,11,15],pub:9,publish:9,purpos:9,push_notif:15,py2:20,py3:20,python3:16,python:[7,15],queue:[],queue_nam:11,quit:2,rais:[3,5,10,11,12,15,18],random:[17,18],random_charact:17,raw:15,readi:[7,9,10,11,12,13,15],rebind:11,rebuild:12,rebuilt:7,receiv:[],received_disconnect:11,recent:[9,11],recipi:[2,7,11,15,18],recipient_id:18,recommend:[9,13,15],reconnect:12,recurs:[11,17],recus:11,recv:15,recv_multipart:15,redistribut:9,refer:[2,7,9,15,20],regist:[7,8,11],regular:9,reject:15,rel:4,reliabl:9,reload:11,remain:8,remot:15,remov:[9,11,15],reopen:15,rep:10,repli:[2,3,7,9,11,18],reply_request:3,repres:20,req:12,request:[1,3,7,9,11,15],requeue_work:11,requir:9,reset:[11,15],reset_heartbeat_count:[11,15],resourc:[7,9],respond:[9,11,15],respons:[7,10,11,12],restart:[9,12],retri:[3,9,11],retry_count:3,rfc2119:9,rfc:9,right:15,robin:9,roughli:12,round:9,rout:[9,11],router:[],router_main:11,run:[2,3,7,9,11,13,15],safe:13,sake:20,same:[12,17],schedul:[],scheduler_id:11,scheduler_queu:11,scheduler_zmq_id:11,search:6,sec:3,second:[3,9,20],seconds_until:20,section:19,see:[2,3,8,9,11,15],self:[7,11,12,15],semi:13,send:[2,3,5,7,9,11,12,15,18],send_ack:11,send_email:2,send_emqp_messag:18,send_emqp_router_messag:18,send_heartbeat:[11,15],send_inform:15,send_multipart:15,send_readi:7,send_repli:7,send_request:3,send_schedule_request:3,send_schedulers_heartbeat:11,send_workers_heartbeat:11,sender:[],sender_id:18,sendmail:2,sent:[3,7,9,11,13,15],seper:[3,9,13],serial:11,serializ:3,serv:9,server:[],servic:[9,15],service_typ:15,set:[],shall:9,should:[2,3,5,8,9,10,11,12,13,14,15,18],shown:9,sighup:11,sighup_handl:11,signal:7,signum:11,similar:13,simpl:[11,17],sinc:20,singl:[9,15],size:15,skip:[12,15],skip_sign:7,skip_zmqstream:12,slot:11,slow:13,smaller:13,smtp:2,smtplib:2,socket:[3,7,8,9,10,11,12,15,16,18],softwar:9,some:[3,7,13,15,17,18],someon:9,someth:[3,12,13,15,20],somewher:4,sort:17,sourc:[4,6],spawn:7,specif:[],specifi:[9,15,17],standard:13,start:[7,10,11,12,13,15,20],start_valu:20,state:[11,15],statu:9,still:[2,11,13],stop:9,store:11,str:[2,3,7,10,11,12,15,16,17,18,19],string:[3,9,10,11,12,15,16,18],structur:5,style:13,sub:9,subclass:5,subcmd:7,subcommand:[3,7],subject:[2,9],subset:9,subtract:20,success:9,successfulli:15,support:15,synchron:2,system:[4,11],take:[11,12,15,16,18],task:[3,7],tcp:11,tell:7,term:9,termin:7,test:[2,7],text:2,thei:[3,15],them:10,thi:[1,2,3,5,7,8,9,10,11,12,13,15,16,17,18,20],thier:13,thing:[3,7,12,13,15,17,18],those:7,thread:13,threshold:15,through:[9,11],time:[],timeout:[3,8,9],timestamp:[9,11,20],timeutil:[],tip:4,tool:9,topic:9,trace:9,track:[7,11,15],tri:3,tune:13,tupl:[7,8,11,15,17,18],tuplifi:17,type:[3,9,10,11,12,15,17,18],type_:15,typecast:8,typeerror:[3,10],unabl:11,unbind:[10,12],undefin:[2,8],under:9,unicod:16,uniqu:[7,9,11],unit:[2,7],unix:9,unknownqueueerror:[5,11],unless:[7,10,12],unprioritized_iter:11,unregist:8,unschedul:[3,9],until:[13,20],untouch:[11,18],unus:9,updat:15,upon:9,upstream:7,usag:[2,20],usual:[15,20],util:[],utilit:[],utlitii:15,uuid:[7,10,11,12],valid:9,valu:[2,3,8,9,11,15,17,18,20],valueerror:15,variabl:[],version:[4,9,15],via:[3,20],wait:[3,8,13],waiting_messag:11,walk:7,want:[2,9,13,15],warn:[2,11],warranti:9,weak:[2,15,20],web:9,weight:[9,13,15],well:9,when:[1,3,4,5,7,9,10,11,12,15,16,17],where:[3,9,11,15,20],which:[3,9,11,15,16],who:[1,11],wish:18,without:[7,9,12],word:9,work:[4,7,15],worker:[],worker_id:11,worri:9,would:[13,15,20],wrap:3,wrapper:3,you:[2,4,9,11,12,13,15,18],your:[3,9,13,15],zcontext:[10,12],zero_index_cmp:17,zeromq:9,zmq:[8,9,10,11,12,15,16,18],zmqreceivemixin:15,zmqsendmixin:15,zmqstream:12,zsocket:[10,12]},titles:["API Documentation","<code class=\"docutils literal\"><span class=\"pre\">client</span></code> &#8211; Client Utilities","<code class=\"docutils literal\"><span class=\"pre\">jobs</span></code> &#8211; Client Job Helpers","<code class=\"docutils literal\"><span class=\"pre\">messages</span></code> &#8211; Client Messaging","Contributing to EventMQ","<code class=\"docutils literal\"><span class=\"pre\">exceptions</span></code> &#8211; Exceptions","EventMQ Documentation","<code class=\"docutils literal\"><span class=\"pre\">jobmanager</span></code> &#8211; Job Manager","<code class=\"docutils literal\"><span class=\"pre\">poller</span></code> &#8211; Poller","EventMQ Protocol Specification","<code class=\"docutils literal\"><span class=\"pre\">receiver</span></code> &#8211; Receiver","<code class=\"docutils literal\"><span class=\"pre\">router</span></code> &#8211; Router","<code class=\"docutils literal\"><span class=\"pre\">sender</span></code> &#8211; Sender","Server Settings (eventmq.conf)","Using EventMQ","<code class=\"docutils literal\"><span class=\"pre\">classes</span></code> &#8211; Utility Classes","<code class=\"docutils literal\"><span class=\"pre\">devices</span></code> &#8211; Device Utilities","<code class=\"docutils literal\"><span class=\"pre\">utils</span></code> &#8211; Utilities","<code class=\"docutils literal\"><span class=\"pre\">messages</span></code> &#8211; Message Utilities","<code class=\"docutils literal\"><span class=\"pre\">settings</span></code> &#8211; Settings Utilities","<code class=\"docutils literal\"><span class=\"pre\">timeutils</span></code> &#8211; Time Utilites"],titleterms:{"class":15,address:9,api:0,architectur:9,client:[1,2,3,9,14],concurrent_job:13,conf:13,contribut:4,devic:16,disconnect:9,document:[0,6],emqp:9,environ:14,eventmq:[4,6,9,13,14],except:5,frame:9,global:9,goal:9,header:9,heartbeat:9,helper:2,indic:6,job:[2,7,13],jobmanag:7,kbai:9,languag:9,licens:9,manag:[7,13],messag:[3,18],poller:8,protocol:9,queue:13,receiv:10,router:[9,11,13],schedul:[9,13],sender:12,server:13,set:[13,19],specif:9,tabl:6,time:20,timeutil:20,topolog:9,util:[1,15,16,17,18,19],utilit:20,variabl:14,worker:9}}) \ No newline at end of file Search.setIndex({docnames:["api","client","client/jobs","client/messages","contributing","exceptions","index","jobmanager","poller","protocol","receiver","router","sender","settings_file","using","utils/classes","utils/devices","utils/index","utils/messages","utils/settings","utils/timeutils"],envversion:50,filenames:["api.rst","client.rst","client/jobs.rst","client/messages.rst","contributing.rst","exceptions.rst","index.rst","jobmanager.rst","poller.rst","protocol.rst","receiver.rst","router.rst","sender.rst","settings_file.rst","using.rst","utils/classes.rst","utils/devices.rst","utils/index.rst","utils/messages.rst","utils/settings.rst","utils/timeutils.rst"],objects:{"eventmq.client":{jobs:[2,0,0,"-"],messages:[3,0,0,"-"]},"eventmq.client.jobs":{Job:[2,1,1,""],job:[2,4,1,""]},"eventmq.client.jobs.Job":{__init__:[2,2,1,""],__weakref__:[2,3,1,""]},"eventmq.client.messages":{defer_job:[3,4,1,""],schedule:[3,4,1,""],send_request:[3,4,1,""],send_schedule_request:[3,4,1,""]},"eventmq.exceptions":{CallableFromPathError:[5,5,1,""],EventMQError:[5,5,1,""],InvalidMessageError:[5,5,1,""],MessageError:[5,5,1,""],NoAvailableWorkerSlotsError:[5,5,1,""],PeerGoneAwayError:[5,5,1,""],UnknownQueueError:[5,5,1,""]},"eventmq.jobmanager":{JobManager:[7,1,1,""]},"eventmq.jobmanager.JobManager":{__init__:[7,2,1,""],check_worker_health:[7,2,1,""],concurrent_jobs:[7,3,1,""],jobmanager_main:[7,2,1,""],name:[7,3,1,""],on_heartbeat:[7,2,1,""],on_request:[7,2,1,""],outgoing:[7,3,1,""],queues:[7,3,1,""],request_queue:[7,3,1,""],send_ready:[7,2,1,""],send_reply:[7,2,1,""]},"eventmq.poller":{Poller:[8,1,1,""]},"eventmq.poller.Poller":{__init__:[8,2,1,""],poll:[8,2,1,""],register:[8,2,1,""],unregister:[8,2,1,""]},"eventmq.receiver":{Receiver:[10,1,1,""]},"eventmq.receiver.Receiver":{__init__:[10,2,1,""],connect:[10,2,1,""],listen:[10,2,1,""],name:[10,3,1,""],ready:[10,3,1,""],unbind:[10,2,1,""],zcontext:[10,3,1,""],zsocket:[10,3,1,""]},"eventmq.router":{Router:[11,1,1,""]},"eventmq.router.Router":{add_scheduler:[11,2,1,""],add_worker:[11,2,1,""],clean_up_dead_schedulers:[11,2,1,""],clean_up_dead_workers:[11,2,1,""],executed_functions:[11,3,1,""],get_available_worker:[11,2,1,""],get_status:[11,2,1,""],job_latencies:[11,3,1,""],on_disconnect:[11,2,1,""],on_heartbeat:[11,2,1,""],on_inform:[11,2,1,""],on_ready:[11,2,1,""],on_reply:[11,2,1,""],on_request:[11,2,1,""],prioritize_queue_list:[11,6,1,""],process_client_message:[11,2,1,""],process_worker_message:[11,2,1,""],queues:[11,3,1,""],received_disconnect:[11,3,1,""],requeue_worker:[11,2,1,""],reset_heartbeat_counters:[11,2,1,""],router_main:[11,2,1,""],scheduler_queue:[11,3,1,""],schedulers:[11,3,1,""],send_ack:[11,2,1,""],send_heartbeat:[11,2,1,""],send_schedulers_heartbeats:[11,2,1,""],send_workers_heartbeats:[11,2,1,""],sighup_handler:[11,2,1,""],start:[11,2,1,""],waiting_messages:[11,3,1,""],workers:[11,3,1,""]},"eventmq.sender":{Sender:[12,1,1,""]},"eventmq.sender.Sender":{__init__:[12,2,1,""],connect:[12,2,1,""],listen:[12,2,1,""],name:[12,3,1,""],ready:[12,3,1,""],rebuild:[12,2,1,""],unbind:[12,2,1,""],zcontext:[12,3,1,""],zsocket:[12,3,1,""]},"eventmq.utils":{classes:[15,0,0,"-"],devices:[16,0,0,"-"],messages:[18,0,0,"-"],random_characters:[17,4,1,""],settings:[19,0,0,"-"],timeutils:[20,0,0,"-"],tuplify:[17,4,1,""]},"eventmq.utils.classes":{EMQPService:[15,1,1,""],EMQdeque:[15,1,1,""],HeartbeatMixin:[15,1,1,""],ZMQReceiveMixin:[15,1,1,""],ZMQSendMixin:[15,1,1,""]},"eventmq.utils.classes.EMQPService":{__weakref__:[15,3,1,""],is_heartbeat_enabled:[15,3,1,""],on_ack:[15,2,1,""],process_message:[15,2,1,""],reset:[15,2,1,""],send_inform:[15,2,1,""],start:[15,2,1,""]},"eventmq.utils.classes.EMQdeque":{__init__:[15,2,1,""],__weakref__:[15,3,1,""],append:[15,2,1,""],appendleft:[15,2,1,""],extend:[15,2,1,""],is_empty:[15,2,1,""],is_full:[15,2,1,""],is_pfull:[15,2,1,""],peek:[15,2,1,""],peekleft:[15,2,1,""],pop:[15,2,1,""],popleft:[15,2,1,""],remove:[15,2,1,""]},"eventmq.utils.classes.HeartbeatMixin":{__init__:[15,2,1,""],__weakref__:[15,3,1,""],is_dead:[15,2,1,""],reset_heartbeat_counters:[15,2,1,""],send_heartbeat:[15,2,1,""]},"eventmq.utils.classes.ZMQReceiveMixin":{__weakref__:[15,3,1,""],recv:[15,2,1,""],recv_multipart:[15,2,1,""]},"eventmq.utils.classes.ZMQSendMixin":{__weakref__:[15,3,1,""],send:[15,2,1,""],send_multipart:[15,2,1,""]},"eventmq.utils.devices":{generate_device_name:[16,4,1,""]},"eventmq.utils.messages":{fwd_emqp_router_message:[18,4,1,""],generate_msgid:[18,4,1,""],parse_message:[18,4,1,""],parse_router_message:[18,4,1,""],send_emqp_message:[18,4,1,""],send_emqp_router_message:[18,4,1,""]},"eventmq.utils.settings":{import_settings:[19,4,1,""]},"eventmq.utils.timeutils":{IntervalIter:[20,1,1,""],monotonic:[20,4,1,""],seconds_until:[20,4,1,""],timestamp:[20,4,1,""]},"eventmq.utils.timeutils.IntervalIter":{__init__:[20,2,1,""],__weakref__:[20,3,1,""]},eventmq:{client:[1,0,0,"-"],exceptions:[5,0,0,"-"],jobmanager:[7,0,0,"-"],poller:[8,0,0,"-"],receiver:[10,0,0,"-"],router:[11,0,0,"-"],sender:[12,0,0,"-"],utils:[17,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","function","Python function"],"5":["py","exception","Python exception"],"6":["py","classmethod","Python class method"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:function","5":"py:exception","6":"py:classmethod"},terms:{"0mq":[9,15],"5min":20,"abstract":9,"boolean":15,"case":[9,15,20],"class":[0,2,3,7,8,10,11,12,17,20],"default":[2,3,7,9,10,11,12,13,15],"float":[15,20],"function":[2,3,11],"import":[2,3,4,7,11,13,19],"int":[3,8,9,11,15,20],"long":[8,15],"new":[11,15],"public":9,"return":[3,4,8,10,11,12,15,16,17,18,20],"short":11,"true":[2,9,10,11,12,15],"while":9,FOR:9,For:15,NOT:9,The:[3,7,8,9,10,11,12,14,15,18],There:11,These:5,Use:4,Used:[3,11],Useful:[7,15,18],Using:6,With:13,__init__:[2,7,8,10,12,15,20],__weakref__:[2,15,20],_empty_:9,_headers_:9,_msg_:9,_msgid_:9,_queue_name_:9,_queues_:9,_recipient_id:15,_topic_name_:9,_unix_ts_:9,abl:[11,13],about:[7,9,11],absolut:4,accept:[9,13,15],account:[11,18],ack:[7,9,11],ackd_msgid:15,acknowledg:[7,9,11],across:9,act:[1,9],actual:[7,11],add:11,add_schedul:11,add_work:11,added:15,adding:15,addr:[10,12,15],address:[2,7,10,11,12,14],administrative_addr:11,after:9,agre:9,all:[2,3,5,7,9,10,11,12,15],allow:9,alpha:9,alreadi:11,also:15,alwai:3,and_data:18,ani:[3,7,9,11,14,17],announc:11,anoth:[7,11,13],anyth:13,api:[6,9],app:[2,15],appear:8,append:15,appendleft:15,appened:11,appli:19,applic:[3,9,14],arg2:3,arg3:3,arg:[2,3,7,8,10,11,12,15],argument:15,arithmet:20,arrai:9,as_str:2,ascii:16,assign:13,assum:20,async:2,attempt:[5,11],attr:8,automat:15,avail:[5,11],available_slot:11,awaiting_ack:15,back:[9,11,15],backend_addr:11,backward:15,base:[5,8,13,15],basi:9,becaus:[11,15],becom:13,been:[3,11,15],befor:[3,8,9],begin:[11,13,15],being:8,belong:11,below:9,best:3,between:[3,9],block:13,bool:[2,3,7,10,12,15],boot:20,both:[8,9],box:13,broadcast:9,broker:[2,7,9,14,15],broker_addr:[2,7],buffer:11,build:[11,12],built:9,bulid:10,calabl:3,calcul:20,call:[3,8,11,15],callabl:[3,5,7,10],callable_nam:5,callablefrompatherror:5,callback:15,can:[1,2,3,9,11,14,15,16,18],captur:15,care:16,caus:16,certain:15,chang:9,charact:17,check:[7,10,12,15],check_worker_health:7,choos:13,circuit:11,class_arg:[3,7],class_kwarg:[3,7],classmethod:11,clean:9,clean_up_dead_schedul:11,clean_up_dead_work:11,clear:11,cli:11,client:[0,6,11],clock:20,close:[15,20],code:[4,6,15],collect:15,colon:[3,13],com:2,come:[3,11],comma:9,command:[3,7,9,11,15,18],compat:15,complet:9,compon:9,concurr:13,concurrent_job:7,conf:[6,14],config:13,configur:[3,11,19],connction:[10,12],connect:[7,9,10,11,12,14,15,18],consist:9,construct:5,contact:5,contain:[1,9,11,15,17],context:[10,12],contribut:6,control:13,contruct:15,convers:9,convert:17,convienc:[8,15],core:13,count:[7,9,11,20],counter:[11,15],cpu:13,creat:[2,11,12,17],cron:3,csv:9,current:[10,11,12,15],custom:11,cycl:13,data:[11,18],data_process:13,dead:7,deal:17,dealer:12,death:15,debounc:3,debounce_deferred_job:3,debounce_sec:3,debug:9,decor:2,decsend:11,def:2,defeat:9,defer:[2,3],defer_job:3,defin:[2,3,7,9,10,12,15,20],deliv:9,denot:3,depth:11,dequ:15,describ:9,descript:9,detail:9,detect:9,determin:9,devic:[0,8,15,17,18],dialog:9,dict:[3,7,8],dictionari:[8,9,11],die:11,died:15,differ:4,directli:[8,15],disabl:3,disconnect:[10,11],distribut:9,document:9,doe:15,doesn:8,don:[7,9],dot:3,down:[13,20],dst:20,duplic:11,dure:12,each:11,effici:13,effort:3,either:[9,15],elaps:9,element:[11,15],els:[4,9],email:[2,9,13],emit:2,empti:[9,18],emq:11,emq_broker_addr:[2,14],emqdequ:15,emqp:[15,18],emqpservic:15,enabl:[3,15],encod:16,encount:[3,5],end:[3,15],ensur:[3,7,9,15],entri:11,environ:[2,6],equal:13,error:[3,15,16],etc:[11,13],evalu:3,even:9,event:[8,15],eventmq:[1,2,3,5,7,8,10,11,12,15,16,17,18,19,20],eventmqerror:5,everi:[3,7],everyth:16,exampl:[11,13,15,20],excecut:11,except:[0,3,4,6,9,10,12],exectu:11,execut:[2,3,9,13,20],executed_funct:11,exist:[5,7],explicitli:[13,15],expos:7,extend:15,extra:9,fail:[3,5,9],failur:3,fair:9,fals:[2,3,9,10,12,15],featur:16,few:4,field:9,file:13,find:15,finish:[9,11],first:[9,11,15,18],fit:9,flag:[3,8],follow:[3,9,15],foobar:2,form:15,format:[3,7,9,11,18],forward:[11,15,18],found:[5,11,13],foundat:9,frame:[11,15,18],free:9,from:[2,5,8,9,10,11,12,15,20],frontend_addr:11,fuction:3,full:15,func:[2,3,7,15],function_nam:11,fwd_emqp_router_messag:18,gener:[7,8,9,10,12,18],generate_device_nam:16,generate_msgid:18,get:11,get_available_work:11,get_statu:11,give:3,given:[2,11],global:19,gmail:2,gnu:9,good:15,group:13,guarante:[3,9],guarente:3,hand:17,handl:[7,9,11,15],handler:7,happen:[3,8,11,12],hard:15,has:[9,11,15],hasn:11,have:[3,13,15,18],haven:11,header:3,heartbeat:[7,11,15,20],heartbeat_timeout:11,heartbeati:15,heartbeatmixin:15,heavi:9,help:13,helper:[0,1,15],here:[9,11],highest:13,hit:15,hope:9,how:[3,8],html:9,http:9,ident:[9,16],identifi:11,ids:18,ietf:9,ignor:[9,15],immedi:[3,9],immediatli:3,implement:[9,15],impli:9,import_set:19,includ:[3,9,15],index:[6,11],indexerror:11,indic:7,indiviud:13,infinit:3,inform:[2,3,7,9,11,15],inherit:5,ini:[13,19],initi:[3,15],insert:[9,15],instal:4,instanc:7,instanti:[3,7],instead:9,integ:11,intens:13,interest:17,intern:5,interpret:9,interv:[3,9,20],interval_sec:[3,20],intervalit:20,invalidmessageerror:[5,11],is_dead:15,is_empti:15,is_ful:15,is_heartbeat_en:15,is_pful:15,isn:[11,15],issu:[4,6,9],item:15,iter:[8,11,15],iterat:15,itself:11,job:[0,1,3,5,6,9,11,14,15],job_lat:11,job_schedul:3,jobmanag:[0,6,9,11,15],jobmanager_main:7,json:3,keep:[7,11],kei:[8,9,11],kick:[7,11],kill:[3,9],know:[3,7,11],kwarg2:3,kwarg:[2,3,7,8,10,11,12,15],larg:13,larger:13,largest:11,last:[3,11,15],last_recv_heartbeat:11,lataneci:11,latenc:11,later:9,least:[9,15],leav:[9,13],left:15,length:[15,17],lesser:9,let:9,like:[7,15,17],limit:15,list:[2,3,5,7,9,11,13,15,17,20],listen:[7,10,11,12,13,15],load:13,local:13,locat:3,log:[3,7,11],logic:[7,11],login:2,longer:[5,13],look:15,loop:[8,11,15],lot:13,lower:11,mai:[9,11,15],main:7,make:17,malform:5,manag:[0,5,6,11,14,15],mani:[3,9,12],manual:9,master:9,match:15,mean:3,measur:11,member:11,memebership:11,merchant:9,mess:20,messag:[0,1,2,5,7,9,10,11,12,15,17],message_bodi:18,message_id:18,messageerror:5,met:15,meta:[11,18],method:[3,7,8,11,15],mime:2,mimetext:2,minut:3,model:13,modifi:9,modul:[1,6,7,17],monoton:[11,15,20],more:[2,3,9,15,17],most:15,msg:[2,7,9,11,15,18],msgid:[7,11,15],multipart:[9,15],multiprocess:[7,13],must:[3,9,15],name:[2,3,7,9,10,11,12,13,19],necessari:7,need:[11,12],never:[9,20],next:[8,11,13,20],noavailableworkerslotserror:[5,11],nohast:9,none:[2,3,7,10,11,12,15,16,18],noop:7,normal:15,note:[7,10,12],notifi:15,now:15,number:[3,11,13,20],numer:20,obj:11,object:[2,8,15,17,20],occur:15,off:[7,11],on_ack:15,on_command:[11,15],on_disconnect:11,on_emqp_command:15,on_ful:15,on_heartbeat:[7,11],on_inform:11,on_readi:11,on_recv:10,on_repli:11,on_request:[7,11],on_schedul:15,onc:9,one:[1,3,10,11,12],onlin:[11,15],option:[3,7,9,10,12,18],order:11,org:9,orient:9,origin:9,original_msg:11,other:[3,9,13],otherwis:[7,10,12,15],out:[7,9,15],outgo:[7,15],own:15,page:6,param:3,paramet:[2,3,7,8,10,11,12,15,16,17,18,19,20],pars:[11,15,18],parse_messag:18,parse_router_messag:18,part:[9,18],particular:[2,9,12],pass:[3,9,10,15],password:2,path:[3,5,7],payload:18,peek:15,peekleft:15,peer:[5,9,15],peergoneawayerror:[5,11],pend:9,per:11,pfull:15,pictur:9,placehold:[7,11],point:13,poll:8,poller:[0,6,15],pollin:8,pollout:8,pool:[7,9,11],pop:[11,15],popleft:15,port:11,portion:7,possibl:4,practic:15,prefix:[16,18],prepar:11,prepend:9,pretti:[9,13],priorit:11,prioriti:11,prioritiess:11,prioritize_queue_list:11,problem:5,process:[7,9,11,12,13,15],process_client_messag:11,process_messag:[7,15],process_worker_messag:11,programm:15,proper:15,properti:[10,12,15],protocol:[4,6,15],protocol_vers:15,provid:[2,11,15],pub:9,purpos:9,push_notif:15,py2:20,py3:20,python3:16,python:15,queue:[2,3,5,7,9,11,15],queue_nam:11,quit:2,rais:[3,5,10,11,12,15,18],random:[17,18],random_charact:17,raw:15,readi:[7,9,10,11,12,13,15],rebind:11,rebuild:12,receiv:[0,3,4,6,9,11,12,15],received_disconnect:11,recent:[9,11],recipi:[2,7,11,15,18],recipient_id:18,recommend:[9,13,15],reconnect:12,recreat:7,recurs:[11,17],recus:11,recv:15,recv_multipart:15,redistribut:9,refer:[2,7,9,15,20],regist:[7,8,11],regular:9,reject:15,rel:4,reliabl:9,reload:11,remain:8,remot:15,remov:[9,11,15],reopen:15,rep:10,repli:[2,3,7,9,11,18],reply_request:3,repres:20,req:12,request:[1,3,7,9,11,15],request_queu:7,requeue_work:11,requir:9,reset:[11,15],reset_heartbeat_count:[11,15],resourc:[7,9],respond:[9,11,15],respons:[7,10,11,12],restart:[9,12],retri:[3,9,11],retry_count:3,rfc2119:9,rfc:9,right:15,robin:9,roughli:12,round:9,rout:[9,11],router:[0,6,7,10,14,15,18],router_main:11,run:[2,3,7,9,11,13,15],safe:13,sake:20,same:12,schedul:[3,11,14,15],scheduler_id:11,scheduler_queu:11,scheduler_zmq_id:11,search:6,sec:3,second:[3,9,20],seconds_until:20,section:19,see:[2,3,8,9,11,15],self:[7,11,12,15],semi:13,send:[2,3,5,7,9,11,12,15,18],send_ack:11,send_email:2,send_emqp_messag:18,send_emqp_router_messag:18,send_heartbeat:[11,15],send_inform:15,send_multipart:15,send_readi:7,send_repli:7,send_request:3,send_schedule_request:3,send_schedulers_heartbeat:11,send_workers_heartbeat:11,sender:[0,6,11],sender_id:18,sendmail:2,sent:[3,9,11,13,15],seper:[3,9,13],serial:11,serializ:3,serv:9,server:[6,7,9,14],servic:[9,15],service_typ:15,set:[0,2,6,7,8,9,11,12,14,15,16,17],setup:7,shall:9,should:[2,3,5,8,9,10,11,12,13,14,15,18],shown:9,sighup:11,sighup_handl:11,signal:7,signum:11,similar:13,simpl:[11,17],sinc:20,singl:[9,15],size:15,skip:[12,15],skip_sign:7,skip_zmqstream:12,slot:11,slow:13,smaller:13,smtp:2,smtplib:2,socket:[3,7,8,9,10,11,12,15,16,18],softwar:9,some:[3,7,13,15,17,18],someon:9,someth:[3,12,13,15,20],somewher:4,sourc:[4,6],spawn:7,specif:[4,6],specifi:[9,15,17],standard:13,start:[7,10,11,12,13,15,20],start_valu:20,state:[11,15],statu:9,still:[2,11,13],stop:9,store:11,str:[2,3,7,10,11,12,15,16,17,18,19],string:[3,9,10,11,12,15,16,18],structur:5,style:13,sub:9,subclass:5,subcmd:7,subcommand:[3,7],subject:[2,9],subset:9,subtract:20,success:9,successfulli:15,support:15,synchron:2,system:[4,11],tabl:9,take:[11,12,15,16,18],task:[3,7],tcp:11,tell:7,term:9,test:[2,7],text:2,thei:[3,15],them:[7,10],thi:[1,2,3,5,7,8,9,10,11,12,13,15,16,17,18,20],thier:13,thing:[3,7,12,13,15,17,18],thread:13,threshold:15,through:[9,11],time:[0,3,9,11,13,15,17],timeout:[3,8,9],timestamp:[9,11,20],timeutil:[0,15,17],tip:4,tool:9,topic:9,trace:9,track:[7,11,15],tri:3,tune:13,tupl:[7,8,11,15,17,18],tuplifi:17,type:[3,9,10,11,12,15,17,18],type_:15,typecast:8,typeerror:[3,10],unabl:11,unbind:[10,12],undefin:[2,8],under:9,unicod:16,uniqu:[7,9,11],unit:[2,7],unix:9,unknownqueueerror:[5,11],unless:[7,10,12],unprioritized_iter:11,unregist:8,unschedul:[3,9],until:[13,20],untouch:[11,18],unus:9,updat:15,upon:9,upstream:7,usag:[2,20],use:[3,4,7,9,10,11,12,14,15,18],used:[1,2,3,9,10,11,12,15,16,18],useful:[2,9,12,20],uses:[7,13],using:[3,8,13,14,15,20],usual:15,util:[0,6,20],utilit:[0,17],utlitii:15,uuid:[7,10,11,12],valid:9,valu:[2,3,8,9,11,15,17,18,20],valueerror:15,variabl:[2,6,15],version:[4,9,15],via:[3,20],wait:[3,8,13],waiting_messag:11,walk:7,want:[2,9,13,15],warn:[2,11],warranti:9,weak:[2,15,20],web:9,weight:[9,13,15],well:9,when:[1,3,4,5,7,9,10,11,12,15,16],where:[3,9,11,15,20],which:[3,9,11,15,16],who:[1,11],wish:18,without:[9,12],word:9,work:[4,7,15],worker:[3,5,7,11,13,15],worker_id:11,worri:9,would:[13,15,20],wrap:3,wrapper:3,you:[2,4,9,11,12,13,15,18],your:[3,9,13,15],zcontext:[10,12],zeromq:9,zmq:[8,9,10,11,12,15,16,18],zmqreceivemixin:15,zmqsendmixin:15,zmqstream:12,zsocket:[10,12]},titles:["API Documentation","<code class=\"docutils literal\"><span class=\"pre\">client</span></code> &#8211; Client Utilities","<code class=\"docutils literal\"><span class=\"pre\">jobs</span></code> &#8211; Client Job Helpers","<code class=\"docutils literal\"><span class=\"pre\">messages</span></code> &#8211; Client Messaging","Contributing to EventMQ","<code class=\"docutils literal\"><span class=\"pre\">exceptions</span></code> &#8211; Exceptions","EventMQ Documentation","<code class=\"docutils literal\"><span class=\"pre\">jobmanager</span></code> &#8211; Job Manager","<code class=\"docutils literal\"><span class=\"pre\">poller</span></code> &#8211; Poller","EventMQ Protocol Specification","<code class=\"docutils literal\"><span class=\"pre\">receiver</span></code> &#8211; Receiver","<code class=\"docutils literal\"><span class=\"pre\">router</span></code> &#8211; Router","<code class=\"docutils literal\"><span class=\"pre\">sender</span></code> &#8211; Sender","Server Settings (eventmq.conf)","Using EventMQ","<code class=\"docutils literal\"><span class=\"pre\">classes</span></code> &#8211; Utility Classes","<code class=\"docutils literal\"><span class=\"pre\">devices</span></code> &#8211; Device Utilities","<code class=\"docutils literal\"><span class=\"pre\">utils</span></code> &#8211; Utilities","<code class=\"docutils literal\"><span class=\"pre\">messages</span></code> &#8211; Message Utilities","<code class=\"docutils literal\"><span class=\"pre\">settings</span></code> &#8211; Settings Utilities","<code class=\"docutils literal\"><span class=\"pre\">timeutils</span></code> &#8211; Time Utilites"],titleterms:{"class":15,Using:14,address:9,api:0,architectur:9,client:[1,2,3,9,14],concurrent_job:13,conf:13,contribut:4,devic:16,disconnect:9,document:[0,6],emqp:9,environ:14,eventmq:[4,6,9,13,14],except:5,frame:9,global:9,goal:9,header:9,heartbeat:9,helper:2,indic:6,job:[2,7,13],jobmanag:7,kbai:9,languag:9,licens:9,manag:[7,13],messag:[3,18],poller:8,protocol:9,publish:9,queue:13,receiv:10,router:[9,11,13],schedul:[9,13],sender:12,server:13,set:[13,19],specif:9,tabl:6,time:20,timeutil:20,topolog:9,util:[1,15,16,17,18,19],utilit:20,variabl:14,worker:9}}) \ No newline at end of file
diff --git a/sender.html b/sender.html
index 7d0f5d1..153a249 100644..100755
--- a/sender.html
+++ b/sender.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="up" title="API Documentation" href="api.html"/> 37 <link rel="up" title="API Documentation" href="api.html"/>
35 <link rel="next" title="utils – Utilities" href="utils/index.html"/> 38 <link rel="next" title="utils – Utilities" href="utils/index.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -91,7 +94,7 @@
91<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 94<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
92<li class="toctree-l2"><a class="reference internal" href="receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li> 95<li class="toctree-l2"><a class="reference internal" href="receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li>
93<li class="toctree-l2"><a class="reference internal" href="router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li> 96<li class="toctree-l2"><a class="reference internal" href="router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li>
94<li class="toctree-l2 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li> 97<li class="toctree-l2 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li>
95<li class="toctree-l2"><a class="reference internal" href="utils/index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a></li> 98<li class="toctree-l2"><a class="reference internal" href="utils/index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a></li>
96</ul> 99</ul>
97</li> 100</li>
@@ -118,7 +121,7 @@
118 <div class="rst-content"> 121 <div class="rst-content">
119 122
120 123
121 124
122 125
123 126
124 127
@@ -132,7 +135,7 @@
132 <li class="wy-breadcrumbs-aside"> 135 <li class="wy-breadcrumbs-aside">
133 136
134 137
135 <a href="_sources/sender.txt" rel="nofollow"> View page source</a> 138 <a href="_sources/sender.rst.txt" rel="nofollow"> View page source</a>
136 139
137 140
138 </li> 141 </li>
@@ -152,21 +155,19 @@
152<dl class="attribute"> 155<dl class="attribute">
153<dt id="eventmq.sender.Sender.name"> 156<dt id="eventmq.sender.Sender.name">
154<code class="descname">name</code><a class="headerlink" href="#eventmq.sender.Sender.name" title="Permalink to this definition">¶</a></dt> 157<code class="descname">name</code><a class="headerlink" href="#eventmq.sender.Sender.name" title="Permalink to this definition">¶</a></dt>
155<dd><p><em>str</em></p> 158<dd><p><em>str</em> &#8211; Name of this socket</p>
156<p>Name of this socket</p>
157</dd></dl> 159</dd></dl>
158 160
159<dl class="attribute"> 161<dl class="attribute">
160<dt id="eventmq.sender.Sender.zcontext"> 162<dt id="eventmq.sender.Sender.zcontext">
161<code class="descname">zcontext</code><a class="headerlink" href="#eventmq.sender.Sender.zcontext" title="Permalink to this definition">¶</a></dt> 163<code class="descname">zcontext</code><a class="headerlink" href="#eventmq.sender.Sender.zcontext" title="Permalink to this definition">¶</a></dt>
162<dd><p><a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Context" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Context</span></code></a></p> 164<dd><p><a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Context" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Context</span></code></a> &#8211; socket context</p>
163<p>socket context</p>
164</dd></dl> 165</dd></dl>
165 166
166<dl class="attribute"> 167<dl class="attribute">
167<dt id="eventmq.sender.Sender.zsocket"> 168<dt id="eventmq.sender.Sender.zsocket">
168<code class="descname">zsocket</code><a class="headerlink" href="#eventmq.sender.Sender.zsocket" title="Permalink to this definition">¶</a></dt> 169<code class="descname">zsocket</code><a class="headerlink" href="#eventmq.sender.Sender.zsocket" title="Permalink to this definition">¶</a></dt>
169<dd><p><a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a></p> 170<dd><p><a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a></p>
170</dd></dl> 171</dd></dl>
171 172
172<dl class="method"> 173<dl class="method">
@@ -181,13 +182,13 @@
181<col class="field-body" /> 182<col class="field-body" />
182<tbody valign="top"> 183<tbody valign="top">
183<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 184<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
184<li><strong>name</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; name of this socket. By default a uuid will be 185<li><strong>name</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; name of this socket. By default a uuid will be
185generated</li> 186generated</li>
186<li><strong>context</strong> (<a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Context" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Context</span></code></a>) &#8211; Context to use when building the 187<li><strong>context</strong> (<a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Context" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Context</span></code></a>) &#8211; Context to use when building the
187socket</li> 188socket</li>
188<li><strong>socket</strong> (<a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a>) &#8211; Should be one of <code class="xref py py-attr docutils literal"><span class="pre">zmq.REQ</span></code> or 189<li><strong>socket</strong> (<a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a>) &#8211; Should be one of <code class="xref py py-attr docutils literal"><span class="pre">zmq.REQ</span></code> or
189<code class="xref py py-attr docutils literal"><span class="pre">zmq.DEALER</span></code>. By default a <cite>DEALER</cite> is used</li> 190<code class="xref py py-attr docutils literal"><span class="pre">zmq.DEALER</span></code>. By default a <cite>DEALER</cite> is used</li>
190<li><strong>skip_zmqstream</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)"><em>bool</em></a>) &#8211; If set to true, skip creating the zmqstream 191<li><strong>skip_zmqstream</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)"><em>bool</em></a>) &#8211; If set to true, skip creating the zmqstream
191socket</li> 192socket</li>
192</ul> 193</ul>
193</td> 194</td>
@@ -204,10 +205,9 @@ socket</li>
204<col class="field-name" /> 205<col class="field-name" />
205<col class="field-body" /> 206<col class="field-body" />
206<tbody valign="top"> 207<tbody valign="top">
207<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to connect to as a connection string</td> 208<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to connect to as a connection string</td>
208</tr> 209</tr>
209<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-exc docutils literal"><span class="pre">:class</span></code> &#8211; 210<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">Exception</span></code></td>
210<cite>Exception</cite></td>
211</tr> 211</tr>
212</tbody> 212</tbody>
213</table> 213</table>
@@ -221,10 +221,9 @@ socket</li>
221<col class="field-name" /> 221<col class="field-name" />
222<col class="field-body" /> 222<col class="field-body" />
223<tbody valign="top"> 223<tbody valign="top">
224<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to listen on as a connction string</td> 224<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to listen on as a connction string</td>
225</tr> 225</tr>
226<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-exc docutils literal"><span class="pre">:class</span></code> &#8211; 226<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">Exception</span></code></td>
227<cite>Exception</cite></td>
228</tr> 227</tr>
229</tbody> 228</tbody>
230</table> 229</table>
@@ -238,10 +237,13 @@ socket</li>
238<col class="field-name" /> 237<col class="field-name" />
239<col class="field-body" /> 238<col class="field-body" />
240<tbody valign="top"> 239<tbody valign="top">
241<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">True if the receiver is ready to connect or listen, otherwise 240<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><dl class="docutils">
242False</td> 241<dt>True if the receiver is ready to connect or listen, otherwise</dt>
242<dd>False</dd>
243</dl>
244</td>
243</tr> 245</tr>
244<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)">bool</a></td> 246<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)">bool</a></td>
245</tr> 247</tr>
246</tbody> 248</tbody>
247</table> 249</table>
@@ -259,9 +261,9 @@ parameters as <code class="xref py py-meth docutils literal"><span class="pre">s
259<col class="field-body" /> 261<col class="field-body" />
260<tbody valign="top"> 262<tbody valign="top">
261<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 263<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
262<li><strong>socket</strong> (<a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a>) &#8211; Should be one of <code class="xref py py-attr docutils literal"><span class="pre">zmq.REQ</span></code> or 264<li><strong>socket</strong> (<a class="reference external" href="http://pyzmq.readthedocs.io/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a>) &#8211; Should be one of <code class="xref py py-attr docutils literal"><span class="pre">zmq.REQ</span></code> or
263<code class="xref py py-attr docutils literal"><span class="pre">zmq.DEALER</span></code>. By default a <cite>DEALER</cite> is used</li> 265<code class="xref py py-attr docutils literal"><span class="pre">zmq.DEALER</span></code>. By default a <cite>DEALER</cite> is used</li>
264<li><strong>skip_zmqstream</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)"><em>bool</em></a>) &#8211; If set to true, skip creating the zmqstream 266<li><strong>skip_zmqstream</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)"><em>bool</em></a>) &#8211; If set to true, skip creating the zmqstream
265socket</li> 267socket</li>
266</ul> 268</ul>
267</td> 269</td>
@@ -278,10 +280,9 @@ socket</li>
278<col class="field-name" /> 280<col class="field-name" />
279<col class="field-body" /> 281<col class="field-body" />
280<tbody valign="top"> 282<tbody valign="top">
281<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to unbind from as a string</td> 283<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to unbind from as a string</td>
282</tr> 284</tr>
283<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-exc docutils literal"><span class="pre">:class</span></code> &#8211; 285<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">Exception</span></code></td>
284<cite>Exception</cite></td>
285</tr> 286</tr>
286</tbody> 287</tbody>
287</table> 288</table>
diff --git a/settings_file.html b/settings_file.html
index 591bc6a..c98fa8d 100644..100755
--- a/settings_file.html
+++ b/settings_file.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="up" title="Using EventMQ" href="using.html"/> 37 <link rel="up" title="Using EventMQ" href="using.html"/>
35 <link rel="next" title="API Documentation" href="api.html"/> 38 <link rel="next" title="API Documentation" href="api.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -84,7 +87,7 @@
84 87
85 <ul class="current"> 88 <ul class="current">
86<li class="toctree-l1 current"><a class="reference internal" href="using.html">Using EventMQ</a><ul class="current"> 89<li class="toctree-l1 current"><a class="reference internal" href="using.html">Using EventMQ</a><ul class="current">
87<li class="toctree-l2 current"><a class="current reference internal" href="">Server Settings (eventmq.conf)</a><ul> 90<li class="toctree-l2 current"><a class="current reference internal" href="#">Server Settings (eventmq.conf)</a><ul>
88<li class="toctree-l3"><a class="reference internal" href="#router">Router</a></li> 91<li class="toctree-l3"><a class="reference internal" href="#router">Router</a></li>
89<li class="toctree-l3"><a class="reference internal" href="#scheduler">Scheduler</a></li> 92<li class="toctree-l3"><a class="reference internal" href="#scheduler">Scheduler</a></li>
90<li class="toctree-l3"><a class="reference internal" href="#job-manager">Job Manager</a><ul> 93<li class="toctree-l3"><a class="reference internal" href="#job-manager">Job Manager</a><ul>
@@ -121,7 +124,7 @@
121 <div class="rst-content"> 124 <div class="rst-content">
122 125
123 126
124 127
125 128
126 129
127 130
@@ -135,7 +138,7 @@
135 <li class="wy-breadcrumbs-aside"> 138 <li class="wy-breadcrumbs-aside">
136 139
137 140
138 <a href="_sources/settings_file.txt" rel="nofollow"> View page source</a> 141 <a href="_sources/settings_file.rst.txt" rel="nofollow"> View page source</a>
139 142
140 143
141 </li> 144 </li>
diff --git a/style.html b/style.html
index f0e6e65..f0e6e65 100644..100755
--- a/style.html
+++ b/style.html
diff --git a/using.html b/using.html
index 05a7c90..3da699a 100644..100755
--- a/using.html
+++ b/using.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="genindex.html"/>
35 <link rel="search" title="Search" href="search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="next" title="Server Settings (eventmq.conf)" href="settings_file.html"/> 37 <link rel="next" title="Server Settings (eventmq.conf)" href="settings_file.html"/>
35 <link rel="prev" title="EventMQ Documentation" href="index.html"/> 38 <link rel="prev" title="EventMQ Documentation" href="index.html"/>
@@ -60,7 +63,7 @@
60 63
61 64
62 <div class="version"> 65 <div class="version">
63 0.2.7.1 66 0.3-rc8
64 </div> 67 </div>
65 68
66 69
@@ -82,7 +85,7 @@
82 85
83 86
84 <ul class="current"> 87 <ul class="current">
85<li class="toctree-l1 current"><a class="current reference internal" href="">Using EventMQ</a><ul> 88<li class="toctree-l1 current"><a class="current reference internal" href="#">Using EventMQ</a><ul>
86<li class="toctree-l2"><a class="reference internal" href="settings_file.html">Server Settings (eventmq.conf)</a></li> 89<li class="toctree-l2"><a class="reference internal" href="settings_file.html">Server Settings (eventmq.conf)</a></li>
87<li class="toctree-l2"><a class="reference internal" href="#client-environment-variables">Client Environment Variables</a></li> 90<li class="toctree-l2"><a class="reference internal" href="#client-environment-variables">Client Environment Variables</a></li>
88</ul> 91</ul>
@@ -111,7 +114,7 @@
111 <div class="rst-content"> 114 <div class="rst-content">
112 115
113 116
114 117
115 118
116 119
117 120
@@ -123,7 +126,7 @@
123 <li class="wy-breadcrumbs-aside"> 126 <li class="wy-breadcrumbs-aside">
124 127
125 128
126 <a href="_sources/using.txt" rel="nofollow"> View page source</a> 129 <a href="_sources/using.rst.txt" rel="nofollow"> View page source</a>
127 130
128 131
129 </li> 132 </li>
diff --git a/utils.html b/utils.html
index 233286a..233286a 100644..100755
--- a/utils.html
+++ b/utils.html
diff --git a/utils/classes.html b/utils/classes.html
index 830f787..531f2ae 100644..100755
--- a/utils/classes.html
+++ b/utils/classes.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="../genindex.html"/>
35 <link rel="search" title="Search" href="../search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/>
34 <link rel="up" title="utils – Utilities" href="index.html"/> 37 <link rel="up" title="utils – Utilities" href="index.html"/>
35 <link rel="next" title="devices – Device Utilities" href="devices.html"/> 38 <link rel="next" title="devices – Device Utilities" href="devices.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -93,7 +96,7 @@
93<li class="toctree-l2"><a class="reference internal" href="../router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li> 96<li class="toctree-l2"><a class="reference internal" href="../router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li>
94<li class="toctree-l2"><a class="reference internal" href="../sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li> 97<li class="toctree-l2"><a class="reference internal" href="../sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li>
95<li class="toctree-l2 current"><a class="reference internal" href="index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul class="current"> 98<li class="toctree-l2 current"><a class="reference internal" href="index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul class="current">
96<li class="toctree-l3 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li> 99<li class="toctree-l3 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li>
97<li class="toctree-l3"><a class="reference internal" href="devices.html"><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li> 100<li class="toctree-l3"><a class="reference internal" href="devices.html"><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li>
98<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li> 101<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li>
99<li class="toctree-l3"><a class="reference internal" href="settings.html"><code class="docutils literal"><span class="pre">settings</span></code> &#8211; Settings Utilities</a></li> 102<li class="toctree-l3"><a class="reference internal" href="settings.html"><code class="docutils literal"><span class="pre">settings</span></code> &#8211; Settings Utilities</a></li>
@@ -125,7 +128,7 @@
125 <div class="rst-content"> 128 <div class="rst-content">
126 129
127 130
128 131
129 132
130 133
131 134
@@ -141,7 +144,7 @@
141 <li class="wy-breadcrumbs-aside"> 144 <li class="wy-breadcrumbs-aside">
142 145
143 146
144 <a href="../_sources/utils/classes.txt" rel="nofollow"> View page source</a> 147 <a href="../_sources/utils/classes.rst.txt" rel="nofollow"> View page source</a>
145 148
146 149
147 </li> 150 </li>
@@ -235,8 +238,8 @@ for.</p>
235<col class="field-body" /> 238<col class="field-body" />
236<tbody valign="top"> 239<tbody valign="top">
237<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> 240<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
238<li><strong>type</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Either &#8216;worker&#8217; or &#8216;scheduler&#8217;</li> 241<li><strong>type</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Either &#8216;worker&#8217; or &#8216;scheduler&#8217;</li>
239<li><strong>queues</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; <ul> 242<li><strong>queues</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; <ul>
240<li>For &#8216;worker&#8217; type, the queues the worker is listening on and 243<li>For &#8216;worker&#8217; type, the queues the worker is listening on and
241their weights.<dl class="docutils"> 244their weights.<dl class="docutils">
242<dt>Example:</dt> 245<dt>Example:</dt>
@@ -249,14 +252,13 @@ their weights.<dl class="docutils">
249</ul> 252</ul>
250</td> 253</td>
251</tr> 254</tr>
252<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><p class="first"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code> &#8211; 255<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><p class="first"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code> &#8211; When <cite>type_</cite> does not match a specified type</p>
253When <cite>type_</cite> does not match a specified type</p>
254</td> 256</td>
255</tr> 257</tr>
256<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">ID of the message</p> 258<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">ID of the message</p>
257</td> 259</td>
258</tr> 260</tr>
259<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)">str</a></p> 261<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)">str</a></p>
260</td> 262</td>
261</tr> 263</tr>
262</tbody> 264</tbody>
@@ -276,7 +278,7 @@ compatibility and not recommended for new apps.</p>
276<col class="field-name" /> 278<col class="field-name" />
277<col class="field-body" /> 279<col class="field-body" />
278<tbody valign="top"> 280<tbody valign="top">
279<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; connection string to connect to</td> 281<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; connection string to connect to</td>
280</tr> 282</tr>
281</tbody> 283</tbody>
282</table> 284</table>
@@ -303,12 +305,12 @@ checked to ensure proper error handling.</p>
303<col class="field-body" /> 305<col class="field-body" />
304<tbody valign="top"> 306<tbody valign="top">
305<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 307<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
306<li><strong>full</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Hard limit on deque size. Rejects adding elements. 308<li><strong>full</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Hard limit on deque size. Rejects adding elements.
307Default: 0 - no limit</li> 309Default: 0 - no limit</li>
308<li><strong>pfull</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Programmable limit on deque size, defaults 310<li><strong>pfull</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Programmable limit on deque size, defaults
309to <code class="docutils literal"><span class="pre">full</span></code> length</li> 311to <code class="docutils literal"><span class="pre">full</span></code> length</li>
310<li><strong>on_full</strong> (<em>func</em>) &#8211; callback to call when <code class="docutils literal"><span class="pre">full</span></code> limit is hit</li> 312<li><strong>on_full</strong> (<em>func</em>) &#8211; callback to call when <code class="docutils literal"><span class="pre">full</span></code> limit is hit</li>
311<li><strong>initial</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#iter" title="(in Python v2.7)"><em>iter</em></a>) &#8211; The initial iteratable used to contruct the deque</li> 313<li><strong>initial</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#iter" title="(in Python v2.7)"><em>iter</em></a>) &#8211; The initial iteratable used to contruct the deque</li>
312</ul> 314</ul>
313</td> 315</td>
314</tr> 316</tr>
@@ -335,11 +337,14 @@ where False is returned.</p>
335<col class="field-name" /> 337<col class="field-name" />
336<col class="field-body" /> 338<col class="field-body" />
337<tbody valign="top"> 339<tbody valign="top">
338<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">True if <code class="docutils literal"><span class="pre">item</span></code> was successfully added, False if the deque 340<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><dl class="docutils">
339is at the <code class="docutils literal"><span class="pre">self.full</span></code> limit. If it is, <code class="docutils literal"><span class="pre">self.on_full</span></code> is 341<dt>True if <code class="docutils literal"><span class="pre">item</span></code> was successfully added, False if the deque</dt>
340called.</td> 342<dd>is at the <code class="docutils literal"><span class="pre">self.full</span></code> limit. If it is, <code class="docutils literal"><span class="pre">self.on_full</span></code> is
343called.</dd>
344</dl>
345</td>
341</tr> 346</tr>
342<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)">bool</a></td> 347<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)">bool</a></td>
343</tr> 348</tr>
344</tbody> 349</tbody>
345</table> 350</table>
@@ -358,11 +363,14 @@ where False is returned.</p>
358<col class="field-name" /> 363<col class="field-name" />
359<col class="field-body" /> 364<col class="field-body" />
360<tbody valign="top"> 365<tbody valign="top">
361<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">True if <code class="docutils literal"><span class="pre">item</span></code> was successfully added, False if the deque 366<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><dl class="docutils">
362is at the <code class="docutils literal"><span class="pre">self.full</span></code> limit. If it is, <code class="docutils literal"><span class="pre">self.on_full</span></code> is 367<dt>True if <code class="docutils literal"><span class="pre">item</span></code> was successfully added, False if the deque</dt>
363called.</td> 368<dd>is at the <code class="docutils literal"><span class="pre">self.full</span></code> limit. If it is, <code class="docutils literal"><span class="pre">self.on_full</span></code> is
369called.</dd>
370</dl>
371</td>
364</tr> 372</tr>
365<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)">bool</a></td> 373<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)">bool</a></td>
366</tr> 374</tr>
367</tbody> 375</tbody>
368</table> 376</table>
@@ -376,11 +384,14 @@ called.</td>
376<col class="field-name" /> 384<col class="field-name" />
377<col class="field-body" /> 385<col class="field-body" />
378<tbody valign="top"> 386<tbody valign="top">
379<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">True if <code class="docutils literal"><span class="pre">item</span></code> was successfully added, False if the deque 387<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><dl class="docutils">
380is at the <code class="docutils literal"><span class="pre">self.full</span></code> limit. If it is, <code class="docutils literal"><span class="pre">self.on_full</span></code> is 388<dt>True if <code class="docutils literal"><span class="pre">item</span></code> was successfully added, False if the deque</dt>
381called.</td> 389<dd>is at the <code class="docutils literal"><span class="pre">self.full</span></code> limit. If it is, <code class="docutils literal"><span class="pre">self.on_full</span></code> is
390called.</dd>
391</dl>
392</td>
382</tr> 393</tr>
383<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)">bool</a></td> 394<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)">bool</a></td>
384</tr> 395</tr>
385</tbody> 396</tbody>
386</table> 397</table>
@@ -396,7 +407,7 @@ called.</td>
396<tbody valign="top"> 407<tbody valign="top">
397<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">True if the deque contains 0 items. False otherwise</td> 408<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">True if the deque contains 0 items. False otherwise</td>
398</tr> 409</tr>
399<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)">bool</a></td> 410<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)">bool</a></td>
400</tr> 411</tr>
401</tbody> 412</tbody>
402</table> 413</table>
@@ -413,7 +424,7 @@ called.</td>
413<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">True if the deque contains at least <code class="docutils literal"><span class="pre">full</span></code> items. False 424<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">True if the deque contains at least <code class="docutils literal"><span class="pre">full</span></code> items. False
414otherwise</td> 425otherwise</td>
415</tr> 426</tr>
416<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)">bool</a></td> 427<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)">bool</a></td>
417</tr> 428</tr>
418</tbody> 429</tbody>
419</table> 430</table>
@@ -430,7 +441,7 @@ otherwise</td>
430<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">True if the deque contains at least <code class="docutils literal"><span class="pre">pfull</span></code> items. 441<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">True if the deque contains at least <code class="docutils literal"><span class="pre">pfull</span></code> items.
431False otherwise</td> 442False otherwise</td>
432</tr> 443</tr>
433<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)">bool</a></td> 444<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)">bool</a></td>
434</tr> 445</tr>
435</tbody> 446</tbody>
436</table> 447</table>
@@ -445,7 +456,7 @@ False otherwise</td>
445<tbody valign="top"> 456<tbody valign="top">
446<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">the last (right-most) element of the deque</td> 457<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">the last (right-most) element of the deque</td>
447</tr> 458</tr>
448<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#object" title="(in Python v2.7)">object</a></td> 459<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#object" title="(in Python v2.7)">object</a></td>
449</tr> 460</tr>
450</tbody> 461</tbody>
451</table> 462</table>
@@ -460,7 +471,7 @@ False otherwise</td>
460<tbody valign="top"> 471<tbody valign="top">
461<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">the first (left-most) element of the deque</td> 472<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">the first (left-most) element of the deque</td>
462</tr> 473</tr>
463<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#object" title="(in Python v2.7)">object</a></td> 474<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#object" title="(in Python v2.7)">object</a></td>
464</tr> 475</tr>
465</tbody> 476</tbody>
466</table> 477</table>
@@ -475,7 +486,7 @@ False otherwise</td>
475<tbody valign="top"> 486<tbody valign="top">
476<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">the last (right-most) element of the deque</td> 487<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">the last (right-most) element of the deque</td>
477</tr> 488</tr>
478<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#object" title="(in Python v2.7)">object</a></td> 489<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#object" title="(in Python v2.7)">object</a></td>
479</tr> 490</tr>
480</tbody> 491</tbody>
481</table> 492</table>
@@ -490,7 +501,7 @@ False otherwise</td>
490<tbody valign="top"> 501<tbody valign="top">
491<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">the first (left-most) element of the deque</td> 502<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">the first (left-most) element of the deque</td>
492</tr> 503</tr>
493<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#object" title="(in Python v2.7)">object</a></td> 504<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#object" title="(in Python v2.7)">object</a></td>
494</tr> 505</tr>
495</tbody> 506</tbody>
496</table> 507</table>
@@ -504,7 +515,7 @@ False otherwise</td>
504<col class="field-name" /> 515<col class="field-name" />
505<col class="field-body" /> 516<col class="field-body" />
506<tbody valign="top"> 517<tbody valign="top">
507<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>item</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><em>object</em></a>) &#8211; The item to remove from the deque</td> 518<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>item</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#object" title="(in Python v2.7)"><em>object</em></a>) &#8211; The item to remove from the deque</td>
508</tr> 519</tr>
509</tbody> 520</tbody>
510</table> 521</table>
@@ -537,14 +548,17 @@ met.</p>
537<col class="field-name" /> 548<col class="field-name" />
538<col class="field-body" /> 549<col class="field-body" />
539<tbody valign="top"> 550<tbody valign="top">
540<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>now</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#float" title="(in Python v2.7)"><em>float</em></a>) &#8211; The time to use to check if death has occurred. If 551<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>now</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#float" title="(in Python v2.7)"><em>float</em></a>) &#8211; The time to use to check if death has occurred. If
541this value is None, then <code class="xref py py-func docutils literal"><span class="pre">utils.timeutils.monotonic()</span></code> 552this value is None, then <code class="xref py py-func docutils literal"><span class="pre">utils.timeutils.monotonic()</span></code>
542is used.</td> 553is used.</td>
543</tr> 554</tr>
544<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">True if the connection to the peer has died, otherwise 555<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><dl class="docutils">
545False</td> 556<dt>True if the connection to the peer has died, otherwise</dt>
557<dd>False</dd>
558</dl>
559</td>
546</tr> 560</tr>
547<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)">bool</a></td> 561<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#bool" title="(in Python v2.7)">bool</a></td>
548</tr> 562</tr>
549</tbody> 563</tbody>
550</table> 564</table>
@@ -564,11 +578,11 @@ False</td>
564<col class="field-name" /> 578<col class="field-name" />
565<col class="field-body" /> 579<col class="field-body" />
566<tbody valign="top"> 580<tbody valign="top">
567<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; The eMQP socket to send the message to</td> 581<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/2/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; The eMQP socket to send the message to</td>
568</tr> 582</tr>
569<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">ID of the message</td> 583<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">ID of the message</td>
570</tr> 584</tr>
571<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)">str</a></td> 585<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)">str</a></td>
572</tr> 586</tr>
573</tbody> 587</tbody>
574</table> 588</table>
@@ -622,7 +636,7 @@ on it&#8217;s own</p>
622<tbody valign="top"> 636<tbody valign="top">
623<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 637<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
624<li><strong>message</strong> &#8211; message to send to something</li> 638<li><strong>message</strong> &#8211; message to send to something</li>
625<li><strong>protocol_version</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; protocol version. it&#8217;s good practice, but 639<li><strong>protocol_version</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; protocol version. it&#8217;s good practice, but
626you may explicitly specify None to skip adding the version</li> 640you may explicitly specify None to skip adding the version</li>
627</ul> 641</ul>
628</td> 642</td>
@@ -644,10 +658,10 @@ like this</p>
644<col class="field-body" /> 658<col class="field-body" />
645<tbody valign="top"> 659<tbody valign="top">
646<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 660<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
647<li><strong>message</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#tuple" title="(in Python v2.7)"><em>tuple</em></a>) &#8211; Raw message to send.</li> 661<li><strong>message</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#tuple" title="(in Python v2.7)"><em>tuple</em></a>) &#8211; Raw message to send.</li>
648<li><strong>protocol_version</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; protocol version. it&#8217;s good practice but 662<li><strong>protocol_version</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; protocol version. it&#8217;s good practice but
649you may explicitly specify None to skip adding the version</li> 663you may explicitly specify None to skip adding the version</li>
650<li><strong>_recipient_id</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><em>object</em></a>) &#8211; When using a <code class="xref py py-attr docutils literal"><span class="pre">zmq.ROUTER</span></code> you must 664<li><strong>_recipient_id</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#object" title="(in Python v2.7)"><em>object</em></a>) &#8211; When using a <code class="xref py py-attr docutils literal"><span class="pre">zmq.ROUTER</span></code> you must
651specify the the recipient id of the remote socket</li> 665specify the the recipient id of the remote socket</li>
652</ul> 666</ul>
653</td> 667</td>
diff --git a/utils/devices.html b/utils/devices.html
index c377682..fbdd974 100644..100755
--- a/utils/devices.html
+++ b/utils/devices.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="../genindex.html"/>
35 <link rel="search" title="Search" href="../search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/>
34 <link rel="up" title="utils – Utilities" href="index.html"/> 37 <link rel="up" title="utils – Utilities" href="index.html"/>
35 <link rel="next" title="messages – Message Utilities" href="messages.html"/> 38 <link rel="next" title="messages – Message Utilities" href="messages.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -94,7 +97,7 @@
94<li class="toctree-l2"><a class="reference internal" href="../sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li> 97<li class="toctree-l2"><a class="reference internal" href="../sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li>
95<li class="toctree-l2 current"><a class="reference internal" href="index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul class="current"> 98<li class="toctree-l2 current"><a class="reference internal" href="index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul class="current">
96<li class="toctree-l3"><a class="reference internal" href="classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li> 99<li class="toctree-l3"><a class="reference internal" href="classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li>
97<li class="toctree-l3 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li> 100<li class="toctree-l3 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li>
98<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li> 101<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li>
99<li class="toctree-l3"><a class="reference internal" href="settings.html"><code class="docutils literal"><span class="pre">settings</span></code> &#8211; Settings Utilities</a></li> 102<li class="toctree-l3"><a class="reference internal" href="settings.html"><code class="docutils literal"><span class="pre">settings</span></code> &#8211; Settings Utilities</a></li>
100<li class="toctree-l3"><a class="reference internal" href="timeutils.html"><code class="docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites</a></li> 103<li class="toctree-l3"><a class="reference internal" href="timeutils.html"><code class="docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites</a></li>
@@ -125,7 +128,7 @@
125 <div class="rst-content"> 128 <div class="rst-content">
126 129
127 130
128 131
129 132
130 133
131 134
@@ -141,7 +144,7 @@
141 <li class="wy-breadcrumbs-aside"> 144 <li class="wy-breadcrumbs-aside">
142 145
143 146
144 <a href="../_sources/utils/devices.txt" rel="nofollow"> View page source</a> 147 <a href="../_sources/utils/devices.rst.txt" rel="nofollow"> View page source</a>
145 148
146 149
147 </li> 150 </li>
@@ -162,7 +165,7 @@ causes errors when setting the IDENTITY of the ZMQ socket.</p>
162<col class="field-name" /> 165<col class="field-name" />
163<col class="field-body" /> 166<col class="field-body" />
164<tbody valign="top"> 167<tbody valign="top">
165<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>prefix</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Prefix the id with this string.</td> 168<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>prefix</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Prefix the id with this string.</td>
166</tr> 169</tr>
167</tbody> 170</tbody>
168</table> 171</table>
diff --git a/utils/index.html b/utils/index.html
index 8214412..501bb09 100644..100755
--- a/utils/index.html
+++ b/utils/index.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="../genindex.html"/>
35 <link rel="search" title="Search" href="../search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/>
34 <link rel="up" title="API Documentation" href="../api.html"/> 37 <link rel="up" title="API Documentation" href="../api.html"/>
35 <link rel="next" title="classes – Utility Classes" href="classes.html"/> 38 <link rel="next" title="classes – Utility Classes" href="classes.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -92,7 +95,7 @@
92<li class="toctree-l2"><a class="reference internal" href="../receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li> 95<li class="toctree-l2"><a class="reference internal" href="../receiver.html"><code class="docutils literal"><span class="pre">receiver</span></code> &#8211; Receiver</a></li>
93<li class="toctree-l2"><a class="reference internal" href="../router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li> 96<li class="toctree-l2"><a class="reference internal" href="../router.html"><code class="docutils literal"><span class="pre">router</span></code> &#8211; Router</a></li>
94<li class="toctree-l2"><a class="reference internal" href="../sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li> 97<li class="toctree-l2"><a class="reference internal" href="../sender.html"><code class="docutils literal"><span class="pre">sender</span></code> &#8211; Sender</a></li>
95<li class="toctree-l2 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul> 98<li class="toctree-l2 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul>
96<li class="toctree-l3"><a class="reference internal" href="classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li> 99<li class="toctree-l3"><a class="reference internal" href="classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li>
97<li class="toctree-l3"><a class="reference internal" href="devices.html"><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li> 100<li class="toctree-l3"><a class="reference internal" href="devices.html"><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li>
98<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li> 101<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li>
@@ -125,7 +128,7 @@
125 <div class="rst-content"> 128 <div class="rst-content">
126 129
127 130
128 131
129 132
130 133
131 134
@@ -139,7 +142,7 @@
139 <li class="wy-breadcrumbs-aside"> 142 <li class="wy-breadcrumbs-aside">
140 143
141 144
142 <a href="../_sources/utils/index.txt" rel="nofollow"> View page source</a> 145 <a href="../_sources/utils/index.rst.txt" rel="nofollow"> View page source</a>
143 146
144 147
145 </li> 148 </li>
@@ -171,7 +174,7 @@ like creating message more simple.</p>
171<tbody valign="top"> 174<tbody valign="top">
172<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">some random characters of a specified length</td> 175<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">some random characters of a specified length</td>
173</tr> 176</tr>
174<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)">str</a></td> 177<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)">str</a></td>
175</tr> 178</tr>
176</tbody> 179</tbody>
177</table> 180</table>
@@ -185,19 +188,12 @@ like creating message more simple.</p>
185<col class="field-name" /> 188<col class="field-name" />
186<col class="field-body" /> 189<col class="field-body" />
187<tbody valign="top"> 190<tbody valign="top">
188<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>v</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><em>object</em></a>) &#8211; any value of interest</td> 191<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>v</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#object" title="(in Python v2.7)"><em>object</em></a>) &#8211; any value of interest</td>
189</tr> 192</tr>
190</tbody> 193</tbody>
191</table> 194</table>
192</dd></dl> 195</dd></dl>
193 196
194<dl class="function">
195<dt id="eventmq.utils.zero_index_cmp">
196<code class="descclassname">eventmq.utils.</code><code class="descname">zero_index_cmp</code><span class="sig-paren">(</span><em>a</em>, <em>b</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.zero_index_cmp" title="Permalink to this definition">¶</a></dt>
197<dd><p>same as <code class="docutils literal"><span class="pre">cmp</span></code> but using the 0-index in a list as the compare value. Used
198when sorting the values in <code class="xref py py-attr docutils literal"><span class="pre">router.Router.queues</span></code>.</p>
199</dd></dl>
200
201</div> 197</div>
202 198
203 199
diff --git a/utils/messages.html b/utils/messages.html
index 65731a1..e703dbe 100644..100755
--- a/utils/messages.html
+++ b/utils/messages.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="../genindex.html"/>
35 <link rel="search" title="Search" href="../search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/>
34 <link rel="up" title="utils – Utilities" href="index.html"/> 37 <link rel="up" title="utils – Utilities" href="index.html"/>
35 <link rel="next" title="settings – Settings Utilities" href="settings.html"/> 38 <link rel="next" title="settings – Settings Utilities" href="settings.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -95,7 +98,7 @@
95<li class="toctree-l2 current"><a class="reference internal" href="index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul class="current"> 98<li class="toctree-l2 current"><a class="reference internal" href="index.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul class="current">
96<li class="toctree-l3"><a class="reference internal" href="classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li> 99<li class="toctree-l3"><a class="reference internal" href="classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li>
97<li class="toctree-l3"><a class="reference internal" href="devices.html"><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li> 100<li class="toctree-l3"><a class="reference internal" href="devices.html"><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li>
98<li class="toctree-l3 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li> 101<li class="toctree-l3 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li>
99<li class="toctree-l3"><a class="reference internal" href="settings.html"><code class="docutils literal"><span class="pre">settings</span></code> &#8211; Settings Utilities</a></li> 102<li class="toctree-l3"><a class="reference internal" href="settings.html"><code class="docutils literal"><span class="pre">settings</span></code> &#8211; Settings Utilities</a></li>
100<li class="toctree-l3"><a class="reference internal" href="timeutils.html"><code class="docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites</a></li> 103<li class="toctree-l3"><a class="reference internal" href="timeutils.html"><code class="docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites</a></li>
101</ul> 104</ul>
@@ -125,7 +128,7 @@
125 <div class="rst-content"> 128 <div class="rst-content">
126 129
127 130
128 131
129 132
130 133
131 134
@@ -141,7 +144,7 @@
141 <li class="wy-breadcrumbs-aside"> 144 <li class="wy-breadcrumbs-aside">
142 145
143 146
144 <a href="../_sources/utils/messages.txt" rel="nofollow"> View page source</a> 147 <a href="../_sources/utils/messages.rst.txt" rel="nofollow"> View page source</a>
145 148
146 149
147 </li> 150 </li>
@@ -163,8 +166,8 @@
163<tbody valign="top"> 166<tbody valign="top">
164<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 167<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
165<li><strong>socket</strong> &#8211; socket to send the message with</li> 168<li><strong>socket</strong> &#8211; socket to send the message with</li>
166<li><strong>recipient_id</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; the id of the connected device to reply to</li> 169<li><strong>recipient_id</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; the id of the connected device to reply to</li>
167<li><strong>payload</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#tuple" title="(in Python v2.7)"><em>tuple</em></a>) &#8211; The message to send. The first frame should be an 170<li><strong>payload</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#tuple" title="(in Python v2.7)"><em>tuple</em></a>) &#8211; The message to send. The first frame should be an
168empty string</li> 171empty string</li>
169</ul> 172</ul>
170</td> 173</td>
@@ -182,7 +185,7 @@ be prefixed with <cite>prefix</cite>.</p>
182<col class="field-name" /> 185<col class="field-name" />
183<col class="field-body" /> 186<col class="field-body" />
184<tbody valign="top"> 187<tbody valign="top">
185<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>prefix</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Value to prefix on to the random part of the id. Useful 188<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>prefix</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Value to prefix on to the random part of the id. Useful
186for prefixing some meta data to use for things</td> 189for prefixing some meta data to use for things</td>
187</tr> 190</tr>
188</tbody> 191</tbody>
@@ -245,7 +248,7 @@ parts.</p>
245<tbody valign="top"> 248<tbody valign="top">
246<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">Message id for this message</td> 249<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">Message id for this message</td>
247</tr> 250</tr>
248<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)">str</a></td> 251<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)">str</a></td>
249</tr> 252</tr>
250</tbody> 253</tbody>
251</table> 254</table>
@@ -260,22 +263,20 @@ used by a <code class="xref py py-attr docutils literal"><span class="pre">zmq.R
260<col class="field-name" /> 263<col class="field-name" />
261<col class="field-body" /> 264<col class="field-body" />
262<tbody valign="top"> 265<tbody valign="top">
263<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> 266<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
264<li><strong>socket</strong> &#8211; socket to send the message with</li> 267<li><strong>socket</strong> &#8211; socket to send the message with</li>
265<li><strong>recipient_id</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; the id of the connected device to reply to</li> 268<li><strong>recipient_id</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; the id of the connected device to reply to</li>
266<li><strong>command</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; the eMQP command to send</li> 269<li><strong>command</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; the eMQP command to send</li>
267<li><strong>message</strong> &#8211; a msg tuple to send</li> 270<li><strong>message</strong> &#8211; a msg tuple to send</li>
268</ul> 271</ul>
269</td> 272</td>
270</tr> 273</tr>
271<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">Message id for this message</p>
272</td>
273</tr>
274<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)">str</a></p>
275</td>
276</tr>
277</tbody> 274</tbody>
278</table> 275</table>
276<dl class="docutils">
277<dt>Returns</dt>
278<dd>str: Message id for this message</dd>
279</dl>
279</dd></dl> 280</dd></dl>
280 281
281</div> 282</div>
diff --git a/utils/settings.html b/utils/settings.html
index fe62e9d..0341fa8 100644..100755
--- a/utils/settings.html
+++ b/utils/settings.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="../genindex.html"/>
35 <link rel="search" title="Search" href="../search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/>
34 <link rel="up" title="utils – Utilities" href="index.html"/> 37 <link rel="up" title="utils – Utilities" href="index.html"/>
35 <link rel="next" title="timeutils – Time Utilites" href="timeutils.html"/> 38 <link rel="next" title="timeutils – Time Utilites" href="timeutils.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -96,7 +99,7 @@
96<li class="toctree-l3"><a class="reference internal" href="classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li> 99<li class="toctree-l3"><a class="reference internal" href="classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li>
97<li class="toctree-l3"><a class="reference internal" href="devices.html"><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li> 100<li class="toctree-l3"><a class="reference internal" href="devices.html"><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li>
98<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li> 101<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li>
99<li class="toctree-l3 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">settings</span></code> &#8211; Settings Utilities</a></li> 102<li class="toctree-l3 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">settings</span></code> &#8211; Settings Utilities</a></li>
100<li class="toctree-l3"><a class="reference internal" href="timeutils.html"><code class="docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites</a></li> 103<li class="toctree-l3"><a class="reference internal" href="timeutils.html"><code class="docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites</a></li>
101</ul> 104</ul>
102</li> 105</li>
@@ -125,7 +128,7 @@
125 <div class="rst-content"> 128 <div class="rst-content">
126 129
127 130
128 131
129 132
130 133
131 134
@@ -141,7 +144,7 @@
141 <li class="wy-breadcrumbs-aside"> 144 <li class="wy-breadcrumbs-aside">
142 145
143 146
144 <a href="../_sources/utils/settings.txt" rel="nofollow"> View page source</a> 147 <a href="../_sources/utils/settings.rst.txt" rel="nofollow"> View page source</a>
145 148
146 149
147 </li> 150 </li>
@@ -161,7 +164,7 @@
161<col class="field-name" /> 164<col class="field-name" />
162<col class="field-body" /> 165<col class="field-body" />
163<tbody valign="top"> 166<tbody valign="top">
164<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>section</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the INI section to import</td> 167<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>section</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the INI section to import</td>
165</tr> 168</tr>
166</tbody> 169</tbody>
167</table> 170</table>
diff --git a/utils/timeutils.html b/utils/timeutils.html
index 6cebb34..357f8ec 100644..100755
--- a/utils/timeutils.html
+++ b/utils/timeutils.html
@@ -30,6 +30,9 @@
30 30
31 31
32 32
33 <link rel="index" title="Index"
34 href="../genindex.html"/>
35 <link rel="search" title="Search" href="../search.html"/>
33 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/> 36 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/>
34 <link rel="up" title="utils – Utilities" href="index.html"/> 37 <link rel="up" title="utils – Utilities" href="index.html"/>
35 <link rel="next" title="Contributing to EventMQ" href="../contributing.html"/> 38 <link rel="next" title="Contributing to EventMQ" href="../contributing.html"/>
@@ -61,7 +64,7 @@
61 64
62 65
63 <div class="version"> 66 <div class="version">
64 0.2.7.1 67 0.3-rc8
65 </div> 68 </div>
66 69
67 70
@@ -97,7 +100,7 @@
97<li class="toctree-l3"><a class="reference internal" href="devices.html"><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li> 100<li class="toctree-l3"><a class="reference internal" href="devices.html"><code class="docutils literal"><span class="pre">devices</span></code> &#8211; Device Utilities</a></li>
98<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li> 101<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li>
99<li class="toctree-l3"><a class="reference internal" href="settings.html"><code class="docutils literal"><span class="pre">settings</span></code> &#8211; Settings Utilities</a></li> 102<li class="toctree-l3"><a class="reference internal" href="settings.html"><code class="docutils literal"><span class="pre">settings</span></code> &#8211; Settings Utilities</a></li>
100<li class="toctree-l3 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites</a></li> 103<li class="toctree-l3 current"><a class="current reference internal" href="#"><code class="docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites</a></li>
101</ul> 104</ul>
102</li> 105</li>
103</ul> 106</ul>
@@ -125,7 +128,7 @@
125 <div class="rst-content"> 128 <div class="rst-content">
126 129
127 130
128 131
129 132
130 133
131 134
@@ -141,7 +144,7 @@
141 <li class="wy-breadcrumbs-aside"> 144 <li class="wy-breadcrumbs-aside">
142 145
143 146
144 <a href="../_sources/utils/timeutils.txt" rel="nofollow"> View page source</a> 147 <a href="../_sources/utils/timeutils.rst.txt" rel="nofollow"> View page source</a>
145 148
146 149
147 </li> 150 </li>
@@ -178,8 +181,8 @@ next(interval) # 600</p>
178<col class="field-body" /> 181<col class="field-body" />
179<tbody valign="top"> 182<tbody valign="top">
180<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 183<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
181<li><strong>(numeric) - the timestamp to begin with. usually gotten</strong> (<em>start_value</em>) &#8211; via <a class="reference internal" href="#eventmq.utils.timeutils.monotonic" title="eventmq.utils.timeutils.monotonic"><code class="xref py py-func docutils literal"><span class="pre">monotonic()</span></code></a> or <a class="reference internal" href="#eventmq.utils.timeutils.timestamp" title="eventmq.utils.timeutils.timestamp"><code class="xref py py-func docutils literal"><span class="pre">timestamp()</span></code></a></li> 184<li><strong>start_value</strong> (<em>numeric</em>) &#8211; via <a class="reference internal" href="#eventmq.utils.timeutils.monotonic" title="eventmq.utils.timeutils.monotonic"><code class="xref py py-func docutils literal"><span class="pre">monotonic()</span></code></a> or <a class="reference internal" href="#eventmq.utils.timeutils.timestamp" title="eventmq.utils.timeutils.timestamp"><code class="xref py py-func docutils literal"><span class="pre">timestamp()</span></code></a></li>
182<li><strong>(int) - the number of seconds between intervals</strong> (<em>interval_secs</em>) &#8211; </li> 185<li><strong>interval_secs</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; </li>
183</ul> 186</ul>
184</td> 187</td>
185</tr> 188</tr>