From 7b484fb18f35b32a732a4f6635b7d4a96c8d6700 Mon Sep 17 00:00:00 2001 From: neobobkrause Date: Tue, 23 Oct 2012 07:51:27 -0700 Subject: [PATCH 001/229] Update boost/network/protocol/http/client/async_impl.hpp Properly initialize the resolver_strand_ data member in async_client constructor that accepts an io_service. --- boost/network/protocol/http/client/async_impl.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/boost/network/protocol/http/client/async_impl.hpp b/boost/network/protocol/http/client/async_impl.hpp index a7e178d16..11fe26aaa 100644 --- a/boost/network/protocol/http/client/async_impl.hpp +++ b/boost/network/protocol/http/client/async_impl.hpp @@ -64,7 +64,9 @@ namespace boost { namespace network { namespace http { certificate_filename_(certificate_filename), verify_path_(verify_path) { - } + connection_base::resolver_strand_.reset(new + boost::asio::io_service::strand(service_)); + } ~async_client() throw () { From 3f27c3a8b0551793ee11d78e63ceabc6149022a8 Mon Sep 17 00:00:00 2001 From: degiz Date: Sat, 1 Dec 2012 16:15:02 +0400 Subject: [PATCH 002/229] bug fixed whis client doesnt invoke callback when cant resolve adress --- boost/network/protocol/http/client/connection/async_normal.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/boost/network/protocol/http/client/connection/async_normal.hpp b/boost/network/protocol/http/client/connection/async_normal.hpp index 4f95fdcf0..d2fb59e0b 100644 --- a/boost/network/protocol/http/client/connection/async_normal.hpp +++ b/boost/network/protocol/http/client/connection/async_normal.hpp @@ -171,6 +171,8 @@ namespace boost { namespace network { namespace http { namespace impl { placeholders::error))); } else { set_errors(ec ? ec : boost::asio::error::host_not_found); + boost::iterator_range range; + callback(range,ec); } } } From d51d6e4205b83704c5e206a1b647aa16bc49036e Mon Sep 17 00:00:00 2001 From: 3noch Date: Tue, 22 Jan 2013 14:39:53 -0500 Subject: [PATCH 003/229] Add needed Boost libs and OpenSSL headers to CMake config --- CMakeLists.txt | 7 ++++++- libs/network/example/CMakeLists.txt | 8 ++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4667f235f..3d176a521 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ cmake_minimum_required(VERSION 2.8) project(CPP-NETLIB) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTI_THREADED ON) -find_package( Boost 1.45.0 REQUIRED unit_test_framework system regex date_time thread filesystem program_options ) +find_package( Boost 1.45.0 REQUIRED unit_test_framework system regex date_time thread filesystem program_options chrono ) find_package( OpenSSL ) find_package( Threads ) set(CMAKE_VERBOSE_MAKEFILE true) @@ -18,6 +18,7 @@ endif() if (OPENSSL_FOUND) add_definitions(-DBOOST_NETWORK_ENABLE_HTTPS) + include_directories(${OPENSSL_INCLUDE_DIR}) endif() if (Boost_FOUND) @@ -37,4 +38,8 @@ if (Boost_FOUND) add_subdirectory(libs/network/example) endif(Boost_FOUND) +if (MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") +endif() + enable_testing() diff --git a/libs/network/example/CMakeLists.txt b/libs/network/example/CMakeLists.txt index 20ab9acaf..ce2eadd35 100644 --- a/libs/network/example/CMakeLists.txt +++ b/libs/network/example/CMakeLists.txt @@ -28,13 +28,17 @@ set(BOOST_CLIENT_LIBS ${Boost_THREAD_LIBRARY} ${Boost_DATE_TIME_LIBRARY} ${Boost_REGEX_LIBRARY} - ${Boost_SYSTEM_LIBRARY}) + ${Boost_SYSTEM_LIBRARY} + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_CHRONO_LIBRARY}) set(BOOST_SERVER_LIBS ${Boost_THREAD_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_DATE_TIME_LIBRARY} - ${Boost_PROGRAM_OPTIONS_LIBRARY}) + ${Boost_PROGRAM_OPTIONS_LIBRARY} + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_CHRONO_LIBRARY}) target_link_libraries(http_client ${BOOST_CLIENT_LIBS} From 16cf0935013e6596e889ffd22a12bf231cf1a498 Mon Sep 17 00:00:00 2001 From: 3noch Date: Tue, 22 Jan 2013 15:16:30 -0500 Subject: [PATCH 004/229] Provide source port as part of the request --- boost/network/protocol/http/impl/request.hpp | 2 ++ boost/network/protocol/http/server/sync_connection.hpp | 1 + libs/network/example/http/hello_world_server.cpp | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/boost/network/protocol/http/impl/request.hpp b/boost/network/protocol/http/impl/request.hpp index 5ba92d6c1..1ab6bb912 100644 --- a/boost/network/protocol/http/impl/request.hpp +++ b/boost/network/protocol/http/impl/request.hpp @@ -157,6 +157,7 @@ namespace http { typedef vector_type headers_container_type; typedef boost::uint16_t port_type; mutable string_type source; + mutable port_type source_port; mutable string_type method; mutable string_type destination; mutable boost::uint8_t http_version_major; @@ -168,6 +169,7 @@ namespace http { using std::swap; swap(method, r.method); swap(source, r.source); + swap(source_port, r.source_port); swap(destination, r.destination); swap(http_version_major, r.http_version_major); swap(http_version_minor, r.http_version_minor); diff --git a/boost/network/protocol/http/server/sync_connection.hpp b/boost/network/protocol/http/server/sync_connection.hpp index 32d562b93..121f5b3cd 100644 --- a/boost/network/protocol/http/server/sync_connection.hpp +++ b/boost/network/protocol/http/server/sync_connection.hpp @@ -79,6 +79,7 @@ namespace boost { namespace network { namespace http { void handle_read_headers(boost::system::error_code const &ec, size_t bytes_transferred) { if (!ec) { request_.source = socket_.remote_endpoint().address().to_string(); + request_.source_port = socket_.remote_endpoint().port(); boost::tribool done; buffer_type::iterator new_start; tie(done,new_start) = parser_.parse_headers(request_, buffer_.data(), buffer_.data() + bytes_transferred); diff --git a/libs/network/example/http/hello_world_server.cpp b/libs/network/example/http/hello_world_server.cpp index e6ec08bcf..e515f2cf4 100644 --- a/libs/network/example/http/hello_world_server.cpp +++ b/libs/network/example/http/hello_world_server.cpp @@ -29,8 +29,9 @@ struct hello_world { void operator() (server::request const &request, server::response &response) { server::string_type ip = source(request); + unsigned int port = request.source_port; std::ostringstream data; - data << "Hello, " << ip << "!"; + data << "Hello, " << ip << ':' << port << '!'; response = server::response::stock_reply( server::response::ok, data.str()); } From c0570dd24634420803c37586a3e4014801a8f5f9 Mon Sep 17 00:00:00 2001 From: 3noch Date: Tue, 22 Jan 2013 15:23:57 -0500 Subject: [PATCH 005/229] Fix spacing --- libs/network/example/http/hello_world_server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/network/example/http/hello_world_server.cpp b/libs/network/example/http/hello_world_server.cpp index e515f2cf4..5e925e911 100644 --- a/libs/network/example/http/hello_world_server.cpp +++ b/libs/network/example/http/hello_world_server.cpp @@ -29,7 +29,7 @@ struct hello_world { void operator() (server::request const &request, server::response &response) { server::string_type ip = source(request); - unsigned int port = request.source_port; + unsigned int port = request.source_port; std::ostringstream data; data << "Hello, " << ip << ':' << port << '!'; response = server::response::stock_reply( From 26c681bb6c76134b11df18c3974a54f9b68bd050 Mon Sep 17 00:00:00 2001 From: 3noch Date: Wed, 23 Jan 2013 11:51:43 -0500 Subject: [PATCH 006/229] Revert "Merge pull request #1 from CovenantEyes/ce-custom" This reverts commit ac45ccdb0d917f7cb9bfd3ada77e5398dffec358, reversing changes made to d51d6e4205b83704c5e206a1b647aa16bc49036e. --- boost/network/protocol/http/impl/request.hpp | 2 -- boost/network/protocol/http/server/sync_connection.hpp | 1 - libs/network/example/http/hello_world_server.cpp | 3 +-- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/boost/network/protocol/http/impl/request.hpp b/boost/network/protocol/http/impl/request.hpp index 1ab6bb912..5ba92d6c1 100644 --- a/boost/network/protocol/http/impl/request.hpp +++ b/boost/network/protocol/http/impl/request.hpp @@ -157,7 +157,6 @@ namespace http { typedef vector_type headers_container_type; typedef boost::uint16_t port_type; mutable string_type source; - mutable port_type source_port; mutable string_type method; mutable string_type destination; mutable boost::uint8_t http_version_major; @@ -169,7 +168,6 @@ namespace http { using std::swap; swap(method, r.method); swap(source, r.source); - swap(source_port, r.source_port); swap(destination, r.destination); swap(http_version_major, r.http_version_major); swap(http_version_minor, r.http_version_minor); diff --git a/boost/network/protocol/http/server/sync_connection.hpp b/boost/network/protocol/http/server/sync_connection.hpp index 121f5b3cd..32d562b93 100644 --- a/boost/network/protocol/http/server/sync_connection.hpp +++ b/boost/network/protocol/http/server/sync_connection.hpp @@ -79,7 +79,6 @@ namespace boost { namespace network { namespace http { void handle_read_headers(boost::system::error_code const &ec, size_t bytes_transferred) { if (!ec) { request_.source = socket_.remote_endpoint().address().to_string(); - request_.source_port = socket_.remote_endpoint().port(); boost::tribool done; buffer_type::iterator new_start; tie(done,new_start) = parser_.parse_headers(request_, buffer_.data(), buffer_.data() + bytes_transferred); diff --git a/libs/network/example/http/hello_world_server.cpp b/libs/network/example/http/hello_world_server.cpp index 5e925e911..e6ec08bcf 100644 --- a/libs/network/example/http/hello_world_server.cpp +++ b/libs/network/example/http/hello_world_server.cpp @@ -29,9 +29,8 @@ struct hello_world { void operator() (server::request const &request, server::response &response) { server::string_type ip = source(request); - unsigned int port = request.source_port; std::ostringstream data; - data << "Hello, " << ip << ':' << port << '!'; + data << "Hello, " << ip << "!"; response = server::response::stock_reply( server::response::ok, data.str()); } From 1ff1a1ba6e718df9fa028372c72a758ae87f0a58 Mon Sep 17 00:00:00 2001 From: 3noch Date: Tue, 22 Jan 2013 15:16:30 -0500 Subject: [PATCH 007/229] Re-provide source port as part of the request --- boost/network/protocol/http/impl/request.hpp | 2 ++ boost/network/protocol/http/server/sync_connection.hpp | 1 + libs/network/example/http/hello_world_server.cpp | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/boost/network/protocol/http/impl/request.hpp b/boost/network/protocol/http/impl/request.hpp index 5ba92d6c1..1ab6bb912 100644 --- a/boost/network/protocol/http/impl/request.hpp +++ b/boost/network/protocol/http/impl/request.hpp @@ -157,6 +157,7 @@ namespace http { typedef vector_type headers_container_type; typedef boost::uint16_t port_type; mutable string_type source; + mutable port_type source_port; mutable string_type method; mutable string_type destination; mutable boost::uint8_t http_version_major; @@ -168,6 +169,7 @@ namespace http { using std::swap; swap(method, r.method); swap(source, r.source); + swap(source_port, r.source_port); swap(destination, r.destination); swap(http_version_major, r.http_version_major); swap(http_version_minor, r.http_version_minor); diff --git a/boost/network/protocol/http/server/sync_connection.hpp b/boost/network/protocol/http/server/sync_connection.hpp index 32d562b93..121f5b3cd 100644 --- a/boost/network/protocol/http/server/sync_connection.hpp +++ b/boost/network/protocol/http/server/sync_connection.hpp @@ -79,6 +79,7 @@ namespace boost { namespace network { namespace http { void handle_read_headers(boost::system::error_code const &ec, size_t bytes_transferred) { if (!ec) { request_.source = socket_.remote_endpoint().address().to_string(); + request_.source_port = socket_.remote_endpoint().port(); boost::tribool done; buffer_type::iterator new_start; tie(done,new_start) = parser_.parse_headers(request_, buffer_.data(), buffer_.data() + bytes_transferred); diff --git a/libs/network/example/http/hello_world_server.cpp b/libs/network/example/http/hello_world_server.cpp index e6ec08bcf..5e925e911 100644 --- a/libs/network/example/http/hello_world_server.cpp +++ b/libs/network/example/http/hello_world_server.cpp @@ -29,8 +29,9 @@ struct hello_world { void operator() (server::request const &request, server::response &response) { server::string_type ip = source(request); + unsigned int port = request.source_port; std::ostringstream data; - data << "Hello, " << ip << "!"; + data << "Hello, " << ip << ':' << port << '!'; response = server::response::stock_reply( server::response::ok, data.str()); } From 6ba8f9aadadfc9ebac73668aecb3cf449cf98055 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Thu, 31 Jan 2013 14:09:08 +1100 Subject: [PATCH 008/229] Implementation of options for client and server. --- .../network/protocol/http/client/options.hpp | 75 ++++++++++ .../network/protocol/http/server/options.hpp | 134 ++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 boost/network/protocol/http/client/options.hpp create mode 100644 boost/network/protocol/http/server/options.hpp diff --git a/boost/network/protocol/http/client/options.hpp b/boost/network/protocol/http/client/options.hpp new file mode 100644 index 000000000..bea97c7ad --- /dev/null +++ b/boost/network/protocol/http/client/options.hpp @@ -0,0 +1,75 @@ +#ifndef BOOST_NETWORK_PROTOCOL_HTTP_CLIENT_OPTIONS_HPP_20130128 +#define BOOST_NETWORK_PROTOCOL_HTTP_CLIENT_OPTIONS_HPP_20130128 + +// Copyright 2013 Google, Inc. +// Copyright 2013 Dean Michael Berris +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +namespace boost { namespace network { namespace http { + +template +struct client_options { + typedef typename string::type string_type; + + client_options() + : cache_resolved_(false) + , follow_redirects_(false) + , openssl_certificate_() + , openssl_verify_path_() + , io_service_() + {} + + client_options(client_options const &other) + : cache_resolved_(other.cache_resolved_) + , follow_redirects_(other.follow_redirects_) + , openssl_certificate_(other.openssl_certificate_) + , openssl_verify_path_(other.openssl_verify_path_) + , io_service_(other.io_service_) + {} + + client_options& operator=(client_options other) { + other.swap(*this); + return *this; + } + + void swap(client_options& other) { + using std::swap; + swap(cache_resolved_, other.cache_resolved_); + swap(follow_redirects_, other.follow_redirects_); + swap(openssl_certificate_, other.openssl_certificate_); + swap(openssl_verify_path, other.openssl_verify_path_); + swap(io_service_, other.io_service_); + } + + client_options& cache_resolved(bool v) { cache_resolved_ = v; return *this; }; + client_options& follow_redirects(bool v) { follow_redirects_ = v; return *this; }; + client_options& openssl_certificate(string_type const & v) { openssl_certificate_ = v; return *this; } + client_options& openssl_verify_path(string_type const & v) { openssl_verify_path_ = v; return *this; } + client_options& io_service(boost::shared_ptr v) { io_service_ = v; return *this; } + + bool cache_resolved() const { return cache_resolved_; } + bool follow_redirects() const { return follow_redirects_; } + boost::optional openssl_certificate() const { return openssl_certificate_; } + boost::optional openssl_verify_path() const { return openssl_verify_path_; } + boost::shared_ptr io_service() const { return io_service_; } + + private: + bool cache_resolved_; + bool follow_redirects_; + boost::optional openssl_certificate_; + boost::optional openssl_verify_path_; + boost::shared_ptr io_service_; +}; + +template +inline void swap(client_options& a, client_options& b) { + a.swap(b); +} + +} /* http */ +} /* network */ +} /* boost */ + +#endif /* BOOST_NETWORK_PROTOCOL_HTTP_CLIENT_OPTIONS_HPP_20130128 */ diff --git a/boost/network/protocol/http/server/options.hpp b/boost/network/protocol/http/server/options.hpp new file mode 100644 index 000000000..e26c2c91e --- /dev/null +++ b/boost/network/protocol/http/server/options.hpp @@ -0,0 +1,134 @@ +#ifndef BOOST_NETWORK_PROTOCOL_HTTP_SERVER_OPTIONS_20130128 +#define BOOST_NETWORK_PROTOCOL_HTTP_SERVER_OPTIONS_20130128 + +// Copyright 2013 Google, Inc. +// Copyright 2013 Dean Michael Berris +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include + +namespace boost { namespace network { namespace http { + +template +struct server_options { + typedef typename string::type string_type; + + explicit server_options(Handler& handler) + : io_service_() + , handler_(handler) + , address_("localhost") + , port_("80") + , reuse_address_(false) + , report_aborted_(false) + , non_blocking_io_(true) + , linger_(true) + , linger_timeout_(0) + , receive_buffer_size_() + , send_buffer_size_() + , receive_low_watermark_() + , send_low_watermark_() + , thread_pool_() + {} + + server_options(const server_options &other) + : io_service_(other.io_service()) + , handler_(other.handler_) + , address_(other.address_) + , port_(other.port_) + , reuse_address_(other.reuse_address_) + , report_aborted_(other.report_aborted_) + , non_blocking_io_(other.non_blocking_io_) + , linger_(other.linger_) + , linger_timeout_(0) + , receive_buffer_size_(other.receive_buffer_size_) + , send_buffer_size_(other.send_buffer_size_) + , receive_low_watermark_(other.receive_low_watermark_) + , send_low_watermark_(other.send_low_watermark_) + , thread_pool_(other.thread_pool_) + {} + + server_options &operator= (server_options other) { + other.swap(*this); + return *this; + } + + void swap(server_options &other) { + using std::swap; + swap(io_service_, other.io_service_); + swap(address_, other.address_); + swap(port_, other.port_); + swap(reuse_address_, other.reuse_address_); + swap(report_aborted_, other.report_aborted_); + swap(non_blocking_io_, other.non_blocking_io_); + swap(linger_, other.linger_); + swap(linger_timeout_, other.linger_timeout_); + swap(receive_buffer_size_, other.receive_buffer_size_); + swap(send_buffer_size_, other.send_buffer_size_); + swap(receive_low_watermark_, other.receive_low_watermark_); + swap(send_low_watermark_, other.send_low_watermark_); + swap(thread_pool_, other.thread_pool_); + } + + server_options &io_service(boost::shared_ptr v) { io_service_ = v; return *this; } + server_options &address(string_type const &v) { address_ = v; return *this; } + server_options &port(string_type const &v) { port_ = v; return *this; } + server_options &reuse_address(bool v) { reuse_address_ = v; return *this; } + server_options &report_aborted(bool v) { report_aborted_ = v; return *this; } + server_options &non_blocking_io(bool v) { non_blocking_io_ = v; return *this; } + server_options &linger(bool v) { linger_ = v; return *this; } + server_options &linger_timeout(size_t v) { linger_timeout_ = v; return *this; } + server_options &receive_buffer_size(boost::asio::socket_base::receive_buffer_size v) { receive_buffer_size_ = v; return *this; } + server_options &send_buffer_size(boost::asio::socket_base::send_buffer_size v) { send_buffer_size_ = v; return *this; } + server_options &receive_low_watermark(boost::asio::socket_base::receive_low_watermark v) { receive_low_watermark_ = v; return *this; } + server_options &send_low_watermark(boost::asio::socket_base::send_low_watermark v) { send_low_watermark_ = v; return *this; } + server_options &thread_pool(boost::shared_ptr v) { thread_pool_ = v; return *this; } + + boost::shared_ptr io_service() const { return io_service_; } + string_type address() const { return address_; } + string_type port() const { return port_; } + Handler &handler() const { return handler_; } + bool reuse_address() const { return reuse_address_; } + bool report_aborted() const { return report_aborted_; } + bool non_blocking_io() const { return non_blocking_io_; } + bool linger() const { return linger_; } + size_t linger_timeout() const { return linger_timeout_; } + boost::optional receive_buffer_size() const { return receive_buffer_size_; } + boost::optional send_buffer_size() const { return send_buffer_size_; } + boost::optional receive_low_watermark() const { return receive_low_watermark_; } + boost::optional send_low_watermark() const { return send_low_watermark_; } + boost::shared_ptr thread_pool() const { return thread_pool_; } + + private: + boost::shared_ptr io_service_; + string_type address_; + string_type port_; + Handler &handler_; + bool reuse_address_; + bool report_aborted_; + bool non_blocking_io_; + bool linger_; + size_t linger_timeout_; + boost::optional receive_buffer_size_; + boost::optional send_buffer_size_; + boost::optional receive_low_watermark_; + boost::optional send_low_watermark_; + boost::shared_ptr thread_pool_; +}; + +template +inline void swap(server_options &a, server_options &b) { + a.swap(b); +} + +} /* http */ +} /* network */ +} /* boost */ + +#endif /* BOOST_NETWORK_PROTOCOL_HTTP_SERVER_OPTIONS_20130128 */ From 6da32c423e3559736acfdca64fc1d708a227ee40 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Thu, 31 Jan 2013 14:11:00 +1100 Subject: [PATCH 009/229] Removing client dependency on Boost.Parameter. --- boost/network/protocol/http/client.hpp | 42 +++------ .../protocol/http/client/async_impl.hpp | 22 ++--- boost/network/protocol/http/client/facade.hpp | 85 +++---------------- .../protocol/http/client/parameters.hpp | 29 ------- boost/network/protocol/http/client/pimpl.hpp | 9 +- .../protocol/http/client/sync_impl.hpp | 19 +---- libs/network/example/http_client.cpp | 3 +- .../test/http/client_constructor_test.cpp | 23 ++--- .../test/http/client_get_streaming_test.cpp | 2 +- .../test/http/client_get_timeout_test.cpp | 1 - 10 files changed, 45 insertions(+), 190 deletions(-) delete mode 100644 boost/network/protocol/http/client/parameters.hpp diff --git a/boost/network/protocol/http/client.hpp b/boost/network/protocol/http/client.hpp index 78a0619bf..dd5afabc7 100644 --- a/boost/network/protocol/http/client.hpp +++ b/boost/network/protocol/http/client.hpp @@ -24,8 +24,8 @@ #include #include -#include #include +#include namespace boost { namespace network { namespace http { @@ -41,38 +41,18 @@ namespace boost { namespace network { namespace http { typedef basic_response response; typedef typename string::type string_type; typedef Tag tag_type; + typedef client_options options; - // Constructor + // Constructors // ================================================================= - // This is a Boost.Parameter-based constructor forwarder, whose - // implementation is actually forwarded to the base type. - // - // The supported parameters are: - // _follow_redirects : bool -- whether to follow HTTP redirect - // responses (default: false) - // _cache_resolved : bool -- whether to cache the resolved - // endpoints (default: false) - // _io_service : boost::asio::io_service & - // -- supply an io_service to the - // client - // _openssl_certificate : string - // -- the name of the certificate file - // to use - // _openssl_verify_path : string - // -- the name of the directory from - // which the certificate authority - // files can be found - - BOOST_PARAMETER_CONSTRUCTOR( - basic_client, (base_facade_type), tag, - (optional - (in_out(io_service), (boost::asio::io_service&)) - (follow_redirects, (bool)) - (cache_resolved, (bool)) - (openssl_certificate, (string_type)) - (openssl_verify_path, (string_type)) - )) - + // This constructor takes a single options argument of type + // client_options. See boost/network/protocol/http/client/options.hpp + // for more details. + explicit basic_client(options const & options) + : base_facade_type(options) {} + + // This default constructor sets up the default options. + basic_client() : base_facade_type(options()) {} // // ================================================================= diff --git a/boost/network/protocol/http/client/async_impl.hpp b/boost/network/protocol/http/client/async_impl.hpp index 11fe26aaa..3116a7c1a 100644 --- a/boost/network/protocol/http/client/async_impl.hpp +++ b/boost/network/protocol/http/client/async_impl.hpp @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include namespace boost { namespace network { namespace http { @@ -37,9 +39,9 @@ namespace boost { namespace network { namespace http { function const &, system::error_code const &)> body_callback_function_type; - async_client(bool cache_resolved, bool follow_redirect, optional const & certificate_filename, optional const & verify_path) + async_client(bool cache_resolved, bool follow_redirect, boost::shared_ptr service, optional const & certificate_filename, optional const & verify_path) : connection_base(cache_resolved, follow_redirect), - service_ptr(new boost::asio::io_service), + service_ptr(service.get() ? service : boost::make_shared()), service_(*service_ptr), resolver_(service_), sentinel_(new boost::asio::io_service::work(service_)), @@ -55,19 +57,6 @@ namespace boost { namespace network { namespace http { ))); } - async_client(bool cache_resolved, bool follow_redirect, boost::asio::io_service & service, optional const & certificate_filename, optional const & verify_path) - : connection_base(cache_resolved, follow_redirect), - service_ptr(0), - service_(service), - resolver_(service_), - sentinel_(new boost::asio::io_service::work(service_)), - certificate_filename_(certificate_filename), - verify_path_(verify_path) - { - connection_base::resolver_strand_.reset(new - boost::asio::io_service::strand(service_)); - } - ~async_client() throw () { sentinel_.reset(); @@ -75,7 +64,6 @@ namespace boost { namespace network { namespace http { lifetime_thread_->join(); lifetime_thread_.reset(); } - delete service_ptr; } basic_response const request_skeleton( @@ -90,7 +78,7 @@ namespace boost { namespace network { namespace http { return connection_->send_request(method, request_, get_body, callback); } - boost::asio::io_service * service_ptr; + boost::shared_ptr service_ptr; boost::asio::io_service & service_; resolver_type resolver_; boost::shared_ptr sentinel_; diff --git a/boost/network/protocol/http/client/facade.hpp b/boost/network/protocol/http/client/facade.hpp index 639fb7277..45521d439 100644 --- a/boost/network/protocol/http/client/facade.hpp +++ b/boost/network/protocol/http/client/facade.hpp @@ -9,7 +9,7 @@ #include #include #include -#include +#include namespace boost { namespace network { namespace http { @@ -28,45 +28,20 @@ namespace boost { namespace network { namespace http { typedef basic_client_impl pimpl_type; typedef function const &,system::error_code const &)> body_callback_function_type; - template - basic_client_facade(ArgPack const & args) + basic_client_facade(client_options const &options) { - init_pimpl(args, - typename mpl::if_< - is_same< - typename parameter::value_type::type, - void - >, - no_io_service, - has_io_service - >::type()); + init_pimpl(options); } - BOOST_PARAMETER_MEMBER_FUNCTION((response const), head, tag, (required (request,(request const &)))) { + response const head(request const &request) { return pimpl->request_skeleton(request, "HEAD", false, body_callback_function_type()); } - BOOST_PARAMETER_MEMBER_FUNCTION((response const), get , tag, - (required - (request,(request const &)) - ) - (optional - (body_handler,(body_callback_function_type),body_callback_function_type()) - ) - ) { + response const get(request const &request, body_callback_function_type body_handler = body_callback_function_type()) { return pimpl->request_skeleton(request, "GET", true, body_handler); } - BOOST_PARAMETER_MEMBER_FUNCTION((response const), post, tag, - (required - (request,(request)) // yes sir, we make a copy of the original request. - ) - (optional - (body,(string_type const &),string_type()) - (content_type,(string_type const &),string_type()) - (body_handler,(body_callback_function_type),body_callback_function_type()) - ) - ) { + response const post(request request, string_type const &body = string_type(), string_type const &content_type = string_type(), body_callback_function_type body_handler = body_callback_function_type()) { if (body != string_type()) { request << remove_header("Content-Length") << header("Content-Length", boost::lexical_cast(body.size())) @@ -88,16 +63,7 @@ namespace boost { namespace network { namespace http { return pimpl->request_skeleton(request, "POST", true, body_handler); } - BOOST_PARAMETER_MEMBER_FUNCTION((response const), put , tag, - (required - (request,(request)) // yes sir, we make a copy of the original request. - ) - (optional - (body,(string_type const &),string_type()) - (content_type,(string_type const &),string_type()) - (body_handler,(body_callback_function_type),body_callback_function_type()) - ) - ) { + response const put(request request, string_type const &body = string_type(), string_type const &content_type = string_type(), body_callback_function_type body_handler = body_callback_function_type()) { if (body != string_type()) { request << remove_header("Content-Length") << header("Content-Length", boost::lexical_cast(body.size())) @@ -119,14 +85,7 @@ namespace boost { namespace network { namespace http { return pimpl->request_skeleton(request, "PUT", true, body_handler); } - BOOST_PARAMETER_MEMBER_FUNCTION((response const), delete_, tag, - (required - (request,(request const &)) - ) - (optional - (body_handler,(body_callback_function_type),body_callback_function_type()) - ) - ) { + response const delete_(request const &request, body_callback_function_type body_handler = body_callback_function_type()) { return pimpl->request_skeleton(request, "DELETE", true, body_handler); } @@ -141,31 +100,15 @@ namespace boost { namespace network { namespace http { boost::shared_ptr pimpl; - template - void init_pimpl(ArgPack const & args, no_io_service) { + void init_pimpl(client_options const & options) { pimpl.reset( new pimpl_type( - args[_cache_resolved|false] - , args[_follow_redirects|false] - , optional(args[_openssl_certificate|optional()]) - , optional(args[_openssl_verify_path|optional()]) - ) - ); + options.cache_resolved(), + options.follow_redirects(), + options.openssl_certificate(), + options.openssl_verify_path(), + options.io_service())); } - - template - void init_pimpl(ArgPack const & args, has_io_service) { - pimpl.reset( - new pimpl_type( - args[_cache_resolved|false] - , args[_follow_redirects|false] - , args[_io_service] - , optional(args[_openssl_certificate|optional()]) - , optional(args[_openssl_verify_path|optional()]) - ) - ); - } - }; } // namespace http diff --git a/boost/network/protocol/http/client/parameters.hpp b/boost/network/protocol/http/client/parameters.hpp deleted file mode 100644 index dade4e756..000000000 --- a/boost/network/protocol/http/client/parameters.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef BOOST_NETWORK_PROTOCOL_HTTP_CLIENT_PARAMETERS_HPP_2010127 -#define BOOST_NETWORK_PROTOCOL_HTTP_CLIENT_PARAMETERS_HPP_2010127 - -// Copyright 2010 Dean Michael Berris. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace boost { namespace network { namespace http { - - BOOST_PARAMETER_NAME(follow_redirects) - BOOST_PARAMETER_NAME(cache_resolved) - BOOST_PARAMETER_NAME(openssl_certificate) - BOOST_PARAMETER_NAME(openssl_verify_path) - - BOOST_PARAMETER_NAME(request) - BOOST_PARAMETER_NAME(body) - BOOST_PARAMETER_NAME(content_type) - BOOST_PARAMETER_NAME(body_handler) - -} /* http */ - -} /* network */ - -} /* boost */ - -#endif /* BOOST_NETWORK_PROTOCOL_HTTP_CLIENT_PARAMETERS_HPP_2010127 */ diff --git a/boost/network/protocol/http/client/pimpl.hpp b/boost/network/protocol/http/client/pimpl.hpp index 55df10f57..d68cf0a31 100644 --- a/boost/network/protocol/http/client/pimpl.hpp +++ b/boost/network/protocol/http/client/pimpl.hpp @@ -67,13 +67,8 @@ namespace boost { namespace network { namespace http { typedef typename impl::client_base::type base_type; typedef typename base_type::string_type string_type; - basic_client_impl(bool cache_resolved, bool follow_redirect, optional const & certificate_filename, optional const & verify_path) - : base_type(cache_resolved, follow_redirect, certificate_filename, verify_path) - {} - - basic_client_impl(bool cache_resolved, bool follow_redirect, boost::asio::io_service & service, optional const & certificate_filename, optional const & verify_path) - : base_type(cache_resolved, follow_redirect, service, certificate_filename, verify_path) - {} + basic_client_impl(bool cache_resolved, bool follow_redirect, optional const & certificate_filename, optional const & verify_path, boost::shared_ptr service) + : base_type(cache_resolved, follow_redirect, service, certificate_filename, verify_path) {} ~basic_client_impl() {} diff --git a/boost/network/protocol/http/client/sync_impl.hpp b/boost/network/protocol/http/client/sync_impl.hpp index b81c2198a..75803def8 100644 --- a/boost/network/protocol/http/client/sync_impl.hpp +++ b/boost/network/protocol/http/client/sync_impl.hpp @@ -22,38 +22,27 @@ namespace boost { namespace network { namespace http { typedef function const &, system::error_code const &)> body_callback_function_type; friend struct basic_client_impl; - boost::asio::io_service * service_ptr; + boost::shared_ptr service_ptr; boost::asio::io_service & service_; resolver_type resolver_; optional certificate_file, verify_path; sync_client(bool cache_resolved, bool follow_redirect + , boost::shared_ptr service , optional const & certificate_file = optional() , optional const & verify_path = optional() ) : connection_base(cache_resolved, follow_redirect), - service_ptr(new boost::asio::io_service), + service_ptr(service.get() ? service : make_shared()), service_(*service_ptr), resolver_(service_) , certificate_file(certificate_file) , verify_path(verify_path) {} - sync_client(bool cache_resolved, bool follow_redirect, boost::asio::io_service & service - , optional const & certificate_file = optional() - , optional const & verify_path = optional() - ) - : connection_base(cache_resolved, follow_redirect), - service_ptr(0), - service_(service), - resolver_(service_) - , certificate_file(certificate_file) - , verify_path(verify_path) - {} - ~sync_client() { connection_base::cleanup(); - delete service_ptr; + service_ptr.reset(); } basic_response const request_skeleton(basic_request const & request_, string_type method, bool get_body, body_callback_function_type callback) { diff --git a/libs/network/example/http_client.cpp b/libs/network/example/http_client.cpp index 1f8264a04..344d9e33c 100644 --- a/libs/network/example/http_client.cpp +++ b/libs/network/example/http_client.cpp @@ -62,7 +62,8 @@ int main(int argc, char * argv[]) { http_client::string_type destination_ = host(request); request << ::boost::network::header("Connection", "close"); - http_client client(http::_follow_redirects=true); + http_client::options client_options; + http_client client(client_options.follow_redirects(true)); http_client::response response = client.get(request); if (show_headers) { diff --git a/libs/network/test/http/client_constructor_test.cpp b/libs/network/test/http/client_constructor_test.cpp index 9fa0b15b2..be6e2da7f 100644 --- a/libs/network/test/http/client_constructor_test.cpp +++ b/libs/network/test/http/client_constructor_test.cpp @@ -12,25 +12,14 @@ namespace http = boost::network::http; BOOST_AUTO_TEST_CASE_TEMPLATE(http_client_constructor_test, client, client_types) { + typename client::options options; client instance; - boost::asio::io_service io_service; - client instance2(io_service); - client instance3(http::_io_service=io_service); + client instance2(options.io_service(boost::make_shared())); } BOOST_AUTO_TEST_CASE_TEMPLATE(http_cient_constructor_params_test, client, client_types) { - client instance( - http::_follow_redirects=true, - http::_cache_resolved=true - ); - boost::asio::io_service io_service; - client instance2( - http::_follow_redirects=true, - http::_io_service=io_service, - http::_cache_resolved=true - ); - client instance3( - http::_openssl_certificate="foo", - http::_openssl_verify_path="bar" - ); + typename client::options options; + client instance(options.follow_redirects(true).cache_resolved(true)); + client instance2(options.openssl_certificate("foo").openssl_verify_path("bar")); + client instance3(options.follow_redirects(true).io_service(boost::make_shared()).cache_resolved(true)); } diff --git a/libs/network/test/http/client_get_streaming_test.cpp b/libs/network/test/http/client_get_streaming_test.cpp index aa1bdd902..b8b24ad6a 100644 --- a/libs/network/test/http/client_get_streaming_test.cpp +++ b/libs/network/test/http/client_get_streaming_test.cpp @@ -34,7 +34,7 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(http_client_get_streaming_test, client, async_only body_handler handler_instance(body_string); { client client_; - BOOST_CHECK_NO_THROW( response = client_.get(request, http::_body_handler=handler_instance) ); + BOOST_CHECK_NO_THROW( response = client_.get(request, handler_instance) ); typename net::headers_range::type range = headers(response)["Content-Type"]; BOOST_CHECK ( !boost::empty(range) ); BOOST_CHECK_EQUAL ( body(response).size(), 0u ); diff --git a/libs/network/test/http/client_get_timeout_test.cpp b/libs/network/test/http/client_get_timeout_test.cpp index 4f8aa5e1b..535216977 100644 --- a/libs/network/test/http/client_get_timeout_test.cpp +++ b/libs/network/test/http/client_get_timeout_test.cpp @@ -20,4 +20,3 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(http_get_test_timeout_1_0, client, client_types) { BOOST_CHECK_EQUAL ( 12121, port_ ); BOOST_CHECK_THROW ( response_ = client_.get(request); temp = body(response_); , std::exception ); } - From d3b68c9b729e2de5fd688ca1bf52caee8dfb94d3 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Thu, 31 Jan 2013 14:13:34 +1100 Subject: [PATCH 010/229] Remove dependency on Boost.Parameter from server. --- boost/network/protocol/http/server.hpp | 44 ++------ .../protocol/http/server/async_server.hpp | 100 +++++++----------- .../protocol/http/server/parameters.hpp | 34 ------ .../http/server/socket_options_base.hpp | 54 ++-------- .../protocol/http/server/storage_base.hpp | 23 ++-- .../protocol/http/server/sync_server.hpp | 23 ++-- libs/network/example/http/fileserver.cpp | 7 +- .../example/http/hello_world_server.cpp | 3 +- .../server_async_run_stop_concurrency.cpp | 20 ++-- .../test/http/server_constructor_test.cpp | 49 ++------- 10 files changed, 99 insertions(+), 258 deletions(-) delete mode 100644 boost/network/protocol/http/server/parameters.hpp diff --git a/boost/network/protocol/http/server.hpp b/boost/network/protocol/http/server.hpp index a15613573..b957a1c69 100644 --- a/boost/network/protocol/http/server.hpp +++ b/boost/network/protocol/http/server.hpp @@ -13,7 +13,6 @@ #include #include #include -#include namespace boost { namespace network { namespace http { @@ -40,25 +39,10 @@ namespace boost { namespace network { namespace http { struct server : server_base::type { typedef typename server_base::type server_base; + typedef server_options options; - BOOST_PARAMETER_CONSTRUCTOR( - server, (server_base), tag, - (required - (address, (typename server_base::string_type const &)) - (port, (typename server_base::string_type const &)) - (in_out(handler), (Handler &))) - (optional - (in_out(io_service), (boost::asio::io_service &)) - (reuse_address, (bool)) - (report_aborted, (bool)) - (receive_buffer_size, (int)) - (send_buffer_size, (int)) - (receive_low_watermark, (int)) - (send_low_watermark, (int)) - (non_blocking_io, (int)) - (linger, (bool)) - (linger_timeout, (int))) - ) + explicit server(options const &options) + : server_base(options) {} }; template @@ -66,26 +50,10 @@ namespace boost { namespace network { namespace http { { typedef typename server_base::type server_base; + typedef server_options options; - BOOST_PARAMETER_CONSTRUCTOR( - async_server, (server_base), tag, - (required - (address, (typename server_base::string_type const &)) - (port, (typename server_base::string_type const &)) - (in_out(handler), (Handler&)) - (in_out(thread_pool), (utils::thread_pool&))) - (optional - (in_out(io_service), (boost::asio::io_service&)) - (reuse_address, (bool)) - (report_aborted, (bool)) - (receive_buffer_size, (int)) - (send_buffer_size, (int)) - (receive_low_watermark, (int)) - (send_low_watermark, (int)) - (non_blocking_io, (bool)) - (linger, (bool)) - (linger_timeout, (int))) - ) + explicit async_server(options const &options) + : server_base(options) {} }; } // namespace http diff --git a/boost/network/protocol/http/server/async_server.hpp b/boost/network/protocol/http/server/async_server.hpp index c56af236e..135d6b968 100644 --- a/boost/network/protocol/http/server/async_server.hpp +++ b/boost/network/protocol/http/server/async_server.hpp @@ -23,29 +23,20 @@ namespace boost { namespace network { namespace http { typedef typename boost::network::http::response_header::type response_header; typedef async_connection connection; typedef shared_ptr connection_ptr; - typedef boost::unique_lock scoped_mutex_lock; + typedef boost::unique_lock scoped_mutex_lock; - template - async_server_base(ArgPack const & args) - : server_storage_base(args, - typename mpl::if_< - is_same< - typename parameter::value_type::type, - void - >, - server_storage_base::no_io_service, - server_storage_base::has_io_service - >::type()) - , socket_options_base(args) - , handler(args[_handler]) - , address_(args[_address]) - , port_(args[_port]) - , thread_pool(args[_thread_pool]) + explicit async_server_base(server_options const &options) + : server_storage_base(options) + , socket_options_base(options) + , handler(options.handler()) + , address_(options.address()) + , port_(options.port()) + , thread_pool(options.thread_pool() ? options.thread_pool() : boost::make_shared()) , acceptor(server_storage_base::service_) , stopping(false) , new_connection() , listening_mutex_() - , stopping_mutex_() + , stopping_mutex_() , listening(false) {} @@ -57,19 +48,19 @@ namespace boost { namespace network { namespace http { void stop() { // stop accepting new requests and let all the existing // handlers finish. - scoped_mutex_lock listening_lock(listening_mutex_); - if (listening) { // we dont bother stopping if we arent currently listening - scoped_mutex_lock stopping_lock(stopping_mutex_); - stopping = true; - system::error_code ignored; - acceptor.close(ignored); - listening = false; - service_.post(boost::bind(&async_server_base::handle_stop, this)); - } + scoped_mutex_lock listening_lock(listening_mutex_); + if (listening) { // we dont bother stopping if we arent currently listening + scoped_mutex_lock stopping_lock(stopping_mutex_); + stopping = true; + system::error_code ignored; + acceptor.close(ignored); + listening = false; + service_.post(boost::bind(&async_server_base::handle_stop, this)); + } } void listen() { - scoped_mutex_lock listening_lock(listening_mutex_); + scoped_mutex_lock listening_lock(listening_mutex_); BOOST_NETWORK_MESSAGE("Listening on " << address_ << ':' << port_); if (!listening) start_listening(); // we only initialize our acceptor/sockets if we arent already listening if (!listening) { @@ -81,41 +72,35 @@ namespace boost { namespace network { namespace http { private: Handler & handler; string_type address_, port_; - utils::thread_pool & thread_pool; + boost::shared_ptr thread_pool; asio::ip::tcp::acceptor acceptor; bool stopping; connection_ptr new_connection; boost::mutex listening_mutex_; - boost::mutex stopping_mutex_; + boost::mutex stopping_mutex_; bool listening; - - void handle_stop() { - scoped_mutex_lock stopping_lock(stopping_mutex_); - if (stopping) service_.stop(); // a user may have started listening again before the stop command is reached - } + + void handle_stop() { + scoped_mutex_lock stopping_lock(stopping_mutex_); + if (stopping) service_.stop(); // a user may have started listening again before the stop command is reached + } void handle_accept(boost::system::error_code const & ec) { - { - scoped_mutex_lock stopping_lock(stopping_mutex_); - if (stopping) return; // we dont want to add another handler instance, and we dont want to know about errors for a socket we dont need anymore - } + { + scoped_mutex_lock stopping_lock(stopping_mutex_); + if (stopping) return; // we dont want to add another handler instance, and we dont want to know about errors for a socket we dont need anymore + } if (!ec) { socket_options_base::socket_options(new_connection->socket()); new_connection->start(); new_connection.reset( - new connection( - service_ - , handler - , thread_pool - ) - ); - acceptor.async_accept(new_connection->socket(), - boost::bind( - &async_server_base::handle_accept - , this - , boost::asio::placeholders::error - ) - ); + new connection(service_, handler, *thread_pool)); + acceptor.async_accept( + new_connection->socket(), + boost::bind( + &async_server_base::handle_accept, + this, + boost::asio::placeholders::error)); } else { BOOST_NETWORK_MESSAGE("Error accepting connection, reason: " << ec); } @@ -123,11 +108,8 @@ namespace boost { namespace network { namespace http { void start_listening() { using boost::asio::ip::tcp; - system::error_code error; - - service_.reset(); // this allows repeated cycles of run -> stop -> run - + service_.reset(); // this allows repeated cycles of run -> stop -> run tcp::resolver resolver(service_); tcp::resolver::query query(address_, port_); tcp::resolver::iterator endpoint_iterator = resolver.resolve(query, error); @@ -152,15 +134,15 @@ namespace boost { namespace network { namespace http { BOOST_NETWORK_MESSAGE("Error listening on socket: '" << error << "' on " << address_ << ":" << port_); return; } - new_connection.reset(new connection(service_, handler, thread_pool)); + new_connection.reset(new connection(service_, handler, *thread_pool)); acceptor.async_accept(new_connection->socket(), boost::bind( &async_server_base::handle_accept , this , boost::asio::placeholders::error)); listening = true; - scoped_mutex_lock stopping_lock(stopping_mutex_); - stopping = false; // if we were in the process of stopping, we revoke that command and continue listening + scoped_mutex_lock stopping_lock(stopping_mutex_); + stopping = false; // if we were in the process of stopping, we revoke that command and continue listening BOOST_NETWORK_MESSAGE("Now listening on socket: '" << address_ << ":" << port_ << "'"); } }; diff --git a/boost/network/protocol/http/server/parameters.hpp b/boost/network/protocol/http/server/parameters.hpp deleted file mode 100644 index 06b59b174..000000000 --- a/boost/network/protocol/http/server/parameters.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef BOOST_NETWORK_PROTOCOL_HTTP_SERVER_PARAMETERS_HPP_20101210 -#define BOOST_NETWORK_PROTOCOL_HTTP_SERVER_PARAMETERS_HPP_20101210 - -// Copyright 2010 Dean Michael Berris. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace boost { namespace network { namespace http { - - BOOST_PARAMETER_NAME(address) - BOOST_PARAMETER_NAME(port) - BOOST_PARAMETER_NAME(handler) - BOOST_PARAMETER_NAME(thread_pool) - - BOOST_PARAMETER_NAME(reuse_address) - BOOST_PARAMETER_NAME(report_aborted) - BOOST_PARAMETER_NAME(receive_buffer_size) - BOOST_PARAMETER_NAME(send_buffer_size) - BOOST_PARAMETER_NAME(receive_low_watermark) - BOOST_PARAMETER_NAME(send_low_watermark) - BOOST_PARAMETER_NAME(non_blocking_io) - BOOST_PARAMETER_NAME(linger) - BOOST_PARAMETER_NAME(linger_timeout) - -} /* http */ - -} /* network */ - -} /* boost */ - -#endif /* BOOST_NETWORK_PROTOCOL_HTTP_SERVER_PARAMETERS_HPP_20101210 */ diff --git a/boost/network/protocol/http/server/socket_options_base.hpp b/boost/network/protocol/http/server/socket_options_base.hpp index 0563272a6..6846ea7ea 100644 --- a/boost/network/protocol/http/server/socket_options_base.hpp +++ b/boost/network/protocol/http/server/socket_options_base.hpp @@ -6,8 +6,6 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include -#include #include namespace boost { namespace network { namespace http { @@ -23,18 +21,17 @@ namespace boost { namespace network { namespace http { asio::socket_base::non_blocking_io non_blocking_io; asio::socket_base::linger linger; - template - socket_options_base(ArgPack const & args) - : acceptor_reuse_address(args[_reuse_address|false]) - , acceptor_report_aborted(args[_report_aborted|false]) - , non_blocking_io(args[_non_blocking_io|true]) - , linger(args[_linger|true], args[_linger_timeout|0]) - { - set_optional(receive_buffer_size, args, _receive_buffer_size); - set_optional(send_buffer_size, args, _send_buffer_size); - set_optional(receive_low_watermark, args, _receive_low_watermark); - set_optional(send_low_watermark, args, _send_low_watermark); - } + template + explicit socket_options_base(server_options const &options) + : acceptor_reuse_address(options.reuse_address()) + , acceptor_report_aborted(options.report_aborted()) + , receive_buffer_size(options.receive_buffer_size()) + , send_buffer_size(options.send_buffer_size()) + , receive_low_watermark(options.receive_low_watermark()) + , send_low_watermark(options.send_low_watermark()) + , non_blocking_io(options.non_blocking_io()) + , linger(options.linger(), options.linger_timeout()) + {} void acceptor_options(boost::asio::ip::tcp::acceptor & acceptor) { acceptor.set_option(acceptor_reuse_address); @@ -50,35 +47,6 @@ namespace boost { namespace network { namespace http { if (send_buffer_size) socket.set_option(*send_buffer_size, ignored); if (send_low_watermark) socket.set_option(*send_low_watermark, ignored); } - - private: - - template - typename boost::enable_if< - mpl::not_< - boost::is_same< - typename boost::parameter::value_type::type - , void - > - > - , void - >::type - set_optional(Optional & option, Args const & args, Keyword const & keyword) { - option = in_place(args[keyword]); - } - - template - typename boost::enable_if< - boost::is_same< - typename boost::parameter::value_type::type - , void - > - , void - >::type - set_optional(Optional &, Args const &, Keyword const &) { - // do nothing - } - }; } /* http */ diff --git a/boost/network/protocol/http/server/storage_base.hpp b/boost/network/protocol/http/server/storage_base.hpp index ccfe3fd12..3be75c40b 100644 --- a/boost/network/protocol/http/server/storage_base.hpp +++ b/boost/network/protocol/http/server/storage_base.hpp @@ -6,7 +6,9 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include +#include +#include namespace boost { namespace network { namespace http { @@ -14,24 +16,13 @@ namespace boost { namespace network { namespace http { struct no_io_service {}; struct has_io_service {}; protected: - template - server_storage_base(ArgPack const & /* args */, no_io_service) - : self_service_(new boost::asio::io_service()) + template + explicit server_storage_base(server_options const & options) + : self_service_(options.io_service()? options.io_service() : boost::make_shared()) , service_(*self_service_) {} - template - server_storage_base(ArgPack const & args, has_io_service) - : self_service_(0) - , service_(args[_io_service]) - {} - - ~server_storage_base() { - delete self_service_; - self_service_ = 0; - } - - asio::io_service * self_service_; + boost::shared_ptr self_service_; asio::io_service & service_; }; diff --git a/boost/network/protocol/http/server/sync_server.hpp b/boost/network/protocol/http/server/sync_server.hpp index 71619bce3..16e441654 100644 --- a/boost/network/protocol/http/server/sync_server.hpp +++ b/boost/network/protocol/http/server/sync_server.hpp @@ -15,9 +15,9 @@ #include #include #include -#include #include #include +#include #include #include @@ -30,21 +30,12 @@ namespace boost { namespace network { namespace http { typedef basic_response response; typedef typename boost::network::http::response_header::type response_header; - template - sync_server_base(ArgPack const & args) - : server_storage_base(args, - typename mpl::if_< - is_same< - typename parameter::value_type::type, - void - >, - server_storage_base::no_io_service, - server_storage_base::has_io_service - >::type()) - , socket_options_base(args) - , handler_(args[_handler]) - , address_(args[_address]) - , port_(args[_port]) + sync_server_base(server_options const & options) + : server_storage_base(options) + , socket_options_base(options) + , handler_(options.handler()) + , address_(options.address()) + , port_(options.port()) , acceptor_(server_storage_base::service_) , new_connection() , listening_mutex_() diff --git a/libs/network/example/http/fileserver.cpp b/libs/network/example/http/fileserver.cpp index 076680385..de4b06961 100644 --- a/libs/network/example/http/fileserver.cpp +++ b/libs/network/example/http/fileserver.cpp @@ -178,8 +178,11 @@ struct file_server { int main(int argc, char * argv[]) { file_cache cache("."); file_server handler(cache); - utils::thread_pool thread_pool(4); - server instance("0.0.0.0", "8000", handler, thread_pool); + server::options options(handler); + server instance( + options.thread_pool(boost::make_shared(4)) + .address("0.0.0.0") + .port("8000")); instance.run(); return 0; } diff --git a/libs/network/example/http/hello_world_server.cpp b/libs/network/example/http/hello_world_server.cpp index 5e925e911..d0c0805af 100644 --- a/libs/network/example/http/hello_world_server.cpp +++ b/libs/network/example/http/hello_world_server.cpp @@ -54,7 +54,8 @@ int main(int argc, char * argv[]) { /*<< Creates the request handler. >>*/ hello_world handler; /*<< Creates the server. >>*/ - server server_(argv[1], argv[2], handler); + server::options options(handler); + server server_(options.address(argv[1]).port(argv[2])); /*<< Runs the server. >>*/ server_.run(); } diff --git a/libs/network/test/http/server_async_run_stop_concurrency.cpp b/libs/network/test/http/server_async_run_stop_concurrency.cpp index e9a4e25ac..3fbf2b6db 100644 --- a/libs/network/test/http/server_async_run_stop_concurrency.cpp +++ b/libs/network/test/http/server_async_run_stop_concurrency.cpp @@ -23,11 +23,9 @@ int main(int argc, char * argv[]) { dummy_async_handler async_handler; #define ASYNC_SERVER_TEST_CONFIG \ - http::_address = "127.0.0.1", \ - http::_port = "8007", \ - http::_handler = async_handler, \ - http::_thread_pool = pool, \ - http::_reuse_address = true + options.address("127.0.0.1") \ + .port("8007") \ + .reuse_address(true) #define ASYNC_SERVER_SLEEP_TIME \ boost::posix_time::milliseconds(100) @@ -35,7 +33,7 @@ int main(int argc, char * argv[]) { // stop from main thread { BOOST_NETWORK_MESSAGE("TEST: stop without running"); - util::thread_pool pool; + async_server::options options(async_handler); async_server server_instance(ASYNC_SERVER_TEST_CONFIG); server_instance.stop(); } @@ -43,7 +41,7 @@ int main(int argc, char * argv[]) { // run-stop from main thread { BOOST_NETWORK_MESSAGE("TEST: stop from main thread"); - util::thread_pool pool; + async_server::options options(async_handler); async_server server_instance(ASYNC_SERVER_TEST_CONFIG); boost::thread running_thread(boost::bind(&async_server::run, &server_instance)); @@ -56,7 +54,7 @@ int main(int argc, char * argv[]) { // run-stop from another thread { BOOST_NETWORK_MESSAGE("TEST: stop from another thread"); - util::thread_pool pool; + async_server::options options(async_handler); async_server server_instance(ASYNC_SERVER_TEST_CONFIG); boost::thread running_thread(boost::bind(&async_server::run, &server_instance)); @@ -72,7 +70,7 @@ int main(int argc, char * argv[]) { // run-stop-run-stop from another thread { BOOST_NETWORK_MESSAGE("TEST: run-stop-run-stop from another thread"); - util::thread_pool pool; + async_server::options options(async_handler); async_server server_instance(ASYNC_SERVER_TEST_CONFIG); boost::thread running_thread(boost::bind(&async_server::run, &server_instance)); @@ -96,7 +94,7 @@ int main(int argc, char * argv[]) { // run-run-stop from another thread { BOOST_NETWORK_MESSAGE("TEST: run-run-stop from another thread"); - util::thread_pool pool; + async_server::options options(async_handler); async_server server_instance(ASYNC_SERVER_TEST_CONFIG); boost::thread running_thread(boost::bind(&async_server::run, &server_instance)); @@ -116,7 +114,7 @@ int main(int argc, char * argv[]) { // run-stop-stop from another thread { BOOST_NETWORK_MESSAGE("TEST: run-stop-stop from another thread"); - util::thread_pool pool; + async_server::options options(async_handler); async_server server_instance(ASYNC_SERVER_TEST_CONFIG); boost::thread running_thread(boost::bind(&async_server::run, &server_instance)); diff --git a/libs/network/test/http/server_constructor_test.cpp b/libs/network/test/http/server_constructor_test.cpp index b2b4fe8eb..73b8e2773 100644 --- a/libs/network/test/http/server_constructor_test.cpp +++ b/libs/network/test/http/server_constructor_test.cpp @@ -37,48 +37,21 @@ struct dummy_async_handler { BOOST_AUTO_TEST_CASE(minimal_constructor) { dummy_sync_handler sync_handler; dummy_async_handler async_handler; - util::thread_pool pool; - - BOOST_CHECK_NO_THROW(sync_server sync_instance("127.0.0.1", "80", sync_handler) ); - BOOST_CHECK_NO_THROW(async_server async_instance("127.0.0.1", "80", async_handler, pool) ); + + sync_server::options sync_options(sync_handler); + async_server::options async_options(async_handler); + BOOST_CHECK_NO_THROW(sync_server sync_instance(sync_options.address("127.0.0.1").port("80")) ); + BOOST_CHECK_NO_THROW(async_server async_instance(async_options.address("127.0.0.1").port("80")) ); } BOOST_AUTO_TEST_CASE(with_io_service_parameter) { dummy_sync_handler sync_handler; dummy_async_handler async_handler; - util::thread_pool pool; - boost::asio::io_service io_service; - - BOOST_CHECK_NO_THROW(sync_server sync_instance("127.0.0.1", "80", sync_handler, io_service)); - BOOST_CHECK_NO_THROW(async_server async_instance("127.0.0.1", "80", async_handler, pool, io_service)); -} - -BOOST_AUTO_TEST_CASE(with_socket_options_parameter) { - dummy_sync_handler sync_handler; - dummy_async_handler async_handler; - util::thread_pool pool; - - BOOST_CHECK_NO_THROW(sync_server sync_instance("127.0.0.1", "80", sync_handler, - http::_reuse_address=true, - http::_report_aborted=true, - http::_receive_buffer_size=4096, - http::_send_buffer_size=4096, - http::_receive_low_watermark=1024, - http::_send_low_watermark=1024, - http::_non_blocking_io=true, - http::_linger=true, - http::_linger_timeout=0 - )); - BOOST_CHECK_NO_THROW(async_server async_instance("127.0.0.1", "80", async_handler, pool, - http::_reuse_address=true, - http::_report_aborted=true, - http::_receive_buffer_size=4096, - http::_send_buffer_size=4096, - http::_receive_low_watermark=1024, - http::_send_low_watermark=1024, - http::_non_blocking_io=true, - http::_linger=true, - http::_linger_timeout=0 - )); + boost::shared_ptr thread_pool; + boost::shared_ptr io_service; + sync_server::options sync_options(sync_handler); + async_server::options async_options(async_handler); + BOOST_CHECK_NO_THROW(sync_server sync_instance(sync_options.address("127.0.0.1").port("80").io_service(io_service).thread_pool(thread_pool))); + BOOST_CHECK_NO_THROW(async_server async_instance(async_options.address("127.0.0.1").port("80").io_service(io_service).thread_pool(thread_pool))); } From 0bc1c2a5ef43260f4cd4082017dc9958f45af401 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Thu, 31 Jan 2013 14:14:10 +1100 Subject: [PATCH 011/229] Pendantic fix for clang. --- libs/network/example/twitter/rapidjson/document.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/network/example/twitter/rapidjson/document.h b/libs/network/example/twitter/rapidjson/document.h index f956ea97d..4062bd841 100644 --- a/libs/network/example/twitter/rapidjson/document.h +++ b/libs/network/example/twitter/rapidjson/document.h @@ -701,7 +701,7 @@ class GenericDocument : public GenericValue { GenericDocument& ParseStream(Stream& stream) { ValueType::SetNull(); // Remove existing root if exist GenericReader reader; - if (reader.Parse(stream, *this)) { + if (reader.template Parse(stream, *this)) { RAPIDJSON_ASSERT(stack_.GetSize() == sizeof(ValueType)); // Got one and only one root object this->RawAssign(*stack_.template Pop(1)); parseError_ = 0; From 2f407764f1d3be9976cdd7840c5cc66ecc07e543 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Thu, 31 Jan 2013 14:15:02 +1100 Subject: [PATCH 012/229] Remove last dependency on Boost.Parameter. --- boost/network/protocol/http/parameters.hpp | 24 ---------------------- 1 file changed, 24 deletions(-) delete mode 100644 boost/network/protocol/http/parameters.hpp diff --git a/boost/network/protocol/http/parameters.hpp b/boost/network/protocol/http/parameters.hpp deleted file mode 100644 index 9bf0ae97e..000000000 --- a/boost/network/protocol/http/parameters.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef BOOST_NETWORK_PROTOCOL_HTTP_PARAMETERS_HPP_20101210 -#define BOOST_NETWORK_PROTOCOL_HTTP_PARAMETERS_HPP_20101210 - -// Copyright 2010 Dean Michael Berris. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#if !defined(BOOST_PARAMETER_MAX_ARITY) - #define BOOST_PARAMETER_MAX_ARITY 16 -#endif -#include - -namespace boost { namespace network { namespace http { - - BOOST_PARAMETER_NAME(io_service) - -} /* http */ - -} /* network */ - -} /* boost */ - -#endif /* BOOST_NETWORK_PROTOCOL_HTTP_PARAMETERS_HPP_20101210 */ From 8a7605456ac209f2e9100c5e663761d6db58a54f Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Sat, 2 Feb 2013 17:41:56 +1100 Subject: [PATCH 013/229] Removing references to Boost submission. --- libs/network/doc/_static/boost.png | Bin 13364 -> 0 bytes libs/network/doc/index.rst | 31 +++++++++-------------------- 2 files changed, 9 insertions(+), 22 deletions(-) delete mode 100644 libs/network/doc/_static/boost.png diff --git a/libs/network/doc/_static/boost.png b/libs/network/doc/_static/boost.png deleted file mode 100644 index 0714ca2004bbf91389d33166afc449cba84b39be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13364 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 diff --git a/libs/network/doc/index.rst b/libs/network/doc/index.rst index a276a88de..dca0d5ca3 100644 --- a/libs/network/doc/index.rst +++ b/libs/network/doc/index.rst @@ -2,11 +2,12 @@ .. rubric:: Straightforward network programming in modern C++ .. :Authors: Glyn Matthews -.. Dean Michael Berris -.. :Date: Feb 22, 2012 +.. Dean Michael Berris +.. :Date: Feb 2, 2013 .. :Version: 0.9.4 .. :Description: Complete user documentation, with examples, for the :mod:`cpp-netlib`. .. :Copyright: Copyright Glyn Matthews, Dean Michael Berris 2008-2012. +.. Copyrigh 2013 Google, Inc. .. Distributed under the Boost Software License, Version .. 1.0. (See accompanying file LICENSE_1_0.txt or copy at .. http://www.boost.org/LICENSE_1_0.txt) @@ -14,6 +15,9 @@ Getting cpp-netlib ================== +You can find out more about the :mod:`cpp-netlib` project at +http://cpp-netlib.org/. + **Download** You can download the latest releases of the library at: @@ -39,25 +43,12 @@ You can also file issues on the Github_ issue tracker at: We are a growing community and we are happy to accept new contributions and ideas. -Boost -===== - -The :mod:`cpp-netlib` is being developed for eventual submission to Boost_. - -.. image:: _static/boost.png - :align: left - C++ Network Library =================== -The :mod:`cpp-netlib` is a library that provides application layer -protocol support using modern C++ techniques. It is light-weight, -fast, portable and is intended to be as easy to configure as possible. - -It is developed by people linked to the Boost_ community and will soon -be submitted for review into Boost. A presentation about -:mod:`cpp-netlib` was given at `BoostCon 2010`_, for which the -`slides`_ and the `paper`_ can be found on-line. +:mod:`cpp-netlib` is a library collection that provides application layer +protocol support using modern C++ techniques. It is light-weight, fast, +portable and is intended to be as easy to configure as possible. Hello, world! ============= @@ -123,9 +114,5 @@ Want to learn more? .. _Boost: http://www.boost.org/ -.. _`BoostCon 2010`: http://www.boostcon.com/ -.. _`slides`: http://www.filetolink.com/b0e89d06 -.. _`paper`: http://github.com/downloads/mikhailberis/cpp-netlib-boostcon-paper/cpp-netlib.pdf -.. _Git: http://git-scm.com/ .. _GitHub: http://github.com/ From 2ca654dd244e51a27044770059feead938831627 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Sat, 2 Feb 2013 23:22:05 +1100 Subject: [PATCH 014/229] Updating whats new. --- libs/network/doc/whats_new.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libs/network/doc/whats_new.rst b/libs/network/doc/whats_new.rst index 72afdf641..25880faf3 100644 --- a/libs/network/doc/whats_new.rst +++ b/libs/network/doc/whats_new.rst @@ -7,6 +7,15 @@ :mod:`cpp-netlib` 0.9 --------------------- +v0.9.5 +~~~~~~ +* Removing dependency on Boost.Parameter from HTTP client and server. +* Fix for Clang error on Twitter example. +* Adding source port to the request (HTTP server). +* Updates to CMake config for MSVC 2010/2012. +* Support chunked content encoding in client response parsing. +* Fix bug with client not invoking callback when a request fails. + v0.9.4 ~~~~~~ * Lots of URI fixes. From 1dbe1f3404cc970aa7ca180692939c628d2aad9c Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Sun, 3 Feb 2013 00:34:36 +1100 Subject: [PATCH 015/229] Simplifying doc config. --- libs/network/doc/conf.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/libs/network/doc/conf.py b/libs/network/doc/conf.py index 58ff914bf..ec37da715 100644 --- a/libs/network/doc/conf.py +++ b/libs/network/doc/conf.py @@ -32,7 +32,7 @@ todo_include_todos = True # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +# templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' @@ -45,7 +45,7 @@ # General information about the project. project = u'cpp-netlib' -copyright = u'2008-2012, Glyn Matthews, Dean Michael Berris' +copyright = u'2008-2013, Glyn Matthews, Dean Michael Berris; 2013 Google, Inc.' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -54,7 +54,7 @@ # The short X.Y version. version = '0.9' # The full version, including alpha/beta/rc tags. -release = '0.9.4' +release = '0.9.5' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -77,7 +77,7 @@ # If true, the current module name will be prepended to all description # unit titles (such as .. function::). -#add_module_names = True +add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. @@ -95,26 +95,29 @@ # The theme to use for HTML and HTML Help pages. Major themes that come with # Sphinx are currently 'default' and 'sphinxdoc'. -html_theme = 'default' +html_theme = 'pyramid' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". -html_title = 'cpp-netlib v0.9.4' +html_title = 'cpp-netlib v0.9.5' # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = 'cpp-netlib' +# Use an HTML index. +html_use_index = False + # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_style = 'cpp-netlib.css' -html_static_path = ['_static'] +# html_style = 'cpp-netlib.css' +# html_static_path = ['_static'] -html_translator_class = "adjusts.CppNetlibHTMLTranslator" +# html_translator_class = "adjusts.CppNetlibHTMLTranslator" # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' +html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. From 33c2a19994d191d247415e1dd78d2be0b1f4669d Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Sun, 3 Feb 2013 00:37:14 +1100 Subject: [PATCH 016/229] Updating version. --- libs/network/doc/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/network/doc/index.rst b/libs/network/doc/index.rst index dca0d5ca3..c0564448b 100644 --- a/libs/network/doc/index.rst +++ b/libs/network/doc/index.rst @@ -4,7 +4,7 @@ .. :Authors: Glyn Matthews .. Dean Michael Berris .. :Date: Feb 2, 2013 -.. :Version: 0.9.4 +.. :Version: 0.9.5 .. :Description: Complete user documentation, with examples, for the :mod:`cpp-netlib`. .. :Copyright: Copyright Glyn Matthews, Dean Michael Berris 2008-2012. .. Copyrigh 2013 Google, Inc. From e6d38f63dc896f04295159a2aa80b73db2bc8ecc Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Sun, 3 Feb 2013 00:38:08 +1100 Subject: [PATCH 017/229] Adding index.rst to contents. --- libs/network/doc/contents.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/network/doc/contents.rst b/libs/network/doc/contents.rst index 55021d968..b014eab03 100644 --- a/libs/network/doc/contents.rst +++ b/libs/network/doc/contents.rst @@ -4,8 +4,9 @@ Contents -------- .. toctree:: - :maxdepth: 3 + :maxdepth: 4 + index.rst whats_new.rst getting_started.rst examples.rst From 3dc98b653e9bf92c1a0562c8aa6b6a432d1de900 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Sun, 3 Feb 2013 00:39:16 +1100 Subject: [PATCH 018/229] Updting minimum Boost requirement. --- libs/network/doc/getting_started.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/network/doc/getting_started.rst b/libs/network/doc/getting_started.rst index 861fb1795..26a53bb66 100644 --- a/libs/network/doc/getting_started.rst +++ b/libs/network/doc/getting_started.rst @@ -65,7 +65,7 @@ Getting Boost ============= :mod:`cpp-netlib` depends on Boost_. It should work for any version -of Boost above 1.45.0. If Boost is not installed on your system, the +of Boost above 1.50.0. If Boost is not installed on your system, the latest package can be found on the `Boost web-site`_. The environment variable ``BOOST_ROOT`` must be defined, which must be the full path name of the top directory of the Boost distribution. Although Boost From b3c34712845409385b4e37a29338c82b4cc72b97 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Sun, 3 Feb 2013 00:40:25 +1100 Subject: [PATCH 019/229] Updating reference on options. --- libs/network/doc/reference/http_client.rst | 54 ++++----- libs/network/doc/reference/http_server.rst | 131 ++++++++++----------- 2 files changed, 89 insertions(+), 96 deletions(-) diff --git a/libs/network/doc/reference/http_client.rst b/libs/network/doc/reference/http_client.rst index 52c31a055..bb6273106 100644 --- a/libs/network/doc/reference/http_client.rst +++ b/libs/network/doc/reference/http_client.rst @@ -139,37 +139,35 @@ initialization. ``client()`` Default constructor. -``client(boost::asio::io_service & io_service)`` - Construct a client to use an existing Boost.Asio ``io_service`` instance. -``template client(ArgPack const & args)`` - Pass in an argument pack. See supported parameters in the table below. +``explicit client(client::options const &)`` + Constructor taking a ``client_options`` object. The following table + shows the options you can set on a ``client_options`` instance. +----------------------+-------------------------------+-------------------------+ | Parameter Name | Type | Description | +======================+===============================+=========================+ -| _follow_redirects | ``bool`` | Boolean to specify | +| follow_redirects | ``bool`` | Boolean to specify | | | | whether the client | | | | should follow HTTP | | | | redirects. Default is | | | | ``false``. | +----------------------+-------------------------------+-------------------------+ -| _cache_resolved | ``bool`` | Boolean to specify | +| cache_resolved | ``bool`` | Boolean to specify | | | | whether the client | | | | should cache resolved | | | | endpoints. The default | | | | is ``false``. | +----------------------+-------------------------------+-------------------------+ -| _io_service | ``boost::asio::io_service &`` | Reference to an | -| | | instance of a | +| io_service | ``shared_ptr`` | Shared pointer to a | | | | Boost.Asio | | | | ``io_service``. | +----------------------+-------------------------------+-------------------------+ -| _openssl_certificate | string | The filename of the | +| openssl_certificate | string | The filename of the | | | | certificate to load for | | | | the SSL connection for | | | | verification. | +----------------------+-------------------------------+-------------------------+ -| _openssl_verify_path | string | The directory from | +| openssl_verify_path | string | The directory from | | | | which the certificate | | | | authority files are | | | | located. | @@ -182,11 +180,13 @@ the following: .. code-block:: c++ using namespace boost::network::http; // parameters are in this namespace - boost::asio::io_service my_io_service; - client client_(_follow_redirects=true, _cache_resolved=true, - _io_service=my_io_service - , _openssl_certificate="/tmp/my-cert" - , _openssl_verify_path="/tmp/ca-certs/"); + client::options options; + options.follow_redirects(true) + .cache_resolved(true) + .io_service(boost::make_shared()) + .openssl_certificate("/tmp/my-cert") + .openssl_verify_path("/tmp/ca-certs"); + client client_(options); // use client_ as normal from here on out. HTTP Methods @@ -207,7 +207,7 @@ and that there is an appropriately constructed response object named ``response_ = client_.get(request_)`` Perform an HTTP GET request. -``response_ = client_.get(request_, _body_handler=callback)`` +``response_ = client_.get(request_, callback)`` Perform an HTTP GET request, and have the body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, boost::system::error_code const @@ -217,7 +217,7 @@ and that there is an appropriately constructed response object named ``response_ = client_.post(request_)`` Perform an HTTP POST, use the data already set in the request object which includes the headers, and the body. -``response_ = client_.post(request_, _body_handler=callback)`` +``response_ = client_.post(request_, callback)`` Perform an HTTP POST request, and have the body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, boost::system::error_code const @@ -226,18 +226,18 @@ and that there is an appropriately constructed response object named Body is a string of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. The default content-type used is ``x-application/octet-stream``. -``response_ = client_.post(request_, body, _body_handler=callback)`` +``response_ = client_.post(request_, body, callback)`` Body is a string of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. The default content-type used is ``x-application/octet-stream``. Have the response body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, boost::system::error_code const &)``. -``response_ = client_.post(request_, content_type, body)`` +``response_ = client_.post(request_, body, content_type)`` The body and content_type parameters are of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. This uses the request object's other headers. -``response_ = client_.post(request_, content_type, body, _body_handler=callback)`` +``response_ = client_.post(request_, body, content_type, callback)`` The body and content_type parameters are of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. This uses the request object's other headers. Have the response @@ -247,7 +247,7 @@ and that there is an appropriately constructed response object named ``response_ = client_.put(request_)`` Perform an HTTP PUT, use the data already set in the request object which includes the headers, and the body. -``response_ = client_.put(request_, _body_handler=callback)`` +``response_ = client_.put(request_, callback)`` Perform an HTTP PUT request, and have the body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, boost::system::error_code const @@ -256,18 +256,18 @@ and that there is an appropriately constructed response object named Body is a string of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. The default content-type used is ``x-application/octet-stream``. -``response_ = client_.put(request_, body, _body_handler=callback)`` +``response_ = client_.put(request_, body, callback)`` Body is a string of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. The default content-type used is ``x-application/octet-stream``. Have the response body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, boost::system::error_code const &)``. -``response_ = client_.put(request_, content_type, body)`` +``response_ = client_.put(request_, body, content_type)`` The body and content_type parameters are of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. This uses the request object's other headers. -``response_ = client_.put(request_, content_type, body, _body_handler=callback)`` +``response_ = client_.put(request_, body, content_type, body_handler=callback)`` The body and content_type parameters are of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. This uses the request object's other headers. Have the response @@ -276,7 +276,7 @@ and that there is an appropriately constructed response object named &, boost::system::error_code const &)``. ``response_ = client_.delete_(request_)`` Perform an HTTP DELETE request. -``response_ = client_.delete_(request_, _body_handler=callback)`` +``response_ = client_.delete_(request_, body_handler=callback)`` Perform an HTTP DELETE request, and have the response body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, @@ -320,7 +320,7 @@ An example of how to use the macro is shown below: // somewhere else std::string some_string; response_ = client_.get(request("http://cpp-netlib.github.com/"), - _body_handler=body_handler(some_string)); + body_handler(some_string)); You can also use if for standalone functions instead if you don't want or need to create a function object. @@ -337,7 +337,7 @@ to create a function object. // somewhere else response_ = client_.get(request("http://cpp-netlib.github.com/"), - _body_handler=print_body); + print_body); The ``BOOST_NETWORK_HTTP_BODY_CALLBACK`` macro is defined in ``boost/network/protocol/http/client/macros.hpp``. diff --git a/libs/network/doc/reference/http_server.rst b/libs/network/doc/reference/http_server.rst index 296b4b801..3f3788397 100644 --- a/libs/network/doc/reference/http_server.rst +++ b/libs/network/doc/reference/http_server.rst @@ -167,73 +167,70 @@ And that the following typedef's have been put in place: Constructor ``````````` -``http_server(address, port, handler)`` - Construct an HTTP Server instance, passing in the address and port as - ``std::string const &`` and handler being of type ``handler_type`` but - passed in as an lvalue reference. - -``template client(ArgPack const & args)`` - Pass in an argument pack. See supported parameters in the table below. +``explicit http_server(options)`` + Construct an HTTP Server instance, passing in a ``server_options`` object. The following table shows the supported options in + ``server_options``. +------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ | Parameter Name | Type | Description | -+========================+==========================================+==================================================================================================+ -| _address | string_type | The hostname or IP address from which the server should be bound to. This parameter is required. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _port | string_type | The port to which the server should bind and listen to. This parameter is required. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _handler | ``Handler &`` | An lvalue reference to an instance of ``Handler``. This parameter is required. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _thread_pool | ``boost::network::utils::thread_pool &`` | An lvalue reference to an instance of ``boost::network::utils::thread_pool`` -- this is the | -| | | thread pool from where the handler is invoked. This parameter is only applicable and required | -| | | for ``async_server`` instances. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _io_service | ``boost::asio::io_service &`` | An optional lvalue to an instance of ``boost::asio::io_service`` which allows the server to use | -| | | an already-constructed ``boost::asio::io_service`` instance instead of instantiating one that it | -| | | manages. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _reuse_address | ``bool`` | A boolean that specifies whether to re-use the address and port on which the server will be | -| | | bound to. This enables or disables the socket option for listener sockets. The default is | -| | | ``false``. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _report_aborted | ``bool`` | A boolean that specifies whether the listening socket should report aborted connection attempts | -| | | to the accept handler (an internal detail of cpp-netlib). This is put in place to allow for | -| | | future-proofing the code in case an optional error handler function is supported in later | -| | | releases of cpp-netlib. The default is ``false``. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _receive_buffer_size | ``int`` | The size of the socket's receive buffer. The default is defined by Boost.Asio and is | -| | | platform-dependent. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _send_buffer_size | ``int`` | The size of the socket's send buffer. The default is defined by Boost.Asio and is | -| | | platform-dependent. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _receive_low_watermark | ``int`` | The size of the socket's low watermark for its receive buffer. The default is defined by | -| | | Boost.Asio and is platform-dependent. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _send_buffer_size | ``int`` | The size of the socket's send low watermark for its send buffer. The default is defined by | -| | | Boost.Asio and is platform-dependent. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _non_blocking_io | ``bool`` | An optional bool to define whether the socket should use non-blocking I/O in case the platform | -| | | supports it. The default is ``true``. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _linger | ``bool`` | An optional bool to determine whether the socket should linger in case there's still data to be | -| | | sent out at the time of its closing. The default is ``true``. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _linger_timeout | ``int`` | An optional int to define the timeout to wait for socket closes before it is set to linger. | -| | | The default is ``0``. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ ++=======================+==========================================+==================================================================================================+ +| address | string_type | The hostname or IP address from which the server should be bound to. This parameter is required. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| port | string_type | The port to which the server should bind and listen to. This parameter is required. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| thread_pool | ``shared_ptr`` | A shared pointer to an instance of ``boost::network::utils::thread_pool`` -- this is the | +| | | thread pool from where the handler is invoked. This parameter is only applicable and required | +| | | for ``async_server`` instances. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| io_service | ``shared_ptr`` | An optional lvalue to an instance of ``boost::asio::io_service`` which allows the server to use | +| | | an already-constructed ``boost::asio::io_service`` instance instead of instantiating one that it | +| | | manages. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| reuse_address | ``bool`` | A boolean that specifies whether to re-use the address and port on which the server will be | +| | | bound to. This enables or disables the socket option for listener sockets. The default is | +| | | ``false``. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| report_aborted | ``bool`` | A boolean that specifies whether the listening socket should report aborted connection attempts | +| | | to the accept handler (an internal detail of cpp-netlib). This is put in place to allow for | +| | | future-proofing the code in case an optional error handler function is supported in later | +| | | releases of cpp-netlib. The default is ``false``. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| receive_buffer_size | ``int`` | The size of the socket's receive buffer. The default is defined by Boost.Asio and is | +| | | platform-dependent. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| send_buffer_size | ``int`` | The size of the socket's send buffer. The default is defined by Boost.Asio and is | +| | | platform-dependent. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| receive_low_watermark | ``int`` | The size of the socket's low watermark for its receive buffer. The default is defined by | +| | | Boost.Asio and is platform-dependent. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| send_buffer_size | ``int`` | The size of the socket's send low watermark for its send buffer. The default is defined by | +| | | Boost.Asio and is platform-dependent. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| non_blocking_io | ``bool`` | An optional bool to define whether the socket should use non-blocking I/O in case the platform | +| | | supports it. The default is ``true``. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| linger | ``bool`` | An optional bool to determine whether the socket should linger in case there's still data to be | +| | | sent out at the time of its closing. The default is ``true``. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| linger_timeout | ``int`` | An optional int to define the timeout to wait for socket closes before it is set to linger. | +| | | The default is ``0``. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ To use the above supported named parameters, you'll have code that looks like the following: .. code-block:: c++ using namespace boost::network::http; // parameters are in this namespace - boost::asio::io_service my_io_service; - boost::network::utils::thread_pool pool(2); handler handler_instance; - async_server instance(_address="0.0.0.0", _port="80", _handler=handler_instance, - _io_service=my_io_service, _thread_pool=pool, - _reuse_address=true); + async_server::options options(handler_instance); + options.address("0.0.0.0") + .port("80") + .io_service(boost::make_shared()) + .thread_pool(boost::make_shared(2)) + .reuse_address(true); + async_server instance(options); instance.run(); Public Members @@ -245,7 +242,8 @@ instance has been constructed in the following manner: .. code-block:: c++ handler_type handler; - http_server server("127.0.0.1", "8000", handler); + http_server::options options(handler); + http_server server(options.address("127.0.0.1").port("8000")); ``server.run()`` Run the HTTP Server event loop. This function can be run on multiple threads @@ -401,15 +399,9 @@ And that the following typedef's have been put in place: Constructor ``````````` -``http_server(address, port, handler, thread_pool)`` - Construct an HTTP Server instance, passing in the address and port as - ``std::string const &`` and handler being of type ``handler_type`` but - passed in as an lvalue reference. The ``thread_pool`` parameter is an - instance of ``boost::network::utils::thread_pool`` that has been previously - instantiated. - -.. note:: The ``boost::network::utils::thread_pool`` has a single constructor - parameter which is the number of threads to run the thread pool. +``explicit http_server(options)`` + Construct an HTTP server instance passing in a ``server_options`` instance. Public Members `````````````` @@ -420,8 +412,9 @@ instance has been constructed in the following manner: .. code-block:: c++ handler_type handler; - boost::network::utils::thread_pool thread_pool(2); - http_server server("127.0.0.1", "8000", handler, thread_pool); + http_server::options options(handler); + options.thread_pool(boost::make_shared(2)); + http_server server(options.address("127.0.0.1").port("8000")); ``server.run()`` Run the HTTP Server event loop. This function can be run on multiple threads From 1f0739c769c25536f7f79549a6ff32cb2b8d6cd0 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Sun, 3 Feb 2013 00:42:40 +1100 Subject: [PATCH 020/229] Adding overloads to client facade. --- boost/network/protocol/http/client/facade.hpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/boost/network/protocol/http/client/facade.hpp b/boost/network/protocol/http/client/facade.hpp index 45521d439..8478c6231 100644 --- a/boost/network/protocol/http/client/facade.hpp +++ b/boost/network/protocol/http/client/facade.hpp @@ -63,6 +63,14 @@ namespace boost { namespace network { namespace http { return pimpl->request_skeleton(request, "POST", true, body_handler); } + response const post(request const &request, body_callback_function callback) { + return post(request, string_type(), string_type(), callback); + } + + response const post(request const &request, string_type const &body, body_callback_function callback) { + return post(request, body, string_type(), callback); + } + response const put(request request, string_type const &body = string_type(), string_type const &content_type = string_type(), body_callback_function_type body_handler = body_callback_function_type()) { if (body != string_type()) { request << remove_header("Content-Length") @@ -89,6 +97,14 @@ namespace boost { namespace network { namespace http { return pimpl->request_skeleton(request, "DELETE", true, body_handler); } + response const put(request const& request, body_callback_function_type callback) { + return put(request, string_type(), string_type(), callback); + } + + response const put(request const& request, string_type body, body_callback_function_type callback) { + return put(request, body, string_type(), callback); + } + void clear_resolved_cache() { pimpl->clear_resolved_cache(); } From 70c3d0fa3a40444b2f14e6a9ea4d097faf8638c8 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Sun, 3 Feb 2013 00:57:31 +1100 Subject: [PATCH 021/229] Removing custom templates. --- libs/network/doc/_templates/genindex.html | 4 - libs/network/doc/_templates/layout.html | 109 ---------------------- libs/network/doc/_templates/modindex.html | 3 - libs/network/doc/_templates/search.html | 3 - 4 files changed, 119 deletions(-) delete mode 100644 libs/network/doc/_templates/genindex.html delete mode 100644 libs/network/doc/_templates/layout.html delete mode 100644 libs/network/doc/_templates/modindex.html delete mode 100644 libs/network/doc/_templates/search.html diff --git a/libs/network/doc/_templates/genindex.html b/libs/network/doc/_templates/genindex.html deleted file mode 100644 index 60c19efd4..000000000 --- a/libs/network/doc/_templates/genindex.html +++ /dev/null @@ -1,4 +0,0 @@ -{% extends "!genindex.html" %} - -{% block bodyclass %}{% endblock %} -{% block sidebarwrapper %}{% endblock %} \ No newline at end of file diff --git a/libs/network/doc/_templates/layout.html b/libs/network/doc/_templates/layout.html deleted file mode 100644 index 4927fab19..000000000 --- a/libs/network/doc/_templates/layout.html +++ /dev/null @@ -1,109 +0,0 @@ -{% extends "!layout.html" %} -{%- macro secondnav() %} - {%- if prev %} - « previous - {{ reldelim2 }} - {%- endif %} - {%- if parents %} - up - {%- else %} - up - {%- endif %} - {%- if next %} - {{ reldelim2 }} - next » - {%- endif %} -{%- endmacro %} - -{% block extrahead %} - -{% endblock %} - -{% block document %} -
-
-

{{ docstitle }}

- - -
- -
-
-
-
- {% block body %}{% endblock %} -
-
-
- {% block sidebarwrapper %} - {% if pagename != 'index' %} - - {%- endif %} - {% endblock %} -
- -
- -
-
-{% endblock %} - -{% block sidebarrel %} -

Browse

- -

You are here:

- -{% endblock %} - -{# Empty some default blocks out #} -{% block relbar1 %}{% endblock %} -{% block relbar2 %}{% endblock %} -{% block sidebar1 %}{% endblock %} -{% block sidebar2 %}{% endblock %} -{% block footer %} - -{% endblock %} diff --git a/libs/network/doc/_templates/modindex.html b/libs/network/doc/_templates/modindex.html deleted file mode 100644 index 96a1d2080..000000000 --- a/libs/network/doc/_templates/modindex.html +++ /dev/null @@ -1,3 +0,0 @@ -{% extends "!modindex.html" %} -{% block bodyclass %}{% endblock %} -{% block sidebarwrapper %}{% endblock %} \ No newline at end of file diff --git a/libs/network/doc/_templates/search.html b/libs/network/doc/_templates/search.html deleted file mode 100644 index 8bd6dbd33..000000000 --- a/libs/network/doc/_templates/search.html +++ /dev/null @@ -1,3 +0,0 @@ -{% extends "!search.html" %} -{% block bodyclass %}{% endblock %} -{% block sidebarwrapper %}{% endblock %} \ No newline at end of file From 4dddf994dbad16022436c56c37fc75198744d6c6 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Mon, 4 Feb 2013 17:06:17 +1100 Subject: [PATCH 022/229] Fixing table. --- libs/network/doc/reference/http_server.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/network/doc/reference/http_server.rst b/libs/network/doc/reference/http_server.rst index 3f3788397..90a472382 100644 --- a/libs/network/doc/reference/http_server.rst +++ b/libs/network/doc/reference/http_server.rst @@ -172,8 +172,8 @@ Constructor Handler>`` object. The following table shows the supported options in ``server_options``. -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| Parameter Name | Type | Description | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| Parameter Name | Type | Description | +=======================+==========================================+==================================================================================================+ | address | string_type | The hostname or IP address from which the server should be bound to. This parameter is required. | +-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ From 21133509fbe8d88d44d7ad590aff3ba717b339d8 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Mon, 4 Feb 2013 17:06:34 +1100 Subject: [PATCH 023/229] Use sphinx theme --- libs/network/doc/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/network/doc/conf.py b/libs/network/doc/conf.py index ec37da715..4cf8cf07a 100644 --- a/libs/network/doc/conf.py +++ b/libs/network/doc/conf.py @@ -85,7 +85,7 @@ # The name of the Pygments (syntax highlighting) style to use. # pygments_style = 'sphinx' -pygments_style = 'bw' +pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] From d71845810b738e40a583bc73747b939a9e1f43b6 Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Mon, 4 Feb 2013 17:06:46 +1100 Subject: [PATCH 024/229] Revert "Removing custom templates." This reverts commit 70c3d0fa3a40444b2f14e6a9ea4d097faf8638c8. --- libs/network/doc/_templates/genindex.html | 4 + libs/network/doc/_templates/layout.html | 109 ++++++++++++++++++++++ libs/network/doc/_templates/modindex.html | 3 + libs/network/doc/_templates/search.html | 3 + 4 files changed, 119 insertions(+) create mode 100644 libs/network/doc/_templates/genindex.html create mode 100644 libs/network/doc/_templates/layout.html create mode 100644 libs/network/doc/_templates/modindex.html create mode 100644 libs/network/doc/_templates/search.html diff --git a/libs/network/doc/_templates/genindex.html b/libs/network/doc/_templates/genindex.html new file mode 100644 index 000000000..60c19efd4 --- /dev/null +++ b/libs/network/doc/_templates/genindex.html @@ -0,0 +1,4 @@ +{% extends "!genindex.html" %} + +{% block bodyclass %}{% endblock %} +{% block sidebarwrapper %}{% endblock %} \ No newline at end of file diff --git a/libs/network/doc/_templates/layout.html b/libs/network/doc/_templates/layout.html new file mode 100644 index 000000000..4927fab19 --- /dev/null +++ b/libs/network/doc/_templates/layout.html @@ -0,0 +1,109 @@ +{% extends "!layout.html" %} +{%- macro secondnav() %} + {%- if prev %} + « previous + {{ reldelim2 }} + {%- endif %} + {%- if parents %} + up + {%- else %} + up + {%- endif %} + {%- if next %} + {{ reldelim2 }} + next » + {%- endif %} +{%- endmacro %} + +{% block extrahead %} + +{% endblock %} + +{% block document %} +
+
+

{{ docstitle }}

+ + +
+ +
+
+
+
+ {% block body %}{% endblock %} +
+
+
+ {% block sidebarwrapper %} + {% if pagename != 'index' %} + + {%- endif %} + {% endblock %} +
+ +
+ +
+
+{% endblock %} + +{% block sidebarrel %} +

Browse

+ +

You are here:

+ +{% endblock %} + +{# Empty some default blocks out #} +{% block relbar1 %}{% endblock %} +{% block relbar2 %}{% endblock %} +{% block sidebar1 %}{% endblock %} +{% block sidebar2 %}{% endblock %} +{% block footer %} + +{% endblock %} diff --git a/libs/network/doc/_templates/modindex.html b/libs/network/doc/_templates/modindex.html new file mode 100644 index 000000000..96a1d2080 --- /dev/null +++ b/libs/network/doc/_templates/modindex.html @@ -0,0 +1,3 @@ +{% extends "!modindex.html" %} +{% block bodyclass %}{% endblock %} +{% block sidebarwrapper %}{% endblock %} \ No newline at end of file diff --git a/libs/network/doc/_templates/search.html b/libs/network/doc/_templates/search.html new file mode 100644 index 000000000..8bd6dbd33 --- /dev/null +++ b/libs/network/doc/_templates/search.html @@ -0,0 +1,3 @@ +{% extends "!search.html" %} +{% block bodyclass %}{% endblock %} +{% block sidebarwrapper %}{% endblock %} \ No newline at end of file From d51f4535938992cfb9c8c2a2d5c730975f63bd7d Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Mon, 4 Feb 2013 17:12:48 +1100 Subject: [PATCH 025/229] Bring back old styles. --- libs/network/doc/conf.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/network/doc/conf.py b/libs/network/doc/conf.py index 4cf8cf07a..cfefa57fc 100644 --- a/libs/network/doc/conf.py +++ b/libs/network/doc/conf.py @@ -32,7 +32,7 @@ todo_include_todos = True # Add any paths that contain templates here, relative to this directory. -# templates_path = ['_templates'] +templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' @@ -85,7 +85,7 @@ # The name of the Pygments (syntax highlighting) style to use. # pygments_style = 'sphinx' -pygments_style = 'sphinx' +pygments_style = 'bw' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] @@ -110,8 +110,8 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -# html_style = 'cpp-netlib.css' -# html_static_path = ['_static'] +html_style = 'cpp-netlib.css' +html_static_path = ['_static'] # html_translator_class = "adjusts.CppNetlibHTMLTranslator" From eb71d7baa2f3e8bf8aaa76b59210f4896270ad9a Mon Sep 17 00:00:00 2001 From: Dean Michael Berris Date: Tue, 5 Feb 2013 21:56:12 +1100 Subject: [PATCH 026/229] Generate documentation for 0.9.5 --- libs/network/doc/html/.buildinfo | 2 +- .../doc/html/.doctrees/contents.doctree | Bin 0 -> 3768 bytes .../doc/html/.doctrees/environment.pickle | Bin 0 -> 76095 bytes .../doc/html/.doctrees/examples.doctree | Bin 0 -> 6964 bytes .../examples/http/atom_reader.doctree | Bin 0 -> 10121 bytes .../examples/http/hello_world_client.doctree | Bin 0 -> 11160 bytes .../examples/http/hello_world_server.doctree | Bin 0 -> 18569 bytes .../examples/http/http_client.doctree | Bin 0 -> 18367 bytes .../examples/http/simple_wget.doctree | Bin 0 -> 14969 bytes .../examples/http/twitter_search.doctree | Bin 0 -> 14747 bytes .../html/.doctrees/getting_started.doctree | Bin 0 -> 46869 bytes .../doc/html/.doctrees/history.doctree | Bin 0 -> 13074 bytes .../doc/html/.doctrees/in_depth.doctree | Bin 0 -> 5306 bytes .../doc/html/.doctrees/in_depth/http.doctree | Bin 0 -> 31212 bytes .../in_depth/http_client_tags.doctree | Bin 0 -> 9824 bytes .../html/.doctrees/in_depth/message.doctree | Bin 0 -> 52727 bytes .../doc/html/.doctrees/in_depth/uri.doctree | Bin 0 -> 33862 bytes libs/network/doc/html/.doctrees/index.doctree | Bin 0 -> 20414 bytes .../doc/html/.doctrees/reference.doctree | Bin 0 -> 4486 bytes .../.doctrees/reference/http_client.doctree | Bin 0 -> 88864 bytes .../.doctrees/reference/http_request.doctree | Bin 0 -> 84840 bytes .../.doctrees/reference/http_response.doctree | Bin 0 -> 126334 bytes .../.doctrees/reference/http_server.doctree | Bin 0 -> 109040 bytes .../doc/html/.doctrees/references.doctree | Bin 0 -> 9638 bytes .../doc/html/.doctrees/techniques.doctree | Bin 0 -> 3835 bytes .../.doctrees/techniques/directives.doctree | Bin 0 -> 17073 bytes .../.doctrees/techniques/polymorphism.doctree | Bin 0 -> 11107 bytes .../techniques/tag_metafunctions.doctree | Bin 0 -> 29080 bytes .../doc/html/.doctrees/whats_new.doctree | Bin 0 -> 35753 bytes libs/network/doc/html/_sources/contents.txt | 3 +- .../doc/html/_sources/getting_started.txt | 2 +- libs/network/doc/html/_sources/index.txt | 33 +- .../html/_sources/reference/http_client.txt | 54 +- .../html/_sources/reference/http_server.txt | 137 +- libs/network/doc/html/_sources/whats_new.txt | 9 + libs/network/doc/html/_static/ajax-loader.gif | Bin 0 -> 673 bytes libs/network/doc/html/_static/basic.css | 16 +- .../doc/html/_static/comment-bright.png | Bin 0 -> 3500 bytes .../doc/html/_static/comment-close.png | Bin 0 -> 3578 bytes libs/network/doc/html/_static/comment.png | Bin 0 -> 3445 bytes libs/network/doc/html/_static/dialog-note.png | Bin 0 -> 1582 bytes .../doc/html/_static/dialog-seealso.png | Bin 0 -> 1502 bytes .../network/doc/html/_static/dialog-topic.png | Bin 0 -> 1910 bytes .../doc/html/_static/dialog-warning.png | Bin 0 -> 1391 bytes libs/network/doc/html/_static/doctools.js | 10 +- .../network/doc/html/_static/down-pressed.png | Bin 0 -> 368 bytes libs/network/doc/html/_static/down.png | Bin 0 -> 363 bytes libs/network/doc/html/_static/epub.css | 310 + libs/network/doc/html/_static/file.png | Bin 312 -> 392 bytes libs/network/doc/html/_static/footerbg.png | Bin 0 -> 333 bytes libs/network/doc/html/_static/headerbg.png | Bin 0 -> 203 bytes libs/network/doc/html/_static/ie6.css | 7 + libs/network/doc/html/_static/jquery.js | 9113 +---------------- libs/network/doc/html/_static/middlebg.png | Bin 0 -> 2797 bytes libs/network/doc/html/_static/minus.png | Bin 118 -> 199 bytes libs/network/doc/html/_static/plus.png | Bin 118 -> 199 bytes libs/network/doc/html/_static/pyramid.css | 323 + libs/network/doc/html/_static/searchtools.js | 138 +- libs/network/doc/html/_static/transparent.gif | Bin 0 -> 49 bytes libs/network/doc/html/_static/underscore.js | 830 +- libs/network/doc/html/_static/up-pressed.png | Bin 0 -> 372 bytes libs/network/doc/html/_static/up.png | Bin 0 -> 363 bytes libs/network/doc/html/_static/websupport.js | 808 ++ libs/network/doc/html/contents.html | 124 +- libs/network/doc/html/examples.html | 36 +- .../doc/html/examples/http/atom_reader.html | 44 +- .../examples/http/hello_world_client.html | 44 +- .../examples/http/hello_world_server.html | 46 +- .../doc/html/examples/http/http_client.html | 42 +- .../doc/html/examples/http/simple_wget.html | 46 +- .../html/examples/http/twitter_search.html | 44 +- libs/network/doc/html/getting_started.html | 66 +- libs/network/doc/html/history.html | 40 +- libs/network/doc/html/in_depth.html | 32 +- libs/network/doc/html/in_depth/http.html | 50 +- .../doc/html/in_depth/http_client_tags.html | 42 +- libs/network/doc/html/in_depth/message.html | 116 +- libs/network/doc/html/in_depth/uri.html | 82 +- libs/network/doc/html/index.html | 62 +- libs/network/doc/html/reference.html | 32 +- .../doc/html/reference/http_client.html | 140 +- .../doc/html/reference/http_request.html | 118 +- .../doc/html/reference/http_response.html | 100 +- .../doc/html/reference/http_server.html | 178 +- libs/network/doc/html/references.html | 40 +- libs/network/doc/html/search.html | 17 +- libs/network/doc/html/searchindex.js | 2 +- libs/network/doc/html/techniques.html | 32 +- .../doc/html/techniques/directives.html | 32 +- .../doc/html/techniques/polymorphism.html | 40 +- .../html/techniques/tag_metafunctions.html | 42 +- libs/network/doc/html/whats_new.html | 92 +- 92 files changed, 2764 insertions(+), 10812 deletions(-) create mode 100644 libs/network/doc/html/.doctrees/contents.doctree create mode 100644 libs/network/doc/html/.doctrees/environment.pickle create mode 100644 libs/network/doc/html/.doctrees/examples.doctree create mode 100644 libs/network/doc/html/.doctrees/examples/http/atom_reader.doctree create mode 100644 libs/network/doc/html/.doctrees/examples/http/hello_world_client.doctree create mode 100644 libs/network/doc/html/.doctrees/examples/http/hello_world_server.doctree create mode 100644 libs/network/doc/html/.doctrees/examples/http/http_client.doctree create mode 100644 libs/network/doc/html/.doctrees/examples/http/simple_wget.doctree create mode 100644 libs/network/doc/html/.doctrees/examples/http/twitter_search.doctree create mode 100644 libs/network/doc/html/.doctrees/getting_started.doctree create mode 100644 libs/network/doc/html/.doctrees/history.doctree create mode 100644 libs/network/doc/html/.doctrees/in_depth.doctree create mode 100644 libs/network/doc/html/.doctrees/in_depth/http.doctree create mode 100644 libs/network/doc/html/.doctrees/in_depth/http_client_tags.doctree create mode 100644 libs/network/doc/html/.doctrees/in_depth/message.doctree create mode 100644 libs/network/doc/html/.doctrees/in_depth/uri.doctree create mode 100644 libs/network/doc/html/.doctrees/index.doctree create mode 100644 libs/network/doc/html/.doctrees/reference.doctree create mode 100644 libs/network/doc/html/.doctrees/reference/http_client.doctree create mode 100644 libs/network/doc/html/.doctrees/reference/http_request.doctree create mode 100644 libs/network/doc/html/.doctrees/reference/http_response.doctree create mode 100644 libs/network/doc/html/.doctrees/reference/http_server.doctree create mode 100644 libs/network/doc/html/.doctrees/references.doctree create mode 100644 libs/network/doc/html/.doctrees/techniques.doctree create mode 100644 libs/network/doc/html/.doctrees/techniques/directives.doctree create mode 100644 libs/network/doc/html/.doctrees/techniques/polymorphism.doctree create mode 100644 libs/network/doc/html/.doctrees/techniques/tag_metafunctions.doctree create mode 100644 libs/network/doc/html/.doctrees/whats_new.doctree create mode 100644 libs/network/doc/html/_static/ajax-loader.gif create mode 100644 libs/network/doc/html/_static/comment-bright.png create mode 100644 libs/network/doc/html/_static/comment-close.png create mode 100644 libs/network/doc/html/_static/comment.png create mode 100644 libs/network/doc/html/_static/dialog-note.png create mode 100644 libs/network/doc/html/_static/dialog-seealso.png create mode 100644 libs/network/doc/html/_static/dialog-topic.png create mode 100644 libs/network/doc/html/_static/dialog-warning.png create mode 100644 libs/network/doc/html/_static/down-pressed.png create mode 100644 libs/network/doc/html/_static/down.png create mode 100644 libs/network/doc/html/_static/epub.css create mode 100644 libs/network/doc/html/_static/footerbg.png create mode 100644 libs/network/doc/html/_static/headerbg.png create mode 100644 libs/network/doc/html/_static/ie6.css create mode 100644 libs/network/doc/html/_static/middlebg.png create mode 100644 libs/network/doc/html/_static/pyramid.css create mode 100644 libs/network/doc/html/_static/transparent.gif create mode 100644 libs/network/doc/html/_static/up-pressed.png create mode 100644 libs/network/doc/html/_static/up.png create mode 100644 libs/network/doc/html/_static/websupport.js diff --git a/libs/network/doc/html/.buildinfo b/libs/network/doc/html/.buildinfo index 66e8867c5..ec5f28f98 100644 --- a/libs/network/doc/html/.buildinfo +++ b/libs/network/doc/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 2782e6e8740d26e9cc1f54812c829fe8 +config: 08239cf2918f3b576f229180a785211f tags: fbb0d17656682115ca4d033fb2f83ba1 diff --git a/libs/network/doc/html/.doctrees/contents.doctree b/libs/network/doc/html/.doctrees/contents.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e8fd6d32c097a6252905085b2e3849f0b2efc8ca GIT binary patch literal 3768 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/examples.doctree b/libs/network/doc/html/.doctrees/examples.doctree new file mode 100644 index 0000000000000000000000000000000000000000..462387b7082d357ad7503204d2e26bc17f6fa5c8 GIT binary patch literal 6964 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 AiU0rr literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/examples/http/atom_reader.doctree b/libs/network/doc/html/.doctrees/examples/http/atom_reader.doctree new file mode 100644 index 0000000000000000000000000000000000000000..766415d5cf7ddf59220975186d1c140d53392bd5 GIT binary patch literal 10121 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/examples/http/hello_world_client.doctree b/libs/network/doc/html/.doctrees/examples/http/hello_world_client.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6d07746d7606ce15069b7dcefed9cc638ca24e61 GIT binary patch literal 11160 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[h literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/examples/http/hello_world_server.doctree b/libs/network/doc/html/.doctrees/examples/http/hello_world_server.doctree new file mode 100644 index 0000000000000000000000000000000000000000..384ebcd0dced333fd7146024887570a9e45711da GIT binary patch literal 18569 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/examples/http/http_client.doctree b/libs/network/doc/html/.doctrees/examples/http/http_client.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a5df28895fabca0f948bce0b0d71318288418112 GIT binary patch literal 18367 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

csd8~!wb!hYAO4)4y7sT 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/examples/http/twitter_search.doctree b/libs/network/doc/html/.doctrees/examples/http/twitter_search.doctree new file mode 100644 index 0000000000000000000000000000000000000000..aecf52623ef29d1da1c94789c33d61a706c53c13 GIT binary patch literal 14747 zcmeHO2bdhil@>yqX0@w;gaAp+e78O0qpt6u%henq*YR~Yrs9rPbw(M>h5x2;m zkOsnjY!K38~Bl=P!@ZE9O^=qzg6+Pb|UoP8ooZiK}vrSJf59Ntj(W&=> zaYG5?R){XWKc;LbX4^@kTVIye#kE7sw39`Te!OjNmZyk}z9!+)5V$lHb7?3Y7l~k{ z=+(QyhattIRbrvOEaK1*b7&}SSuOhXo(6wT4fO7^fDk~lJgp$L>})jweH9Bzaypb` zAe3vMBxFp*+*vz%0@$6)X~kBd4eOm?F4!p7iTQeG+9Lg=COAL5ogWeT` zky{1G*p?NW3*xMT*i;btg4~`JCy7%madtsom=!&u%L>G~dpZPA(pR*F4?>bg)1Z0SE*$GTb87_VAE={d)i!y8m$HoG(hle3(EDLjNOdAhsN7l%qnbE!rroCz|KT~bY$m_t*(NI2v zL9D#*i3GE3eWyY^>;iJ4ktTNb!KS%T`F#X9253_>p@QtB-E|ba*)BeO^x(V!l_Q z#N=%)xvuA@J9wR3-z~dNw0oBw8+J7(>hqgnq6w<@PvEQ+!ZJ!jm zEg98rk84?;K|6h$c2)wIfqT9=JY04IU)#D>8_?PN9M%T7ppe*9Q1#kYwUumF4Qhy0 zGo5H^hC&whmYTLXstKbxeVU0W;4ZAum`O2Jiykp<+^SX}ezcMSHyAJ30W~0>kNndX zdm2}6X1*lI^1JG;xRf1` z0~@1qym2z?Cl72c3<6uGmj9ahF+5BbhN{h6J+sjqzo)xbcX0*+`QG>Mf- zDFYQ>yVh_5OIr^hfdfZmn`RyuhzkRS#-u!e1(DrnUvKTl@lLbRcheR;wlX<9ILB?- z!7bW`4fbHlF&=qCONnb*CRbk1wgk)pyKrD&oZM=W>y?)}8z7ERGi@v@I?!KN*luwm@=z80G-5A)vi zqAc&KHLK=&^0vczw`0^Q0Su75ee`&28s!ae$)>B$u*YUk-l2EbAr^}!E&1X({?oa8 z7AO19OR#AiGxNvH{LC>kuk6Y(Gq2dtvQZo}^G~6fmoJ4^{<2WMJUKSp+SV)Q7-dGj z0?zoIp?oDf1w$qtomc^grj6&J~jr9SRhaieA+m|>U} z4Y@UE27!?h8E`*+>{S{DlI2)%EKMz_p-+aV8oP4We(j1Vlss1Cct(6K!I>Y3%2)9Y z_3AdKlaXYfd5z%U&0V2(LIr5vk_2d41MT;Sf{N(JCkT#R94-U?nL4E)ve=w9EN_co*!o%Y*aSn|i4&_If3RRA%L)--MQx!V7 zKa?Nk)^oTwhfW&nKZ=(i^7i{gEu!d15`9q7k&kh7gjGO(T%6h(9r=XlQ(=uu8qpCB z;5-n@Pcjy10H=wEV<{d_fPd}K`V^zZe3hRTD_YU|jObKo?MTt$&=SXO9t`DY6V|rG zZ9dns{N?AxN)@;Hg2*UHI}>~M#VBs`P$<8|6rKS-U)=6aY-}tJZpK$`V`K8mkk*6E zVV$qE%o&Gu(wV->W@q`4;LEQ;7rq|KZ!i`|?)6Q~`4DL55a7e1{1*4-pm7`Y9${Pl z?YSrc09(QD0Gl>9iQfep-wWmU6Q({4U4-R9{Eu1AL8V7S`2(JI2-B|B%BFT>)9uiZ z3Z!S&BE)kLyIadGWfQy9N$7`Jaob^W`{)7yLQp}7J4Cx9&aOmMKLW;2cvAUe5cHE! z{xl)z(P(k;F7{X`f5wzt4+N5M3BqBMHg0FJx7OV$i^c;77b!k(&ae%*gmlT{$aB>- z?Qz~~5t_1uF=@kSWY8&&lf+v%t|9ihRV%sM094#P#8a3U=(tnE^5;#AQCrt9<_hiH zJ?ReoOR(X88RI_zPyaNOe+K3W#{RL0r>q^n3gw?OPuDB$$R(G9v#tfTfh!DiM%!sr zjDaTVm0JA8(W%8XiCX+6_;K{J$-e^be;vxdN%Y}Y4So1^DF2pm-wxdOs^A_3R+~v3 zH04;qqxKQLRFcP)RoU0-g5YK~la!Nx*F=?)>EE}Lsh-gA51`>GnDrk)+dqZ!pII)9 z!LJ)~`AsPQjS{H^Kg-jZAQa46` zpdLIz%BUHYCpf`Wr1GI&)xI!lAKiHbDYdMgfoPTim3IR3X~EvstO{~GCN0hfK(Yw@ zSLy@ICdzpwQNNm}>25vVXpMxev%`hm5mzgK7zqGlxaAQw!aH2;&@mA{mTJoHvK0m*mLPO6Z%)E4!cKB zecZ|EByqZlXFO)#Bs2yk$rm1^{=c=YeNe~#R8H8eiV&}ts_I2X?G zU0(Aw9$y{PsTd16AL;g(PD4A0)9?uCbe=I3`E{Z4Mk|Tv&Qt?%kw_cx7Scvl zUaM%_(I(%Dh8W1Y3C5$z6Q!IQ*EDgwM$(D$JRss-TezFh4&H6XBc!tww6zoQWQl_AhpsZ8qD6gOv? z=;oUNjEyyNkW3pXPrN%KXxF^l)t0zbadhr-mx=OiQyq4zqZXq=+ff05U5H0WPgkvL z(^kyDl0wRnR~L3|I%k+>l(LHG2xp5Hr;&e=p^MN7rs`q^lxWQb|q7U7+3Qsjo`5>vk!Pw1>NN*Jp6Aj~qn0 z0>u%%2W4OyI2K*W6`W%td6ybNiI3}a6<$KR8o$_wCKN+J@HMKeL`Qr1U0=Y=rG0px zV6@c^RG%3FaN3Wu6(tlZgT8KpdC#-x{EQNG8jPT8Q41+whet>pVM=yD#s$kVI@oip z2^lA-I=1kT{LIVa8DIt&_e?xOI)Gm=?ih!fOjBwilxjaq@u?8=i9?`Gri+*LvsKe< z0~MJWR^KApp@Ur*8Jj#BLls0|;1NFG7 z7TegV*<~n3w0Lxf8unst>_$Y>$3E`SOHgdeD@Wc?&Bq>}QF%>XhF*$xmtKb7kY3Jx z^`(g}7CAYex#iI-&;r?j2 zN^e3PX;FR&0~Sd-N{U!z{vCvTNgR z-1*&6=YDq5n3l+0r~6djW%+my1iRX&ayZ zz%T_~%*FRH=nlOTe*L&zq4z70O6E}RN!zm#lBW--+T~@(H4YXnxPDF%PAf8};Mvm$ z(RfH-4N|MAC2gotQDs`uhtTP;e!Nwiqz@}#5#e>u3QSO0b?76idNG_w7kZ5JRf}ry z<>`J^zm&O$51rH(7BN>os$lj;7m7t*EA%ndxu2IqYDGNyxT;+=OJej1RO=mqKR$Fm zJ;3jo7!>$OpNt^cwPqpHr<#U*n%@@{P1`d{V1CTN&!}-dFfzz28@H$FLGH$@%_tS8 zY||I?S=8+5*85u(ls?BDJM{gR0iDnDdsqCC7JY$Bd!PDGhvCq z525yu-czx#J@JhUeF+sKdcRWDhG4#|Y8QG{9LkC^K!SruUqRhrK77<0=IE=a(@$%< z1+LHd!mTNDgtKKHoxMDLjeB83=Cfx}ATFz7v-EYYUf{U33VnlLSG5Xc)~fy{x=g6m z*3U-0*pR}*Jb1os(zp1fAIqy*lO93kVSQy}Ns!l}EFGlfi(>pG6nz_Aur6aUtM%s5 zcTicN?=r{})e5wcKuhX7Jgdf9Vbb@|h;`nJkIG;xqPp)#b$yDV>1OdLYDa>SzI?W8 zp}xVRAMl`g>fKp!5q|l*r}M=sB$}KoNUX$-=?d|HSRI{VPeIeE;{HHi+VY8D zDx!T1S&aZWjp_wt`Ac-YI^`UrvElk80%J%+9Y`Wb%J(GDM!(a%u`=@$l`95wiZo&lvrWX+)oWZA~7t>wfjByFJKqeeIowRo=Stn`Vm3%f~lMq5; zhg2XT#R(7+NO3|cAt3}(2ttT^Q z%9JU!M!B36$7?u#-S?(%&CEmOP_^pUQ-xgJ$<~XbjyGd#W_A?qZ}IESs5f(K<|xF8 zQ>#k7SQ$wceIG~`B}bgPzWa?Dle}506|hhptCXv`0zq@hg0smfS8F6Oxycc~Sgm-8 z)tUWRN~2g-sIg+*P3A{)8y#=&)tMPc8b#S7#kx0pYi1f=P1>BTnZ59G#x=#7H+O3* zifSb}R;-|C-l;#M^6s-bGnYlOzR59XsMjyn9dG{DOaiffV<;qT->sRwL%5VU zBhF@Tzpa@CVN|ou^_kYD4mlcg*T^qTuAKVt8=u>h!+3M!h;*t=215 zD4r7NJ$~gL=^519V!`*03%s5lcY1mbm9{rh+J)|n^gLx=FIBczRrYvyW_q@Xve_4h+#71^A~%sfD#qpBTyIQQdqaijb@xv17c#Avn%ZkLD&@{j&j|Ij z&z+N=X5vqD=ccDpMNe|)#d20F$ZQn!WOtwRoRA!o=@fT z?H-&yvV}F3-cSJ{4WoePxQC=?gz9&$duVzp8|-=RVd;78)ST}go}M4^5S%cIcY%9E zdO9*u?JjhWOwVd6-I7LnX5NK)fFgNI2fSrH?RF2X1;r%1<*<4e1>VK5dXgKnD%YRc zA3B^$C9{^4uoWy$Plw7vIlUF`p6Tfp{E~L$P#$Siig{Srgts!Y9LW08KCD+?VaO3F z`hDwExBK$7T5rXvmy1Jv`0w}Oc?>PG4?ON`D>@~9-MjRL>%3Kgw|Xc&qn;a~x_fKV z(@kBxwdq8zUYFufqmH)pguuJ3hw|{fbpz>{L%IA$VZ&RGmqMe)yuOznNYBWZbH0z~ z%LmfaOzahS0&KD1W!&={>Ak>i$J>AgHZzpHccr_hyL6y2)LwJn$+L|oyeERMR|Vcc zkK3P~;(}Z5CGM*9!OrFyAhN*jfQ@;lkR95R)p}eVcv<%__afh2lb&JGc!Msgk?V2O z1McMm?)m|D-GDdL_y61H0l!MGArEARDkl8-_cz zp;#|NR3jkT4ZI?V*6!_M+e59hwzY(cT*Zoj#%Zu;Wyjk{3d=1Ng0hGr7B||?r1j2b zXkMjj5miXI7I+>=a9JFbJJ%R;$xaD8KV+w+!c_*jg zkINcv4!kX_A-joX@y@nOH*pO}5L07UtNNstvTRkO60UVC6G9uHmQN16r?8eRVzbt= zolj_Lxe>|L+=Ta3(0yItJ&kl<4!SSIU5pwp19#s6m@#*rO zfeJq}@V1ivoxp*B>(HqD8oJKSsa&C825B{?!hue9GulnU+Xh}dEAVb4E{+pAD(yX+ zc&whzj%W6s!@4}TCp`n0IKtCjA57DTv7A)A=WT-}M55Y9@A*2wX);vP3f0kEv69&n zW!JWNFF>P2(@gKpM!mUK#yF$C&9+!rlIe(s+3;?P?0RTSy_?fBYg-np{qb&D4VG_V zRT^kjFI-KU~KnEwa zExo|(z1%T2MAdeM`z+#r1tiBoT(geeZ4lP&fp-TGtL=I*w3AlJmh8RKw8={5AmkfQ z!@N6z3S5{MNvG8!Ol)-7v`M>}-b0 z)%?b+*T5(+;k_MPx;OCN5teAJ7KS`cDDOV<2`pa($l zz1C=|@pw;{5?9V4+a7c&-G>72y(rFofaJZeCzKH0wQ0pTy~4ep+1?LsPmZ<^fY%QP z-UmZAJ*2wrzE0)Co`%(bB=A1O>i-bJTAs_h;j95uw`6Wpu2@#XoAZ++7^v1@Q+v`r zr)zcBNkW50bCp73a1bUWx%rymWK)S!h)RuIGdQ>~S(W5aYi66FG@NM5Fm%ny%z?Z^ zxpH|Cv!du+64{4~=m2^K2OAZ<#Pi{Ga8N-pPr1SjoRbYDGMB7ZtLQx%s2A{XI+$IU zg2=*tPDS?NZX%l(YRN}v@6Y@DU_j%;{Lg0OoB#s9Z ztId}J@5=-|qFI}9RD;#|%DC0}Drh<+tWH-9-q%3c*8}exVST<7ug_sxpYfH?`zCUK zEAYNeV*eFztbX4Kyzep#yN2-;m^J&}xHbE}<#spa_kIAXei(Q^3hVTpc%6<#nGM)5=*t!O;Eh?h!h4-`^S>OWHpI@1G=%BX^QUjz)yFGRo~NP^RoLWeUqA4`mO$xF@v~ zD|<3-u9mzYDw%x2^h2g1F_66!hZz^eCm}LT6JirJnNDoIoQlW{J|-0LK^C#h)C`!A z$SgbslF;{l^#Qg_OS<_0Wp83!Q6f>X>50r%Brz)N3?(Xc4l`6HSjb!e-*BDGLlDS5 zin_mKOD54qv(RJ8d=>D&3v&Dt2vq(61c4l=sr}l@n2HiuWvB*bBXW?!9Bg5_&Pn7Dq}p6oV4RD{q0H1V z9dVzx&HdL?4>^oDcQ*TQZ*p&TZ&~e{`NSdU-sEuRL3b%f;31GBS-#s}Qu07gQs0$N za+E%AFR_@|G(sMS_m-JNi3}j}qZzi(C*&B!f|JK02;}kjMS+}Hlt@BkmyMC)7}{uw z9A~oiXtsqWo04JDn<9XrmE#ra1PeuDNG&tgRz+nEt}G&mofOdJOY^ovo#9Ob*X!p; zbt)jefbL>(CB^uP&K`k4`tXVxo`@ijlkgkXkYt7ScYsy^jXYT$vg@aECwbB_-q7$oTKITmn>PVuF80vnR-@dU6^Bm~n3ARd*20za96LidCCUXTgErg6WjWA*hZi9T+&fosiYa&gKNX zT$K?Y%UoD2Lz_i!V`o5IB;o8W@8&94h2i`v?>c#|3niga1dmQ6iTEy^NVsUAsw$TeX?tTs*SU`I z6?JHK;Fk4B1mDvL0=XQ&VbfuK!u|!1Q&NDsLZLDSioq1Bq+voAFA^6K6S4tt;Lnws z_lY(y$HQyI*;K4H{D0wR)}g*&C}vtl;`q_xMi-tEtoIcC<8?U^OU6~%LZ1Vh4qd1% zBU`RG8jw_yEk2RU=c^4Yd$aMwGgwY;%9V?SMM5sg8yny3^!p!m&@x;vtYh1;@M#;r}rfT1kD2c?u<`4C>(L%Hue?9MZ&!&W^is zPx6333n(B6#8L46@xf6(#bO8X!dQ$e#7R7U`%jH}1rZmIR1Ljh~Dlkf$gTGi_m^TI2N0kRW-g#sSTn zOx;6U_Lwktavi8gRiB0+kn8aa;XWp75@}A!D#+8dN;lXlQO0rGPW5<(rj4&2&qR7> zbJ&VlaBLfbK%S*2jB>C*RgO}m5{S```9=kPwgHYhW@CcTG27J#d5(fT*MdC(nVSxL z?4iJD)O54-lW+qKh6~w6@R(@NRjh2PZgjL4v?~$G+)#Csli;#1hO#=>XzkKmolHGX z%WG%DhLwxLA?ouLz&Mk~CrDlZFfisO1cBVFdHU4>J$@btjdiv|v|BXi3vJGssD4;U zJ1iq?I4pY+!R)Xs-1r85U@+E)jCL@_d1Pv&S{*4nI;*es*?mXNMLldk@#}IcF?Si8 zy_oTpXlES?ke46|)qE*}KwgI5&>WI{Bg=}?u#1wB?FRA774a(!;>jS2m>SN?Z&Qr7 zTZ~n(=OWB>hI19&Ij}C;!v|gB_{_(ushNS>Ed)9zqOT3ZFWp06x$AGL=uEURH2&%- z0lF#O9ZF57()EQ(_eupY#yL)|+=&G6|5XSAd9_0Is|k-ofd{O$Rjj)d_HGNyZHlo< zTiqgfs9Ucgq}461kT;>BUR-1f84$59RWFWUxT~Iec`Z?OQKr{1-gK``jPiQKqCPti z1o8&_hWbRRLw)K&p%aykywPC1M=`$1V9e|ahF0#qS@FEZ;)%7ciOOHzio7(qZzGOy zjklz+?QAk~W9R&KW-=`)WcLL1P3}cju=E`W0=bWcTDK#sq9&TlzCeywwa@QV$afjY z$UYklVk^Sxh}^F*@3t^p@3Lzo(K-ZFJ@Ox#RfxFbiYp)TfM(xO>O}|@k@qk>uXQcr zLB<`bO9m&~)?i6^2q}TQ7r*SK&$1+Rna6e|sbw}g4t?)a+&fBkt}5>*EoZgT_W{No zp!A*6O5ejs3FL!{qd#+wrOz7ih^C1e<#9-SMA7dkS(7avA~}7nBz~B2vz5eCTS@!~ zQUdv?;^@!xS`wShF{0A%+P24`>0^p-N6EH)`8dlzt(B%vFb*4dvAyTCh^Ep8#6r0~ zi6D?q;g^y<10mNMI#*F@QY~Q{VG=WA7aOw80tkAg{>D&N2Li*@av6KMX~+|F^X0KC z5>W9K73>Fc%Ib~|GY(;2bRlVR`(_fJ9Cg@1V5*)+Y66Qa$*~;f^1AXtMqpr0Zn;vv>&Pa|-@{a)6Nk z4LMM!<1_rvD_1*&u<{IA`!8r>Y!U8@h=2|M5`sX!tf?)FaFi6xA{XJlqA*{zFx}_x zUqdRoHRg)X-@ndGlbyeRgUBX6f7g0`lX*CQ{}vts`8LbP{9VaI|L`4sS02fC^?7@V z#l+|D-@|+B{GALS6Ti=}WB&dF#DbGQL=ec2@Ei7qB*FBC(fs`Y7{supwi+4vu|e|_ zMe|dGCNn;~Wi~`a@9WPr*UxP(yO)nf%Z|QOE@oqd{DM$+^kp~J0n+Xmh;J6)_B;6{ zpi$>0p!^CksPC^41o9gqv%Now2nSRrv!a|i?UKQi-x}P%Q{2BdxHFT()ykkhD8@fp zj5}x0p9nQ!2K^b(tql4LV!)ukA_(MfL}nR8B0>gTLk9iVItKZ>q46I|<3A0Jng1?L ztpb~Z9W;ULfnRVh!^vvcnRQX=JqZ?@tXfc+ig-*ZxU0pEaj_s+i%+U7WS{Is(DundBD_-)%!5M(s?FO<|6?N-xmS)o8UKO zI4cq|9FN$9CHo@;>;eRV9DrY{k4cM|U|m9-bsVU02U)m9z`PRSv7ch7Adt{%#`Lv*-$ZZurgiO^w43FL6a(VtmtNoteOxTLl6dK?0eP~A(RJ^J3Sx)7d~S;8ZdvXHq~lt_RbXz=ui9IqK-CED#-Q3)q7 zgHf(lgo}^>h3Q2QNJ`Q4mux8{#^@JUn)(#vL<5px&(}GDC^$S70mn}zsq|)3$>fT9 zxW>*SSR9n2XWSAl`z0`bS5V_lOrDfF?ZniH%ofIDGQw54@it|t-y&gmc3>C6Mx1yI z&khV@oliG$afUExiV4s0VL=_s`G|Kan~GAc=waPWIVtKM?7_h$Yu2n=pS^6&n)QQ& z(ata&vBdrotQC&AMQn2pH;fVeFwgN~(&8p~E+Cwi)T^~*p(vPCaf#B-RSY2odIou@ z4ClH)%7x`Rb|PT^fu<%<>rn{2yd~*kLgNTnTE;?SuEv8Py5ft~MI6+vW785h6m-ZU zVb(TzNE7Az+!&)f4|Jb`;YDhlo+KWGXU;|}!^BEY95YULn=3V`%Xs3}Y(a>rp89uB zQibSLy``aYpR52JNuQz`bgI>$?jz~bkO~E-vc*Tzr!&)JN782y*~CZEOF8g6lX*Cj zJ_`?lEN1x_Nh^71aA)hg8A+d`&)Z8ZCO(or7w@ejX)=Jw&tupzl0F}?Xo?pgz}_1C zhIXDLpdH3n!nojoX?N7xWQobVR5LF#nbmI@hq8>dqvqubdy$3Z5LbmA4w_X2cF=q= zfo$)`EyoIoUT-;`ZLh~|vO{`oo%@O54KgP$?XlE8ZkcI6dfA8b1J34@TOTb;KT7D< zE3ROCMfW*tp>hc#z@?Q40=X2wA(vR4us6IBbnQl_M^+i4S1ZwL4AGh0jL25ySgWKy z!IH|hYD`3QNPn=Ko?J$Ft0!DERgpzmpfJabr!ZJ_;xS%(7^+X!0aG`9SkL&1UK-Gf zT+&E^VqA_OkSp*TDh8_(Duy~%cVhR2gC$_upjfUnSoHY8&U%X`>u52asCloldC7*> z-h>_YfTp%vO>6gHA+AQcwGhpYNV13paf1i~$temQew0{bWFe66P81sTPP=cXB}1k{ zd96^vROqond{gM`+Z?UJu&qM(zHJ1lHdnlFbD3$feOr+@cd>6PF%LC$BOU@NvwZYz zN*;7`RNqbCR?+9}B^DF!+p2hP?c2xz_H8wW9etaJSZJ;w2*k&4*f>c-q`79RHkZJ5 zI(m`1!PZc0n+!HxIooNrroiYk8q>_1ZRUAwrD{;3L6MyV#=F5Sgtq35J#ah&jN1u_ z>e?IX9R%hKLA=kq2I#ukxF<2*tWCyCkZTbSCI$!sc`|-OCbBM}g~KD(^5iK90sB-0 zfn0}Qz|yuMt(6Z?Q;6#=#J+&Ae29$&yRhQv%wSnT<{3hxJm5wOvEy@t7lr6ZGtQ73 zfV3M!p22u?uD`7uc_xxj&#edo*@oYcC#+Y<6OL`ncvhZe;BQp;XB&7`Y?I!~o98Ih zb1jrwa#Ow?4|n0q^9XGD!lmFCJa}^aPI;o&hs62ud?4$_j~6h$qBr8i@XJkz1}|<# z5Xdd~4SB(OguKAKO&29!s8BC5P|>0!wY@PEE=u02FfX<+Ync=70WC6`f&Y8sK08B? zO)7LD^Cep3j*=Y}%1iO?E^eKnzl?DQ>O}g|XojvXgzZQPSzvD-`*Tk{zbVZ6xN@RswHl+5m5o$W1e92(!C_;-|SyOcMQ zp3_@tyoYi7DUE9*8pDOyHz6^QH!GU{%qRrE0V|)}2xArs%nq5lQ`4o+L!*;$CK_Ktaoc$BZ37(QK zc20f2=6|=%uV;{rTsj13`wr#}HwHbxY_{*<)n;9Dq8EAeX5H^$>0R9Z4>I0ti0(>+ zJOlu+>%9m9c^`hmu7(Tx_Jc{ZN zH0p3t>eSOyC(+I8S9LqzXbm?;2sU@X+iM-RaC+j(3b=!@`2#kIyGlDyCe#}l$C*m5 zBSzipVeX1!cHV!`h3 zBM9UN_zev^Nq}LGJE51*zH^lz-hg-6D98_i8AbjGK_EZIFHO~>gS%DqKhY9?YD?%Y z`kx`Si|BvOOp_J;FNkv&MgL3Yq3C~whd_SK@*#R952F8#z8lg1R-d<*SWH~>zr%a0 z=*a+z{`U+!ME?iGLJogK5XhhK8;YJJw26KhME__QZ~3z+^eNSJ?OE<32i2y4ntuWIxTo754q{6vzU7 zZ(U(ux(YWP%K^;2qC^6$?bj9d12sdeM7zQsm2eOk2V8pM^TCo8*l~}`} z)mYKDISSRvaX38714K&KxC1`!_{D}^33mZP#M^cZ(w^ zo)Fb@sLLOfuD2+M~7QSx9wPSAH_Ko;rq_7aPU8<1YS zw;B*KfXGt}JNl14#DbG2BEV%O_zevRNoX@5^vK%lSWY(CPSI?qnruo&bRCNo0loI8 zDb(pPDANw?Y+BiF*R0PVkey9)%~}C5d*;kKHkZ?jp3TXcGm*paIl3`QH-VnTc(Vqr zNMtc0P}8#!;MNZOhBYO5raf0Ox3P-5ck`5UO-0VrikxpM@>n3;wlLc+FHrI?wB&bh zmrIb^rCly%rpdO;WyHCQ?Q%Kuuw7n+2V7Ue^3g7pJhaPxeK+lLg+6aDv6y(fyaey9 z?UD>&yIjezqg`H#SZM1i1h`xSzoE90gtm669eYbVtCsMbu6g)~8%D_(J#L%z~O%nZU zRxNLC+Dj$ZRFdgRaWihm#{p>LN%xzll5pEIHsqDDQ4d!L>E1!ud~@Xw20QT2>u{$P zr`@y1g2ThqgM;}(^2vjP_IMOd$>MS$GupEC;;E}#9oG#x$-%)V$8HnG{>0`MLuWI# z72?zsJ!5dh*}CiGw=?%JrhA7TQ#%U`Nd))xgp1~G|HG%q3!S7hR8O9@>z=VMuT$V*;_07Y(?@M zi$sr9w3#SY`nj4uex;v>bX0*mYvT4zo{xA`{sjmExk-_j%Cp#b<#}c~X5@Cw7Rt@0 zm|L`%7n)-981$r3Hkm}v^NSSmtrl^2)AVAbb}>yaVW!ENrk4`uE}Ev7F%Q*vJ07r? zg5|?BDS43OEA-u%rrY#+dx^!wP1EgoZ#7M10G0a=h8?Eqm57Cu??e#DtMD6|CXx_I z*=!Nxr;soPGF_Ft+T^@TbKY%o>erGYkVp_1$%HPZ*C_aF4S1)E>2;bAQ&xFBV%(Iv zn0D}SZylRd!rt!lg zyoDJm_RqHX*VFN!%W(HFj zq&Vh+!{+^EI0J!04@G=EC%QNWSE3CUM;cgOME-<+Sjdi-LVplFKU{6(Vj;&{dAC~3 zJJw#oWWkSwLC=;XJX2i8R6H=7`~(?BIpJ8T*(Y@y*K|6QxX75mM?Z=@YJqQc@e?HY z5F6Gj7vs|;aS5mo=|1I1rvz%Dq~ECkmCOrwSC+}UKp~XieguKMTgmO;eaVFksEbfb zTAT-z==WHn+0r8oU?=jRCbUb(V4!h%2=_t+>*V^mae*R^6%q*S6sUMvU5lBc_efJ$z)$pjyrDr*r}8 z#TNEeR;jcEZ>6P-QU!^5L^rH#gqHAY0EN6Bla-gRgLtUbHxOWLot3r+)hSu+Cc|xe z-%^lo8<5P$A?hpe5j^aoq1S@9dS(-I)V?xcJJ~y?mJ2 z+nej7`FtvI5!O4{9oHIyyZ?BN@NnzR!0d>R!`Z{Q_XGY2)BnOLg6>$mRe0%I{RTz_ z;c{qIgYZ_9?`U<~4Q+E<;CGR(u zC*H*<2Y|%b62kdoV`RHPlJlLn->bvP;ey7jdODrbd#rz)ctz8TmK=J&6VMiD9 zN5q2de?kz*pYa>o0+P_y#njow{1;lU{KXLYS0(aqhRDo+i<+i-QBr?bn*L#F;wnOS zTf_e4p94@bPe+5k4*K9rxA@oDt5( zQy_En-F#dynh|0T<)!@IugoQe6(!OUpAXK{OtDh!d@w3yA7(HYe0L(9k3?{5Uj(>2 zLQ(aXY)K@_)St7#{S{<^0m=LY%!A)sDdP!ysQVc2;EMJduuH;Wbg9;GVjg=BxOYPL z82}jbGX-`k>JO(Y9)55g2&rE>zV84X6g<_=X7zV>OgB4vO-vQ-9913R+__+{2;-&& zA|4#HvqkiGBvS92gnPfsR58(AM|Dyd6N8%k1C%kHVt9He>;n~`lDU5O;G7%;dLa3O z5d?CG64$@G5C=72RdlT=A~y2xgjW*K{OtPP}V+I&D*ud1&yC z!UOh;uzYk)N*+wx(fY1hBFE_S_7aPUcTLCQy|rs11Bm?b3_H4};}8o$_8}7RSzexU&>${E9C|I;t^F4|g_FLG(EY0y$Sv8HWW)h_it`++skUr;z6xNbTY1 z)-o+DHetO$!7j95+<}7$EBFrBrnQS^flCOt(^=rQ(DW?@D5}%MD9aE7!j>Zl!N_4M=7lb|_xLuW;#Fs~!%hOD=NUUA#K29Zhqa8oYX{1%rdVC3pxU z&t3wHux1w=E>NkCp`N&MhN<|hSJ^l@(b-hlW9Zi%cnc-hbdSSq35tdLtQ*7FKv%>k z$;(?3wd$B7xZox9X0po~)6d2zoxl^KE?%R~PwPh2!&s*#OVy!fCzZhWV{Cs~cNZ^C z@MwvOA=z6xHIcZG2Q%`x=`x2e$#iso9CqS9m`%7!2HKBH;>+xN;mgdSC&nk8M@Q*3 zRr1hVDcJ7(+13s9ce&61D5zgeHh7@qd z1l1Yk*K%;3e*+&aC+jhD2GhgqfqYI*W7-)`PFJYHw70P4IP2;>Qhu7C3AKtDxjox_(Y z(sdRoEskmV>~7X;Yd$t8Et5&@N1&3>}o>ov@3f)^&<-~=tmrv z3?dF%l0y*45b@ZKjOA-brY^9&rWZ_lWMYj_C6WBHh4D0wh*qVLKz@%4FoiN(a{7Z)ZAu@($j=@#W-EtfvTTCsk(ONvo)IwK1cS~}c3d)V`*DBG0C7PdwsJr2?%5H9_ zI)_KapG-izxt&X-5wJXkP&;(rirwYzR8nKbjYWJ%!Hy9OfHNt7A;^SgD_h%$Ca;HFD@ z@90~@S#kBRaca;!FvQIoMQppp=zsBIc^*rRkJrs7fS#{~b=vutgcHaYFkdA@-aT5x z$W6crt-KilF2hj@`XAL2P*L(y6+B!Mexa83B3l~o|1nc++^^Pbv2v}KJ1XZcW@y{> z6hnJAlEH)5APD5Oimbn6%OYXM3{n4Iry#F4Aemtd)o|0So%x%qRH@;sig~H})!};b z@}iF^aB?YD(d`TtJD1FoYzNS~dZSRRCRQw4uJda)omMx2X<^MxRQkaq-FSeRuPwd%V$j;kSqXJ=#T+?CsU& zPIrBHHSds<e2J4q zwGzWyep~9pd3;Rh>QmpLLg*Cw?V)nLK>;e6AEF`sk4Q=0h&n@)??DjAo0I|l|4R&j zp0J6+VsQxkW@W=$EE_sDgS}M~+BL{v;Ar=4NQc#EZU%chBEa2y5d`uM&24ujynyI(WE+h(RexU>Dywef&Lj9<_9ARR>WhPu|~ zD-R+C6@CZ-zU`!FOodr=yuuf=!jDc-#!z!aK!6bp!$NQZ#^#?ixC*avN4 zH<~Fp>{57i_{7v%sZ+YSRAIR2eB|1rI53EHT!oWQ;GQ+XW#BwFoityWzj*0VdR=u% zl=jod0;o9Fg9~t2^@>x+LvOxJzi}_N!&Y$dH};(RsT|$BEkNcI>Ai3q^XA(w01YW3 zHgO?*&8A<9^+cc}{Olnp!MBeiLUu|82p}Czm^LCh(n$j&6KN7@E-HgxnAIPpv$op; zs=4ZTL-Lz>P``@<^Sk67W3Kvgl<|Nla`&@?Jm z+_rJ{rCm3PtLd`uI~%~@SZl#c@f4e}ERuv=2W&8LLBf}?!a9oCThL_ejOK5a8~ z_hNhosWw;Ki}6`znyeS&bHq7uFNSjB^UOmN{slbX<{p+0FNTr_i}odbS1!tz^?7@V z#l*cBU%`8;7lRBSo4?Ai!;A4X#DcY7M-a$2@EZ<B~1wf#1>s zzikT4JQ|oIvD3iW{ifg1Qod_TxeWBT*pseCrv;*|vFB*xnx;U_O{nfo-|6>Q-cF|{ zucbh~4=@PiKSP!L0N5eeA0ogvrbv;U;gBcIq5Y3F{U;_}?^>O>@syt;TUh-|+*KF| z=os~9imkJ?zk#*>IrEqcttMQO`~sO!nO`CZW|w*iKdB9x~~700Wc$10>1sff}s*1A;*QNOG)R zkQ+_C_>-pp*`(`rtN&(qCVv60kRdT;`KuPusVr|LAO5C^mCS*V%{b-D-vNUP{R08^ z$!UiEon-(GtehPzPr*1BAC1B<_@Ji|CfGl7h`Fa`Yp31dC;3y64ly1L>N|Jkb@chN z7r;@IX$S(DuDH#(lSD?g7znwEAqB`83OUn2M%(mE?O+9?KXqixQs9IE?mWA-wbVX96rucFUGy$M02iYpci8vo&woN-}^I1fw;?@S`~9@teLNXql;gpjIM`l z)R-jmiE%}VM8$m?`zn$c71pN_mAW4@R3=!+{s0D>79hZvofLI{$(Br_o9cd`f*fQ( z^oZ;V^O;Tc<>3Q11$D&wPI(xk-9{dZ_>wFdC&(t8>C%tpdNJ&`IZN1^ zktkI$@}o}xU$DtHd>;ecg$kwT?eSSoXDnH*>A06W3UI~?`_|Rdk&=T!RV%C1${wP` zcCzZeP(X(=Uu8F|%wZr3A~_sEAV+8w`b)Nk6hc!ZM=D6tfMh-ot>U(RbH61u3%rJ2 z4P(;>PtS4NhS}JdgRFACez!-XIG4aB1N>Ar1du4wOUn-z=?8)66Y2w66-_mds}O8L zej4`@mh=HY%OA!_D@jg z(u1t*Ko$~3^!aU#ZC^n$1+zCfo|!7~Zv;%VxD${Q%wL2ckY1K)`+Qc!bS$l3-%crH zpMi`z7Q+GbD!M3gqQabHVLlC2++deIayZpPYsPldG<>{GqgvyXcr=GwbJ2p!xOT&Q z+YI0BLK|ix51Zn8ZX7g)KNd|_9lfS`HW64at!;FvWLR)iSiA&mdKUdiSlBS}R`XLM z)#^yuNx?teheq5O?K}D?6Jm(hYn&3@+UChx-_ExAVAwWKQ2=w5RY=!v$`Cmfv_daV zLx8QGN_f9sWwo0Vj@C%+v#s$ACI3uI{z*{8U6!<*h1_hAi-{#_kQ&?BAXzpW6Z@6SaL$a(k;+a#;gtxcYKZ=1NnMG9dkon4&;40K{+2E8q&o-$Fq5mjiMM-rS$%N>9O19G7r0 z?OHtM^r|^680RMHI)sFGQLwB!AeRz~m!;>_YippwZxas4DkiVhWbOsPN6D=p6C3oH zbQjCkl|WN5{eZ!MtYI3z_K{ORim|B!vKG-j?%gGRqPWD*@H%?QhRJHy;|Jsk%sZxe z=~+VF)^mmfav34kXvrO)Kpl{EOr5Ry@njBP56F7Po(2x*)C;dgVk;hFmlL*;-pAiE zI#ey=tD{D!zFdyf0l5OdX?#ATUJX->xQS;#HZXPnwyXx=N(Fc#0cPckW^ClkRT?{h zUs|{H?0iE61Eeghwh#QF zA*&@y4eu-WOyj1nrlfuG5IZ1(-}IbNh(^3V;sU8NWgqTQ=EpU&rZT=XG}|U7&h$;2 z^JNULJx%cq<7=P10yS}Yu8dJ@LN+5E8=>(V$Tfsb?;EMy5H1fRyL@>PQXriDc(hjv zS@ZEl@CR!IaxKzUr)SG>KFg05%tlS|Dbb2fF=VR( zCfr;ZEr){`*+#Hw={c6ZGL9jGA&(=cEx5|ob)3397xCNDhhr*)9qr@ce;yG{ zCu#Y*JfAOfe5eant+SiirN|2q2cga@G)8OLsQLSH6XMa);PVc}%5c>J-)w;A+HVJd z8gX)?a*M()pxC&iPT^<6z4`J&B&KH~t@qdyPc6uc_&OgK6V<8x^@eY`cq>s)OHVgf zsK|>IrOF)2y{YII@%>nNiN-F-m#evrS%>4oEY3e*`#w4TQY3CoAC9VyMy9l>Mp+-X z;5qU#0BuW8#V2oNyCO3culY`+fLh`^oG;hteVolaY@XG@D@L)tyh7vmCHK%7)r)mh z)Ufb2#kse!Wi+Q7<#q+0%jOVMYzRH)9W-*c=9>j0Qv(IX&GH(8v9;xfvSY;p#?h}u%*vVRxvdH+ zuOr~J^!kfH&g=O+BWvi99ei8fr@p(s0=7Ni07Tz9JvtG)Q=!!r#_xkz18dA3tts^8 z4a7B%DbD6PTQ$T}mp3AIYkHPFWC@AigNW7XxvHH_S-eSOXZxcVOJuzU2135P8FAav zv#ErU1$qnO(nneg#P4*~w%|(|6}3S4I#3^g{XTgsq0kA#S+F_Fo0ZG>UzfKrdN1zv zkhk;kuvQtgHRO8%Qql%Cmv%hcWc)jrdCy`&?&HH;FeI)#??mLb^r6Oh;65icZV*u2 z&E~Bsc^5#?6s=^niTQFrA_vk3XnVu`)D9eU)e5Wtb)X>cMk-qM-jW-O;vO(@bCj1+ z*YF-9Zw#duw2vfA-}E3eO-WBJ7JPXK&sajoZ;yLwX*&il?(rplBg;M6>}=^PJ&duD zdt#}8;f{Mk=?h8? z>F1UXWXyS``}wxWxEC*U|Ky%t;@7U+B_-}WbWbsNU@t5k#>g|x2c9m_Gc%3!zG$m3 z-gVtGlrcoP4c?2(k Td>GJ>65U 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 t7N2I4KY2j?K5F$*rEd*L< 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/in_depth/http.doctree b/libs/network/doc/html/.doctrees/in_depth/http.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cfdfd55623874ca95cd81cf7d84aaa4f7109f671 GIT binary patch literal 31212 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/in_depth/http_client_tags.doctree b/libs/network/doc/html/.doctrees/in_depth/http_client_tags.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b7ed932b0f58e4650d0e33130fc43a37eb4109bc GIT binary patch literal 9824 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/in_depth/message.doctree b/libs/network/doc/html/.doctrees/in_depth/message.doctree new file mode 100644 index 0000000000000000000000000000000000000000..74504676f9aaa7ebeece13ea3c0b881957ba7ad7 GIT binary patch literal 52727 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/index.doctree b/libs/network/doc/html/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..eef06f5d666789b70f4761bcc4ff71c5dce3a344 GIT binary patch literal 20414 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 S;MZP)yP^EV`LlAS_kRGG9zx9k literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/reference.doctree b/libs/network/doc/html/.doctrees/reference.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4b8ae24ee709d2519f5fc4739f75a60231406166 GIT binary patch literal 4486 zcmd5=XP6sT6}8v9tK!}D?mBkj*v7(%6B)cxfB>f5r)J-j2A+OPy(U%-g^(d_uhN&9lnqAW=7g(e(@(i_WPvKoBQrP_ncey`k|)n zHzVb^vf}wRmqq=x!#!1`^?Q%gP)r-jtl(K4u6hBNG#t}NxjwmW-MWysc*wmbFLf+0 zvRoRi)eFm?Q|@HMrexHR%2Bw&_e`6&B;{i&u!+D5B{w@6*r}_LPZmE>sd~F=-84r#WYzKqik~E-c07+ zl*qBd;3-WZh#X@P}*jrXC`q}VycRq z*eb;?mdni0c>-bFsVw#w;v7SqZHTiBx^r1fiD@p*HRvuNfXMMk?427HaEYCMO8W@p z{Fv@4rnPl2;BIRf;3yYKx;vcSAJaYHbi(|r2F$-aW&SK8*{36clOrIz%jp8`;yqWm z2-gNK>HF@r8l@w=3%Xr+>N^e~$M=ruA~+%Refy(^wH9a)&}xTPAc}M!cztn9_tjqC z0+JmOjw}s$lZiHcAWOx2%?7TG)s=Bc-XRpDG~4m**`rGYKU!IaU||phU7}Gu zcq$Y}bz(J&_bZDF>o?xU;-gEEtwS;0UxR;Ja}H2n4CcrHndnw5+fECAz&+dX+GZCV zDbgI+b6HH6>j0*J?wX8IP20&xKeqg3xH9IIzTqT!wt3~KKpt$80=|Mo?nwTD}1y|D%JtX5H8D%!CQKE;6 z!}Za`!5LU4lc%*P5&AZ9nYMov>|7ZgS>Q$^rX~z0HSiiJSy#90X0j7y6RCj2gM@1cmxeS!Q`J>Y&kao79|c0gM%sk|}-9 z?NPMIhTE>+p!vl#5A#4Wix&dU&nAb?xsV zr--9rUVDNbQLCSRssl3cJ;^CPL61D;6=`9k>rT-1oQ(>{wlO~(Uu0vB*K{KcIF1V! zA7#*^%c3W)6|uOEvwX+u+B{H#9y2$jxmN%;k~AZcTqDLds?hRe%MUw%|ArbHA51xj zQPPQ+9?SChnD*k6F)gx5+3PfX*X*B^^f-ea&!$$)NXgqb8uSEq+N$Ha-Aa0*K~G`@ z$SJMR^kjpck~Gb+{xFvG`KMy`8hE%gwmr?Dr>|C!>`BEt{WC>+2AFYEOwUZ20TMh* z6OWC!e4e{=>oa9%^AdU}S~?`1j29R#hIIvD!-r}Iub^i~T2jvuy0zUL({l$FpSQL} zY!f%>!?!?3Rpj|nSP2oyu~J%eO1lw#N}b&$G)BymOU==)(DR|Y7sT|!KAmq)L@F*x zwK}mfMtTt*>+A%6i0VNvuCcshXXEKh5XAWMlt_B1K`&$DeazE5yga5?ut^6sIMkz1 z>ZPPt8uTibms}~-W=XGJHlwscAMF@|zuI!a>LR_yr`N{xx-y&YGs4vKosL@4>*2;` znD#>(W4Nx@nBBFS-cVy>VXKLwn8%~gr8lzeT1>Oms`7p81rArOiXXNiv5s4%H?abU z(B#@Qz4;_2c^)iHZj#Y-laWEur(9T(7We`*chU~V&SE$!F#YN2+LL3f%ndhu<^`^ zY>s_jO@Q+K7y2NvZGF54wNP7qreKS z%<)=&cI;y~Hlf?5?#{5qtqy&>#djKtO&MscKDWp=aBrSIU(4bOB#&&w(Q)Yu8oqAegJj7R=~=F%FQTewOt2&-Js^wt zON(q{x;~kjy!2(bsVO>;tfa5tidDeVSJ_CUS~L6UYpj^PuKE0RyzO|)Q$*kBpZq4< zWZI6j8h|mwCwi>u;{# zX9xb@rS1o86V^|Koj?l-_$vD0Nmgic5A%u6)Q=EX!k#5Oe+;F_4whn*A}q*~euBoN zc`^|9PuZ?a+zSf}m7u4D?bR;^#dSqvF^Im)v9n?<%g)hJJQ1PPFpKod_l&)-4`SyB?7 zOZuI`wkC{s(4xcSKMLH_xwGl_5XnZY=a6Cg;175(p1?CGo`0-G4Yp-<7fk<&@Ta+T z=~n#bnEs+y$$i)h_eG%R^8a6?&G)Y{{Y~sblSD83d(wH*;dE6Ci&&vwhb8^PpnoP~ Vs@}Z+71O`Pv_bz7TP@hH{1+Keeq;au literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/reference/http_client.doctree b/libs/network/doc/html/.doctrees/reference/http_client.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a9ece0235a43cd1e55c1d5eaa5dedcefe1f5933d GIT binary patch literal 88864 zcmeEP37lI+{V&in^x%esE0k+ny1NvYYbh)(lxt~=&_F=SZZ^p_dCex9Nz!(K$0=SSP*4$2K=1-DKoOBkRFFdjJn=qI5Rd=&`+;FjgW(Njy zX-c0cXOUf;x;Q=w6qcv+X_d$or!9_8!($>@&aO;H3w=&HSuRdLPdEz~XqhRbO2rwA z;~N2RAU)8RR?+@S9vGyzk!GXSZ7mI^liB`kvbgc$N^Ij&rLR=ZmSM|6z9*ILFBLa& zi<`!#4<=M8-7}Cbl@iNgz|EEwHxJspG*l|52RxWiaSK>}OSiZcEUyx)N`;C_riC;+$o%Ny%KIRKoApWwFV9iR21!Dizz7#Wu*IK--rU zcaO~=%T`l(^rX3o*aS^rk7dPoWkQKcYTjKOVMp=~2;xq;f>(A9Z+fKUjQ+%#N8|GA*$Qf>WHA zfinBIWacc(v@XlEEz7ho%j~hNl7R>rFwTJ80YPp{)2mTGyBe}M5N4e378gK-4B72l z=}T1lq}&g3iwAqNdN7?&p&{*A4Ob5p<1obWZt(;fV&g`JD82{G zk1^gi)kZF!NdC)E-9U-$e0&2CfFb3@s)WiHPg;Yv2$>1BJY6pK#6tk68d>sEg@Hsi zA739igG0q$Ix?!?hQLa%rlqpwHO9;LSQeXz*Qj8{L~L^cNE>B03B|tHbx*#mTH0>7ZlevSqgPp<+L*vD__Y=tu9Nc3ETHqSF!^Pm2{-WP0Nh zMc7tQF6Po!?TciNC;b6v&XhxpcWFmo1@XJq0{Yb&Ia%0a~ZE#3uF$MDg_adMMc0+Pi&!u0Z&e z^q4d1x(1T$fm;rQif4lES#I%c+W#R^nSD?qpD&c7ed%bjFqloJ+Gfv=F3n_1(SdX# zUy?>>Ai*dJ@k+T6Eg{%R!>LN;1p4%nX>dYb!-du z1vY1BqXwdhk{{PZ*$^T0L029sC_I(e1`nu+qJ2YAzv8yh z-tVoqcO-KvZE{YAjr6&0@qPb$ibpbMna)ny@bl`8(9yjijj*Q9F%Z2L^280o_Hj4E{R`^c8YC&ojVmTL6yJMEncQwIg+_RH&+ui^Wxs;qRof^IgNtSAm4azi1sGWi19ox+MN z216=};JJh`1gPaPQsF2nss|>~zDhP%ZbdVI2Bg~Q?^?1Wosb_{nTUuU`+-ItD{aCD zrA@fjEq>^2saqs-wO#E$T(4(G_jK0GkF;c1zprzP*Hh7XZ?F())EnxVMKaft*+)^A z_W_5sb&}%8P@isei#I`332v^F)*_=@i9y{;{70Rr_;E<|3Agx38t=a$0BYy8UhT|y zRq|%H_$dn1fly%f?D?ow8O&FtRcj%i8ZwoH!^Inh77Echg8ZH z0IGB@oj~nFM;l7whjiJi5~zRdum>^FLG|XqqPB_&7#UScoKEqECKiv-sw_q&2rg2H zLG;);#g5;Www7jTPIOf!i&mo=f0)< z^x|6@d9gGNw@TA+n_K)eZTzlxY%C4x7;Ox{z1eP|K2vY*j_!@wXxy$_s5{)^owWCU zx`kR>pJvg1ww_lca~pZxg$8PGHc)FvzIZoUgU`9e&qGjYpYE{Rr&rlN{XeZz#V^1z zUv!IKViEp-HU#|sHoLt}%h<3wxGUZRmqBF35y`!7@yoQ=N8mV1Yv*k+JA{_AlwtGA zmbZlQ5ohq`AQnQi%(j>#p?o3-NWge=g)&7HLe78;&Q@_I32{~`+b?q*W$7H`Et+;r zi(qy$x++`F2uUBRE|w~O1$ue2YBJFHYJDB+=-$E`-hK`B>}{ac*WtAHxyAcY2pMX4 zZ?$Y5aEsqy*(_sgA-3GTZQr)J+D_^IL?s8q*39-t`w_#kWa?)Ct=T=4M#x^CXbT$l zn~e+`@eKQ53oP3{cA1Lbf~pU>#cxxmwZMmz55Q|V$M>*X{0^x!p5uFjkf!06S-nT= zXZ12Ct;vjH2Jf+9XYewKOkXCsIHPCdB5d6s&v4f53AgxN7U(1F3Z699EPk&gvm*1D zJ>T~I+WEGJN#O^uZeYIcDH!f)xA;SllqUZP-Q@ezY}>NcAFhCl&w#?SZt*!9ZA55o zXiP%kzs&YBZT`Gl{E^4KX4?G6HLg+(a;_obp zrIGr5BZ&*15&i&)*AeGGLdQS3#XnO=O7R=fF*wI(rf7R)sxVai3!L>8xA<3D;CxuX zQ%cq#J3Gy)Rc9wxjXFE~5~Xa?tXItoMe(mO9M-N%8i$L3Y^Qqm>C2XTDyhL9l`a)> zE7O8KCpuTBIypcd^h6$)ZA{6>rqu{t{2MFPt1{i3Pv;Az;%jSSlXHpu@(PCR#lOqE zeR8+mVpCQR!9Ejzl4UU~czQozm zYPA?LbZ0eQIMpxIoop9ZND1M9(=>O+wPBv)@y4rzGr1#&opwPQ#}(*1qMv8 zHq6yD;6l^sNL)2TSWB5ZRIFi*#@u;2q&7k})ZbX}Hqm(TMM#gqa#fk_l{X+o3^B)= z!SePkNK_^@LujiM$;-pJ_Es)3QJ~J{O@Qe{{Pk#6@eMh>THd~RojS7!vD{0 zl8HF1tB8OR(5r35GTRx;Yz1#=*1E7Y*k0g*E~g37>!Qd<2f=M(jhZO61M*QEGm*Gz zMAjv!M(o-sg3>twI6&aa0?AxvE{B!?LUGAZwGH z+MUP|hXPsS3N=^YEeXuf!e_7t5xVN>acUMt#aVDy?I~2kj$uMkv<=wu?2(P?GN*+edTvdodTseQnr zRz->2_7%?cDz5Qt*h##uH&e3xzyZdZhs0I;i#%b+h)eS{jBgNmh=$lvC_59>0f2-( zyM)StnhJf&D%9AF0G65$IJ(*bfv>ZI-%%gL{NSJ|KuqssPzM7Pax6sRszZcsIKG24 z4Z2iYX7%=l4i1)KK_QHAD7|*T*k+B$t3wF@fe#bHbpm%^$cE%_W(K9@%v(qufh|VMk~J_n3yb z5r-mC_@zv{;*()9Pa+k=J9x;kNL+Os{+c0=Ll%C^hh`Ube?f=>h@ zy+KOeY(uv5IFm0LOo}_W5p>9-;s)z6qhn(z?qgU{PY&yCxqS^@p>&Cw!%|7JA z1W6>WN(rT~V;E5^sU%z{4^?$mX~{r~>lm->7xd*CJ${dPrMCsmG&(KX>Ybg1LD|`h zpd6cOqPx&*tu`}S*3o+c0ky{HF$nXPCYB$7cv^2FX2@SNKa%LfcFQxG02=T8bsxQ2r+0@ zUDA$MMFxaqBQa3edBU@b6!61Ug900Ngc|&@*bq13P+0nkV%imNfwZG7JXHb?{HKh> zRTcd8st`r6tB_;r$x4A-*&6O_I4$+OST|2R79Ny2w3-YB(6F`!1a!$hTz~&3z;DDOhG!!AZ;lw*sw;i z|Tx-A!g#Lww{s;!VNWhvK@M7c-W57$04Fg_^#8sCGEp0#wVH=Qh^_T(H+Y#H; zH{N&-_G@KnMb(ucgjVD#p?bBZ8jN`+2&}pWxpbfp z2vku24nNZQAoA0(6J7nyPl^dBGN5t_I{U-87(FXhLZWmI|BNNW}BP6c+G5-3F{1bTy%3Q5+FEHOR)$2vUf62!G zX%l?1qO1Ol`JR9M91pJgg`k+~`Ad1I=TBC|{}oeKq?hr-RlgQ+y>_Y>Cb7Jh$||fx zmeg+u8*#|RE|%X4PLM@M_m!moI|A!9)H-^u}9KMDMw zHN5t_zsN&Sgoxv5`3mwy%fAZl-!!fa6nlHIh?DE>Rj(2z;*h$n-D?6HByF_&JAoOD zzm6ZS`iH=V9U+CT=bsI6BMzmYasI_rS40Y-{*7lCWE>9rxN1H8^#W~@mv)7-bh?EJ zRL1oMX9FJx+{ep9Q1Yr#CLmvoGEs0RY25hnsEi9B4US51cbq_xX`#ZKyD_Gn`=n@)|b$PkGh>lTj=O!&}*Nz5Y#O- zs;+rk$wR%oUi%bgzE^W2g1@zmzfBW-vZB7*GG+U;9e!XQT)=flpTs`=w72@7Qc*%i z9P+T;YX`vy3fR%jt=(!Sfpte8ptd7&V62^xxN2vi5q1m6clR@rdHeZEQKSf4Hg;sj$}1hhY9528q#mDw1guxSVstIw?@^~@kn{7m)C2s7BSyz zuoesc5*z=hCirAUec#QL)%j@rz?8Lshh@B;E%b0ZL^hdLO9>TmNZ)p}m_P@G>*&6L zl#eB_-pOZCIu37PP96|;)$xKKb_{un(4?U{LEzt`;k9K>l!qYmh~sIt4EdtjNrKy> zapMux$=+Vs)SK!VEUS4{;V_k}dWjWr$j{a^A=p7?M$0ke5;XP@8?5!3;9k) z;;K`Ggl;y-(l0Wr**H}oT@C3s8(P*8nvK&0^>mG@E5{k~P%pICY@Eq_uh}?D@XxmK z-`fPAtf=%kOxbLliyxR@74Wc3#ujk)uvE(RpxG$%Vw42d)6OG!#33Ww8`cO~P|A+( zo5QZ?KN)d59T`xnv=z6)} zUZHVi7c&o3<(I4X6C&b}wyoZk0vRN1)VqqnT{e}g@dg@Qg9MY8f*W=WX|isj(FXF!DvCj|lE{8aI9v{C_EzuyA0FH=_6_%c~{HDxWJPIEqpsj;)S4 z=14A^<@F6M@*4Z>bh+d7SDU(?ydn;zv~6>P@C=G*Z1Yh9cfC3Cd>L!sQ z>=+?wj)0ZxM-?9z%ui@cZSPOYLr|HB?=z90`lDI$)i>lcwPx_(J;@6ot+J-L?MNm#3Ab@8r>)G_iK2q(F5`jWL(wg8^{-pzA3m5 zYTWojQ`__m1n+6+SA_vgT=3+jOj}f|9WEupom47Y1`sNz95)K#LJYL6sW$a3GKe@7 z%{ItG!YC-0G03+G+_escco+m>&+i~{)g!_>>=?i@!3cKUmD669qdh77>+O1nx9t8s;&r|G@_iqCVDcXz zan(~IRoF2?(^O*e3^#>8Eg(PCAo0^UJtxP7X(Krx(C{3?e$n=J%Yf!`0ewQm$29kj zR5wwWZ4Uc|%#XI0_MP**TC{k?zsqyWY><*@;6L zh0e|@=m9OWs^lBQ4lOg=%L9Y$14FHhQD)Y|S}mV}O(q1kG;`K|Mqx9n*wbRvL>;rv4GOVUWy@)rlsd8tXxtCDA zgjcc;^r!fdnIZc?zwSB3&x8W^f&Lu7u(~48dgGfMe_5n&H&nkQa>SuPrg7u>GW9Eg zwgE_4N;8?D|r@-*cNk3P4x<0uz+HMM^{c339=!{*1&` ze-RdBC}Y4$qi!ow%*~hi3UtVfio3QliCmLcZ2y{}v|WaNQuoI^Fgh>};bQvQ|cGR5jH^&2y6QoUD1q*B$*@ zvrQ2$A;X1t+SW7;wA+S~+1zeZkq^6ZmfUYt)HJ+=;ierk z?cU|J*}k^rxR;^Q*M@U_?bXs+(`_y~j3TCc$ZLnU00s)=ZKJf> z5(2|nwnE~nu;{Cug{3HczH^71eblB>iy=|HAZSmet zC~mJQ#uwC9fav~SAl`<{N?W`l=HBk3(hAd8xY;nT!-+!|E{&ReM&=Y$heZBP>!|Rk z6RZ1iHrP8b)7xb|6Aw7DB=F(*&ZCt{?F0<)rb>o410$MbXQ9=E_b!Cz(!;L!;i?va z4Ld>&xU(AKMjT2>(PuO5ithk1eMfF)IJFyqQPgvgxT+O@y;TVE_S*%lLU{YC+XS-R zhlD`8%R^8Zqc;Sai+maC?;*JF(zx+$AmDJNraFihamdjgs_!ZIL3SP8Pf+>22;4O? z?Y#j9z4t-ls(poG*f9(#rg(YHHdfC;I|XGwjS>%|K&=+KiJfsY8Mn^x?&=X-b&ecZ z))#XjewK^WlbK2$lNq?|OJAujXMz#EB53reB4+e&`qTk*DT|A? z79NBjt~yv?!;Vmc(=Tj@8*wNv9q|yRUGd#UQ41~aP=^8yet8%YR~?SOUVWq#jq2kO z0@>|DLbN00A*hzI07P4ae5sF%1$T+YjsI%+`uIQRnzWqVt{f$H2%4><`$-n(yCt(L ze%LxRk~$hhQP{^Ian(}c5MHMo;PxzIGm41`pJNRl9g&6GM(lUgREPST`CMypk_N056Baw8=Z zlGj|xKI8|LOyV7sOd-MAzYx$$lAWz2cOu|+G1-(@-^8kZO=r2#$!I#Vd!ac_t$JC( zbPVRZ!EK#4+jN8#!l1d0a>$2`7J>gd?KIQ?2*c2MB(5rm6xz^K+%`1&UD--FD3C=B z=`XQsuQyBV{z(+C3s-_uGB^i|5gUa{JjyU^ka^g``3H{>WtN3Y(2^b9PkFsvg#cb} zw^AfqWhC2W)RL*yK!K-Fvp^>|B*YpCfC_yw;n~TZf*-CrRba!8P=gz|4RLY&jA%eV zjcHeWCgdF1e(H2UqioMW;;J+8*X!HJ+%H=z);vof&-Ni9(R<|~sEtt^5}kv5>D$f~ z-1li*X+(mtW=-L#^N5Ju3{0$bp*2Dv$giXOX{vudfpx<+Jn;(v2+c1xfG)=`Fa)uV7}%p6(DVAz*RloPlJkssq3k~6Ek z0vhkV!Lym1lyysUe+(8V38C+d!ELg7B2~wzO(MNZMeKUxJ>&WQWd!hi|8i0F3ZrUs z-w&#)-VYQQlBNpy{*^+kkpL*Ys|ZiuzZySWb&bGca|U0-(>@^2LEMN#F*b+dB2gR?-GF@Y{f`Rn$24v{52p#b z=bP&d>PAWuaj1h`nQjt^f(mqWKSO(doWNcG4QW3C&M2EtB5~EtB4gMwD$tb8Yv-o~ zhq8UU{gOO-umU zzKncnH@+gcU)8wrmz%U3|Fhmn)7j0{*TfJ(yLEIw&jS6rWa=vc8?~-$WhHeVsG_*< zN8+jnghg0x9b9KD;QB0PGbH?mF#4up)M&KypyUOOpo!29-$FhdyJkrE5Z*zHZzFNl z!$Lp@@nq*aEwDx&5`IUMdPGP)s!5HER;%P=g8aBaZlvTBlGj|x?;<~__p3g$Bg^GzEPJ}V5G+vqvu!$#|VNccPm z!_YrMf`hFhg*G%5w+-zL34bDxFK9@ANT@B=Y)JT`;JjpTo*rGC&1ulo&@A-g3;4xL zxffFJ9+q9UI2#?6qn+I1Q?Jh5$%O!IbCiATYR0f>7?vWMe|_kc67hw zb;Ca+fY%NGT&(pAV=Z=Sqw0o@wbU2(2fE;23CTucps9J8@a%$rjUTT1jlg0* z3SXm}`>i|&adB3d`9S|2Q+@5sD7s*gRs9|~@V!4E!SP`H^}1h*;QO96Wc`ys{@I6w zTz`>=dbvb>$n^^HrThJ>;QmeH#&3aD-(GG--R=JKRna77diP5<^!LHw6N)GK#p>0-DFNq73UAO)q@)TzKY+}Mu*nvfX)>tH6nWiT znGo{99m0%58>BYGBgCDG#8uM-S2ww2VvEb~{x)u})O1Z_hS1nZ(~$E}jp1vR*;ueP zF<3N;rOc-Cy16o&A>UGFb38(sEs)@jTEW%Ikcq9#j$kv2_El}A35JDWL=%jU61i5* zt%bxkhQxNF=5UQSi*j3mZm#`y$cOffI+~MG+XD(li6U{;4nk5Jg(BHT@jBI+0=c7x z^gC5u)tYsxI|jJlhs9VEYv+QH~y@ugTorE>fyNH|*$s*$WtUC4d(&w1_9nGM=!P zIQl3%;Tlg+vq1uNh@KS)9d;AqjRZntJ%{iN9a{0jRc!(rc7z)0RC`0*h(od2*6+@= zE4~Nh9=p_PF0fJ8_CVsQcj2$s_){3au314uhd}P>Lqfv6?64Q zYTUSsI`>ZH8FmZAn_hWXns!*!DPfr)*gau|r65aB;xiUv0AKbmLXb~PE?qVdkL{@Nhr%5KZxWj}+M`;@G z78*xu8pDT0mNLf()>4BN2#aF!y16pPBHvQxI6Oj`I1(J%7hJ6jnb^vVGO|%8XoBw% zf+uQ%V+e~ZHJ1sAlMIQ`g+)CA-CX-#(KnQ4akezLg zktg!qnYRm8x!93Mqj&&k$RKXkv5Uwz2ZllwX4;zhbB5xGj)#)G% zL!W^J>;EE!HZ&Et4egCN&JxJ8HKaf0&<@dT%<*2qImh7qdW?~#o=@xHd>W_qmLiOo z=$(t*X0lB(tJ^K**seF-hq<>A=K_M$eVjI|o9+W4nG57_6#1Ci(?GTB^OzQtZ$NvC z@=ZeZbHy0J0`KVlofoRVj{sh%ex4X`jWJ;78#16eA7tRzXW5r?8P2Dy}JSDeF)(TD4H(W}cq0j_#E5?5V;zg}QMfqYlB zLiYCyt4~jZL?K`@E%L2Mq zGP~k)*G5*I5TDNW|$qz|r{VjE^I4&8Hg<8;%lyQ80r3+*!E ziHhOo;=U>c9rW>z?pM4H{%ZvAI{2@PbKGZ~<6!vlSY~CLIfuF*1mT!;y+Bw0fUs&L z9$Ln45T0HAH}S(&4+?D95o+i}zts>o;!p`TtPe5O_x-O`S8qAE`Zj2x?mvvgRo}s1 zuhXY!e%-e^{YM1yQ6CcWJ|+)AU5!~F@8igqPX7tP{jSE1pM@&=cI)*2Cu3rXl%(V?;z7K4;+YgZ7rWYZ#_F)X&$%HXa3&9^6f@2C}o)M&=wh@Qa zsqnK*M;pdG2Vm&;JQ7@>fxljLqJVyN0y#U3`LRa&i6Fh8k!%38FqWz>3fM~)m=(tS zR9-h%=4Z&adj6l|5#s&=iK~7oxVq;j6I(!8Rjk$ZH<825~s zbFH`hRrvqS@NYDI^s3}FxAJSqhm~vQ$o`IZF!k$5uth-#Xj7A&ZR(Nc$U^F$n$*99 z)W0>U5$DMG9VyF;#!a9c>)|h|o4I$P8mn;rXMM?QuH**D4=Onx@1W!aB(9n$1hkT5 zXDeAhM`j%{jjBnS&Sar8Mbl|8M`q*HsuvQ>4Grd)=Ez1HWYI=bg+X&0O+!9xG=@2{ z(Q#MPK^TUffy7lCi4@wq#$Md)C`bacP!g}Pf1zzcP^6h*f(itapGMO7FW@H^Tm5X(k{RwMrC9=9euW7%!+ z13NVYHtYyBIMsFyaU%|;Wbe8?Q{B5ZjAiZ8P*DKGQFcJ$s+suf^{(XYJBk&o?kJEu z`H&E3XL$%JWAuhVyC7eJ)m;U*MdQW?V8^=s$Zw`As96*w;!p)UIGZg31?8tRK=|DV z-1T1&b`BV$WLlA6r-6tVc8mrzBnn5$r~a^4yP)i@QHHr%V9@deYXH;eG)e6L)nSsk zV!C>V_@~!8>_Gspb$FMUyTh2f`PBkV&8_wXF8q?^7HB8-5~__Pfotwfc(xP!;0Las z5ZJII)KD!u8{$SB%1h7Qk7@I(1)7Mf<^c_UxjzzY8o*z##h?_8T8u7%JkW=PX!GSE zsFtw+L|cG-X)z8G+=Df4!>a|3`X6>pTF!2$7K$B$X6xvFoyB>GWH!E9U~P@04h2yZ z_F+hHkA!e&e6_&Za)8^jjLn$y2;tLh_%sTwkCeQi2{aK}VG;7-)HR{?V!VSAOOUwg zC?TMOA+qy57FZ*N)=~9tP3mYNb&Mu8GFq*YO9eS*kQ*s^tmHLU@;KxNmE?DHpycsL zTy=sF&`Oe>t>mzwbx6HO(>YP-EYoy`53Mt12d z+(rrH!$xBWtw+aQ^?@)9okW7~IfxY6&{W(uv=>^Z1+rg5`k}S9ShLW2x!`0B&Qqg` zIRA%^kz_^jVBvNwT5mnC2X+YI^}s8{S~+7a-j&m2D!L}%;T%4kNeuuGE=-dLdf&WI zY$yhrngS8n{SM*>K36QjVMoZpK~+QKh(lr7Qk9r?#dn3YBZcXvWK|g`aJ>o=SFOZf zuj{1*zUx`R`YM53?L$JWA$bVuWYmXPCnI0F-ctnkRE_&KJVrv@?atE`O@fMdEE=~S zOXD=j9cjbl>3~83oPh*ePXuM;4U;sa>EF&0#Ip_J&f=&eF68R=?!AH(6hGpSIu$sF z>1gLv&jm2_cpnm1ork}kBT+!#kwDI#Q(dEx&KIN$G?EQ~I%KJOp@3avfmw5^7t8DB z%3OkcaQBvmFU2Foy$p$~E*D(gjedb8ks z%HZ&8zoYFYYDdTK?1caC?u3t^T`)bhcm2aHQm8>M>{v9}4;XGGgcmT}CZ6zV;|Y6? zAz-NS1oatEK(j~33WN@~3+;vip|QS$2n-$W#1B_}R)E8fkV7ARS3~58L$TS`-_2C7 z7mhA;u%uR>12U@G=aIPT3;64`{glP8YE}^OMS=X14+#P9k%ypm#t;zjUgS#<@nymN zipG8C7|F;tY1-R*-;^_0EKNHs`l^&ouqZngjhC?KYmz%sSoC#3!KLm);;Q=vW#q7k zu3^HW2L$mO265-Hghk&Jq@eiND1rB^Di1OpZCLaz07H+5khtpG`0G^-3g}l2kh8<0 zhc(i71nCitWCNgmuvC3iz#g-}tgz^DdEH!@Cy)>BURd;9JVM+jk+|x6f~z}CGO@)S zCM^2Crtt%z@sy@9d{|^D^R!_7&|n3^qG#lFb7h`IzNO4_c!V;~Bf&Di;A&;a#8zgs zVbPB@!Ji1h7c{{!ghiH`FA9m542jW&ML!kj=Gy-Z`OtoZu;}N2f>C~f1e*zjq&5mg zvW>Eq=SY5~>Ax)Wf34}S{W%iLWWN!Lzcmya&2jxs@|qjy_sEBVY9{jjfOjy*ACX`? zf)LQ=AUoR}BTwZ0S(EyUka|Uv8r4LerQ}})`ELffk&>@UUUMa1Lw-=nzvCU0d>sik z0tf-EB-zeM^KVV3!9<>oQ`=OHn@9=P!(TLm@v%!Pgyx)Y@;rr1ecyyps^z*$~`$EK%_;f)rFY;*dH$a#yCK zjfz_U4E<&yan)@6^}LS)`rZd}c2vBZMw%l?ts2P&KsB^fZ4*mVr zhkQ$!d3b~}`y;_(yWnbN$i!A=ZO)N&Y2pV8@%ftgTAm}(>No2I7YK)g42LJjHt}Y) zgnAvMM}NOU?eFbJd^`4yW8Q;Wb5!K*bEf2ADfFPfcP!e}@9h^7!t3o15l=bPcnUu{ zy>{VJb5Bu+fjC+p`eYyoI9%8^lof5}5kz1R(2XDXI)(s;9U+JQbx}j)h(nFof zJx=4kbK1oII?jLdEEkK^j&}G(?3PThJUbT6kZ9+4$z9uM=LBHG-`<17RVNCmwU2h_ zPbS(~CInA11jiKZ^axT=-H1c#ta`mnM;q-V01W;5kl^YL{PpS+1@!9^$l1|ON+YEO zsb3@60BCP4RhJ7`#sagVovgfWu8f0xD?nI*M~It4f~z$IR|g1WVv9RWw3F8~3PNL0 z(-=P5v6LwamNHm@Xs0Bvn=4aBzNJhBk5FbM5?rAnxLO%9v6bmXEBa<1`cSL2G(#fI z$y%EK)NvEbz^4fRQw{${vrMk!HMjC<$cL3{rqWKwJDB(T_uoLYe;`8O*=%hQN%TZ^8tf%c+=Q0mCmKh>7HRf zV{-7qBNr}R7#;r0jvo|OL34I2+T4#_uO);RyM9RI`>>I3)>!0I9|0CzhAIYv((8m? zLm|+$T~7oCr8nS*t3E2gVMoXzu=`j;8eZ{zsg#6!0ex@%PQ?*J&&zY_^o?S*RCF-$2fEFeaxKa+8npxmud;(Iq8 z0tZdrEbeb`NTb#mfscN8#jEcjs=Gxr)HgJyn+u{f!_oiXEu!o<8tni0oEWyggtzvq z>gNgJRn;#@X?)R?#(|@*s?AG7eF?-M8_PLRgYOYG4P}G3-%AA6;4kBctG*(@VMoZJ zvV656a>StqtifMn+7+KS${O5E0rhpzfoI=`1WWk%>s4%u)u>`WAduhiAtCEGxav{i7Jk#XL47)c8UH;dJRdha8%2OmNM6u3nh2}Hcae{(P!r}piFZ)wdr0tg z4I!Wd6SDK&8dxKRxl#24P3kEj^|U56GFq*YKNRF=400nSpOw7kNnoff-*T$(;?i2jPn~{`{e6*GZ)5&aqHmUxAw~5Ri%hVt7 zBeQX$lId8qo!=q;NvP}tc7Mh%d|yJI!|@qtT=eHcT95H4y+Q&JhjJM~=24Kp3W_BN znAI}*8!@^X(tH(JFy?DWT=jRM6m|?FN(6i2bK&L#@vjTiKQt6AV#(rvApW0{T_?_B z@65=*knepE@!vvl9Of&~(Z#!=Ga?$XUr$>ymrmfj)#*|pw=$jTNhXq+bPE?54q}GH zN%D@@HF{9dbUrm$$mYwXwh&_!3T)y4Z;$GF!mLibMKh&sU!S>Ne6j%^Ts7WE$M0f} zES;JFaB!w(hO_sX_=!TO8RtpFV+1l8Kk$tQ0S-Gt4uu?Qh#YY!Bb(g~nRdmwEoyiJ zs;PiPiBCh~s_FRa#TaDlS08KeFhd|W@*yG3#_|wU#b^y_HbK6`7@G?2W*RrXi#YXY zN>6Q03K56AjjzY(>stt=AmffjJ4oqmN$9Szu-OV2Fh&@Ot0F=?>=@pZUEIIs%keOb z*FbD7Slei<`UYZK$*^Qq+u==Y3;pq)Y<_tw&px%9bu_g-GNqk};zwq(v=ck~?Zgg3 zjP1ls{K5*iJcnh1@EG|T5C}$PPyAuH-!zABxbH+d5r0JQJYjjltL!m;nR2dvBs4`yoRx@KK^Tp~=e@?XN4}-1hi$XkLi2ew?8jG96$Mbn8=HjUP)5M8CR<#Zda*#ovuh6up#?Om`0 zYNOAbE1=b-sV9=TxtLEUn(Y&MypPK8x+X)NqgE`)@v*vF`pN-E|YDdBpr+ST{qR)Oe>kAKGp#0OLx41!A3j>J{Fi*>^9 zSjW^5xEPxbGc1`aHrm73Xea53N3KEaFy19NLBG_**>83rA8lO}Bu65s_5>^nY%e6P z+FJk_dOc@;C>?gJR?1~UeC{? zsZR_Hq9sEQlRHhOC(DEPwIaq_lcUphkICO*+^k(eKygfM4Q$kVv zLqC_xCbPA9Ev0g*vlB>+4|Wl>SpwZDzgtLWR`e7%Briv*11*KYv`UlEr;?H6+Q3x%LzsW6b%UwTaEO6iad$*dl2@%=*Hly6UT|EL$4FHiedakb3Ml*@yi z?d{3I!B%|54#7~{a&*I$zBY8s?K5Z1sZoeZdH-w=Xt8+Cnzdi8OaF}x;X-kt*VbhI zE_?KnyX}^FJ@b!D`?5^iGP6lR4;y#)ef$uhz{lTlx_6w;^Es(eUb7Q$I&~=g1+Cg) zNN`P!_?zw@*@#t#1V>1Ix6Y5RK*N1}p@LAF@jHTSHrS}o{Rmo1WwZ*3Tp@1QJUE}1rMssQ#4mD8oRnGISq;0aAM!a3dg zN{i~bTrIza>})zUH{D&-qNCxiZ=Bz}Hn?iQhK=r0DU4Axx`+9076S_0?49D1uPBQr z{AY?!9Sh5&rX7dGRopk`O^mT(RhzHlCI1ASA1|Q!;$7dP8qxbPXe!;G&7;y}^WH~h z+RYbi+cC#bE+h-NcE$zmI$~%SM2x!!2lY3fgQM^Fh&1)B*Rj4^ohT3(eH(ezGQ5Dc zCn0fFkK|(XX>!p(QcW}Z>J^xTff>u_t50x(a%timeI=0(XODvINNtr$0Tu$Mk+`Z~ z2mSxurjc&!l}L0Vyu=7NX$JkaP%j$v3% z2sF3I0P>+jE9gsOI$G)~4@8)!fW%dU!bO{hg4^ctRz->esWha&Dx!;BuY%~mX6{hd zJW2v>Nw3Oy6PuCcpo?=um`Ez*OR9pmGMBj$KQdD}m)X6Yw*at8h;S-%HGbhPBze|L z9)|}AolN{lW_x=A^Av%%gwPY1RR*ULNiTN<>AA>)l}i=oX9&od z8YJ$ZJW$OsUBranv*E*#giNf7jZHsoo2GnB^QKt~ytU zh1ZrCsts*t+K%@L$@2`!jdZoCu?cI%8p#hTs0p#1I3M{aQ7+Zm22~f}J>@Yl=UkNnIjAakXVxymO4+^gl`bg8|w>&9{shn#7@YXt605cvRpx$1-R z9F8x6S!U11$H`{Tj6AapBdlhJZwxy0AW493lzLcv73ZcFvY%lgup#L6r}?n1ww zGL~h#wh&diR>%icia6AO;(UlH=WsrZANcB%fQRFY*SRz(3My=`AYCWSg0gjV??}O} zm(24a*$w!GoqX~fW-#E{iTZs^UI%GJ9I8VyH!`iBg}VulaHx+X!FE0T^#Thr(O!DF z^jwG1OV>>~s8516nBI&8oBi;YUc3$&z_e6XR>Ro$UIh*4V7CavTMfg@#BdB{dRAg# z2c1LDK*A{~@i&b4DtVsXkVvRp?_*pRK~E0&sKE~9D+7ILH3zV0h*MaRNS3kUk-)N1 zvaB6bBc)5F#BzLRuY^u1YPQwsR#>~}Z6aWO5qd8AY2=HGen#}U-RN`aTTmaA1dVPx z`5hu|P`i%qo#~x-N+zBBv-pL3j^tS{CC;ARsI2JocQ+&%acCb>{T$P-_$Dw=Jqh)B z#zA8+D?o@5hzlMCNEMFIy?lUrRgIv&|)`d*42$i=T{(fN@l(3__ zg|7L4WYXckfnV4mDbI}^Udu;^f3P7*e5?xZN%dPy8#z2lsE3dXhyOMbS3Qisp2JfF z+u;uwlfySEBJ~~3>k;AgsOA-a<8)zW>S{Y)8V&tDkREM4yYI(@72_p*~BXe1~ zyozh&Y`RlfF6y%#)}b*1hQN5iiy<(gstFB4esFBU4^HGqvDUBG)@nnP&S>v3L-}Mz z74n5jDSD8^BciR?EHyT1bgZEJ3StPD{PKf9s1lj6} zs;3orwttKcsh-!we zRI(}cb700cwQ66hcJh+?1#&7ZnqQJhS2McmSI9;Qy^O?Fzs6s$DW$5qG3turW~Fgb z)75V@_-_ULcN)B!?OW0@_WHfR{lUO(NqaSJE1ZCt9M3j?B(AZ|X25TR9x#q0R@p4k z$Si*XIWfzh@dIXQMpFF+`LN3?NU#YMe?7ZUCC@H*LZG)_E2sXZb$eBGdrj*We|zfU zdt4@t>iKuk=yjvf#weY-7G3=Vxn6DDF|!N$+!I*`|4F3SBvdPY(Ogz>(HUe;T9fIC zhd`*>DM$@Y6$TR7d>lIl#tjasf03pv_Qp13^)_1t*7!@mnM9^9lU$rhE#_q1ZmgI8 zCJtNRaoEj|JIL@CF6M}MkY{~)mKIlSAiq~QWE02MSFmh_aB4i>r@6um)?8kWI5Yr> zPe2a5yH;>D5pUtslaRP-GX8o#O%eRonDIxKp0Wh+6afxtV1FW0cOaO82{xH!EcBPM z?7c&3Lm)xFsX}3zp}?)zt+oHubmUb#+E}PcM9p9p%(0Q62RopS?zyJl#Ww0I5g~!y z#(;FyCIT;gjdb8U$uWj(z9*F)EN5i;-^?5KFk)y^*io=4aG>#KLSS?J?aQ<{*MKSo z*g^=_3E)p8ZHav6S}np>LLn>|6anZFd8pkF5F3w`h*J0ZEI3Ndg4>#K&h?tkHh93d zu>{r7*-jn;bS8t&s%)y9>E3~~$R4yH{EeUk%NTOo3%RIGZinH?wKgPoiNUmwVR+AR{8pw6 zt=sU!RqX;E_HR|%o!QvD#$-o_Zh*!?qQ1ET86@1%y*{b#LBQ&K)VuHqFX}+zsyziU z>=@GID}4tyJ>RDb$EdTH!0)Z$wa@G$4?(UG$5UrtF3G83feYUoe6Uj9Lc}zN?N}7hXfX1CihxM?xU%7#5TxpdQ9F&aO+%}Eusj4Msyfg@=6fD=h~OV;;~&-ppR8C`hcn;vpd;|$s%}9s9(1HU)bl4R z;xA%K4_b^Lu394CVQE`rUIufxiAt{Avrk{P+*3{tdM7N@QACV5WEm)gcMFXm%Z~2x zMoQyowl}?^a}ulF$a<012;l4>=>q$HDFB71WMpb8eW^QEDu3>B93Q*3i8DSD+PCz#*JTZ z)tpjxAe-a)tAbRbL|g=*@N*-D8G6n;HgP1z$3wGNcRkf;&V+LXe{gztKLsCWuwg(IAb z#8s|n6?Tl?EU|zi)Yq!h1oL!_sa@g>c?cS(TC2`vzUNYB3I5qO{(GC?lNG)E9Hy*Q z=i-N}-Y4K;x#vOpixuhgU?PVtWc5ALc|?skWEv>ZH9{pQbVv7eay*~#`X-5yI9vcw z81zCUSU(n`VaKqgya9uHX1G}3FVXPYjF-woP@;(Anc*_ziy1B#+$%J0d;#JN>62K4 z>?(t3Lu7VWs zzpIhB>KYL#{NEJ`rlg0Osn-vPU>`Jsakj$p4o>dtqu|#HK+w{f5^Lm#kdGQU4fr)4 zr#_4f=>HKUuDVXBu(QUhJ$|F|VRWM>U%lzQsJdRG+#o0))hPb-UbI&Hj|tF?1}GrD zc5aS*ZxVp!;(r|ZLGfjg=M%_)_@6}Ls+)z17N3l5@j1&;tw!oo8t)dtyH(@KOh^@` zR*~BT^3w*A#*nH=;XflUn+tzC@*zChnQ?O=>m5SrPEAQnP1?4s{DSyfu#T(GLQW`f zmnd+zRv`Ws71l33%s*8J()IoE=R}#$Yh`pt@&$RQFV6*d&${$Q=6fB{m+*k^011kT za_^OgdVI1X{+F4uKmH1S;AR^EZ{8o2G8ga-p(A0iis05jIbZ<$H_YuB%e{6HO zAD}4X2avex8$vYf7`Bub*0c@knceS3s~ z-=XXghgt{9;So_IsI@7FM+yHniF6->tZ;IZ`Vl#Ty%6MV9wpZ}04Yt}RP;i_i^JRIK|?Wx3}vf5K0F^{nTL^(QYKxj zA>+~M(jXS$v9jLh$o?;t#<#t=os0o;2q*XxgQbe>%1uP|&M_{+FOXx1OR@bnk?IMR zGKg8bdgZon|~`6vB>2jCFA<0r%~416o4DT+%q+X4NMDAI$gK zynhP*zij+}H^C<>Hp1hkAZ3%k9)4g&6n{}Z4I5=U%-Miw5r+%|?ZSAW5EQthdna<6 zK(xk9zD<21z~C~IkYEi}2!Nvt^&gOL6EH#% zY>EUQCK8eGp(1j}_lS@Lil7?4@YkbQvd5-7{CZ4&A>^%F!%iriArGm|K?~lu1rk?n ziNEx|Jz)N}wrG#tj&w#xYMCoB=w?Ukewv*%mpj+75pyw+p!s&&#xzH>=EDbDRdlg30_eeOZiCpKk_NWZMMb)L zhuYKIPPYS*y50iP&x9awx*d_YY9|pp>}Zu7T3YuOJdm=pfb60{P}Qp{%ZZd-C8JJd zeM{37y%RPP`N4H_to1ctFoQ?Ek<8cxi>7NyJ!)_i$QDHUZ#`nF?&hrUpzS zE+0BT?MA8*hqBo_d*=xCI$^r^VT;&G;I22yxeZicxOODCh)4K^9U~4^)V0;@d7Udz zduXWm7oqbZ*yC#M9pSkI@m5TgO3dGEwH33f-V~~yDfR4zNm(Ltnl%yiEC_0bkbdu* z6LBu~R4}IP?d5{5WMd9D;jK*KUJ7kr4P&kM%0bfFouls(rRq)H>A8A`0O%8z4YgK# z0s^Mo3kj~s5%92_uxtp9;-)#xWaB=9w68(h0hS%nh-{WR1tBQ4rc58%5BczsZ9#9? zB2n`I2-){Xg0DOYRXv+W!Qcb_WaL&L)vWkbm!@){P?@i(#D~MEHNpbHJILUntu;o_ z6Rii!`{ueXL_T!oF<$Db4#6{2Iuwbk4ijXp64}@)F&?h*ICZ#2Jwi~sHLA?u)_~Ot zf205}GQiyBVL2|#YO!QBmwyTJAwRZ=jWZ6fj>0Rb@NOioI$H3x3S?%hz^$8ji4TKNtJblCcAP=eWuj{vb&AXT<~kjZd{ZVwQYYXU3cUvjKHVb7S|PHr z71~BC)U-OQWt!4SLa9enijRarrYwuOdPluT_!IXB$~$mIf=(UAT|KHWm_EF~{x%?ga8VbFE?QH$)8ltaoZB-0XC z4sJb$Z8D|ufT#!>~omrkbzuvg}az^uY_ny zcTm-v1NEvPv+K@YNGOHSn+x&%l^m83t=-CI{hhNLmJMVl+K|XpZ-e=stxpz!u6WlQ z7h0VHS}@qDNU$O0` zI2(zp-YZ0OJt14Wp78qA(5Q+UDyY0AB*qr>;rXSHL*c%BeiqX{u$G{x?p zVm@E8g34DXq4jB{uUZ%~L@a$gy%K(KPzk&p-i}>r=k(`^^@oNJ8 zbqyWo4Kt1HXcgG(*>csueS#Czx@yDwkuNrUKv;aku-I{QEYvrN9&sq2ZR-bxOpt3w z_n|b_w+KvIKZGBy`nJG^9U%o5AQ<2s~lDbp66Z^#d%dCWgLkS=EmDR9LOBwH@- zQ<6PUnqVc5BXJ@GrWNcJA)dbEwEGb6hQkCEZ&J?o%N3F(x%?PQL;sqeyKeh(;drvyGviXrQr;&3nU`5y7`ou_vUJxW7=9|nVe z{{V@ro)Yth9blbxzSY#mB(~oNIeY*)WRPM_A?qgejX}*V=oski_V_Cc*#=S zPN8QrqoqVY4)pSVLUA`0KO zh9x%12(F&xJ2Vu}iO6;Shg-3|&Apf?*qkC*(Q;F=I?-2~*L zVCqKD6Y(B0PC|kePa&eKAKB{ar?-*rEY)umCRI~3$&irTP?MA|G>)=FjPl<2d8*Kv zrs>Fv3rfr%JWrSRLA|Sk=NZVC!ShB!W@DcWTB=Rtq50sMoN2pF1&)K~&G5@ro6EB< zN)v21-k^j5%NC>oURw%IP|k=$vB+a9rtFcz_<<9p0v>h*J>rnB-4kpr*+FU@-N%vC zHUwrfy)AxVjZk0>DM+$?L)?f%#zc=YZM;-&4_0;n7#wFN5`0nxf4u;jT>W-CFmT>U zpm)~Lvg@PXepZxj1}eJ*svp{VBhwJxDkiK5q)>2jqPixuI2&^_T2*sKE;5)o_)!+fqer5 zln%k$Q{%c(KSbzYK-iB5(d&oo( z*&=2)-k4AA$0juycaU?MOLj7L@wUNP+t*69d)EBTYWf}=Yz3&&!u2>9xRgOp?_iT* zPGTkYqVWzI-WF5SSL`Lmt#^_WyuM;@0qBY!2}fL))>r$0FnnWQBv`}~F5z{~1=WI1 zRNV%)pRk)}*hxneaD(bjFk)Ie!S*MT*$Kw=vKl2n(2%&!{*I%$ef=w zQ)ok@|1)1m!rtjjHkC@}L;b2SAYB*s{NY3}8C2&FxmgR-eANjT-tyLm&k(S$LnoZf za1$72>{5wx0$a8D)fe>92pFuZ-E={2-w(B6Yp(b?<{3Xe^RQ zT$K`~!;UtH!%~*^!r2JX7Aj*}p!zjb{Pp3AotxmTX)_%P@v|O%m{iuA?D;jlQie*WE#7gI^;K|t(=3$GnTr5-P zH2x%A2KiEdvSLW*9YfNPY6Z;_ap+z4kR>PPsk3JHa*jC$2;BAm-3L`3W9|cdA~W06$v}lw zPC??TQ-z6+fG7h@!h4dmWn$Bl6~*gFd$exK1;pYQ8k1xJdnI`v(P{E#lSHLl=r0t? zXgl~lFEmW*bmVle7n{V35VNV0Is?zHIun0eG81KsQD%}%VP+;f+hZm(GsW4Ou}3H~ zH?yI$8yk(OPK6oMGKXfSJM4ioGn|*O(L1wI=7r404nG$yvEEtC+9AO}F1DfEH^yZt zeDmgPWGs$N^CiO>l#+TcUb^ZW{N=@t{gkhy&Xt$%!`~L!$z;tPdY$z$bsn-EUZt3j zY1EpwR=1#~Woiw9c&}hW_5kWI!W_H8jSI}>5F}9-6D?C0;C+k3<0=lL(R3xYQE6zP zuaN8UG$^SHk+Do&gugL-AltIK=ytK>Uc%hX0;ssX2+Ch70GAP9N;2zxgyM2}dj$9-=)dD^_n=*cI4W7H#M?7T-TT&ko z)DIGMnkR>r@LIfc)rXj~5jXzw-f~>)Mu#q`4-48ym^rzWE|(FwuxuY9)7wNTCOOmk0A&Cx+(Y-REk&2fd;zOEWG1J z!!D3Ga85m91Z*W=F!AYwt>ccsB@ zC)kA8G$R;4)d5S~LAcDk#j$PVlTtlg6;7cPdi10Bh2}c}7Tbtgmw<@y1t0uKrqyTp zdO|AQS6Qy^BBj_yT)n2N4CT_LOgddwcjNt<*tYm;)?lUFjQ;0HXd*>RmeuF^Fpc*N z|jhn*wRftN-Sn(?)Js~y`0aAZHF>*vGFM2f=t<))%3P0shnD&}GS7=`3sndFW}xanJ*7b!_C5fu ziEWV1uT=L7F|GJuDP2iH%YmGFKwfWzE&|`E=#jAkmSjun8}fb=TCY^;D`(44RGaXd zLUTji^!Koms0RgjI_rVu!QYa%GXf>19>VL`gi5);bszO@{tg*ZtUV8FO4+I<7^!KTnzZA;7vj6G6)H>tJPx!V>L_k^~e@~^*G*iPmWEmbx`#L0Vl+k z9s+T`%ioi{UhPRfb+^m$)%FxNQ>bjI{TS)Zt#3{0vx(lfr{F;Cz6tCbDCP3W?~&pR zv{+@VeX~-dkjm=&cza%K%JMWCRel&${Qxf($EJ&qR!ih5c{{ZYhw?c_xSd%j#La z9*^$@E?3X-=Qgz^5vb131H_SPh5>K6&{H-4kBGcJE-(Hue@us2Y!~_oUapC4t(%av z{_ar;#Z=DVzE0hsyZ{hXNK?L2(Msw?yj&LBLTVj8VwhHpHP9B&6H@=TqQ^j4VBY2~ zN-T$qJ%Nbvg2NJCGdu+uUYZmtie48&nkdgen!rOAz$2D{?AoFiKvDzT#>l!4YG^#n zxC?H0WQ7AIz|9o!b>86S3wT{8xS^7z4s5MJ+A8wEwu&>jWs>y<*gSzWaAbf@8bxq3 zF)ILM4yc`zB?cr)Lxq5u4p<7808gq0`Vi6R8!0@C=Aq6m1VX(sj{qJS#EOIgn|5mLT$-lp;}qquZ*3X z8$V{um_;T(I9M>%$_g`c6Odm}?kmkJ@y58Bxm9q(6e>f7YAxMc9_TF$)~c29Gjl89 zez8^?OuNF$gqgXOiCm~w^YaSc5z(Sgu21jDUR=2#aU!pXs&gO6S`KS zv8DyaTCbSuTG@#gz*W{SuGqDqHPkd~r~p0$*`T;m*LpD1G;5}&@(qg7`YzeDXvc+Y)R&e(> zkCQQlK{GT^>P5p#Rkp|-h^m_21sSW;`{ovmDOIP>meHs84h~KmDAf8(bEo6KIvv-G z%I28qXspvsVO{~OdJEHOt8QnjHdC!tCZBdvWlO&@Wp3BFT7EvOqq0@kI468%YF8>> ztC`Z=p&A;-G{4d|xodpi&>-QemFaW3#`X5+t5sZYJ*R8@+`)(zC4pRCXz5i<=fVFK$`fs%xweD!UdT?rxKd)8`boo>SarPI22g z#qH+|6~VRWco_=L7FfWqVjG?*tp}BE%)MtJ^T)vp9>Gv?4@shUQ4EnS|Mt`!UEKySH7x|Z)hrkc*rEf3XHIyf}9ztr2mB%SZ= zh1-|r_7~E79J0SdPDOQ3m*;wDYSp&1c(|HN_Z4b+L@ZJ3ab`;I<-$x)x55BgGs9SQ zYKjt-77X?)U+7Ec2l@htzVzNUs83A4XSJZ$;FPG4+r=_jafMWZK2bz9LTEuz@>pP_i1j3p}(gp2caR( z^eYEb+SOsZgtpK%-W00k{)L6U$|0T0kRrTjLP(?X5mwEt$z99Si`8w#+Y@~Y9%fx_ z`#D`>fn4gV%r34wM4vts^~T;Vj#lY{DG&22heNooFK9D~l=ZQej$cVVxp-`XzqlSV_{A3O%T= za-96i^-#sBbg1JSVqL{AuA4{yR5_tIKF>~S#USc^Y;uuZ--&+ZB#M^kM<+vuCARx3 zs^2@Mfw=4ULXxM#go$)cgAG3JS560`B59szP07ye48L+F`QHVj9$Lg`BAv%Sh8XGj zg@J;}_oK6_4h;^LO%44=+|wI6m(qYb2aHlo-YjWLfn0iC34;-JZ=i^-k{wddOgpsQ z%MNX0G|`8#2@()}UKy7bE!A@f2D`KEV7CdUEn+EkIiE^&95}F26STwrCcW&jINIzw&u1Hw;|F6c_rHiwI4DhHX`GJ6s&t zfzMv8n`5&PHk1**03!^KS-AwtTp$-`NDNUOSlX||Cd)?<*N|>YkuYHH1hv|ytZisesr^6xrKrs?^@HaA%ZoL zxBVK2(daAZ&&SM9+_P-Il?tE5?Bk(xgKB!7DK7{+*Mr@IAEXL8e|2fMCON>Gfdkyu z-~iu11>EjezDYeI4sf$`fIIxkoh%w{1iU$D{dWbefA~1o-1Kb(ynEybcn>7M*ROmF z;;G%=5w!cGT)Y1_S-Wx{7~k(#9-v+R&Ad>vsEMGxJ?K{+BGbDN(`Vxu8`Dn%^V8)4 z1m^-mv$2CFH{|IFLuGHVT*eGdx`3y00J-^x#&DKu8Yrd9j$Z5T3nMTz>b~*-#(_ms z9-6O*{?q`PH6nIT59X74deWQ|RhL|sl3huDK4Q4xe4}mD>{|>b2vyS4gPFLVp0?C% zI>M5v>5`o^38W;=Evo4xPEn$%o}RhTy*6Wpn+%&V1AMD9W{5h?HIOc0^3@rrR!$cN z&|9HDqcjQboN^N=J(&C`)0&G)RZN^jNQ|O8ZR)VTo#e0U1pfLR`s=!A(=DsK@?EsZ zhyBX;*f@rTM0-enz^^%QamJNrq1|(SZPX4m{biu(yNlYtf||o)R(=iXf8$qv8|e5# zpyLMAahPyY`5iES?^j-;Vj}@3xAXoIhO7DhROJt7-!J=>Kavz1tP53a-G6G?y8jI2 zmIE*%NaZh(<*$C_Z-Evs+m=1faj5)VEqVv4^lrjm&hznQQ6m9D*J|07NC_kATFx+}be6v28+Rn_Q{4ksxeSH{hm;r&=z!KR|L^iTSaw8x` zOtrD_(hiR`)YyZC4+P=pByO!ui0iD?)DOkcn+>MNQL`zCz+fZdo6P_Sn`MyrCQH`N zW>h4w87?_bVKx`k78WX;t-vV7O{kj50@%_5U>sqmQiBH`PNkYDDvbDt*$Q`x8*oC^ zOy%W@no~`?F_oDn1Wc=%HeC5;y7IQeY#1EGZDY13wX8>>BJ-_g8xe>|;HF$dj@uGp zG{)NwfH2GUNPM${$YwmpmBL#4VH(G@3*=aP@MVr@bHW-b$~STK74D(0)4Jv4jreutKf#Dp?? zp$PWb8;NiB!EfN1R4DLFy*}gA`Y5a2>}#ohSXB43RP9T+rJxcT*gfr<{YCBoM~<($ zrc61ofR_z@Q>K_s+)ik22MW5mxn+aqb`SvKZ|%{1%LDUMW+uu|w+AEf%^{+c@x%xX z`6J55DQ7)ONu$qV+M#z~R!B1&cVO#7k@%(yzk#jE0Jg@H&q6XLMbx`WnlVI zB);huB|C1Q7{PiA!I~c40l&PUhT%7t0Ezs%IWv|ry#N5yJ|w;=h@73ro<;iebR$kb z>rqD5#C)b5>Pcq7{zYVcQxZ}@CF_y4tpjH=ayFjsCW|(=+_xlUjsXNj>qp|71^7iJ zbGA?uryg=Fj5KseG?J$trp zJy(IJ2>Mh9%?jKDQ$gs-@>nFrDY98@<}{R2kdF&0u1#H#(+S54JOdZLIaA;nPv}{X zoT3%@2^GhwwRcXYPG=F=R$#L{XQL2`o`b|U=ZZ|og{*@L^qMN|JfWO#QCd~nCso`m z*p@-1eTo1L#VDj4Ul34SnYtX85RP?rDK30-nZPri(6b&HMeFQx700Qy zcWz0Qt{|{|pWY`Owq+M=|ovTIb_EZ3Bv%C03qP-WMN zrn#g_hqKG%COSH+=#4iz9J-BWmQxeX(v_LO@jWagHG_X*=^=) zD5W4@7gSuEx*#_bj&*hmE_`#Vz%!oEvmQA`>+Cia$EmeLujk}5{YCzNvcq}VcThwrzAKQpDs?FyCLC+* zd${n;_XVEugr4=tCR$^Us5nloy>lxn^eBNlatXpbh7zdwI1=AHAsQhI@@-vRKM=~3 z7Nu2n{ZPftQcVr2>qi6#s_Q9{eA<#!bq&%`&mD5NU^mWDG_T?ohIEeZYsmTLpCaYteqEWCbSE~@^%}{&A#!g< z$-Ol^xyec7;?}_1wtQd8{0pRDi?_w(ohXwrSSFb;pB?CLmO*)(s3|W>nPpJ`lFK3S z&GMq+%rI7&c%#UA7q%aO;pgJCjZzhP4qnc8tnJNV!)fJgCYOaI} zO#TYozKFvFpPg(mlL(acNIvR+D+@SIyS;Nd39mw6yUMdpXjR;V->rtkH>(Rh<2mXS zAn?1cu~N*ep?jWFZ%v`CWzlS#Ut5{D2w5*sZyl6Ny>*4Vp2gLZ^Q=O3sJ~{`Cq&jG z?Wk@W2r^FC>9!$(?en*zvJvh;v5k@VCN12I=SY)vpqSUF(I$f5)WTbhHd7|fxUNwK z<UM`5{h%78Ok*CCoAIb%#<#)3od-KtH3ikP1N>J;>tb#$piB(=!{knMr`GN77N-94x>%U1ys^2u$021Q))UCD@E7QjlqO zB5u~B2(-e~i43FmnIrT#H)o%Zs?d6MgtqC%eN=r95=^5B$nHdl0D%_;#5^<& zJXfH-4wO^MJv|KqauCv|;T zMyN7n#HiuIH$wuqtL=LjG5GWo#EXT5&3fb#t@A~~iHq3YxgF^*CNQgP2`+qdtY9;q zNTH67OT^83l!oZXGqwBDqQV#-_fbhFAi<0oeuHR1Hen?tMvD`Lb5e){DNa@qTq)586X#m#L5 zSBN+(m$8M-CX5wi7q!l3g&gPQtn)b)Hphw!a32-_c_hBMP(Vqsg5tSYagjhTcAyg# zD2O;wB`y42f?p$8XRC$uKm0W1P6c;#?`5t1M1q zoUnqA5GTGU{4ZI28z-(-rdfp`PF%zCAWmE>{Oh9l*SEkYE1KX2rgVWX%d^5xW|2ve4%bxWD!`z8-8RjnG-feMJ zsZ*xR+yn3I?jc0hBkibB?iFO5urtcHQ0UFH&wTgc+Bf$LJmZNPJ7_Q8723lg8rXkNnYi?IvwR=r zGRq^vebnOS1|UxO43^G^%M7%0Ha~#Hv(=uS)SxLZ#I}e&x3#xs3VAFTS6Q%@yld9} zDXd$?+FI_$ioAs4QaUWe#Xjr4G}g58TiXaP8m|`ZFXwrJHdXEjFw7X_TXSQDiJdg5-7QYas7c3=d zLE2F*wt*H)-2}{wpaT7VDe}Lv34X98zEvWa@eUxXBwvAuIA zGWaWj8L0n;3*Y=*uo+LJ&|?3Qh@15&4$)s>+L2=i+#rp46$PlB*N|X34!=QcBA>AG z69d!h!g(Xaff#Qp6IUVY1!j5+37=$BWVgOG)lU+M$ITnsm?*Q^Hv>!~xfplxgM~Sa>4JW#LJ}UD@JlJ@2eS zZOGVNuxtbAqzImhM{u(W31&Tt60L_-MK~^ptB2JH-0>cmt_}jQ*&0ZEv!+;OJSPbi zgV|&`Hy6?TFt?U4*S4581gxV>T;i-3gn)Hf9$0=o;jbUX-=GCPS+Tx1WXce*5iWeQ zvA}~6z>#Y-1f&U^^~fe_)lGyHm$AKb7c$tCzzhMK;lei=!Dc*>Ld(b|;$}UHL-fs= z+7QqnjoAVPF!p35zS$DLK?oq9uz@xhJTTJ~;cOM+K#Zx%#8t?8ftjYETxMz$?sSWr z90Krk2P2V5)JR(kCC7rt z_p_Kb1njR&T;h5NIDq9r+wK(pfl>T}THuov>w6|shJb@{f#rMx4?{q{R*Z&#j}SQP zkxkU9vxF3vvAuJ5GMG(ZhJZtHfdzho&3Gb(mT_1jZq}nXL_eIV3jtAS4ELD8*he7o z&5`&GLIC-M4Ky(X93`BiLmY@PN13<^SuZftM^P>_bqlx0;wFcH*$M$<5;am@C~*$X zNOM(~90Gb#21WajV3nT$TZI4$=R&|dfzNl~4WodfZpJ0adc>y5OHAwY${w=5IYvk} z1dw)U;lvQoFPsG-4lF#NOf%QO!ex}p!h^!CSlnC&(6@ohw!+E3q8u= z*{;nP;$z~8iO#nw+I4`U6KCtpUL$bF=y?nQ9#ydr36=(ma>jFvDfWmCzF3$`ET(nv zW0i>uSa3k9?w5 zJVjV>A=^9mB!^Q8Obwq0U3O40XP6KWTA?b8#|>TIo|liF0sP`m_p@ zUHmgBgQA~B;+xM2u$7BbIOpOQ2>kO7yurmU)XlggS&!JX`9)0YE`BkxnAH@Lb#c-T zEu84$mk8(55C;~%Oqph`frT$exh#BzaIdtuxlI~fT#caN2sruoRYcBuWE-{l7eyq_ z)7kt>1nw9mgR23IO1K7zZ>|;DjOVyg;1QksI$>UKF|BjopiEr4x^sV-<$-hGDEzNP z@o#E@PgbnQuQH``e+?Iy3l+FKzpMvKbccuRG^*jp zNPP1X(am^{Ekz#D!G9{uXDz06@aL3?i&uB>pRqh}@Sh9+`6&J`THuovYw`uAY_%`q z!Z*JZcqX?dY>Jm=rd%sytyM^;fY{#uA}Iomt;Ba`0{m@fWXT=?d9g3Wj$ zg?j&eB5u~BNJM{$sa>wvB$4?83Ssn@k@)71_zj$#yuv1!=;VJA&YwdZi1HU@;%a2Q zz+8Vtxy~ArxJNdtm_08KtvQAFgp@kEj{2k$p!Fe{eR$$>}lxgM~Sa?~K z%fidy0?Pm`Zf>haClA`e^lEPrN2Nx+J*D1!EXia&3J|sa3L+Qh?yNtKI2}vPYCOTDPC5OkB>o+fQP7;PxvEf0Zcysx9!zigmjhQ@Z`? zxbV#y0=LZxlkw?Yc1dIVqkV@x2->fUxj3-iP z1M4N?W<3f+^!1tASM3p5%m%m(LvM)0HyhzMaCLGC8)BlXZ!Da2hyx)uQ6{cH)(cFu zDavJ{&4in=xO$I@7tEW(Oj$x?J<^U^W^+Nt2|LSdL10>DGA=N+DAbYx3{?3 zK0mvFd9z|64c7~fHFEEE+RP3_%X(xOwNks#V~ioZt-e6nH756E^ET%NiY+U%}P=VX? zb$WUhmP>u`yDq|D29HT(Cgw1~#z{NN98O?bhKH+R+pb_Uo=8EgBNK769;KjIM=`a> z6;cRuH1aUY93;N^D1HN@ko@pQ=@w2;hy(6@-j4ac<5|^9ek%=M@14{YyxEp8eZ>&($1`g97U}7-A zGknbg+`!Bpeyx2Ij+`i~Frtka#GT@XI&z}I%awHG#7BY+Bt{54a-xbW-_(@Pv^akx zI1<1NkyO^BM9!Ez-`6Y@c7(kW8!2{KgCgxo-t9knLA^GSiu<+rxKy{853Rymdbd0 z;3w(mh|@^OJ_p3krZ68z5p+HsiEqvz6L+W!<+Sa@9^1Y&^=QttR6ilAXIZK`I$~+4 zgm$CB?HCt`f@bya8w$U`@DcJi~!eN!8?)_3sEjo zakDnLK%0vR5NzuIf=FHxAxS1S-h`X_FIDj{BrhXCuo3cdWPEdlaO@UF9o}$dB9W{| z3236LnA(TGSuo5Ok@d}&gcMN8dZcZQ<3U|)WIM)M=4wG-!EZ9Pm1dyJ9mx9TP9fP!<4Fvpom6Re3Hojaov_&yCo$ZEQdZi%f{JTX z7vx)nW2N1P3(SQI97{!c8!JMYL0l`ZUWE z$ol37Lb8>{lNd-lsnVVl^bZ|$;zA5%wjOVV;FPJv-62K_Y9|Rs(t1i*Ygk$CX5f@l%De#OZ zbnI?sX~g0Ftl~Je_RgcI++PT62du*g_E$hb^}iv(%1hA;*-?hp)%Xvgykb#WRpYBF zZkF)qpc-EzKv0eU6v@{uNmb)vG};@9M6wHs+$)VwgxP)nV=(=iv@tr6XBm{M5|_mV7Gw(C zF5w=IwppHd*bEI>qP09$_(?W|?kf<-E-D|E_Bg=7Hsg_C_p~TxJjak?HrF$IMz`-j zC9D-Kma2L|D5Do__+LrIO=5-{{wJc`b36MdiQvj1K~(Z8%EWfaM|Sp823Gc}gbQ}s zuZ9dZSqqhO*`TwAGBG;!9sC<}YdqP576t*0JMGsLxwWF?)*hbR_~FQ{BXa9T$*ng$ zxojdiw?%(_k=r0jZbN0_HV+jv8=*Yd1Gur!(^2$ITA-5?ZM`YWgE_Lzkip7Kp*UM- zm1$;AR>a?&DWlmIxbV$nfyX!AZ%H7`j53MDwkZOR({AtVCgH6J9N&096*tkury;>C zs?al@qfPLQWxC+Ew(zzMZKF(_H)e=&pX|3~O1-wj1(sV1+cvMka5CJsSgpjVaNTBxC4!LLV|fw;bLBtU|El>TWGYi;CHd`R-;{&i8HQiv>VE$ z(eA?Su((azH!5T;rz#2%xVy+ZPOt<!`^1w4Xg@0fa|DYE5WW^RRljVVD9E=QB zL<+@u#z&NC=1*3{pT(3dXf`e|Ju2{Eu~p*+c21NM8WW{VB4$5KSaBxpoq2LNoWPnW z#RVox1&fJN-bR=_Qu#P8CQ4Zj^rM(2?x#N*C8)SLNHArJ-{29O+g4F)!|bQ;7EVuy z13B`_G|LefYA(uUs9xdrSzNb6b~bENAOI#unM77+^WSL z?S6VPjM}Fr^f)(XpCJ`C?~z@I`>6UwNPM$cKuLRKDWH38y+okLI?xvT>5o%!T$Zdy zI<)ukOszE0{q#O=Lz)wiV5>HMgN8_^q4|Lr*-w9>#W_hhCtI9IIqJ>|kHODy`{_>+ z{;3wX;vbL7$0YO5HU^{{uxpHGh5)36^-x-ri>V8;lej(3*3E?fcxp)2(`Pn zJb>?%;sbKQ=K6DpnDxjq+5pZKfw;WwoxNms9)al~=i>sKw*{N=L<&vyQ;E1)kD?L% z(@gCN>MbQRp8*i6@3Tm-mJz=}^^s>-eTi>@FA&b>LmY^7p)zrGa9SkpQ>2TS(tH== z0!tVL9_+L~3~}TV0%Sdsj+*IG0mkV%GhIetn(1;}U~*2d8Be4j)0K(1S&t%6rmL9N zpIg3&Eav8fWa9|Q4sVI8g>y}a1FqL96PLJdiR(}P8jDLrThg1^3YkZbIUluL>w0Qc|cE%IZSO*97`?2g>K} z*0M61-z>LREb)5jX2m5~6>f zsr^`KAc%Pc_fR>HBJs^*_zl7cS%j677)Bl!&J!UHB=~_cap`dYBkogzCz;YXKg5M^ zekAZ9jBq&e6algxNk^^nv;gCDomHM8Fs<@qTwukaU^AXbL8hN3;$}UHK$)IpS|5%) zhb(5~gk+m3$qsLcp9|;t5C>d;p-f!jx+Pvfxh(ObaDQoWwS>AJM$)#mG_5816_GLP z#U#>pek~$#p3X|YA+TMeJu-ve0vN60cSx`rn(+CB?Mvcq<}{P0T{Fjz_Y?TVkSc zCWScQy0S9OTmwt2f^u16RpG8?akcD$eqn2;$>UZhR@NiGsCm{9cAS}OG;0#r&L9s% zc`ZPp9juMSH|vOA#&hf_;)t%ct}xfLnATO+S0*l2-PJZ=dEjar3V)+0{>Clv$%-|X zW=dDv1Q)*9RN%p8M$=}``Oudl;cuG}IO~y3)N~mk#bs>o^vEDfV79Eyap9XS1e@_h z3Uxd=5f?`p5)J5EGPRo-8>BH)Pyl0Zg#_D?@f$cD`3&FGrU|Dl#DN&om5Hm6^#U_( zjdGc38{uwiadU7njJep`ZAXBtN77N#Y%jn#U1ypd2u#zo;{yAP1)K3i3Nr1Oh@15& z0!_0M)4J2mK-M=q3&}bi$qsLcU4*l1hy$*>DHE5tZi(GdE=zO>cMpr3+t0l&h%}hE z=iy`AIClVl1N!zhKI&bAm(~|p>WjQMSEkMENgg=SkVz!2?3Gbzs0l;eSk7?CF%~{$@0LV4;21EQT&-L@X3m;;$Wt9 z=tFRU)rkTR_BWX}oW4=TiJ{#K@?P1X-OeI74oGAYG4*Vr#ieZT93YEB3Cwoeg$wLQ z7Hq~7DYT%&6LGU11tK~J|EMWWfyCr7N1zA>KN1PPE`r~{smW>hrhK$;=7cy9O zmB5LUxKBa4nbK4}xWELQz=NK2e;8*j0kR%RM~%}fz&KrJoIV26I0anblOlr6cp?Rv z<|pE2J&Hh?icGCj^F?e4SxmzT$vQR34sVHLgwr45fa?Nf;u6;_F@SPeqAc7&i<_I~ zoLY?qZvxeH(gQ;a=Hg?ogLxb+P@b2f6NgKqDa?Mg-&hoyDpI?syl>YCwdI zhLB*{qF7`+Cjk{1(LEOlbFsy=?zu#nxTJOWJeK8wdmbnJX~3w*L-{hq*-ZSG^Z z@Xd(=PjJr?f+SktNd(8*Jth(NJXvUQDcd_MWN`|C*#b|+1&&e_Y{nBQw1tl+;$}Sx zMD){{Hn}I|F=wC%20s%CPE*8h;GX0(e4{)|IA@1A5ab+X;!0$_z*Og=T&6ltxaV73 z*XPnbKS==0wK0hp=TicV({;xAG=XWH&)@z*V#yd^FY&cz`PxPC#IxWsi!T!M00;!@#WW^wBt!^#LMym65jX2m6r$h8)V}HsB{AQ?O&IxhB)<73egl^zkKr5Q9m2UY z#DNHRDH9hTixP34BHYcC=D7zKSTrZ_pvUCg@wW(&^+-Bumiq)4r|ZmeKY?kM2XKLD zHo;~*k%CMQCE{j1ia?pZ&D6Ri*SvfOS$sZ3NY*7uc6duXES&F!IN@juk~4(aD|?=F=9_I@vSI#6_w**^gNsIN48x|I;Y`vn}w+iZ%8eQ?{a?;lejR z7kF^cscGX0@n}lV6DsSGe$-yS5OiF)_RfW*`~rd5lwQOI_WlYs&CyuU?)UB37Y+=~o`Z&be*&PyQ<`2Rtfxa|1+3htBt%S>sQKjH#w z-UJ@F7oRf!OaPoI$RrYV{vyCQU1yWO5|}pm8!j-JCRm&)$lH+VAIisZai$>4A=4{N z>ra`lBI}#igk;@|WQVuJKZWyphy$)~DAUX}u*91vmnGg3?!PQF(H`i5ZyPYW@9A`yt!N&K~SX5)(5H zWLfLuNxosjhMB;k_4CDT<`k{5@PXSD@1?ZcXo*{=sITYZU5$1#t%!0=^pTjhY}nmQ zn>zFB1G*Dc7%{(@M4}sMH`B_zoGALo2kRhL5dwEJt%@t(tfssT4||skmLrxH7OG}- zqGBs26Id*q7$V*BC>HHu_4VqHER_I@n z!b@+g48S*Y3w^;;S^eXKkh4(2^O^~KC;Zm#j7C#x+sgXVvDuU-1U0pR06KDezAr{F z8-g6_U?U_rSW&by?-Olk$9jYBRR@cufyHh4zPu#7AH8jlb^2_&#pRqydD6 zw~0j9)QP~215Gt#Hbbc+YujJfN>N%S!*Y09mQ=dNfjpPc=CFHz3~F097Uj)=*&O9( zc1>WpbvEh z!8GL5m9*gklcxA(ER-pr>ekAu!I*7$-L*W;YPQ9-M}c#QmSYB&OapPV9r6VR8z`~; z9Ip1H)yZXhrq)C2CNMkTE?P%B5=@oiH|U8eOSJz1ssWq-ybGBft%y5G#2Hq^4@j1< z!6Q<~`NfsnMQY>vUY8Z?|4 zGv?;2rQV?Z?2<~Slfi2F`BjV3-B*~G$G4Zdcf>w`?x8+5zG}IDVIj3!5TSNXrKV3$ zmrW{_Ol;|SRtpBxRS^y_NWH7*n%H0ivm3OgukKFmyTJ8y=mFH}EZbzt9ACYN{w4jh5(DAi%3+bUM zMl|m9%6eN^kRQMTzZvET5NS}_*7T90-CWb34U{^HcpdMJ_tBsMZRa4tI|p&hcupXy z*ie<-g6gqQdQ}~4BE<3j&4b0vif*u~=)yrWa69sSgPb zP$fgRBb(w&pLnOju?*ZYW#$0_-N}5R7A`Mo%>jGH9eW%sp<LXP|#0dJxn#IG>KK)C5~Lqjcy*&_&&uyb1Z0s>2XMWb3A_0C%m5w8qMd6%?XYTw}HE`9tL3A?_(-&ZNC#y z4l}G2*v}!GlW-rpoQ%Xbr-+C(AlXI@i0l{_>CLIg0O>R&c#Dc(8Xy7?D&VDY7Xj>a zL7w3tlcy2RM5#lx4(0_D2cIBb)5L+N`2ueX6plPea2AOVH%Z`ea=@FypRMpS)0@g) zKJUwu&qhwq`{&>S$3f#4I(w2C);~{qS>K$`Yfn%5?roA;-fHa+Qo z8h2sm&mh4ITKoos4@wbM4kl88dLHVh-lP3j^tk48R{jel|L3jz|BZr%?Ul2+>~JrX z#1}b<2VvU(^w_~%4Cat4-rsydGR6J8z4J=8qDzR=k^4a8y%fCBRxd+>FBD43jOUb~ zIW<;Jn1jKbNNJ$N0b(}?T`6+~fKdfkiqKV-5Z=Z$jHOnNVVN%ij$!aif^RZUIHtOq z?k(||xxM&ZISk{2Cf}wK}h6WBM`+hvJT+G6P!6Ihoswr~|iXrN)NPKgf z2-!sp4Wg3EH&htsf<*_oPkY?X)Q&(R4ZwU8x6$tJK!Wpl@EgQvvQ&)j8Xt&b?$SL_ z!4Q5-8fbS5?H-F}@4^yf=>|{t3gBA~U<;s)vcXZM`-Ik7rTbA1VKxKRQ8Z%n0Kg&h zgGjI#LA32yfkKAe(Xc+AGT#O)D&#vN^4*XKqj3y zXffdak&5GTTRLp+Podm3_efkaPvbUZd$3=M?ViHCx&R6Q=5=Oj4_JQwnRCbmC!Y%hl*4Z$K7^4&=Ky~O-*B>!#=2KDMe z-wVR~^U@$*#qFKf1yf+ZAb{th`3uteMW=Q9yVlzL5+ooHt>^~wK_LH?h$jhz2KQ?g zdM;l71{oZ?B={Eb`ge)MvL5wd1O7eJ=6L-QZleMJ0f}#3#%~a>$x@BOYl_l;6!4!c za2Tb@$a&nK1@IRKFd4RMjMA;!2*dPWg%>wVU6a3|9GYZ6HX5c|5jB4YJXHJ#65qTc z;?_qgX6U1A@Gcm?D#+JDNXYb0WtwGDt-`vmqg=uG4dK3NaW%~_VzhE2o%f^FQ}Spu zeoJ!1#b%R-%>Pp1XruAlfQA*{L4vJlqETdj&8WxT5uEy5`%(?SQy73VN^<}nrB>G5aPS(JQ@;rTd7{*bS8{vjmxF*j zi2y-BURfqs#hGBndoqDp6=Wb3%^C~JtBFC9P-u3mvoHwCYaoNqlM22?P+lvM7``xo z`)tN*Gi?sa>)mWgLx+t7=Zqk;AtdD5T$yIMRJ*Y9 z7ARM6o-EugEv^<|guyu?@W0&^s6sSKPmw@z`RNA`ek&Dr5ow1Qbq40fdZo*g~T^U3x6r2H!bB_&KyzssH4(qwB4=pxC&X1gs4Ri(}dA> z9`_;YTqM5f#c$Bq$u_M2_a%P!SylzHnrB(PFY((Nt5y7-FMdVGZ&}P!#^bl$#*;XD z;z~4p;if)~9ZrfY%=Zr!8m7T5nMg3#3OB9mz>;K*ujgZV`+%0WY2k`!U`D)zGkD7c zNVy$FSkQsVb?k${V!3iJmw)%!F+B(A!G_%Q{`}rAR>k#VHHgSlS`to)FlO8FetvEl zbMelBg7qye2JR$r`>7!c1S zInmI|EDSn{L1cVW5qyhI!Xy&IHfP+Y<5Zb8cM>(+hTjY!!Tx0Y27W`9Ejo!s0$yx^ z!%l*XoU1Ppz_AWscXbl)$%yPWjuW}Kwdx8Uk8&u;KK(uLGCs(_ASWQfyL<7p9SM~R z14*PKIZ==&g^&>SWM!H~RU1HEoPu(7B&Q1ZG>ew(qfMNN1bfOQedd2gdc+pEl_x(*Qej;#%lpAzJ!Eu_60O53U%{ETou>u|=7 z&<)0)U?Tlsyy$}LB=^c&!M=?NwLt zI+R02&Q?Tw!=ihxJDrFbw*H9i=+7dkE=;JJ}E`01C?JsmzEJH@NA zz4OkXPkfL7L7(`LZ2N6z+no~n#0EpPeE5cK&38Zry&tP9*86=|^pj*l+j^LVLGSlH zWN`9_;9K;5k0cVydQ^pN^--qHz29TFji&lI65l+5-=L|IWsBbL2LgW50*AdH89DFz zp#Xm50Qfm^*kQDdk^S6LLXBIduFTUYhca7$@+j$=XMh4le~bjj_lmyl(I{-_laU_n zr-FPogoIenDbp;L>J~Qs8Oqh8{am=uTio0u(H^Zq-v3z-qj91g-7lnS+%oN*cd+Tb zpu&#aUH{{DFfT$8w4q-j!I3S}D)T?D6=D;ct8?97OSj)R-C8^;{#M2D+O~99;lD$< zi#5?F#oyyL%=Z!!oH!#I)&$1J`-k@XrD*=Lz@o%#3-<@@n)<87Gx7H6k>>2+7GH89Qu~^Ue ziWnpbh1T^d3xl5VHDs_lO7Jau#@7>x;oxlCXKQ_fX>-r`CT^p(zJ&y5XX7{M8OgFm z&-k{0-?6}9&qzkjy~a!+wPo-NYWn7HV$ay3J+fzEWbbj(QKI8Kn`LrBOqL78T`RJ*Wp3gzk>R}}6_7FTBtgim`7ZRdZg zZ*1@~S|{2$PL!^3)3kTq!`3%Rh5rXS$CaT78qq39e6y;w`ajV*vb{R*T}`^J?sRMQ z)VPMqsiRKd$jVl>K@k@ z&IS(WPDF|LY#&cBOMIYVLF3jL9d=gVI8%RP$VGXPmwj7Q@gfiJ1MO?Vw4M-C;Z~Zq z=2wAwuyap*!o>3)4wM?*quz#6E^hz!&ijKNZ6g8%J=(@HNZJ`>n|EUnvk9=#kZL^(XO^c;+rY>4cZl1 zw&=*V67WIqbit3ngxmx)NKX97^yoj}hpZZ2$_z zwngHb?L^mhTNEyIm`Jy^y&!i8At6q?GR@+sE@9ITp6r^;^xkTcwx7t7W%=u z0X2(uIWr_@TrK(lblO>k9l0eRq!MNqNP*hh6$#Gvmq?ipRwTGEYuUB%-6dFu6RgFP z&>kv|+u72gsrN*=bIItF&|bI=-Sd;TgWifTWMQ``u&8n zzr(o)mEAhj$H#?i(*G5)zCN(xC&m(yKozA>o6qv z;sJhxa8H&k!hKG_M_Ax6+>?=Wh9d=Vlmp<-muR?e)p{83j}}hcBy}z3pd4DHL9!n2 zlL?xS0v4)uBk@g-2wS(Ic%j=w0)AeQb3;hT)2mFgJgQAtwGZVA_yyt4v$(lWK)w$; z;MaWtt&gfjBmR5|8rQ46^C32sq6$Cgh+l#fs6G#gZ;p{jAAH1THM>UMFToZ#!CDRP z2UH$6bk-vw+Pcg%VR%1?`_R6E1joSOH}Ffc4I6JH=2rz-vyfrTxAMkgKJxg}$+ts7 zTWHa+Q9t42+eIpjs9+Z3PH`Qbe7l5~<8<=v!$Ax^RtP-#_BdSOkQL?aSHce}_m!~q z-c*fG%&bQNT+7tKw`PfQ}qr|G#IE z%;}&8gPeiHH)o1;=KUcJ-DpGXKXk{#d_p|Vay*ichdCRi4$*aj!SOKX5bwPm4|6Vw zzq{jMzE2-KkN7-U{Cr$sRT3q_@i3AZeZZ%bSIwDE^V%K{L$1-|VLpR=|*^LhLR9!@Dj54Xp|U|w2_p)M5gMHV=8a$6nj$gaSCL+Ej_z`kI? zboxf!%e>&QjZ0MA)F8vdHZEm(u&MeoQM}wz%)JG1dU|lq#$Z2B#n?rM?xqjT&)*Fv z8}iiA^ultf&mD0wx$)FfL2Vu^?8U(tcq_{n%UF19a01&dET1t$kMs%Wa5#@oIzq#~ zN#+D8j*zR?dfegD!Q=pD19Z|ycTW#a*TfETo^p(%=F&Lqnv)MbJ>ZNo9S)N3FCA+S z;lZ>5#xBvbVnG-!nI?8EIoPm$g{;$L(9Xx%2CigbFs{4`8Q*+S@R{7u2W3t3B}f2W zSh-G@V6XSplC6a<*ASlmaxE@!x{6>ko~XfJu200xdeoYxxPfU$t^&3H<4wqX8O-5z zHzM)PSMVEn9d(I%U9h|QCP98RgoJ`$QzmX4XGbXbb(E{GxmmckSlrylq40lA`=wg0 z+g0~;tAvc})NUK^Z7Q@|uSe9td;`!h@$E?PDHoyIgD^%!MO&oF+yLti5xCP4;Ms8z z=jOx0T`G#pY-zBe-HmcIG{i)__g7Fb_uv*}yBCRXz9oG7Oh9H~^#f@VknGXhK>#uL zS={@D`+&twfNNCZK|w#{psf;NAfgiAR#9suzJqe7gu^r6#VsiDFcN%WS@>27GK(s) zCX`4FcINw*#3Lf{s3nnW3ErsEV?uh|AKko(la`0Id~z7UfWA zBJdl!3G*BZpxV!n;M*{wVpSvKsA@sy{=6W6VIjlL-8w{k1RwOvF9_#FhqDSujiO(U z?wD(kS)Ffs={n~KF--wAIC-Qn_*BD)-E;)!-`7|FQWlHXYJ2CC!D#$f1PJ=;U(3qB zaaR7An#zb>S45BZJ_L#oqm|8XAq$!_t3TFr|4vdSX@-dSd&0BlehC*?RUz1nCu(Tx zFDK$=J?hVZ`bVZ6x#M7f4^VycCx`*h`ZE%IgB!m=A5N`8&%($#=)?ai$iIb!z>{};A!Dj4m}Uz50T?by7b+CNojH+hau7xOw$VDUGQ z_~uRF+fAOM!$(V{8C}2rmZ<#8QAz06-&RpvdP{=}yn}MrB?kTa7<>l@0xp9DiyrVB zGzl^bn*@*&`t{{3?()JNYjG3c8kJZ<(BmAmo&AYADHiafm5o<DM1s!}iHPkx$Tq4@%P!kYv?L~p#LAY$uswXFhE@^MstzgE!>^{>t#w)*<fBEs|uM!RcX;_o3$;0bwprYOJJBDKBC5YLRsITwCv$G5I}2%HbglT zYVP4TLIG6U7>RGvqGDAeXxVutht{HJZb7QOkoabA;oEplW??%3(rQqzIeeLYEdIX2|FFex0o$m|e!|$_VPO3y zB8m-#97G(T`>i$UL^*`QXBo#3$sCA0)Hn!@;Bk>K-f)BipjH2RhLUBjx z49pRh+>s)8lqIKw|3*Y@RP$&NnBxe<#y}s{?bb?mqZ~>GW1t>np<*71Z{`Zu)(DwI zRZJcOrA)6S&?f=~OQ6LVhzlPgelkxe^BqddF;GzetraSv911m$fjksIwPTR@re9R7 zYGfQ$Ef@nW5afV`497rL;#OmzvTz0+PHJ>xpoZna@BIm!uEjY;s$cIgpwztTw{<^gnO#R)tttEVXLNs z(SgTl5;v|Ln>1AWxC-sUppkSjrvn(aJ_8BfjSDlQB}F4)qFvH-ZV2)T;h*L36NVsX zt0*q9r9q+3K{*;-bO>@TZb7v3koe|&;oERZW??e`Qi~zTCoTS`g#T%a-vYK#na>F0 zvkoIZ1o@oqx7OqWltZX+2=aO4p~i(sd~=bItr}z#Rf7w6M+k=IVoU4`B6f)-rWL;< zAT}y^sn9QT=&}C%a@}sN-xVl_enEeJC9+WODkOM~D_pA{nMBn~?$6WaOP0XZB5;i* z(4s$2H>z>1P_A<*E&KE91<+cd8&D2~n)~xFqX4Sihy?FPMa8N{#!=OR{`@9Ee$_&T z{rM?^Zq=WEO*mh7I46#-zv;!7;EbEqs1DnoH+0kZT3oQ7e3+gZMoxI6f3qZvTd}?K z*`OD_g#bY>daJa$&1rSWzd7H8hx`5dkGT@~8zbBuzOc^L4p z#`ln5^S+QX`nbm^kkKZnpX-<&5s60~iG+^nF%`w-wlpaE<0wakM?0n`a0}A?0Eus& z6uylMWER#Hkb=1ILqYz?LWXg{O4%wdJSCi`9nLGG^B}DQZWtB6o7b4(6845S8oWE| z7ndUOKCCX{6I?L^b?u#r_Pj>55kn@S#XCgtkqbwdQNgB z>4MhxGr}`k{Tvs*d0wy?Pt@S?zevQ*deoSW_XVaMxdo$%R_|xqF)xBKT;!KXu-_lQ zK{%rxp^HSq*{=opn-CJp{Z^T{VVn)2-0x7XaQ1uQzGQK8Cqvl}zTu*-sZumT{y_r9 z^=a??Icw@=724ffBS>%l2v`{RPe^?8XCY=Z2pj-ptTDBLOG=21e~zU+qeM*-a&#-WxyywyCtKj0|lIU}GX?J@R)EMEe2Kf{ie9`vF4Yn-HO+k=CZT2V-r9#5WmH$aszcMS#7a zF1G_@1+uvX$!!hejlA~WEjmaqa-!Q^0loalG`|Me{4MRabfBebo7Lipey`gnm9_LAh^6Pw(L1w1GkmA1?1PZ76k!Zr~H_ zc9>4Q_qN+%YZ8BVyB&VTE^Hg(b9l8aF0d1t5@EN4WJdR~z4EF%vjeZ~ZU=IW?sjNL zzHzq$4MX}LV%oIZVMp9W743w?H#6`XbTX783}5uhj@-{+)c?~iV|KRI*hSXZ)mr2K zzS^NLp|A0FMo*7MxSLF{yEDN)sQGx{nOiPbYcpoRw-%MnF*_p|HU_4~@)L44h1GzK3J@Bh>L+@5wd3z$`?L{a#R?&v8?dR|d(k}%;YY$+fb-r&h znms`fKCu@Pyl<83mp0Hc%Gau#9X9|dq-o;E2SWvfw#5bN;*dRiY!`flQb)SnoMv(m> zBqUp)OtWNap=cokDA#DYEZjkho9l<9vkL!F|EBQn=|CgRibRP^-fo@SsL*a(8c|MD z1vCsMgX553)3r$2ra+OxrT{wAKxe5UtMM)A6GZxBmh{q-2@Qqji0}9|e>d_((Lc%2 z=Sire?v*0zr$^_KSjq8zH{FN~eC`@u|8%mnjn{p9=ih^I$0-B|`lwT7q0^j&j{LV; z$b1}ZP-m=_SVwib1V|DZt@R8QvZFc^SNIx+@*{UtXC)HFCna#7UT`+kVLGaFP>%M0 zE)w6IhubOj!CSJ>S6(W!2xWi_7Q28qjL?0q)SAiwNjU& z97^#;+EUUtmjM-uUyj5#SBQ^|Qxra|r%0D|r68{gAtBxum1!1FZ53_hODI>Db+vG> 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 PI2XtPUS$p>OOx~fsf)N! literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/reference/http_response.doctree b/libs/network/doc/html/.doctrees/reference/http_response.doctree new file mode 100644 index 0000000000000000000000000000000000000000..861e48b6570f49db4e2348c12154b1a49b3bfd0b GIT binary patch literal 126334 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 X(iid6IZ52qpfBMgq%Y%%WZ8cMxy2@% literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/techniques.doctree b/libs/network/doc/html/.doctrees/techniques.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6cc5cb046bd65d8d61fe597d49c50e4ccd983ddf GIT binary patch literal 3835 zcmcgv_j@Eq5!LA=t+dML3x+%4bvm!X(i&s15$P~sV+2dE+K4dB_0IHeH#e!Kd!!XG z#s~N~k#o-3a#SO)4@8Mig+l@b|N&5voD@D_g2F*(X6%J&!VH@@tjVySjF&;4U(2vrF59?!>ZhvRJAe# z2rtR0R%erbme_TgE_GPN3%J&JzRY2hE$*F3Z2~TL*g=cc6%Jh~7dRX5tv~6|RdRx7 zY%EZbp!(V8~6$6AU*QH$F(BV#Rw%nV~Qwd*83 z*y6ML-|!jh;>8wEBYMmZDhVHX z+7X6sE^;?Ox%lSCAy?7HD7Gfsbc=f(8-zy;Nx40zr@}BB0g6pf6E#pNPo|B6s@SKn z?;c|uJq>O>J*Q{bl;5K#_XsI2tWGZulQ@g~Dm@dqaB_N9AF_VmnCveh*JkK+KSP|& zo7gj{5X)OA??j{ojE5RZvtKXX1%*&osETtAz1X^y#3_oM&Ntbl@=MvU1KBV;?2D$C zIP_9B+dr)5z{_%aIa^TZnHGGv*UB`#!l75PNiB>)FV*y_p}E*jO)Q3E>{Z&MsrONA@Y$k1cSPGq#r2)Nx9hb%= ztBr<ebmW#g8r+w?Xz8}O);L7ZW|FX-)T6g+wdoANothT&mC@3bBk*t!AcU_kGJ zWSBt|5PVTjvb`G$PV&H%3*NIf&Spy|N@eoirff9X2?(S(b>V4T45!{-$s<2N-rmO+ zY*ZRsK-VNdl=OZ!?u%B|p$|0Kf33m%^kabrl7OT(hu!ADnq|Y_WxDqWgA8~{Mecr;? zO(08L1=^+&4>WxNfRsb{gvNf^RBNnZvn;rn>Yk^rR`nTke+f(YL<6 zhAYKh4$*hmI9tCN$9|Vp`ZtR2u~YxICjUO0hng{vqqdR&u%REEXHy*!K~LCJ{Sbi_ z^cev9Bb15`aa(aI!_7t0kI|4VQFg2QC+w24y0^BrR+4Qf#i*!mUu-t8Qa9+Qwxvdf zcU`GEGQiK!&!E=hs6#(zC-!3L?k%BT$h+B`?RM?}!(Xyd<-@*gl|i+lh8 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/techniques/directives.doctree b/libs/network/doc/html/.doctrees/techniques/directives.doctree new file mode 100644 index 0000000000000000000000000000000000000000..06fa7830794b017c141018102daa25b6652e6c2f GIT binary patch literal 17073 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/techniques/tag_metafunctions.doctree b/libs/network/doc/html/.doctrees/techniques/tag_metafunctions.doctree new file mode 100644 index 0000000000000000000000000000000000000000..84530e913b25acec83c2cd9dbd24f78b36357137 GIT binary patch literal 29080 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/.doctrees/whats_new.doctree b/libs/network/doc/html/.doctrees/whats_new.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cef508a6adcc208cba516ccb91f67023b16df418 GIT binary patch literal 35753 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 F{2x2ABVhml literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/_sources/contents.txt b/libs/network/doc/html/_sources/contents.txt index 55021d968..b014eab03 100644 --- a/libs/network/doc/html/_sources/contents.txt +++ b/libs/network/doc/html/_sources/contents.txt @@ -4,8 +4,9 @@ Contents -------- .. toctree:: - :maxdepth: 3 + :maxdepth: 4 + index.rst whats_new.rst getting_started.rst examples.rst diff --git a/libs/network/doc/html/_sources/getting_started.txt b/libs/network/doc/html/_sources/getting_started.txt index 861fb1795..26a53bb66 100644 --- a/libs/network/doc/html/_sources/getting_started.txt +++ b/libs/network/doc/html/_sources/getting_started.txt @@ -65,7 +65,7 @@ Getting Boost ============= :mod:`cpp-netlib` depends on Boost_. It should work for any version -of Boost above 1.45.0. If Boost is not installed on your system, the +of Boost above 1.50.0. If Boost is not installed on your system, the latest package can be found on the `Boost web-site`_. The environment variable ``BOOST_ROOT`` must be defined, which must be the full path name of the top directory of the Boost distribution. Although Boost diff --git a/libs/network/doc/html/_sources/index.txt b/libs/network/doc/html/_sources/index.txt index a276a88de..c0564448b 100644 --- a/libs/network/doc/html/_sources/index.txt +++ b/libs/network/doc/html/_sources/index.txt @@ -2,11 +2,12 @@ .. rubric:: Straightforward network programming in modern C++ .. :Authors: Glyn Matthews -.. Dean Michael Berris -.. :Date: Feb 22, 2012 -.. :Version: 0.9.4 +.. Dean Michael Berris +.. :Date: Feb 2, 2013 +.. :Version: 0.9.5 .. :Description: Complete user documentation, with examples, for the :mod:`cpp-netlib`. .. :Copyright: Copyright Glyn Matthews, Dean Michael Berris 2008-2012. +.. Copyrigh 2013 Google, Inc. .. Distributed under the Boost Software License, Version .. 1.0. (See accompanying file LICENSE_1_0.txt or copy at .. http://www.boost.org/LICENSE_1_0.txt) @@ -14,6 +15,9 @@ Getting cpp-netlib ================== +You can find out more about the :mod:`cpp-netlib` project at +http://cpp-netlib.org/. + **Download** You can download the latest releases of the library at: @@ -39,25 +43,12 @@ You can also file issues on the Github_ issue tracker at: We are a growing community and we are happy to accept new contributions and ideas. -Boost -===== - -The :mod:`cpp-netlib` is being developed for eventual submission to Boost_. - -.. image:: _static/boost.png - :align: left - C++ Network Library =================== -The :mod:`cpp-netlib` is a library that provides application layer -protocol support using modern C++ techniques. It is light-weight, -fast, portable and is intended to be as easy to configure as possible. - -It is developed by people linked to the Boost_ community and will soon -be submitted for review into Boost. A presentation about -:mod:`cpp-netlib` was given at `BoostCon 2010`_, for which the -`slides`_ and the `paper`_ can be found on-line. +:mod:`cpp-netlib` is a library collection that provides application layer +protocol support using modern C++ techniques. It is light-weight, fast, +portable and is intended to be as easy to configure as possible. Hello, world! ============= @@ -123,9 +114,5 @@ Want to learn more? .. _Boost: http://www.boost.org/ -.. _`BoostCon 2010`: http://www.boostcon.com/ -.. _`slides`: http://www.filetolink.com/b0e89d06 -.. _`paper`: http://github.com/downloads/mikhailberis/cpp-netlib-boostcon-paper/cpp-netlib.pdf -.. _Git: http://git-scm.com/ .. _GitHub: http://github.com/ diff --git a/libs/network/doc/html/_sources/reference/http_client.txt b/libs/network/doc/html/_sources/reference/http_client.txt index 52c31a055..bb6273106 100644 --- a/libs/network/doc/html/_sources/reference/http_client.txt +++ b/libs/network/doc/html/_sources/reference/http_client.txt @@ -139,37 +139,35 @@ initialization. ``client()`` Default constructor. -``client(boost::asio::io_service & io_service)`` - Construct a client to use an existing Boost.Asio ``io_service`` instance. -``template client(ArgPack const & args)`` - Pass in an argument pack. See supported parameters in the table below. +``explicit client(client::options const &)`` + Constructor taking a ``client_options`` object. The following table + shows the options you can set on a ``client_options`` instance. +----------------------+-------------------------------+-------------------------+ | Parameter Name | Type | Description | +======================+===============================+=========================+ -| _follow_redirects | ``bool`` | Boolean to specify | +| follow_redirects | ``bool`` | Boolean to specify | | | | whether the client | | | | should follow HTTP | | | | redirects. Default is | | | | ``false``. | +----------------------+-------------------------------+-------------------------+ -| _cache_resolved | ``bool`` | Boolean to specify | +| cache_resolved | ``bool`` | Boolean to specify | | | | whether the client | | | | should cache resolved | | | | endpoints. The default | | | | is ``false``. | +----------------------+-------------------------------+-------------------------+ -| _io_service | ``boost::asio::io_service &`` | Reference to an | -| | | instance of a | +| io_service | ``shared_ptr`` | Shared pointer to a | | | | Boost.Asio | | | | ``io_service``. | +----------------------+-------------------------------+-------------------------+ -| _openssl_certificate | string | The filename of the | +| openssl_certificate | string | The filename of the | | | | certificate to load for | | | | the SSL connection for | | | | verification. | +----------------------+-------------------------------+-------------------------+ -| _openssl_verify_path | string | The directory from | +| openssl_verify_path | string | The directory from | | | | which the certificate | | | | authority files are | | | | located. | @@ -182,11 +180,13 @@ the following: .. code-block:: c++ using namespace boost::network::http; // parameters are in this namespace - boost::asio::io_service my_io_service; - client client_(_follow_redirects=true, _cache_resolved=true, - _io_service=my_io_service - , _openssl_certificate="/tmp/my-cert" - , _openssl_verify_path="/tmp/ca-certs/"); + client::options options; + options.follow_redirects(true) + .cache_resolved(true) + .io_service(boost::make_shared()) + .openssl_certificate("/tmp/my-cert") + .openssl_verify_path("/tmp/ca-certs"); + client client_(options); // use client_ as normal from here on out. HTTP Methods @@ -207,7 +207,7 @@ and that there is an appropriately constructed response object named ``response_ = client_.get(request_)`` Perform an HTTP GET request. -``response_ = client_.get(request_, _body_handler=callback)`` +``response_ = client_.get(request_, callback)`` Perform an HTTP GET request, and have the body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, boost::system::error_code const @@ -217,7 +217,7 @@ and that there is an appropriately constructed response object named ``response_ = client_.post(request_)`` Perform an HTTP POST, use the data already set in the request object which includes the headers, and the body. -``response_ = client_.post(request_, _body_handler=callback)`` +``response_ = client_.post(request_, callback)`` Perform an HTTP POST request, and have the body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, boost::system::error_code const @@ -226,18 +226,18 @@ and that there is an appropriately constructed response object named Body is a string of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. The default content-type used is ``x-application/octet-stream``. -``response_ = client_.post(request_, body, _body_handler=callback)`` +``response_ = client_.post(request_, body, callback)`` Body is a string of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. The default content-type used is ``x-application/octet-stream``. Have the response body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, boost::system::error_code const &)``. -``response_ = client_.post(request_, content_type, body)`` +``response_ = client_.post(request_, body, content_type)`` The body and content_type parameters are of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. This uses the request object's other headers. -``response_ = client_.post(request_, content_type, body, _body_handler=callback)`` +``response_ = client_.post(request_, body, content_type, callback)`` The body and content_type parameters are of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. This uses the request object's other headers. Have the response @@ -247,7 +247,7 @@ and that there is an appropriately constructed response object named ``response_ = client_.put(request_)`` Perform an HTTP PUT, use the data already set in the request object which includes the headers, and the body. -``response_ = client_.put(request_, _body_handler=callback)`` +``response_ = client_.put(request_, callback)`` Perform an HTTP PUT request, and have the body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, boost::system::error_code const @@ -256,18 +256,18 @@ and that there is an appropriately constructed response object named Body is a string of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. The default content-type used is ``x-application/octet-stream``. -``response_ = client_.put(request_, body, _body_handler=callback)`` +``response_ = client_.put(request_, body, callback)`` Body is a string of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. The default content-type used is ``x-application/octet-stream``. Have the response body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, boost::system::error_code const &)``. -``response_ = client_.put(request_, content_type, body)`` +``response_ = client_.put(request_, body, content_type)`` The body and content_type parameters are of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. This uses the request object's other headers. -``response_ = client_.put(request_, content_type, body, _body_handler=callback)`` +``response_ = client_.put(request_, body, content_type, body_handler=callback)`` The body and content_type parameters are of type ``boost::network::string::type`` where ``Tag`` is the HTTP Client's ``Tag``. This uses the request object's other headers. Have the response @@ -276,7 +276,7 @@ and that there is an appropriately constructed response object named &, boost::system::error_code const &)``. ``response_ = client_.delete_(request_)`` Perform an HTTP DELETE request. -``response_ = client_.delete_(request_, _body_handler=callback)`` +``response_ = client_.delete_(request_, body_handler=callback)`` Perform an HTTP DELETE request, and have the response body chunks be handled by the ``callback`` parameter. The signature of ``callback`` should be the following: ``void(iterator_range const &, @@ -320,7 +320,7 @@ An example of how to use the macro is shown below: // somewhere else std::string some_string; response_ = client_.get(request("http://cpp-netlib.github.com/"), - _body_handler=body_handler(some_string)); + body_handler(some_string)); You can also use if for standalone functions instead if you don't want or need to create a function object. @@ -337,7 +337,7 @@ to create a function object. // somewhere else response_ = client_.get(request("http://cpp-netlib.github.com/"), - _body_handler=print_body); + print_body); The ``BOOST_NETWORK_HTTP_BODY_CALLBACK`` macro is defined in ``boost/network/protocol/http/client/macros.hpp``. diff --git a/libs/network/doc/html/_sources/reference/http_server.txt b/libs/network/doc/html/_sources/reference/http_server.txt index 296b4b801..90a472382 100644 --- a/libs/network/doc/html/_sources/reference/http_server.txt +++ b/libs/network/doc/html/_sources/reference/http_server.txt @@ -167,73 +167,70 @@ And that the following typedef's have been put in place: Constructor ``````````` -``http_server(address, port, handler)`` - Construct an HTTP Server instance, passing in the address and port as - ``std::string const &`` and handler being of type ``handler_type`` but - passed in as an lvalue reference. - -``template client(ArgPack const & args)`` - Pass in an argument pack. See supported parameters in the table below. - -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| Parameter Name | Type | Description | -+========================+==========================================+==================================================================================================+ -| _address | string_type | The hostname or IP address from which the server should be bound to. This parameter is required. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _port | string_type | The port to which the server should bind and listen to. This parameter is required. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _handler | ``Handler &`` | An lvalue reference to an instance of ``Handler``. This parameter is required. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _thread_pool | ``boost::network::utils::thread_pool &`` | An lvalue reference to an instance of ``boost::network::utils::thread_pool`` -- this is the | -| | | thread pool from where the handler is invoked. This parameter is only applicable and required | -| | | for ``async_server`` instances. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _io_service | ``boost::asio::io_service &`` | An optional lvalue to an instance of ``boost::asio::io_service`` which allows the server to use | -| | | an already-constructed ``boost::asio::io_service`` instance instead of instantiating one that it | -| | | manages. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _reuse_address | ``bool`` | A boolean that specifies whether to re-use the address and port on which the server will be | -| | | bound to. This enables or disables the socket option for listener sockets. The default is | -| | | ``false``. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _report_aborted | ``bool`` | A boolean that specifies whether the listening socket should report aborted connection attempts | -| | | to the accept handler (an internal detail of cpp-netlib). This is put in place to allow for | -| | | future-proofing the code in case an optional error handler function is supported in later | -| | | releases of cpp-netlib. The default is ``false``. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _receive_buffer_size | ``int`` | The size of the socket's receive buffer. The default is defined by Boost.Asio and is | -| | | platform-dependent. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _send_buffer_size | ``int`` | The size of the socket's send buffer. The default is defined by Boost.Asio and is | -| | | platform-dependent. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _receive_low_watermark | ``int`` | The size of the socket's low watermark for its receive buffer. The default is defined by | -| | | Boost.Asio and is platform-dependent. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _send_buffer_size | ``int`` | The size of the socket's send low watermark for its send buffer. The default is defined by | -| | | Boost.Asio and is platform-dependent. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _non_blocking_io | ``bool`` | An optional bool to define whether the socket should use non-blocking I/O in case the platform | -| | | supports it. The default is ``true``. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _linger | ``bool`` | An optional bool to determine whether the socket should linger in case there's still data to be | -| | | sent out at the time of its closing. The default is ``true``. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ -| _linger_timeout | ``int`` | An optional int to define the timeout to wait for socket closes before it is set to linger. | -| | | The default is ``0``. | -+------------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +``explicit http_server(options)`` + Construct an HTTP Server instance, passing in a ``server_options`` object. The following table shows the supported options in + ``server_options``. + ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| Parameter Name | Type | Description | ++=======================+==========================================+==================================================================================================+ +| address | string_type | The hostname or IP address from which the server should be bound to. This parameter is required. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| port | string_type | The port to which the server should bind and listen to. This parameter is required. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| thread_pool | ``shared_ptr`` | A shared pointer to an instance of ``boost::network::utils::thread_pool`` -- this is the | +| | | thread pool from where the handler is invoked. This parameter is only applicable and required | +| | | for ``async_server`` instances. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| io_service | ``shared_ptr`` | An optional lvalue to an instance of ``boost::asio::io_service`` which allows the server to use | +| | | an already-constructed ``boost::asio::io_service`` instance instead of instantiating one that it | +| | | manages. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| reuse_address | ``bool`` | A boolean that specifies whether to re-use the address and port on which the server will be | +| | | bound to. This enables or disables the socket option for listener sockets. The default is | +| | | ``false``. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| report_aborted | ``bool`` | A boolean that specifies whether the listening socket should report aborted connection attempts | +| | | to the accept handler (an internal detail of cpp-netlib). This is put in place to allow for | +| | | future-proofing the code in case an optional error handler function is supported in later | +| | | releases of cpp-netlib. The default is ``false``. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| receive_buffer_size | ``int`` | The size of the socket's receive buffer. The default is defined by Boost.Asio and is | +| | | platform-dependent. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| send_buffer_size | ``int`` | The size of the socket's send buffer. The default is defined by Boost.Asio and is | +| | | platform-dependent. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| receive_low_watermark | ``int`` | The size of the socket's low watermark for its receive buffer. The default is defined by | +| | | Boost.Asio and is platform-dependent. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| send_buffer_size | ``int`` | The size of the socket's send low watermark for its send buffer. The default is defined by | +| | | Boost.Asio and is platform-dependent. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| non_blocking_io | ``bool`` | An optional bool to define whether the socket should use non-blocking I/O in case the platform | +| | | supports it. The default is ``true``. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| linger | ``bool`` | An optional bool to determine whether the socket should linger in case there's still data to be | +| | | sent out at the time of its closing. The default is ``true``. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ +| linger_timeout | ``int`` | An optional int to define the timeout to wait for socket closes before it is set to linger. | +| | | The default is ``0``. | ++-----------------------+------------------------------------------+--------------------------------------------------------------------------------------------------+ To use the above supported named parameters, you'll have code that looks like the following: .. code-block:: c++ using namespace boost::network::http; // parameters are in this namespace - boost::asio::io_service my_io_service; - boost::network::utils::thread_pool pool(2); handler handler_instance; - async_server instance(_address="0.0.0.0", _port="80", _handler=handler_instance, - _io_service=my_io_service, _thread_pool=pool, - _reuse_address=true); + async_server::options options(handler_instance); + options.address("0.0.0.0") + .port("80") + .io_service(boost::make_shared()) + .thread_pool(boost::make_shared(2)) + .reuse_address(true); + async_server instance(options); instance.run(); Public Members @@ -245,7 +242,8 @@ instance has been constructed in the following manner: .. code-block:: c++ handler_type handler; - http_server server("127.0.0.1", "8000", handler); + http_server::options options(handler); + http_server server(options.address("127.0.0.1").port("8000")); ``server.run()`` Run the HTTP Server event loop. This function can be run on multiple threads @@ -401,15 +399,9 @@ And that the following typedef's have been put in place: Constructor ``````````` -``http_server(address, port, handler, thread_pool)`` - Construct an HTTP Server instance, passing in the address and port as - ``std::string const &`` and handler being of type ``handler_type`` but - passed in as an lvalue reference. The ``thread_pool`` parameter is an - instance of ``boost::network::utils::thread_pool`` that has been previously - instantiated. - -.. note:: The ``boost::network::utils::thread_pool`` has a single constructor - parameter which is the number of threads to run the thread pool. +``explicit http_server(options)`` + Construct an HTTP server instance passing in a ``server_options`` instance. Public Members `````````````` @@ -420,8 +412,9 @@ instance has been constructed in the following manner: .. code-block:: c++ handler_type handler; - boost::network::utils::thread_pool thread_pool(2); - http_server server("127.0.0.1", "8000", handler, thread_pool); + http_server::options options(handler); + options.thread_pool(boost::make_shared(2)); + http_server server(options.address("127.0.0.1").port("8000")); ``server.run()`` Run the HTTP Server event loop. This function can be run on multiple threads diff --git a/libs/network/doc/html/_sources/whats_new.txt b/libs/network/doc/html/_sources/whats_new.txt index 72afdf641..25880faf3 100644 --- a/libs/network/doc/html/_sources/whats_new.txt +++ b/libs/network/doc/html/_sources/whats_new.txt @@ -7,6 +7,15 @@ :mod:`cpp-netlib` 0.9 --------------------- +v0.9.5 +~~~~~~ +* Removing dependency on Boost.Parameter from HTTP client and server. +* Fix for Clang error on Twitter example. +* Adding source port to the request (HTTP server). +* Updates to CMake config for MSVC 2010/2012. +* Support chunked content encoding in client response parsing. +* Fix bug with client not invoking callback when a request fails. + v0.9.4 ~~~~~~ * Lots of URI fixes. diff --git a/libs/network/doc/html/_static/ajax-loader.gif b/libs/network/doc/html/_static/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..61faf8cab23993bd3e1560bff0668bd628642330 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nno%(3)e{?)x>&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/_static/basic.css b/libs/network/doc/html/_static/basic.css index 32630d54c..43e8bafaf 100644 --- a/libs/network/doc/html/_static/basic.css +++ b/libs/network/doc/html/_static/basic.css @@ -79,6 +79,14 @@ div.sphinxsidebar input { font-size: 1em; } +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + width: 30px; +} + img { border: 0; } @@ -236,7 +244,6 @@ img.align-center, .figure.align-center, object.align-center { } .align-center { - clear: both; text-align: center; } @@ -440,6 +447,11 @@ dl.glossary dt { font-style: oblique; } +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + /* -- code displays --------------------------------------------------------- */ pre { @@ -525,4 +537,4 @@ span.eqno { #top-link { display: none; } -} +} \ No newline at end of file diff --git a/libs/network/doc/html/_static/comment-bright.png b/libs/network/doc/html/_static/comment-bright.png new file mode 100644 index 0000000000000000000000000000000000000000..551517b8c83b76f734ff791f847829a760ad1903 GIT binary patch literal 3500 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 A2LJ#7 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/_static/comment.png b/libs/network/doc/html/_static/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..92feb52b8824c6b0f59b658b1196c61de9162a95 GIT binary patch literal 3445 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/_static/dialog-seealso.png b/libs/network/doc/html/_static/dialog-seealso.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb7b05c84809454c095bcb61b27d83585540bb2 GIT binary patch literal 1502 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 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/_static/dialog-warning.png b/libs/network/doc/html/_static/dialog-warning.png new file mode 100644 index 0000000000000000000000000000000000000000..7233d45d8e6e41ef8fcb318c76303a9b6f23997e GIT binary patch literal 1391 zcmV-#1(5oQP)}piCG~<@Tj_&{ee%V|SZW{gB8?y>5~HGEkRU`Q5xgR16NK8$#%7av&gnyv zB_>9ji%*39&LbK3qFu zI7(%ZZ%;}2Gqh=wf?-g1;X+qD8r}8{{PEcV%0X!tqH%6yq(DC>&`hf#DjvXW3(1702fiEY= zF5vsm0&oGwD!P6+uzb1JdigTStXXLJ`Pjl?)VXtsUA;>7;>9+ps^67D`lthR!lCrM zJiGbuAzhIO`u_b0*{$vea+<+#n+u)TG0)=^W&Y8i0fonJZU{&O3K7Vlni6`w*i02KV;P{rfRu zG0etBGUm-QC7c=+fU_{mF@F3e|CA|e+x6?%3JOrCPscC}T3cI*Mx&UfiIS0lW6Kua z*4E+=1XR`QT~P`vMhu|BsqFlGD_&EBWm!0O?*~ty__PKSBsxE>~io%jH4{flNukRa8X# z{rjXQCrg{pH?0i59u|NFLJ0B8)HQ2(TUCW{yU};B)sYgKfwF=i#fQ*|T%prYYO&>#^_Jg-l9HIC3}~D2jrjDCoMLxDnFn#I<)X9Z#O% zl~TASP4c~kT|)vm3aV6;lT*TB*>>d$((gwvEKE2_WWLjh)9HL~UI>A6!v?geQ)#cO zBP%CIQ>6UickujYfDG8-Td-iF{q<|n@$@N&XN+4a)1MXii!#xt%)zy89UYGz zG12e0NnI~2gPDT@C~$aEUY=^+y^GP-hO?w((CCB^XqtxXDMlUN#ETcC z1p+4hp6CQXDP-AvzM{13Y_09qE$nO8qUGca8odyL^73*nUc5M{b0Gw_%uGDnx6}FT z856u-Rdc(;WsuwJSM3x1@yun*tghR)G2?Oc_3NRv6|2V>LcBLlv~F)$efs`;+#5F% zJ#z;0`E&f~>DJ4JhLgbjz5vpKd|!698oPE4fasPj{qtqSV!U}nQhK`b970DyKML_) z0Ovbsj@-OC=8MgnrPMUAEG)wS)5J22?y+HDnPzw2Z#-bF|D0)J#^W@' + _('Hide Search Matches') + '') - .appendTo($('.sidebar .this-page-menu')); + $('

') + .appendTo($('#searchbox')); } }, @@ -213,7 +213,7 @@ var Documentation = { * helper function to hide the search marks again */ hideSearchWords : function() { - $('.sidebar .this-page-menu li.highlight-link').fadeOut(300); + $('#searchbox .highlight-link').fadeOut(300); $('span.highlighted').removeClass('highlighted'); }, diff --git a/libs/network/doc/html/_static/down-pressed.png b/libs/network/doc/html/_static/down-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7ad782782e4f8e39b0c6e15c7344700cdd2527 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*yM+OLB!qm#z$3ZNi+iKnkC`z>}Z23@f-Ava~9&<9T!#}JFtXD=!G zGdl{fK6ro2OGiOl+hKvH6i=D3%%Y^j`yIkRn!8O>@bG)IQR0{Kf+mxNd=_WScA8u_ z3;8(7x2){m9`nt+U(Nab&1G)!{`SPVpDX$w8McLTzAJ39wprG3p4XLq$06M`%}2Yk zRPPsbES*dnYm1wkGL;iioAUB*Or2kz6(-M_r_#Me-`{mj$Z%( literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/_static/down.png b/libs/network/doc/html/_static/down.png new file mode 100644 index 0000000000000000000000000000000000000000..3003a88770de3977d47a2ba69893436a2860f9e7 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*yM+OLB!qm#z$3ZNi+iKnkC`z>}xaV3tUZ$qnrLa#kt978NlpS`ru z&)HFc^}^>{UOEce+71h5nn>6&w6A!ieNbu1wh)UGh{8~et^#oZ1# z>T7oM=FZ~xXWnTo{qnXm$ZLOlqGswI_m2{XwVK)IJmBjW{J3-B3x@C=M{ShWt#fYS9M?R;8K$~YwlIqwf>VA7q=YKcwf2DS4Zj5inDKXXB1zl=(YO3ST6~rDq)&z z*o>z)=hxrfG-cDBW0G$!?6{M<$@{_4{m1o%Ub!naEtn|@^frU1tDnm{r-UW|!^@B8 literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/_static/epub.css b/libs/network/doc/html/_static/epub.css new file mode 100644 index 000000000..28dff738b --- /dev/null +++ b/libs/network/doc/html/_static/epub.css @@ -0,0 +1,310 @@ +/* + * default.css_t + * ~~~~~~~~~~~~~ + * + * Sphinx stylesheet -- default theme. + * + * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: {{ theme_bodyfont }}; + font-size: 100%; + background-color: {{ theme_footerbgcolor }}; + color: #000; + margin: 0; + padding: 0; +} + +div.document { + background-color: {{ theme_sidebarbgcolor }}; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +div.body { + background-color: {{ theme_bgcolor }}; + color: {{ theme_textcolor }}; + padding: 0 20px 30px 20px; +} + +{%- if theme_rightsidebar|tobool %} +div.bodywrapper { + margin: 0 230px 0 0; +} +{%- endif %} + +div.footer { + color: {{ theme_footertextcolor }}; + width: 100%; + padding: 9px 0 9px 0; + text-align: center; + font-size: 75%; +} + +div.footer a { + color: {{ theme_footertextcolor }}; + text-decoration: underline; +} + +div.related { + background-color: {{ theme_relbarbgcolor }}; + line-height: 30px; + color: {{ theme_relbartextcolor }}; +} + +div.related a { + color: {{ theme_relbarlinkcolor }}; +} + +div.sphinxsidebar { + {%- if theme_stickysidebar|tobool %} + top: 30px; + bottom: 0; + margin: 0; + position: fixed; + overflow: auto; + height: auto; + {%- endif %} + {%- if theme_rightsidebar|tobool %} + float: right; + {%- if theme_stickysidebar|tobool %} + right: 0; + {%- endif %} + {%- endif %} +} + +{%- if theme_stickysidebar|tobool %} +/* this is nice, but it it leads to hidden headings when jumping + to an anchor */ +/* +div.related { + position: fixed; +} + +div.documentwrapper { + margin-top: 30px; +} +*/ +{%- endif %} + +div.sphinxsidebar h3 { + font-family: {{ theme_headfont }}; + color: {{ theme_sidebartextcolor }}; + font-size: 1.4em; + font-weight: normal; + margin: 0; + padding: 0; +} + +div.sphinxsidebar h3 a { + color: {{ theme_sidebartextcolor }}; +} + +div.sphinxsidebar h4 { + font-family: {{ theme_headfont }}; + color: {{ theme_sidebartextcolor }}; + font-size: 1.3em; + font-weight: normal; + margin: 5px 0 0 0; + padding: 0; +} + +div.sphinxsidebar p { + color: {{ theme_sidebartextcolor }}; +} + +div.sphinxsidebar p.topless { + margin: 5px 10px 10px 10px; +} + +div.sphinxsidebar ul { + margin: 10px; + padding: 0; + color: {{ theme_sidebartextcolor }}; +} + +div.sphinxsidebar a { + color: {{ theme_sidebarlinkcolor }}; +} + +div.sphinxsidebar input { + border: 1px solid {{ theme_sidebarlinkcolor }}; + font-family: sans-serif; + font-size: 1em; +} + +{% if theme_collapsiblesidebar|tobool %} +/* for collapsible sidebar */ +div#sidebarbutton { + background-color: {{ theme_sidebarbtncolor }}; +} +{% endif %} + +/* -- hyperlink styles ------------------------------------------------------ */ + +a { + color: {{ theme_linkcolor }}; + text-decoration: none; +} + +a:visited { + color: {{ theme_visitedlinkcolor }}; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +{% if theme_externalrefs|tobool %} +a.external { + text-decoration: none; + border-bottom: 1px dashed {{ theme_linkcolor }}; +} + +a.external:hover { + text-decoration: none; + border-bottom: none; +} + +a.external:visited { + text-decoration: none; + border-bottom: 1px dashed {{ theme_visitedlinkcolor }}; +} +{% endif %} + +/* -- body styles ----------------------------------------------------------- */ + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: {{ theme_headfont }}; + background-color: {{ theme_headbgcolor }}; + font-weight: normal; + color: {{ theme_headtextcolor }}; + border-bottom: 1px solid #ccc; + margin: 20px -20px 10px -20px; + padding: 3px 0 3px 10px; +} + +div.body h1 { margin-top: 0; font-size: 200%; } +div.body h2 { font-size: 160%; } +div.body h3 { font-size: 140%; } +div.body h4 { font-size: 120%; } +div.body h5 { font-size: 110%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: {{ theme_headlinkcolor }}; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: {{ theme_headlinkcolor }}; + color: white; +} + +div.body p, div.body dd, div.body li { + text-align: justify; + line-height: 130%; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.admonition p { + margin-bottom: 5px; +} + +div.admonition pre { + margin-bottom: 5px; +} + +div.admonition ul, div.admonition ol { + margin-bottom: 5px; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +div.topic { + background-color: #eee; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre { + padding: 5px; + background-color: {{ theme_codebgcolor }}; + color: {{ theme_codetextcolor }}; + line-height: 120%; + border: 1px solid #ac9; + border-left: none; + border-right: none; +} + +tt { + background-color: #ecf0f3; + padding: 0 1px 0 1px; + font-size: 0.95em; +} + +th { + background-color: #ede; +} + +.warning tt { + background: #efc2c2; +} + +.note tt { + background: #d6d6d6; +} + +.viewcode-back { + font-family: {{ theme_bodyfont }}; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} diff --git a/libs/network/doc/html/_static/file.png b/libs/network/doc/html/_static/file.png index 4d6c7e7768fedd6d181e4eab4f3c32233834d64e..d18082e397e7e54f20721af768c4c2983258f1b4 100644 GIT binary patch delta 376 zcmV-;0f+v$0*C{U8Gi-<001BJ|6u?C00v@9M??Vs0RI60puMM)00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-Uj4h;tZDYjG`0003MNkl`)4f+1;qh67(fvDEhv1eJ8B5z|D(=6?jwT?@G*xx{!8|7v!a z`RAJ*84Ly&S(Y8pPKRL_o&yj?k!hWIP^Jc2 zYmy`>H54Tx^m@I@E>7_g1VJM~ot$D}kziJH5%|7eGw~f`7O*UGAGHtxw@&0P_ z3IJPcpX_XQxp8@XAxYJ=@cw!9I|0D(cF5_SAR>(4t^u$Ymtmj^o`nO-iXV{!3p~ Wt8{-jMt;Wt0000X>^8d zd5>*+l5TsFZhMn*pU;7TfrgBfiIk#=n5~JKu8Nwknz-1g!py+b#KgqJ#l^+O#>U6T z$Li|p>+9?6?CkCBW}0US|u z008`nFaa53ttH}+!91tw6?<><1lVO|pK|8hc61^ZT|eiCGF9(x;P*EWNYZUli+~q;(eTbfe*U$baTG!fAgG=`DK4DzIF9EWa~YA`tJ9_ z8KSNH@Hyb?@aX8R^MT1t_v-D!{?^ltv3)o9> f@a++B;w^4}o%yp?Jw|+(00000NkvXXu0mjfL|da= literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/_static/headerbg.png b/libs/network/doc/html/_static/headerbg.png new file mode 100644 index 0000000000000000000000000000000000000000..0596f2020327efd97a4467c3025691844bb703d5 GIT binary patch literal 203 zcmV;+05t!JP)t-jh%+|_^FEwkAv~hm;c(PdXHHPSc-$gT+Ec53X`vdosFfm>3bJhR=002ovPDHLk FV1j%>T7Uom literal 0 HcmV?d00001 diff --git a/libs/network/doc/html/_static/ie6.css b/libs/network/doc/html/_static/ie6.css new file mode 100644 index 000000000..74baa5d5a --- /dev/null +++ b/libs/network/doc/html/_static/ie6.css @@ -0,0 +1,7 @@ +* html img, +* html .png{position:relative;behavior:expression((this.runtimeStyle.behavior="none")&&(this.pngSet?this.pngSet=true:(this.nodeName == "IMG" && this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage = "none", +this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "',sizingMethod='image')", +this.src = "_static/transparent.gif"):(this.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''), +this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "',sizingMethod='crop')", +this.runtimeStyle.backgroundImage = "none")),this.pngSet=true) +);} diff --git a/libs/network/doc/html/_static/jquery.js b/libs/network/doc/html/_static/jquery.js index f3201aacb..7c2430802 100644 --- a/libs/network/doc/html/_static/jquery.js +++ b/libs/network/doc/html/_static/jquery.js @@ -1,8981 +1,154 @@ /*! - * jQuery JavaScript Library v1.6.2 + * jQuery JavaScript Library v1.4.2 * http://jquery.com/ * - * Copyright 2011, John Resig + * Copyright 2010, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation + * Copyright 2010, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * - * Date: Thu Jun 30 14:16:56 2011 -0400 + * Date: Sat Feb 13 22:33:48 2010 -0500 */ -(function( window, undefined ) { - -// Use the correct document accordingly with window argument (sandbox) -var document = window.document, - navigator = window.navigator, - location = window.location; -var jQuery = (function() { - -// Define a local copy of jQuery -var jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context, rootjQuery ); - }, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // A central reference to the root jQuery(document) - rootjQuery, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, - - // Check if a string has a non-whitespace character in it - rnotwhite = /\S/, - - // Used for trimming whitespace - trimLeft = /^\s+/, - trimRight = /\s+$/, - - // Check for digits - rdigit = /\d/, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, - - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, - rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - - // Useragent RegExp - rwebkit = /(webkit)[ \/]([\w.]+)/, - ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, - rmsie = /(msie) ([\w.]+)/, - rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, - - // Matches dashed string for camelizing - rdashAlpha = /-([a-z])/ig, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }, - - // Keep a UserAgent string for use with jQuery.browser - userAgent = navigator.userAgent, - - // For matching the engine and version of the browser - browserMatch, - - // The deferred used on DOM ready - readyList, - - // The ready event handler - DOMContentLoaded, - - // Save a reference to some core methods - toString = Object.prototype.toString, - hasOwn = Object.prototype.hasOwnProperty, - push = Array.prototype.push, - slice = Array.prototype.slice, - trim = String.prototype.trim, - indexOf = Array.prototype.indexOf, - - // [[Class]] -> type pairs - class2type = {}; - -jQuery.fn = jQuery.prototype = { - constructor: jQuery, - init: function( selector, context, rootjQuery ) { - var match, elem, ret, doc; - - // Handle $(""), $(null), or $(undefined) - if ( !selector ) { - return this; - } - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - } - - // The body element only exists once, optimize finding it - if ( selector === "body" && !context && document.body ) { - this.context = document; - this[0] = document.body; - this.selector = selector; - this.length = 1; - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = quickExpr.exec( selector ); - } - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - doc = (context ? context.ownerDocument || context : document); - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - ret = rsingleTag.exec( selector ); - - if ( ret ) { - if ( jQuery.isPlainObject( context ) ) { - selector = [ document.createElement( ret[1] ) ]; - jQuery.fn.attr.call( selector, context, true ); - - } else { - selector = [ doc.createElement( ret[1] ) ]; - } - - } else { - ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); - selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; - } - - return jQuery.merge( this, selector ); - - // HANDLE: $("#id") - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return (context || rootjQuery).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if (selector.selector !== undefined) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.6.2", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - toArray: function() { - return slice.call( this, 0 ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this[ this.length + num ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = this.constructor(); - - if ( jQuery.isArray( elems ) ) { - push.apply( ret, elems ); - - } else { - jQuery.merge( ret, elems ); - } - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) { - ret.selector = this.selector + (this.selector ? " " : "") + selector; - } else if ( name ) { - ret.selector = this.selector + "." + name + "(" + selector + ")"; - } - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Attach the listeners - jQuery.bindReady(); - - // Add the callback - readyList.done( fn ); - - return this; - }, - - eq: function( i ) { - return i === -1 ? - this.slice( i ) : - this.slice( i, +i + 1 ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ), - "slice", slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - noConflict: function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - // Either a released hold or an DOMready/load event and not yet ready - if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready, 1 ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger( "ready" ).unbind( "ready" ); - } - } - }, - - bindReady: function() { - if ( readyList ) { - return; - } - - readyList = jQuery._Deferred(); - - // Catch cases where $(document).ready() is called after the - // browser event has already occurred. - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - return setTimeout( jQuery.ready, 1 ); - } - - // Mozilla, Opera and webkit nightlies currently support this event - if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", jQuery.ready, false ); - - // If IE event model is used - } else if ( document.attachEvent ) { - // ensure firing before onload, - // maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", DOMContentLoaded ); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", jQuery.ready ); - - // If IE and not a frame - // continually check to see if the document is ready - var toplevel = false; - - try { - toplevel = window.frameElement == null; - } catch(e) {} - - if ( document.documentElement.doScroll && toplevel ) { - doScrollCheck(); - } - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - // A crude way of determining if an object is a window - isWindow: function( obj ) { - return obj && typeof obj === "object" && "setInterval" in obj; - }, - - isNaN: function( obj ) { - return obj == null || !rdigit.test( obj ) || isNaN( obj ); - }, - - type: function( obj ) { - return obj == null ? - String( obj ) : - class2type[ toString.call(obj) ] || "object"; - }, - - isPlainObject: function( obj ) { - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - // Not own constructor property must be Object - if ( obj.constructor && - !hasOwn.call(obj, "constructor") && - !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - for ( var name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw msg; - }, - - parseJSON: function( data ) { - if ( typeof data !== "string" || !data ) { - return null; - } - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - // Attempt to parse using the native JSON parser first - if ( window.JSON && window.JSON.parse ) { - return window.JSON.parse( data ); - } - - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test( data.replace( rvalidescape, "@" ) - .replace( rvalidtokens, "]" ) - .replace( rvalidbraces, "")) ) { - - return (new Function( "return " + data ))(); - - } - jQuery.error( "Invalid JSON: " + data ); - }, - - // Cross-browser xml parsing - // (xml & tmp used internally) - parseXML: function( data , xml , tmp ) { - - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - xml = new ActiveXObject( "Microsoft.XMLDOM" ); - xml.async = "false"; - xml.loadXML( data ); - } - - tmp = xml.documentElement; - - if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { - jQuery.error( "Invalid XML: " + data ); - } - - return xml; - }, - - noop: function() {}, - - // Evaluates a script in a global context - // Workarounds based on findings by Jim Driscoll - // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context - globalEval: function( data ) { - if ( data && rnotwhite.test( data ) ) { - // We use execScript on Internet Explorer - // We use an anonymous function so that context is window - // rather than jQuery in Firefox - ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); - } )( data ); - } - }, - - // Converts a dashed string to camelCased string; - // Used by both the css and data modules - camelCase: function( string ) { - return string.replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, - length = object.length, - isObj = length === undefined || jQuery.isFunction( object ); - - if ( args ) { - if ( isObj ) { - for ( name in object ) { - if ( callback.apply( object[ name ], args ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.apply( object[ i++ ], args ) === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isObj ) { - for ( name in object ) { - if ( callback.call( object[ name ], name, object[ name ] ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { - break; - } - } - } - } - - return object; - }, - - // Use native String.trim function wherever possible - trim: trim ? - function( text ) { - return text == null ? - "" : - trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); - }, - - // results is for internal usage only - makeArray: function( array, results ) { - var ret = results || []; - - if ( array != null ) { - // The window, strings (and functions) also have 'length' - // The extra typeof function check is to prevent crashes - // in Safari 2 (See: #3039) - // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 - var type = jQuery.type( array ); - - if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { - push.call( ret, array ); - } else { - jQuery.merge( ret, array ); - } - } - - return ret; - }, - - inArray: function( elem, array ) { - - if ( indexOf ) { - return indexOf.call( array, elem ); - } - - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; - } - } - - return -1; - }, - - merge: function( first, second ) { - var i = first.length, - j = 0; - - if ( typeof second.length === "number" ) { - for ( var l = second.length; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var ret = [], retVal; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( var i = 0, length = elems.length; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, key, ret = [], - i = 0, - length = elems.length, - // jquery objects are treated as arrays - isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; - - // Go through the array, translating each of the items to their - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - // Go through every key on the object, - } else { - for ( key in elems ) { - value = callback( elems[ key ], key, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - } - - // Flatten any nested arrays - return ret.concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - if ( typeof context === "string" ) { - var tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - var args = slice.call( arguments, 2 ), - proxy = function() { - return fn.apply( context, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - - return proxy; - }, - - // Mutifunctional method to get and set values to a collection - // The value/s can optionally be executed if it's a function - access: function( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - jQuery.access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - - return elems; - } - - // Getting an attribute - return length ? fn( elems[0], key ) : undefined; - }, - - now: function() { - return (new Date()).getTime(); - }, - - // Use of jQuery.browser is frowned upon. - // More details: http://docs.jquery.com/Utilities/jQuery.browser - uaMatch: function( ua ) { - ua = ua.toLowerCase(); - - var match = rwebkit.exec( ua ) || - ropera.exec( ua ) || - rmsie.exec( ua ) || - ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || - []; - - return { browser: match[1] || "", version: match[2] || "0" }; - }, - - sub: function() { - function jQuerySub( selector, context ) { - return new jQuerySub.fn.init( selector, context ); - } - jQuery.extend( true, jQuerySub, this ); - jQuerySub.superclass = this; - jQuerySub.fn = jQuerySub.prototype = this(); - jQuerySub.fn.constructor = jQuerySub; - jQuerySub.sub = this.sub; - jQuerySub.fn.init = function init( selector, context ) { - if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { - context = jQuerySub( context ); - } - - return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); - }; - jQuerySub.fn.init.prototype = jQuerySub.fn; - var rootjQuerySub = jQuerySub(document); - return jQuerySub; - }, - - browser: {} -}); - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -browserMatch = jQuery.uaMatch( userAgent ); -if ( browserMatch.browser ) { - jQuery.browser[ browserMatch.browser ] = true; - jQuery.browser.version = browserMatch.version; -} - -// Deprecated, use jQuery.browser.webkit instead -if ( jQuery.browser.webkit ) { - jQuery.browser.safari = true; -} - -// IE doesn't match non-breaking spaces with \s -if ( rnotwhite.test( "\xA0" ) ) { - trimLeft = /^[\s\xA0]+/; - trimRight = /[\s\xA0]+$/; -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); - -// Cleanup functions for the document ready method -if ( document.addEventListener ) { - DOMContentLoaded = function() { - document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - jQuery.ready(); - }; - -} else if ( document.attachEvent ) { - DOMContentLoaded = function() { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( document.readyState === "complete" ) { - document.detachEvent( "onreadystatechange", DOMContentLoaded ); - jQuery.ready(); - } - }; -} - -// The DOM ready check for Internet Explorer -function doScrollCheck() { - if ( jQuery.isReady ) { - return; - } - - try { - // If IE is used, use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - document.documentElement.doScroll("left"); - } catch(e) { - setTimeout( doScrollCheck, 1 ); - return; - } - - // and execute any waiting functions - jQuery.ready(); -} - -return jQuery; - -})(); - - -var // Promise methods - promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ), - // Static reference to slice - sliceDeferred = [].slice; - -jQuery.extend({ - // Create a simple deferred (one callbacks list) - _Deferred: function() { - var // callbacks list - callbacks = [], - // stored [ context , args ] - fired, - // to avoid firing when already doing so - firing, - // flag to know if the deferred has been cancelled - cancelled, - // the deferred itself - deferred = { - - // done( f1, f2, ...) - done: function() { - if ( !cancelled ) { - var args = arguments, - i, - length, - elem, - type, - _fired; - if ( fired ) { - _fired = fired; - fired = 0; - } - for ( i = 0, length = args.length; i < length; i++ ) { - elem = args[ i ]; - type = jQuery.type( elem ); - if ( type === "array" ) { - deferred.done.apply( deferred, elem ); - } else if ( type === "function" ) { - callbacks.push( elem ); - } - } - if ( _fired ) { - deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); - } - } - return this; - }, - - // resolve with given context and args - resolveWith: function( context, args ) { - if ( !cancelled && !fired && !firing ) { - // make sure args are available (#8421) - args = args || []; - firing = 1; - try { - while( callbacks[ 0 ] ) { - callbacks.shift().apply( context, args ); - } - } - finally { - fired = [ context, args ]; - firing = 0; - } - } - return this; - }, - - // resolve with this as context and given arguments - resolve: function() { - deferred.resolveWith( this, arguments ); - return this; - }, - - // Has this deferred been resolved? - isResolved: function() { - return !!( firing || fired ); - }, - - // Cancel - cancel: function() { - cancelled = 1; - callbacks = []; - return this; - } - }; - - return deferred; - }, - - // Full fledged deferred (two callbacks list) - Deferred: function( func ) { - var deferred = jQuery._Deferred(), - failDeferred = jQuery._Deferred(), - promise; - // Add errorDeferred methods, then and promise - jQuery.extend( deferred, { - then: function( doneCallbacks, failCallbacks ) { - deferred.done( doneCallbacks ).fail( failCallbacks ); - return this; - }, - always: function() { - return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments ); - }, - fail: failDeferred.done, - rejectWith: failDeferred.resolveWith, - reject: failDeferred.resolve, - isRejected: failDeferred.isResolved, - pipe: function( fnDone, fnFail ) { - return jQuery.Deferred(function( newDefer ) { - jQuery.each( { - done: [ fnDone, "resolve" ], - fail: [ fnFail, "reject" ] - }, function( handler, data ) { - var fn = data[ 0 ], - action = data[ 1 ], - returned; - if ( jQuery.isFunction( fn ) ) { - deferred[ handler ](function() { - returned = fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise().then( newDefer.resolve, newDefer.reject ); - } else { - newDefer[ action ]( returned ); - } - }); - } else { - deferred[ handler ]( newDefer[ action ] ); - } - }); - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - if ( obj == null ) { - if ( promise ) { - return promise; - } - promise = obj = {}; - } - var i = promiseMethods.length; - while( i-- ) { - obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ]; - } - return obj; - } - }); - // Make sure only one callback list will be used - deferred.done( failDeferred.cancel ).fail( deferred.cancel ); - // Unexpose cancel - delete deferred.cancel; - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - return deferred; - }, - - // Deferred helper - when: function( firstParam ) { - var args = arguments, - i = 0, - length = args.length, - count = length, - deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? - firstParam : - jQuery.Deferred(); - function resolveFunc( i ) { - return function( value ) { - args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; - if ( !( --count ) ) { - // Strange bug in FF4: - // Values changed onto the arguments object sometimes end up as undefined values - // outside the $.when method. Cloning the object into a fresh array solves the issue - deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) ); - } - }; - } - if ( length > 1 ) { - for( ; i < length; i++ ) { - if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) { - args[ i ].promise().then( resolveFunc(i), deferred.reject ); - } else { - --count; - } - } - if ( !count ) { - deferred.resolveWith( deferred, args ); - } - } else if ( deferred !== firstParam ) { - deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); - } - return deferred.promise(); - } -}); - - - -jQuery.support = (function() { - - var div = document.createElement( "div" ), - documentElement = document.documentElement, - all, - a, - select, - opt, - input, - marginDiv, - support, - fragment, - body, - testElementParent, - testElement, - testElementStyle, - tds, - events, - eventName, - i, - isSupported; - - // Preliminary tests - div.setAttribute("className", "t"); - div.innerHTML = "
a"; - - all = div.getElementsByTagName( "*" ); - a = div.getElementsByTagName( "a" )[ 0 ]; - - // Can't get basic test support - if ( !all || !all.length || !a ) { - return {}; - } - - // First batch of supports tests - select = document.createElement( "select" ); - opt = select.appendChild( document.createElement("option") ); - input = div.getElementsByTagName( "input" )[ 0 ]; - - support = { - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: ( div.firstChild.nodeType === 3 ), - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: !div.getElementsByTagName( "tbody" ).length, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName( "link" ).length, - - // Get the style information from getAttribute - // (IE uses .cssText instead) - style: /top/.test( a.getAttribute("style") ), - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: ( a.getAttribute( "href" ) === "/a" ), - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: /^0.55$/.test( a.style.opacity ), - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: !!a.style.cssFloat, - - // Make sure that if no value is specified for a checkbox - // that it defaults to "on". - // (WebKit defaults to "" instead) - checkOn: ( input.value === "on" ), - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: opt.selected, - - // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) - getSetAttribute: div.className !== "t", - - // Will be defined later - submitBubbles: true, - changeBubbles: true, - focusinBubbles: false, - deleteExpando: true, - noCloneEvent: true, - inlineBlockNeedsLayout: false, - shrinkWrapBlocks: false, - reliableMarginRight: true - }; - - // Make sure checked status is properly cloned - input.checked = true; - support.noCloneChecked = input.cloneNode( true ).checked; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Test to see if it's possible to delete an expando from an element - // Fails in Internet Explorer - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } - - if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { - div.attachEvent( "onclick", function() { - // Cloning a node shouldn't copy over any - // bound event handlers (IE does this) - support.noCloneEvent = false; - }); - div.cloneNode( true ).fireEvent( "onclick" ); - } - - // Check if a radio maintains it's value - // after being appended to the DOM - input = document.createElement("input"); - input.value = "t"; - input.setAttribute("type", "radio"); - support.radioValue = input.value === "t"; - - input.setAttribute("checked", "checked"); - div.appendChild( input ); - fragment = document.createDocumentFragment(); - fragment.appendChild( div.firstChild ); - - // WebKit doesn't clone checked state correctly in fragments - support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - - div.innerHTML = ""; - - // Figure out if the W3C box model works as expected - div.style.width = div.style.paddingLeft = "1px"; - - body = document.getElementsByTagName( "body" )[ 0 ]; - // We use our own, invisible, body unless the body is already present - // in which case we use a div (#9239) - testElement = document.createElement( body ? "div" : "body" ); - testElementStyle = { - visibility: "hidden", - width: 0, - height: 0, - border: 0, - margin: 0 - }; - if ( body ) { - jQuery.extend( testElementStyle, { - position: "absolute", - left: -1000, - top: -1000 - }); - } - for ( i in testElementStyle ) { - testElement.style[ i ] = testElementStyle[ i ]; - } - testElement.appendChild( div ); - testElementParent = body || documentElement; - testElementParent.insertBefore( testElement, testElementParent.firstChild ); - - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - support.appendChecked = input.checked; - - support.boxModel = div.offsetWidth === 2; - - if ( "zoom" in div.style ) { - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - // (IE < 8 does this) - div.style.display = "inline"; - div.style.zoom = 1; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); - - // Check if elements with layout shrink-wrap their children - // (IE 6 does this) - div.style.display = ""; - div.innerHTML = "
"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); - } - - div.innerHTML = "
t
"; - tds = div.getElementsByTagName( "td" ); - - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - // (only IE 8 fails this test) - isSupported = ( tds[ 0 ].offsetHeight === 0 ); - - tds[ 0 ].style.display = ""; - tds[ 1 ].style.display = "none"; - - // Check if empty table cells still have offsetWidth/Height - // (IE < 8 fail this test) - support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - div.innerHTML = ""; - - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. For more - // info see bug #3333 - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - if ( document.defaultView && document.defaultView.getComputedStyle ) { - marginDiv = document.createElement( "div" ); - marginDiv.style.width = "0"; - marginDiv.style.marginRight = "0"; - div.appendChild( marginDiv ); - support.reliableMarginRight = - ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; - } - - // Remove the body element we added - testElement.innerHTML = ""; - testElementParent.removeChild( testElement ); - - // Technique from Juriy Zaytsev - // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - // We only care about the case where non-standard event systems - // are used, namely in IE. Short-circuiting here helps us to - // avoid an eval call (in setAttribute) which can cause CSP - // to go haywire. See: https://developer.mozilla.org/en/Security/CSP - if ( div.attachEvent ) { - for( i in { - submit: 1, - change: 1, - focusin: 1 - } ) { - eventName = "on" + i; - isSupported = ( eventName in div ); - if ( !isSupported ) { - div.setAttribute( eventName, "return;" ); - isSupported = ( typeof div[ eventName ] === "function" ); - } - support[ i + "Bubbles" ] = isSupported; - } - } - - // Null connected elements to avoid leaks in IE - testElement = fragment = select = opt = body = marginDiv = div = input = null; - - return support; -})(); - -// Keep track of boxModel -jQuery.boxModel = jQuery.support.boxModel; - - - - -var rbrace = /^(?:\{.*\}|\[.*\])$/, - rmultiDash = /([a-z])([A-Z])/g; - -jQuery.extend({ - cache: {}, - - // Please use with caution - uuid: 0, - - // Unique for each copy of jQuery on the page - // Non-digits removed to match rinlinejQuery - expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", - "applet": true - }, - - hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; - - return !!elem && !isEmptyDataObject( elem ); - }, - - data: function( elem, name, data, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache, - - // We have to handle DOM nodes and JS objects differently because IE6-7 - // can't GC object references properly across the DOM-JS boundary - isNode = elem.nodeType, - - // Only DOM nodes need the global jQuery cache; JS object data is - // attached directly to the object so GC can occur automatically - cache = isNode ? jQuery.cache : elem, - - // Only defining an ID for JS objects if its cache already exists allows - // the code to shortcut on the same path as a DOM node with no cache - id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando; - - // Avoid doing any more work than we need to when trying to get data on an - // object that has no data at all - if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) { - return; - } - - if ( !id ) { - // Only DOM nodes need a new unique ID for each element since their data - // ends up in the global cache - if ( isNode ) { - elem[ jQuery.expando ] = id = ++jQuery.uuid; - } else { - id = jQuery.expando; - } - } - - if ( !cache[ id ] ) { - cache[ id ] = {}; - - // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery - // metadata on plain JS objects when the object is serialized using - // JSON.stringify - if ( !isNode ) { - cache[ id ].toJSON = jQuery.noop; - } - } - - // An object can be passed to jQuery.data instead of a key/value pair; this gets - // shallow copied over onto the existing cache - if ( typeof name === "object" || typeof name === "function" ) { - if ( pvt ) { - cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); - } else { - cache[ id ] = jQuery.extend(cache[ id ], name); - } - } - - thisCache = cache[ id ]; - - // Internal jQuery data is stored in a separate object inside the object's data - // cache in order to avoid key collisions between internal data and user-defined - // data - if ( pvt ) { - if ( !thisCache[ internalKey ] ) { - thisCache[ internalKey ] = {}; - } - - thisCache = thisCache[ internalKey ]; - } - - if ( data !== undefined ) { - thisCache[ jQuery.camelCase( name ) ] = data; - } - - // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should - // not attempt to inspect the internal events object using jQuery.data, as this - // internal data object is undocumented and subject to change. - if ( name === "events" && !thisCache[name] ) { - return thisCache[ internalKey ] && thisCache[ internalKey ].events; - } - - return getByName ? - // Check for both converted-to-camel and non-converted data property names - thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] : - thisCache; - }, - - removeData: function( elem, name, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var internalKey = jQuery.expando, isNode = elem.nodeType, - - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - - // See jQuery.data for more information - id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - - // If there is already no cache entry for this object, there is no - // purpose in continuing - if ( !cache[ id ] ) { - return; - } - - if ( name ) { - var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; - - if ( thisCache ) { - delete thisCache[ name ]; - - // If there is no data left in the cache, we want to continue - // and let the cache object itself get destroyed - if ( !isEmptyDataObject(thisCache) ) { - return; - } - } - } - - // See jQuery.data for more information - if ( pvt ) { - delete cache[ id ][ internalKey ]; - - // Don't destroy the parent cache unless the internal data object - // had been the only thing left in it - if ( !isEmptyDataObject(cache[ id ]) ) { - return; - } - } - - var internalCache = cache[ id ][ internalKey ]; - - // Browsers that fail expando deletion also refuse to delete expandos on - // the window, but it will allow it on all other JS objects; other browsers - // don't care - if ( jQuery.support.deleteExpando || cache != window ) { - delete cache[ id ]; - } else { - cache[ id ] = null; - } - - // We destroyed the entire user cache at once because it's faster than - // iterating through each key, but we need to continue to persist internal - // data if it existed - if ( internalCache ) { - cache[ id ] = {}; - // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery - // metadata on plain JS objects when the object is serialized using - // JSON.stringify - if ( !isNode ) { - cache[ id ].toJSON = jQuery.noop; - } - - cache[ id ][ internalKey ] = internalCache; - - // Otherwise, we need to eliminate the expando on the node to avoid - // false lookups in the cache for entries that no longer exist - } else if ( isNode ) { - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( jQuery.support.deleteExpando ) { - delete elem[ jQuery.expando ]; - } else if ( elem.removeAttribute ) { - elem.removeAttribute( jQuery.expando ); - } else { - elem[ jQuery.expando ] = null; - } - } - }, - - // For internal use only. - _data: function( elem, name, data ) { - return jQuery.data( elem, name, data, true ); - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - if ( elem.nodeName ) { - var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; - - if ( match ) { - return !(match === true || elem.getAttribute("classid") !== match); - } - } - - return true; - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var data = null; - - if ( typeof key === "undefined" ) { - if ( this.length ) { - data = jQuery.data( this[0] ); - - if ( this[0].nodeType === 1 ) { - var attr = this[0].attributes, name; - for ( var i = 0, l = attr.length; i < l; i++ ) { - name = attr[i].name; - - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.substring(5) ); - - dataAttr( this[0], name, data[ name ] ); - } - } - } - } - - return data; - - } else if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - var parts = key.split("."); - parts[1] = parts[1] ? "." + parts[1] : ""; - - if ( value === undefined ) { - data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); - - // Try to fetch any internally stored data first - if ( data === undefined && this.length ) { - data = jQuery.data( this[0], key ); - data = dataAttr( this[0], key, data ); - } - - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - - } else { - return this.each(function() { - var $this = jQuery( this ), - args = [ parts[0], value ]; - - $this.triggerHandler( "setData" + parts[1] + "!", args ); - jQuery.data( this, key, value ); - $this.triggerHandler( "changeData" + parts[1] + "!", args ); - }); - } - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); - -function dataAttr( elem, key, data ) { - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase(); - - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - !jQuery.isNaN( data ) ? parseFloat( data ) : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); - - } else { - data = undefined; - } - } - - return data; -} - -// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON -// property to be considered empty objects; this property always exists in -// order to make sure JSON.stringify does not expose internal metadata -function isEmptyDataObject( obj ) { - for ( var name in obj ) { - if ( name !== "toJSON" ) { - return false; - } - } - - return true; -} - - - - -function handleQueueMarkDefer( elem, type, src ) { - var deferDataKey = type + "defer", - queueDataKey = type + "queue", - markDataKey = type + "mark", - defer = jQuery.data( elem, deferDataKey, undefined, true ); - if ( defer && - ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) && - ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) { - // Give room for hard-coded callbacks to fire first - // and eventually mark/queue something else on the element - setTimeout( function() { - if ( !jQuery.data( elem, queueDataKey, undefined, true ) && - !jQuery.data( elem, markDataKey, undefined, true ) ) { - jQuery.removeData( elem, deferDataKey, true ); - defer.resolve(); - } - }, 0 ); - } -} - -jQuery.extend({ - - _mark: function( elem, type ) { - if ( elem ) { - type = (type || "fx") + "mark"; - jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true ); - } - }, - - _unmark: function( force, elem, type ) { - if ( force !== true ) { - type = elem; - elem = force; - force = false; - } - if ( elem ) { - type = type || "fx"; - var key = type + "mark", - count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 ); - if ( count ) { - jQuery.data( elem, key, count, true ); - } else { - jQuery.removeData( elem, key, true ); - handleQueueMarkDefer( elem, type, "mark" ); - } - } - }, - - queue: function( elem, type, data ) { - if ( elem ) { - type = (type || "fx") + "queue"; - var q = jQuery.data( elem, type, undefined, true ); - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !q || jQuery.isArray(data) ) { - q = jQuery.data( elem, type, jQuery.makeArray(data), true ); - } else { - q.push( data ); - } - } - return q || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - fn = queue.shift(), - defer; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - } - - if ( fn ) { - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift("inprogress"); - } - - fn.call(elem, function() { - jQuery.dequeue(elem, type); - }); - } - - if ( !queue.length ) { - jQuery.removeData( elem, type + "queue", true ); - handleQueueMarkDefer( elem, type, "queue" ); - } - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - } - - if ( data === undefined ) { - return jQuery.queue( this[0], type ); - } - return this.each(function() { - var queue = jQuery.queue( this, type, data ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; - type = type || "fx"; - - return this.queue( type, function() { - var elem = this; - setTimeout(function() { - jQuery.dequeue( elem, type ); - }, time ); - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, object ) { - if ( typeof type !== "string" ) { - object = type; - type = undefined; - } - type = type || "fx"; - var defer = jQuery.Deferred(), - elements = this, - i = elements.length, - count = 1, - deferDataKey = type + "defer", - queueDataKey = type + "queue", - markDataKey = type + "mark", - tmp; - function resolve() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - } - while( i-- ) { - if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || - ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || - jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && - jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) { - count++; - tmp.done( resolve ); - } - } - resolve(); - return defer.promise(); - } -}); - - - - -var rclass = /[\n\t\r]/g, - rspace = /\s+/, - rreturn = /\r/g, - rtype = /^(?:button|input)$/i, - rfocusable = /^(?:button|input|object|select|textarea)$/i, - rclickable = /^a(?:rea)?$/i, - rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, - rinvalidChar = /\:|^on/, - formHook, boolHook; - -jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.attr ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - }, - - prop: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.prop ); - }, - - removeProp: function( name ) { - name = jQuery.propFix[ name ] || name; - return this.each(function() { - // try/catch handles cases where IE balks (such as removing a property on window) - try { - this[ name ] = undefined; - delete this[ name ]; - } catch( e ) {} - }); - }, - - addClass: function( value ) { - var classNames, i, l, elem, - setClass, c, cl; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call(this, j, this.className) ); - }); - } - - if ( value && typeof value === "string" ) { - classNames = value.split( rspace ); - - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; - - if ( elem.nodeType === 1 ) { - if ( !elem.className && classNames.length === 1 ) { - elem.className = value; - - } else { - setClass = " " + elem.className + " "; - - for ( c = 0, cl = classNames.length; c < cl; c++ ) { - if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { - setClass += classNames[ c ] + " "; - } - } - elem.className = jQuery.trim( setClass ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classNames, i, l, elem, className, c, cl; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call(this, j, this.className) ); - }); - } - - if ( (value && typeof value === "string") || value === undefined ) { - classNames = (value || "").split( rspace ); - - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; - - if ( elem.nodeType === 1 && elem.className ) { - if ( value ) { - className = (" " + elem.className + " ").replace( rclass, " " ); - for ( c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[ c ] + " ", " "); - } - elem.className = jQuery.trim( className ); - - } else { - elem.className = ""; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isBool = typeof stateVal === "boolean"; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - state = stateVal, - classNames = value.split( rspace ); - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space seperated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } - - } else if ( type === "undefined" || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery._data( this, "__className__", this.className ); - } - - // toggle whole className - this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " "; - for ( var i = 0, l = this.length; i < l; i++ ) { - if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - var hooks, ret, - elem = this[0]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; - - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } - - ret = elem.value; - - return typeof ret === "string" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return undefined; - } - - var isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var self = jQuery(this), val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, self.val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - } else if ( typeof val === "number" ) { - val += ""; - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map(val, function ( value ) { - return value == null ? "" : value + ""; - }); - } - - hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - // attributes.value is undefined in Blackberry 4.7 but - // uses .value. See #6932 - var val = elem.attributes.value; - return !val || val.specified ? elem.value : elem.text; - } - }, - select: { - get: function( elem ) { - var value, - index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type === "select-one"; - - // Nothing was selected - if ( index < 0 ) { - return null; - } - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - // Don't return options that are disabled or in a disabled optgroup - if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && - (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - // Fixes Bug #2551 -- select.val() broken in IE after form.reset() - if ( one && !values.length && options.length ) { - return jQuery( options[ index ] ).val(); - } - - return values; - }, - - set: function( elem, value ) { - var values = jQuery.makeArray( value ); - - jQuery(elem).find("option").each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - elem.selectedIndex = -1; - } - return values; - } - } - }, - - attrFn: { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, - height: true, - offset: true - }, - - attrFix: { - // Always normalize to ensure hook usage - tabindex: "tabIndex" - }, - - attr: function( elem, name, value, pass ) { - var nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return undefined; - } - - if ( pass && name in jQuery.attrFn ) { - return jQuery( elem )[ name ]( value ); - } - - // Fallback to prop when attributes are not supported - if ( !("getAttribute" in elem) ) { - return jQuery.prop( elem, name, value ); - } - - var ret, hooks, - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - // Normalize the name if needed - if ( notxml ) { - name = jQuery.attrFix[ name ] || name; - - hooks = jQuery.attrHooks[ name ]; - - if ( !hooks ) { - // Use boolHook for boolean attributes - if ( rboolean.test( name ) ) { - - hooks = boolHook; - - // Use formHook for forms and if the name contains certain characters - } else if ( formHook && name !== "className" && - (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) { - - hooks = formHook; - } - } - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return undefined; - - } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, "" + value ); - return value; - } - - } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - - ret = elem.getAttribute( name ); - - // Non-existent attributes return null, we normalize to undefined - return ret === null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, name ) { - var propName; - if ( elem.nodeType === 1 ) { - name = jQuery.attrFix[ name ] || name; - - if ( jQuery.support.getSetAttribute ) { - // Use removeAttribute in browsers that support it - elem.removeAttribute( name ); - } else { - jQuery.attr( elem, name, "" ); - elem.removeAttributeNode( elem.getAttributeNode( name ) ); - } - - // Set corresponding property to false for boolean attributes - if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) { - elem[ propName ] = false; - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to it's default in case type is set after value - // This is for element creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - }, - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - var attributeNode = elem.getAttributeNode("tabIndex"); - - return attributeNode && attributeNode.specified ? - parseInt( attributeNode.value, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - }, - // Use the value property for back compat - // Use the formHook for button elements in IE6/7 (#1954) - value: { - get: function( elem, name ) { - if ( formHook && jQuery.nodeName( elem, "button" ) ) { - return formHook.get( elem, name ); - } - return name in elem ? - elem.value : - null; - }, - set: function( elem, value, name ) { - if ( formHook && jQuery.nodeName( elem, "button" ) ) { - return formHook.set( elem, value, name ); - } - // Does not return so that setAttribute is also used - elem.value = value; - } - } - }, - - propFix: { - tabindex: "tabIndex", - readonly: "readOnly", - "for": "htmlFor", - "class": "className", - maxlength: "maxLength", - cellspacing: "cellSpacing", - cellpadding: "cellPadding", - rowspan: "rowSpan", - colspan: "colSpan", - usemap: "useMap", - frameborder: "frameBorder", - contenteditable: "contentEditable" - }, - - prop: function( elem, name, value ) { - var nType = elem.nodeType; - - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return undefined; - } - - var ret, hooks, - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - return (elem[ name ] = value); - } - - } else { - if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) { - return ret; - - } else { - return elem[ name ]; - } - } - }, - - propHooks: {} -}); - -// Hook for boolean attributes -boolHook = { - get: function( elem, name ) { - // Align boolean attributes with corresponding properties - return jQuery.prop( elem, name ) ? - name.toLowerCase() : - undefined; - }, - set: function( elem, value, name ) { - var propName; - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - // value is true since we know at this point it's type boolean and not false - // Set boolean attributes to the same name and set the DOM property - propName = jQuery.propFix[ name ] || name; - if ( propName in elem ) { - // Only set the IDL specifically if it already exists on the element - elem[ propName ] = true; - } - - elem.setAttribute( name, name.toLowerCase() ); - } - return name; - } -}; - -// IE6/7 do not support getting/setting some attributes with get/setAttribute -if ( !jQuery.support.getSetAttribute ) { - - // propFix is more comprehensive and contains all fixes - jQuery.attrFix = jQuery.propFix; - - // Use this for any attribute on a form in IE6/7 - formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = { - get: function( elem, name ) { - var ret; - ret = elem.getAttributeNode( name ); - // Return undefined if nodeValue is empty string - return ret && ret.nodeValue !== "" ? - ret.nodeValue : - undefined; - }, - set: function( elem, value, name ) { - // Check form objects in IE (multiple bugs related) - // Only use nodeValue if the attribute node exists on the form - var ret = elem.getAttributeNode( name ); - if ( ret ) { - ret.nodeValue = value; - return value; - } - } - }; - - // Set width and height to auto instead of 0 on empty string( Bug #8150 ) - // This is for removals - jQuery.each([ "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - set: function( elem, value ) { - if ( value === "" ) { - elem.setAttribute( name, "auto" ); - return value; - } - } - }); - }); -} - - -// Some attributes require a special call on IE -if ( !jQuery.support.hrefNormalized ) { - jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - get: function( elem ) { - var ret = elem.getAttribute( name, 2 ); - return ret === null ? undefined : ret; - } - }); - }); -} - -if ( !jQuery.support.style ) { - jQuery.attrHooks.style = { - get: function( elem ) { - // Return undefined in the case of empty string - // Normalize to lowercase since IE uppercases css property names - return elem.style.cssText.toLowerCase() || undefined; - }, - set: function( elem, value ) { - return (elem.style.cssText = "" + value); - } - }; -} - -// Safari mis-reports the default selected property of an option -// Accessing the parent's selectedIndex property fixes it -if ( !jQuery.support.optSelected ) { - jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { - get: function( elem ) { - var parent = elem.parentNode; - - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }); -} - -// Radios and checkboxes getter/setter -if ( !jQuery.support.checkOn ) { - jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - get: function( elem ) { - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - } - }; - }); -} -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0); - } - } - }); -}); - - - - -var rnamespaces = /\.(.*)$/, - rformElems = /^(?:textarea|input|select)$/i, - rperiod = /\./g, - rspaces = / /g, - rescape = /[^\w\s.|`]/g, - fcleanup = function( nm ) { - return nm.replace(rescape, "\\$&"); - }; - -/* - * A number of helper functions used for managing events. - * Many of the ideas behind this code originated from - * Dean Edwards' addEvent library. - */ -jQuery.event = { - - // Bind an event to an element - // Original by Dean Edwards - add: function( elem, types, handler, data ) { - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - if ( handler === false ) { - handler = returnFalse; - } else if ( !handler ) { - // Fixes bug #7229. Fix recommended by jdalton - return; - } - - var handleObjIn, handleObj; - - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - } - - // Make sure that the function being executed has a unique ID - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure - var elemData = jQuery._data( elem ); - - // If no elemData is found then we must be trying to bind to one of the - // banned noData elements - if ( !elemData ) { - return; - } - - var events = elemData.events, - eventHandle = elemData.handle; - - if ( !events ) { - elemData.events = events = {}; - } - - if ( !eventHandle ) { - elemData.handle = eventHandle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.handle.apply( eventHandle.elem, arguments ) : - undefined; - }; - } - - // Add elem as a property of the handle function - // This is to prevent a memory leak with non-native events in IE. - eventHandle.elem = elem; - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = types.split(" "); - - var type, i = 0, namespaces; - - while ( (type = types[ i++ ]) ) { - handleObj = handleObjIn ? - jQuery.extend({}, handleObjIn) : - { handler: handler, data: data }; - - // Namespaced event handlers - if ( type.indexOf(".") > -1 ) { - namespaces = type.split("."); - type = namespaces.shift(); - handleObj.namespace = namespaces.slice(0).sort().join("."); - - } else { - namespaces = []; - handleObj.namespace = ""; - } - - handleObj.type = type; - if ( !handleObj.guid ) { - handleObj.guid = handler.guid; - } - - // Get the current list of functions bound to this event - var handlers = events[ type ], - special = jQuery.event.special[ type ] || {}; - - // Init the event handler queue - if ( !handlers ) { - handlers = events[ type ] = []; - - // Check for a special event handler - // Only use addEventListener/attachEvent if the special - // events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add the function to the element's handler list - handlers.push( handleObj ); - - // Keep track of which events have been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - global: {}, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, pos ) { - // don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - if ( handler === false ) { - handler = returnFalse; - } - - var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, - elemData = jQuery.hasData( elem ) && jQuery._data( elem ), - events = elemData && elemData.events; - - if ( !elemData || !events ) { - return; - } - - // types is actually an event object here - if ( types && types.type ) { - handler = types.handler; - types = types.type; - } - - // Unbind all events for the element - if ( !types || typeof types === "string" && types.charAt(0) === "." ) { - types = types || ""; - - for ( type in events ) { - jQuery.event.remove( elem, type + types ); - } - - return; - } - - // Handle multiple events separated by a space - // jQuery(...).unbind("mouseover mouseout", fn); - types = types.split(" "); - - while ( (type = types[ i++ ]) ) { - origType = type; - handleObj = null; - all = type.indexOf(".") < 0; - namespaces = []; - - if ( !all ) { - // Namespaced event handlers - namespaces = type.split("."); - type = namespaces.shift(); - - namespace = new RegExp("(^|\\.)" + - jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - eventType = events[ type ]; - - if ( !eventType ) { - continue; - } - - if ( !handler ) { - for ( j = 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( all || namespace.test( handleObj.namespace ) ) { - jQuery.event.remove( elem, origType, handleObj.handler, j ); - eventType.splice( j--, 1 ); - } - } - - continue; - } - - special = jQuery.event.special[ type ] || {}; - - for ( j = pos || 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( handler.guid === handleObj.guid ) { - // remove the given handler for the given type - if ( all || namespace.test( handleObj.namespace ) ) { - if ( pos == null ) { - eventType.splice( j--, 1 ); - } - - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - - if ( pos != null ) { - break; - } - } - } - - // remove generic event handler if no more handlers exist - if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { - if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - ret = null; - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - var handle = elemData.handle; - if ( handle ) { - handle.elem = null; - } - - delete elemData.events; - delete elemData.handle; - - if ( jQuery.isEmptyObject( elemData ) ) { - jQuery.removeData( elem, undefined, true ); - } - } - }, - - // Events that are safe to short-circuit if no handlers are attached. - // Native DOM events should not be added, they may have inline handlers. - customEvent: { - "getData": true, - "setData": true, - "changeData": true - }, - - trigger: function( event, data, elem, onlyHandlers ) { - // Event object or event type - var type = event.type || event, - namespaces = [], - exclusive; - - if ( type.indexOf("!") >= 0 ) { - // Exclusive events trigger only for the exact event (no namespaces) - type = type.slice(0, -1); - exclusive = true; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - - if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { - // No jQuery handlers for this event type, and it can't have inline handlers - return; - } - - // Caller can pass in an Event, Object, or just an event type string - event = typeof event === "object" ? - // jQuery.Event object - event[ jQuery.expando ] ? event : - // Object literal - new jQuery.Event( type, event ) : - // Just the event type (string) - new jQuery.Event( type ); - - event.type = type; - event.exclusive = exclusive; - event.namespace = namespaces.join("."); - event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)"); - - // triggerHandler() and global events don't bubble or run the default action - if ( onlyHandlers || !elem ) { - event.preventDefault(); - event.stopPropagation(); - } - - // Handle a global trigger - if ( !elem ) { - // TODO: Stop taunting the data cache; remove global events and always attach to document - jQuery.each( jQuery.cache, function() { - // internalKey variable is just used to make it easier to find - // and potentially change this stuff later; currently it just - // points to jQuery.expando - var internalKey = jQuery.expando, - internalCache = this[ internalKey ]; - if ( internalCache && internalCache.events && internalCache.events[ type ] ) { - jQuery.event.trigger( event, data, internalCache.handle.elem ); - } - }); - return; - } - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // Clean up the event in case it is being reused - event.result = undefined; - event.target = elem; - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data != null ? jQuery.makeArray( data ) : []; - data.unshift( event ); - - var cur = elem, - // IE doesn't like method names with a colon (#3533, #8272) - ontype = type.indexOf(":") < 0 ? "on" + type : ""; - - // Fire event on the current element, then bubble up the DOM tree - do { - var handle = jQuery._data( cur, "handle" ); - - event.currentTarget = cur; - if ( handle ) { - handle.apply( cur, data ); - } - - // Trigger an inline bound script - if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) { - event.result = false; - event.preventDefault(); - } - - // Bubble up to document, then to window - cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window; - } while ( cur && !event.isPropagationStopped() ); - - // If nobody prevented the default action, do it now - if ( !event.isDefaultPrevented() ) { - var old, - special = jQuery.event.special[ type ] || {}; - - if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) && - !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction)() check here because IE6/7 fails that test. - // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch. - try { - if ( ontype && elem[ type ] ) { - // Don't re-trigger an onFOO event when we call its FOO() method - old = elem[ ontype ]; - - if ( old ) { - elem[ ontype ] = null; - } - - jQuery.event.triggered = type; - elem[ type ](); - } - } catch ( ieError ) {} - - if ( old ) { - elem[ ontype ] = old; - } - - jQuery.event.triggered = undefined; - } - } - - return event.result; - }, - - handle: function( event ) { - event = jQuery.event.fix( event || window.event ); - // Snapshot the handlers list since a called handler may add/remove events. - var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0), - run_all = !event.exclusive && !event.namespace, - args = Array.prototype.slice.call( arguments, 0 ); - - // Use the fix-ed Event rather than the (read-only) native event - args[0] = event; - event.currentTarget = this; - - for ( var j = 0, l = handlers.length; j < l; j++ ) { - var handleObj = handlers[ j ]; - - // Triggered event must 1) be non-exclusive and have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event. - if ( run_all || event.namespace_re.test( handleObj.namespace ) ) { - // Pass in a reference to the handler function itself - // So that we can later remove it - event.handler = handleObj.handler; - event.data = handleObj.data; - event.handleObj = handleObj; - - var ret = handleObj.handler.apply( this, args ); - - if ( ret !== undefined ) { - event.result = ret; - if ( ret === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - - if ( event.isImmediatePropagationStopped() ) { - break; - } - } - } - return event.result; - }, - - props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // store a copy of the original event object - // and "clone" to set read-only properties - var originalEvent = event; - event = jQuery.Event( originalEvent ); - - for ( var i = this.props.length, prop; i; ) { - prop = this.props[ --i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Fix target property, if necessary - if ( !event.target ) { - // Fixes #1925 where srcElement might not be defined either - event.target = event.srcElement || document; - } - - // check if target is a textnode (safari) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && event.fromElement ) { - event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; - } - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && event.clientX != null ) { - var eventDocument = event.target.ownerDocument || document, - doc = eventDocument.documentElement, - body = eventDocument.body; - - event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); - } - - // Add which for key events - if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { - event.which = event.charCode != null ? event.charCode : event.keyCode; - } - - // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) - if ( !event.metaKey && event.ctrlKey ) { - event.metaKey = event.ctrlKey; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && event.button !== undefined ) { - event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); - } - - return event; - }, - - // Deprecated, use jQuery.guid instead - guid: 1E8, - - // Deprecated, use jQuery.proxy instead - proxy: jQuery.proxy, - - special: { - ready: { - // Make sure the ready event is setup - setup: jQuery.bindReady, - teardown: jQuery.noop - }, - - live: { - add: function( handleObj ) { - jQuery.event.add( this, - liveConvert( handleObj.origType, handleObj.selector ), - jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); - }, - - remove: function( handleObj ) { - jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); - } - }, - - beforeunload: { - setup: function( data, namespaces, eventHandle ) { - // We only want to do this special case on windows - if ( jQuery.isWindow( this ) ) { - this.onbeforeunload = eventHandle; - } - }, - - teardown: function( namespaces, eventHandle ) { - if ( this.onbeforeunload === eventHandle ) { - this.onbeforeunload = null; - } - } - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - if ( elem.detachEvent ) { - elem.detachEvent( "on" + type, handle ); - } - }; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !this.preventDefault ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || - src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // timeStamp is buggy for some events on Firefox(#3843) - // So we won't rely on the native value - this.timeStamp = jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -function returnFalse() { - return false; -} -function returnTrue() { - return true; -} - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - preventDefault: function() { - this.isDefaultPrevented = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - - // if preventDefault exists run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // otherwise set the returnValue property of the original event to false (IE) - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - this.isPropagationStopped = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - // if stopPropagation exists run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - // otherwise set the cancelBubble property of the original event to true (IE) - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - }, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse -}; - -// Checks if an event happened on an element within another element -// Used in jQuery.event.special.mouseenter and mouseleave handlers -var withinElement = function( event ) { - - // Check if mouse(over|out) are still within the same parent element - var related = event.relatedTarget, - inside = false, - eventType = event.type; - - event.type = event.data; - - if ( related !== this ) { - - if ( related ) { - inside = jQuery.contains( this, related ); - } - - if ( !inside ) { - - jQuery.event.handle.apply( this, arguments ); - - event.type = eventType; - } - } -}, - -// In case of event delegation, we only need to rename the event.type, -// liveHandler will take care of the rest. -delegate = function( event ) { - event.type = event.data; - jQuery.event.handle.apply( this, arguments ); -}; - -// Create mouseenter and mouseleave events -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - setup: function( data ) { - jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); - }, - teardown: function( data ) { - jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); - } - }; -}); - -// submit delegation -if ( !jQuery.support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function( data, namespaces ) { - if ( !jQuery.nodeName( this, "form" ) ) { - jQuery.event.add(this, "click.specialSubmit", function( e ) { - var elem = e.target, - type = elem.type; - - if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { - trigger( "submit", this, arguments ); - } - }); - - jQuery.event.add(this, "keypress.specialSubmit", function( e ) { - var elem = e.target, - type = elem.type; - - if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { - trigger( "submit", this, arguments ); - } - }); - - } else { - return false; - } - }, - - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialSubmit" ); - } - }; - -} - -// change delegation, happens here so we have bind. -if ( !jQuery.support.changeBubbles ) { - - var changeFilters, - - getVal = function( elem ) { - var type = elem.type, val = elem.value; - - if ( type === "radio" || type === "checkbox" ) { - val = elem.checked; - - } else if ( type === "select-multiple" ) { - val = elem.selectedIndex > -1 ? - jQuery.map( elem.options, function( elem ) { - return elem.selected; - }).join("-") : - ""; - - } else if ( jQuery.nodeName( elem, "select" ) ) { - val = elem.selectedIndex; - } - - return val; - }, - - testChange = function testChange( e ) { - var elem = e.target, data, val; - - if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { - return; - } - - data = jQuery._data( elem, "_change_data" ); - val = getVal(elem); - - // the current data will be also retrieved by beforeactivate - if ( e.type !== "focusout" || elem.type !== "radio" ) { - jQuery._data( elem, "_change_data", val ); - } - - if ( data === undefined || val === data ) { - return; - } - - if ( data != null || val ) { - e.type = "change"; - e.liveFired = undefined; - jQuery.event.trigger( e, arguments[1], elem ); - } - }; - - jQuery.event.special.change = { - filters: { - focusout: testChange, - - beforedeactivate: testChange, - - click: function( e ) { - var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; - - if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) { - testChange.call( this, e ); - } - }, - - // Change has to be called before submit - // Keydown will be called before keypress, which is used in submit-event delegation - keydown: function( e ) { - var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; - - if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) || - (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || - type === "select-multiple" ) { - testChange.call( this, e ); - } - }, - - // Beforeactivate happens also before the previous element is blurred - // with this event you can't trigger a change event, but you can store - // information - beforeactivate: function( e ) { - var elem = e.target; - jQuery._data( elem, "_change_data", getVal(elem) ); - } - }, - - setup: function( data, namespaces ) { - if ( this.type === "file" ) { - return false; - } - - for ( var type in changeFilters ) { - jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); - } - - return rformElems.test( this.nodeName ); - }, - - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialChange" ); - - return rformElems.test( this.nodeName ); - } - }; - - changeFilters = jQuery.event.special.change.filters; - - // Handle when the input is .focus()'d - changeFilters.focus = changeFilters.beforeactivate; -} - -function trigger( type, elem, args ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - // Don't pass args or remember liveFired; they apply to the donor event. - var event = jQuery.extend( {}, args[ 0 ] ); - event.type = type; - event.originalEvent = {}; - event.liveFired = undefined; - jQuery.event.handle.call( elem, event ); - if ( event.isDefaultPrevented() ) { - args[ 0 ].preventDefault(); - } -} - -// Create "bubbling" focus and blur events -if ( !jQuery.support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler while someone wants focusin/focusout - var attaches = 0; - - jQuery.event.special[ fix ] = { - setup: function() { - if ( attaches++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --attaches === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - - function handler( donor ) { - // Donor event is always a native one; fix it and switch its type. - // Let focusin/out handler cancel the donor focus/blur event. - var e = jQuery.event.fix( donor ); - e.type = fix; - e.originalEvent = {}; - jQuery.event.trigger( e, null, e.target ); - if ( e.isDefaultPrevented() ) { - donor.preventDefault(); - } - } - }); -} - -jQuery.each(["bind", "one"], function( i, name ) { - jQuery.fn[ name ] = function( type, data, fn ) { - var handler; - - // Handle object literals - if ( typeof type === "object" ) { - for ( var key in type ) { - this[ name ](key, data, type[key], fn); - } - return this; - } - - if ( arguments.length === 2 || data === false ) { - fn = data; - data = undefined; - } - - if ( name === "one" ) { - handler = function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }; - handler.guid = fn.guid || jQuery.guid++; - } else { - handler = fn; - } - - if ( type === "unload" && name !== "one" ) { - this.one( type, data, fn ); - - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.add( this[i], type, handler, data ); - } - } - - return this; - }; -}); - -jQuery.fn.extend({ - unbind: function( type, fn ) { - // Handle object literals - if ( typeof type === "object" && !type.preventDefault ) { - for ( var key in type ) { - this.unbind(key, type[key]); - } - - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.remove( this[i], type, fn ); - } - } - - return this; - }, - - delegate: function( selector, types, data, fn ) { - return this.live( types, data, fn, selector ); - }, - - undelegate: function( selector, types, fn ) { - if ( arguments.length === 0 ) { - return this.unbind( "live" ); - - } else { - return this.die( types, null, fn, selector ); - } - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - - triggerHandler: function( type, data ) { - if ( this[0] ) { - return jQuery.event.trigger( type, data, this[0], true ); - } - }, - - toggle: function( fn ) { - // Save reference to arguments for access in closure - var args = arguments, - guid = fn.guid || jQuery.guid++, - i = 0, - toggler = function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - }; - - // link all the functions, so any of them can unbind this click handler - toggler.guid = guid; - while ( i < args.length ) { - args[ i++ ].guid = guid; - } - - return this.click( toggler ); - }, - - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -}); - -var liveMap = { - focus: "focusin", - blur: "focusout", - mouseenter: "mouseover", - mouseleave: "mouseout" -}; - -jQuery.each(["live", "die"], function( i, name ) { - jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { - var type, i = 0, match, namespaces, preType, - selector = origSelector || this.selector, - context = origSelector ? this : jQuery( this.context ); - - if ( typeof types === "object" && !types.preventDefault ) { - for ( var key in types ) { - context[ name ]( key, data, types[key], selector ); - } - - return this; - } - - if ( name === "die" && !types && - origSelector && origSelector.charAt(0) === "." ) { - - context.unbind( origSelector ); - - return this; - } - - if ( data === false || jQuery.isFunction( data ) ) { - fn = data || returnFalse; - data = undefined; - } - - types = (types || "").split(" "); - - while ( (type = types[ i++ ]) != null ) { - match = rnamespaces.exec( type ); - namespaces = ""; - - if ( match ) { - namespaces = match[0]; - type = type.replace( rnamespaces, "" ); - } - - if ( type === "hover" ) { - types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); - continue; - } - - preType = type; - - if ( liveMap[ type ] ) { - types.push( liveMap[ type ] + namespaces ); - type = type + namespaces; - - } else { - type = (liveMap[ type ] || type) + namespaces; - } - - if ( name === "live" ) { - // bind live handler - for ( var j = 0, l = context.length; j < l; j++ ) { - jQuery.event.add( context[j], "live." + liveConvert( type, selector ), - { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); - } - - } else { - // unbind live handler - context.unbind( "live." + liveConvert( type, selector ), fn ); - } - } - - return this; - }; -}); - -function liveHandler( event ) { - var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, - elems = [], - selectors = [], - events = jQuery._data( this, "events" ); - - // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911) - if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) { - return; - } - - if ( event.namespace ) { - namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - event.liveFired = this; - - var live = events.live.slice(0); - - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { - selectors.push( handleObj.selector ); - - } else { - live.splice( j--, 1 ); - } - } - - match = jQuery( event.target ).closest( selectors, event.currentTarget ); - - for ( i = 0, l = match.length; i < l; i++ ) { - close = match[i]; - - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) { - elem = close.elem; - related = null; - - // Those two events require additional checking - if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { - event.type = handleObj.preType; - related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; - - // Make sure not to accidentally match a child element with the same selector - if ( related && jQuery.contains( elem, related ) ) { - related = elem; - } - } - - if ( !related || related !== elem ) { - elems.push({ elem: elem, handleObj: handleObj, level: close.level }); - } - } - } - } - - for ( i = 0, l = elems.length; i < l; i++ ) { - match = elems[i]; - - if ( maxLevel && match.level > maxLevel ) { - break; - } - - event.currentTarget = match.elem; - event.data = match.handleObj.data; - event.handleObj = match.handleObj; - - ret = match.handleObj.origHandler.apply( match.elem, arguments ); - - if ( ret === false || event.isPropagationStopped() ) { - maxLevel = match.level; - - if ( ret === false ) { - stop = false; - } - if ( event.isImmediatePropagationStopped() ) { - break; - } - } - } - - return stop; -} - -function liveConvert( type, selector ) { - return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&"); -} - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - if ( fn == null ) { - fn = data; - data = null; - } - - return arguments.length > 0 ? - this.bind( name, data, fn ) : - this.trigger( name ); - }; - - if ( jQuery.attrFn ) { - jQuery.attrFn[ name ] = true; - } -}); - - - -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, - done = 0, - toString = Object.prototype.toString, - hasDuplicate = false, - baseHasDuplicate = true, - rBackslash = /\\/g, - rNonWord = /\W/; - -// Here we check if the JavaScript engine is using some sort of -// optimization where it does not always call our comparision -// function. If that is the case, discard the hasDuplicate value. -// Thus far that includes Google Chrome. -[0, 0].sort(function() { - baseHasDuplicate = false; - return 0; -}); - -var Sizzle = function( selector, context, results, seed ) { - results = results || []; - context = context || document; - - var origContext = context; - - if ( context.nodeType !== 1 && context.nodeType !== 9 ) { - return []; - } - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - var m, set, checkSet, extra, ret, cur, pop, i, - prune = true, - contextXML = Sizzle.isXML( context ), - parts = [], - soFar = selector; - - // Reset the position of the chunker regexp (start from head) - do { - chunker.exec( "" ); - m = chunker.exec( soFar ); - - if ( m ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; - } - } - } while ( m ); - - if ( parts.length > 1 && origPOS.exec( selector ) ) { - - if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context ); - - } else { - set = Expr.relative[ parts[0] ] ? - [ context ] : - Sizzle( parts.shift(), context ); - - while ( parts.length ) { - selector = parts.shift(); - - if ( Expr.relative[ selector ] ) { - selector += parts.shift(); - } - - set = posProcess( selector, set ); - } - } - - } else { - // Take a shortcut and set the context if the root selector is an ID - // (but not if it'll be faster if the inner selector is an ID) - if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && - Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - - ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? - Sizzle.filter( ret.expr, ret.set )[0] : - ret.set[0]; - } - - if ( context ) { - ret = seed ? - { expr: parts.pop(), set: makeArray(seed) } : - Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - - set = ret.expr ? - Sizzle.filter( ret.expr, ret.set ) : - ret.set; - - if ( parts.length > 0 ) { - checkSet = makeArray( set ); - - } else { - prune = false; - } - - while ( parts.length ) { - cur = parts.pop(); - pop = cur; - - if ( !Expr.relative[ cur ] ) { - cur = ""; - } else { - pop = parts.pop(); - } - - if ( pop == null ) { - pop = context; - } - - Expr.relative[ cur ]( checkSet, pop, contextXML ); - } - - } else { - checkSet = parts = []; - } - } - - if ( !checkSet ) { - checkSet = set; - } - - if ( !checkSet ) { - Sizzle.error( cur || selector ); - } - - if ( toString.call(checkSet) === "[object Array]" ) { - if ( !prune ) { - results.push.apply( results, checkSet ); - - } else if ( context && context.nodeType === 1 ) { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { - results.push( set[i] ); - } - } - - } else { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && checkSet[i].nodeType === 1 ) { - results.push( set[i] ); - } - } - } - - } else { - makeArray( checkSet, results ); - } - - if ( extra ) { - Sizzle( extra, origContext, results, seed ); - Sizzle.uniqueSort( results ); - } - - return results; -}; - -Sizzle.uniqueSort = function( results ) { - if ( sortOrder ) { - hasDuplicate = baseHasDuplicate; - results.sort( sortOrder ); - - if ( hasDuplicate ) { - for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[ i - 1 ] ) { - results.splice( i--, 1 ); - } - } - } - } - - return results; -}; - -Sizzle.matches = function( expr, set ) { - return Sizzle( expr, null, null, set ); -}; - -Sizzle.matchesSelector = function( node, expr ) { - return Sizzle( expr, null, null, [node] ).length > 0; -}; - -Sizzle.find = function( expr, context, isXML ) { - var set; - - if ( !expr ) { - return []; - } - - for ( var i = 0, l = Expr.order.length; i < l; i++ ) { - var match, - type = Expr.order[i]; - - if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - var left = match[1]; - match.splice( 1, 1 ); - - if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace( rBackslash, "" ); - set = Expr.find[ type ]( match, context, isXML ); - - if ( set != null ) { - expr = expr.replace( Expr.match[ type ], "" ); - break; - } - } - } - } - - if ( !set ) { - set = typeof context.getElementsByTagName !== "undefined" ? - context.getElementsByTagName( "*" ) : - []; - } - - return { set: set, expr: expr }; -}; - -Sizzle.filter = function( expr, set, inplace, not ) { - var match, anyFound, - old = expr, - result = [], - curLoop = set, - isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); - - while ( expr && set.length ) { - for ( var type in Expr.filter ) { - if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - var found, item, - filter = Expr.filter[ type ], - left = match[1]; - - anyFound = false; - - match.splice(1,1); - - if ( left.substr( left.length - 1 ) === "\\" ) { - continue; - } - - if ( curLoop === result ) { - result = []; - } - - if ( Expr.preFilter[ type ] ) { - match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); - - if ( !match ) { - anyFound = found = true; - - } else if ( match === true ) { - continue; - } - } - - if ( match ) { - for ( var i = 0; (item = curLoop[i]) != null; i++ ) { - if ( item ) { - found = filter( item, match, i, curLoop ); - var pass = not ^ !!found; - - if ( inplace && found != null ) { - if ( pass ) { - anyFound = true; - - } else { - curLoop[i] = false; - } - - } else if ( pass ) { - result.push( item ); - anyFound = true; - } - } - } - } - - if ( found !== undefined ) { - if ( !inplace ) { - curLoop = result; - } - - expr = expr.replace( Expr.match[ type ], "" ); - - if ( !anyFound ) { - return []; - } - - break; - } - } - } - - // Improper expression - if ( expr === old ) { - if ( anyFound == null ) { - Sizzle.error( expr ); - - } else { - break; - } - } - - old = expr; - } - - return curLoop; -}; - -Sizzle.error = function( msg ) { - throw "Syntax error, unrecognized expression: " + msg; -}; - -var Expr = Sizzle.selectors = { - order: [ "ID", "NAME", "TAG" ], - - match: { - ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, - ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, - POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, - PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ - }, - - leftMatch: {}, - - attrMap: { - "class": "className", - "for": "htmlFor" - }, - - attrHandle: { - href: function( elem ) { - return elem.getAttribute( "href" ); - }, - type: function( elem ) { - return elem.getAttribute( "type" ); - } - }, - - relative: { - "+": function(checkSet, part){ - var isPartStr = typeof part === "string", - isTag = isPartStr && !rNonWord.test( part ), - isPartStrNotTag = isPartStr && !isTag; - - if ( isTag ) { - part = part.toLowerCase(); - } - - for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { - if ( (elem = checkSet[i]) ) { - while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} - - checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? - elem || false : - elem === part; - } - } - - if ( isPartStrNotTag ) { - Sizzle.filter( part, checkSet, true ); - } - }, - - ">": function( checkSet, part ) { - var elem, - isPartStr = typeof part === "string", - i = 0, - l = checkSet.length; - - if ( isPartStr && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - var parent = elem.parentNode; - checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; - } - } - - } else { - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - checkSet[i] = isPartStr ? - elem.parentNode : - elem.parentNode === part; - } - } - - if ( isPartStr ) { - Sizzle.filter( part, checkSet, true ); - } - } - }, - - "": function(checkSet, part, isXML){ - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); - }, - - "~": function( checkSet, part, isXML ) { - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); - } - }, - - find: { - ID: function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - }, - - NAME: function( match, context ) { - if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], - results = context.getElementsByName( match[1] ); - - for ( var i = 0, l = results.length; i < l; i++ ) { - if ( results[i].getAttribute("name") === match[1] ) { - ret.push( results[i] ); - } - } - - return ret.length === 0 ? null : ret; - } - }, - - TAG: function( match, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( match[1] ); - } - } - }, - preFilter: { - CLASS: function( match, curLoop, inplace, result, not, isXML ) { - match = " " + match[1].replace( rBackslash, "" ) + " "; - - if ( isXML ) { - return match; - } - - for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { - if ( elem ) { - if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { - if ( !inplace ) { - result.push( elem ); - } - - } else if ( inplace ) { - curLoop[i] = false; - } - } - } - - return false; - }, - - ID: function( match ) { - return match[1].replace( rBackslash, "" ); - }, - - TAG: function( match, curLoop ) { - return match[1].replace( rBackslash, "" ).toLowerCase(); - }, - - CHILD: function( match ) { - if ( match[1] === "nth" ) { - if ( !match[2] ) { - Sizzle.error( match[0] ); - } - - match[2] = match[2].replace(/^\+|\s*/g, ''); - - // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' - var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( - match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || - !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); - - // calculate the numbers (first)n+(last) including if they are negative - match[2] = (test[1] + (test[2] || 1)) - 0; - match[3] = test[3] - 0; - } - else if ( match[2] ) { - Sizzle.error( match[0] ); - } - - // TODO: Move to normal caching system - match[0] = done++; - - return match; - }, - - ATTR: function( match, curLoop, inplace, result, not, isXML ) { - var name = match[1] = match[1].replace( rBackslash, "" ); - - if ( !isXML && Expr.attrMap[name] ) { - match[1] = Expr.attrMap[name]; - } - - // Handle if an un-quoted value was used - match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); - - if ( match[2] === "~=" ) { - match[4] = " " + match[4] + " "; - } - - return match; - }, - - PSEUDO: function( match, curLoop, inplace, result, not ) { - if ( match[1] === "not" ) { - // If we're dealing with a complex expression, or a simple one - if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { - match[3] = Sizzle(match[3], null, null, curLoop); - - } else { - var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); - - if ( !inplace ) { - result.push.apply( result, ret ); - } - - return false; - } - - } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { - return true; - } - - return match; - }, - - POS: function( match ) { - match.unshift( true ); - - return match; - } - }, - - filters: { - enabled: function( elem ) { - return elem.disabled === false && elem.type !== "hidden"; - }, - - disabled: function( elem ) { - return elem.disabled === true; - }, - - checked: function( elem ) { - return elem.checked === true; - }, - - selected: function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - parent: function( elem ) { - return !!elem.firstChild; - }, - - empty: function( elem ) { - return !elem.firstChild; - }, - - has: function( elem, i, match ) { - return !!Sizzle( match[3], elem ).length; - }, - - header: function( elem ) { - return (/h\d/i).test( elem.nodeName ); - }, - - text: function( elem ) { - var attr = elem.getAttribute( "type" ), type = elem.type; - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) - // use getAttribute instead to test this case - return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); - }, - - radio: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; - }, - - checkbox: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; - }, - - file: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; - }, - - password: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; - }, - - submit: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && "submit" === elem.type; - }, - - image: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; - }, - - reset: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && "reset" === elem.type; - }, - - button: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && "button" === elem.type || name === "button"; - }, - - input: function( elem ) { - return (/input|select|textarea|button/i).test( elem.nodeName ); - }, - - focus: function( elem ) { - return elem === elem.ownerDocument.activeElement; - } - }, - setFilters: { - first: function( elem, i ) { - return i === 0; - }, - - last: function( elem, i, match, array ) { - return i === array.length - 1; - }, - - even: function( elem, i ) { - return i % 2 === 0; - }, - - odd: function( elem, i ) { - return i % 2 === 1; - }, - - lt: function( elem, i, match ) { - return i < match[3] - 0; - }, - - gt: function( elem, i, match ) { - return i > match[3] - 0; - }, - - nth: function( elem, i, match ) { - return match[3] - 0 === i; - }, - - eq: function( elem, i, match ) { - return match[3] - 0 === i; - } - }, - filter: { - PSEUDO: function( elem, match, i, array ) { - var name = match[1], - filter = Expr.filters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - - } else if ( name === "contains" ) { - return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; - - } else if ( name === "not" ) { - var not = match[3]; - - for ( var j = 0, l = not.length; j < l; j++ ) { - if ( not[j] === elem ) { - return false; - } - } - - return true; - - } else { - Sizzle.error( name ); - } - }, - - CHILD: function( elem, match ) { - var type = match[1], - node = elem; - - switch ( type ) { - case "only": - case "first": - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - if ( type === "first" ) { - return true; - } - - node = elem; - - case "last": - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - return true; - - case "nth": - var first = match[2], - last = match[3]; - - if ( first === 1 && last === 0 ) { - return true; - } - - var doneName = match[0], - parent = elem.parentNode; - - if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { - var count = 0; - - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - node.nodeIndex = ++count; - } - } - - parent.sizcache = doneName; - } - - var diff = elem.nodeIndex - last; - - if ( first === 0 ) { - return diff === 0; - - } else { - return ( diff % first === 0 && diff / first >= 0 ); - } - } - }, - - ID: function( elem, match ) { - return elem.nodeType === 1 && elem.getAttribute("id") === match; - }, - - TAG: function( elem, match ) { - return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; - }, - - CLASS: function( elem, match ) { - return (" " + (elem.className || elem.getAttribute("class")) + " ") - .indexOf( match ) > -1; - }, - - ATTR: function( elem, match ) { - var name = match[1], - result = Expr.attrHandle[ name ] ? - Expr.attrHandle[ name ]( elem ) : - elem[ name ] != null ? - elem[ name ] : - elem.getAttribute( name ), - value = result + "", - type = match[2], - check = match[4]; - - return result == null ? - type === "!=" : - type === "=" ? - value === check : - type === "*=" ? - value.indexOf(check) >= 0 : - type === "~=" ? - (" " + value + " ").indexOf(check) >= 0 : - !check ? - value && result !== false : - type === "!=" ? - value !== check : - type === "^=" ? - value.indexOf(check) === 0 : - type === "$=" ? - value.substr(value.length - check.length) === check : - type === "|=" ? - value === check || value.substr(0, check.length + 1) === check + "-" : - false; - }, - - POS: function( elem, match, i, array ) { - var name = match[2], - filter = Expr.setFilters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } - } - } -}; - -var origPOS = Expr.match.POS, - fescape = function(all, num){ - return "\\" + (num - 0 + 1); - }; - -for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); -} - -var makeArray = function( array, results ) { - array = Array.prototype.slice.call( array, 0 ); - - if ( results ) { - results.push.apply( results, array ); - return results; - } - - return array; -}; - -// Perform a simple check to determine if the browser is capable of -// converting a NodeList to an array using builtin methods. -// Also verifies that the returned array holds DOM nodes -// (which is not the case in the Blackberry browser) -try { - Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; - -// Provide a fallback method if it does not work -} catch( e ) { - makeArray = function( array, results ) { - var i = 0, - ret = results || []; - - if ( toString.call(array) === "[object Array]" ) { - Array.prototype.push.apply( ret, array ); - - } else { - if ( typeof array.length === "number" ) { - for ( var l = array.length; i < l; i++ ) { - ret.push( array[i] ); - } - - } else { - for ( ; array[i]; i++ ) { - ret.push( array[i] ); - } - } - } - - return ret; - }; -} - -var sortOrder, siblingCheck; - -if ( document.documentElement.compareDocumentPosition ) { - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - return a.compareDocumentPosition ? -1 : 1; - } - - return a.compareDocumentPosition(b) & 4 ? -1 : 1; - }; - -} else { - sortOrder = function( a, b ) { - // The nodes are identical, we can exit early - if ( a === b ) { - hasDuplicate = true; - return 0; - - // Fallback to using sourceIndex (in IE) if it's available on both nodes - } else if ( a.sourceIndex && b.sourceIndex ) { - return a.sourceIndex - b.sourceIndex; - } - - var al, bl, - ap = [], - bp = [], - aup = a.parentNode, - bup = b.parentNode, - cur = aup; - - // If the nodes are siblings (or identical) we can do a quick check - if ( aup === bup ) { - return siblingCheck( a, b ); - - // If no parents were found then the nodes are disconnected - } else if ( !aup ) { - return -1; - - } else if ( !bup ) { - return 1; - } - - // Otherwise they're somewhere else in the tree so we need - // to build up a full list of the parentNodes for comparison - while ( cur ) { - ap.unshift( cur ); - cur = cur.parentNode; - } - - cur = bup; - - while ( cur ) { - bp.unshift( cur ); - cur = cur.parentNode; - } - - al = ap.length; - bl = bp.length; - - // Start walking down the tree looking for a discrepancy - for ( var i = 0; i < al && i < bl; i++ ) { - if ( ap[i] !== bp[i] ) { - return siblingCheck( ap[i], bp[i] ); - } - } - - // We ended someplace up the tree so do a sibling check - return i === al ? - siblingCheck( a, bp[i], -1 ) : - siblingCheck( ap[i], b, 1 ); - }; - - siblingCheck = function( a, b, ret ) { - if ( a === b ) { - return ret; - } - - var cur = a.nextSibling; - - while ( cur ) { - if ( cur === b ) { - return -1; - } - - cur = cur.nextSibling; - } - - return 1; - }; -} - -// Utility function for retreiving the text value of an array of DOM nodes -Sizzle.getText = function( elems ) { - var ret = "", elem; - - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += Sizzle.getText( elem.childNodes ); - } - } - - return ret; -}; - -// Check to see if the browser returns elements by name when -// querying by getElementById (and provide a workaround) -(function(){ - // We're going to inject a fake input element with a specified name - var form = document.createElement("div"), - id = "script" + (new Date()).getTime(), - root = document.documentElement; - - form.innerHTML = ""; - - // Inject it into the root element, check its status, and remove it quickly - root.insertBefore( form, root.firstChild ); - - // The workaround has to do additional checks after a getElementById - // Which slows things down for other browsers (hence the branching) - if ( document.getElementById( id ) ) { - Expr.find.ID = function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - - return m ? - m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? - [m] : - undefined : - []; - } - }; - - Expr.filter.ID = function( elem, match ) { - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - - return elem.nodeType === 1 && node && node.nodeValue === match; - }; - } - - root.removeChild( form ); - - // release memory in IE - root = form = null; -})(); - -(function(){ - // Check to see if the browser returns only elements - // when doing getElementsByTagName("*") - - // Create a fake element - var div = document.createElement("div"); - div.appendChild( document.createComment("") ); - - // Make sure no comments are found - if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function( match, context ) { - var results = context.getElementsByTagName( match[1] ); - - // Filter out possible comments - if ( match[1] === "*" ) { - var tmp = []; - - for ( var i = 0; results[i]; i++ ) { - if ( results[i].nodeType === 1 ) { - tmp.push( results[i] ); - } - } - - results = tmp; - } - - return results; - }; - } - - // Check to see if an attribute returns normalized href attributes - div.innerHTML = ""; - - if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && - div.firstChild.getAttribute("href") !== "#" ) { - - Expr.attrHandle.href = function( elem ) { - return elem.getAttribute( "href", 2 ); - }; - } - - // release memory in IE - div = null; -})(); - -if ( document.querySelectorAll ) { - (function(){ - var oldSizzle = Sizzle, - div = document.createElement("div"), - id = "__sizzle__"; - - div.innerHTML = "

"; - - // Safari can't handle uppercase or unicode characters when - // in quirks mode. - if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { - return; - } - - Sizzle = function( query, context, extra, seed ) { - context = context || document; - - // Only use querySelectorAll on non-XML documents - // (ID selectors don't work in non-HTML documents) - if ( !seed && !Sizzle.isXML(context) ) { - // See if we find a selector to speed up - var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); - - if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { - // Speed-up: Sizzle("TAG") - if ( match[1] ) { - return makeArray( context.getElementsByTagName( query ), extra ); - - // Speed-up: Sizzle(".CLASS") - } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { - return makeArray( context.getElementsByClassName( match[2] ), extra ); - } - } - - if ( context.nodeType === 9 ) { - // Speed-up: Sizzle("body") - // The body element only exists once, optimize finding it - if ( query === "body" && context.body ) { - return makeArray( [ context.body ], extra ); - - // Speed-up: Sizzle("#ID") - } else if ( match && match[3] ) { - var elem = context.getElementById( match[3] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id === match[3] ) { - return makeArray( [ elem ], extra ); - } - - } else { - return makeArray( [], extra ); - } - } - - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(qsaError) {} - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - var oldContext = context, - old = context.getAttribute( "id" ), - nid = old || id, - hasParent = context.parentNode, - relativeHierarchySelector = /^\s*[+~]/.test( query ); - - if ( !old ) { - context.setAttribute( "id", nid ); - } else { - nid = nid.replace( /'/g, "\\$&" ); - } - if ( relativeHierarchySelector && hasParent ) { - context = context.parentNode; - } - - try { - if ( !relativeHierarchySelector || hasParent ) { - return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); - } - - } catch(pseudoError) { - } finally { - if ( !old ) { - oldContext.removeAttribute( "id" ); - } - } - } - } - - return oldSizzle(query, context, extra, seed); - }; - - for ( var prop in oldSizzle ) { - Sizzle[ prop ] = oldSizzle[ prop ]; - } - - // release memory in IE - div = null; - })(); -} - -(function(){ - var html = document.documentElement, - matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; - - if ( matches ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9 fails this) - var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), - pseudoWorks = false; - - try { - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( document.documentElement, "[test!='']:sizzle" ); - - } catch( pseudoError ) { - pseudoWorks = true; - } - - Sizzle.matchesSelector = function( node, expr ) { - // Make sure that attribute selectors are quoted - expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); - - if ( !Sizzle.isXML( node ) ) { - try { - if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { - var ret = matches.call( node, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || !disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9, so check for that - node.document && node.document.nodeType !== 11 ) { - return ret; - } - } - } catch(e) {} - } - - return Sizzle(expr, null, null, [node]).length > 0; - }; - } -})(); - -(function(){ - var div = document.createElement("div"); - - div.innerHTML = "
"; - - // Opera can't find a second classname (in 9.6) - // Also, make sure that getElementsByClassName actually exists - if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { - return; - } - - // Safari caches class attributes, doesn't catch changes (in 3.2) - div.lastChild.className = "e"; - - if ( div.getElementsByClassName("e").length === 1 ) { - return; - } - - Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function( match, context, isXML ) { - if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { - return context.getElementsByClassName(match[1]); - } - }; - - // release memory in IE - div = null; -})(); - -function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - - if ( elem ) { - var match = false; - - elem = elem[dir]; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 && !isXML ){ - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( elem.nodeName.toLowerCase() === cur ) { - match = elem; - break; - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - - if ( elem ) { - var match = false; - - elem = elem[dir]; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 ) { - if ( !isXML ) { - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( typeof cur !== "string" ) { - if ( elem === cur ) { - match = true; - break; - } - - } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { - match = elem; - break; - } - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -if ( document.documentElement.contains ) { - Sizzle.contains = function( a, b ) { - return a !== b && (a.contains ? a.contains(b) : true); - }; - -} else if ( document.documentElement.compareDocumentPosition ) { - Sizzle.contains = function( a, b ) { - return !!(a.compareDocumentPosition(b) & 16); - }; - -} else { - Sizzle.contains = function() { - return false; - }; -} - -Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; - - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -var posProcess = function( selector, context ) { - var match, - tmpSet = [], - later = "", - root = context.nodeType ? [context] : context; - - // Position selectors must be done after the filter - // And so must :not(positional) so we move all PSEUDOs to the end - while ( (match = Expr.match.PSEUDO.exec( selector )) ) { - later += match[0]; - selector = selector.replace( Expr.match.PSEUDO, "" ); - } - - selector = Expr.relative[selector] ? selector + "*" : selector; - - for ( var i = 0, l = root.length; i < l; i++ ) { - Sizzle( selector, root[i], tmpSet ); - } - - return Sizzle.filter( later, tmpSet ); -}; - -// EXPOSE -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.filters; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - -})(); - - -var runtil = /Until$/, - rparentsprev = /^(?:parents|prevUntil|prevAll)/, - // Note: This RegExp should be improved, or likely pulled from Sizzle - rmultiselector = /,/, - isSimple = /^.[^:#\[\.,]*$/, - slice = Array.prototype.slice, - POS = jQuery.expr.match.POS, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend({ - find: function( selector ) { - var self = this, - i, l; - - if ( typeof selector !== "string" ) { - return jQuery( selector ).filter(function() { - for ( i = 0, l = self.length; i < l; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }); - } - - var ret = this.pushStack( "", "find", selector ), - length, n, r; - - for ( i = 0, l = this.length; i < l; i++ ) { - length = ret.length; - jQuery.find( selector, this[i], ret ); - - if ( i > 0 ) { - // Make sure that the results are unique - for ( n = length; n < ret.length; n++ ) { - for ( r = 0; r < length; r++ ) { - if ( ret[r] === ret[n] ) { - ret.splice(n--, 1); - break; - } - } - } - } - } - - return ret; - }, - - has: function( target ) { - var targets = jQuery( target ); - return this.filter(function() { - for ( var i = 0, l = targets.length; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector, false), "not", selector); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector, true), "filter", selector ); - }, - - is: function( selector ) { - return !!selector && ( typeof selector === "string" ? - jQuery.filter( selector, this ).length > 0 : - this.filter( selector ).length > 0 ); - }, - - closest: function( selectors, context ) { - var ret = [], i, l, cur = this[0]; - - // Array - if ( jQuery.isArray( selectors ) ) { - var match, selector, - matches = {}, - level = 1; - - if ( cur && selectors.length ) { - for ( i = 0, l = selectors.length; i < l; i++ ) { - selector = selectors[i]; - - if ( !matches[ selector ] ) { - matches[ selector ] = POS.test( selector ) ? - jQuery( selector, context || this.context ) : - selector; - } - } - - while ( cur && cur.ownerDocument && cur !== context ) { - for ( selector in matches ) { - match = matches[ selector ]; - - if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) { - ret.push({ selector: selector, elem: cur, level: level }); - } - } - - cur = cur.parentNode; - level++; - } - } - - return ret; - } - - // String - var pos = POS.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( i = 0, l = this.length; i < l; i++ ) { - cur = this[i]; - - while ( cur ) { - if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { - ret.push( cur ); - break; - - } else { - cur = cur.parentNode; - if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { - break; - } - } - } - } - - ret = ret.length > 1 ? jQuery.unique( ret ) : ret; - - return this.pushStack( ret, "closest", selectors ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - if ( !elem || typeof elem === "string" ) { - return jQuery.inArray( this[0], - // If it receives a string, the selector is used - // If it receives nothing, the siblings are used - elem ? jQuery( elem ) : this.parent().children() ); - } - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context ) : - jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? - all : - jQuery.unique( all ) ); - }, - - andSelf: function() { - return this.add( this.prevObject ); - } -}); - -// A painfully simple check to see if an element is disconnected -// from a document (should be improved, where feasible). -function isDisconnected( node ) { - return !node || !node.parentNode || node.parentNode.nodeType === 11; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return jQuery.nth( elem, 2, "nextSibling" ); - }, - prev: function( elem ) { - return jQuery.nth( elem, 2, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( elem.parentNode.firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.makeArray( elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ), - // The variable 'args' was introduced in - // https://github.com/jquery/jquery/commit/52a0238 - // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed. - // http://code.google.com/p/v8/issues/detail?id=1050 - args = slice.call(arguments); - - if ( !runtil.test( name ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, name, args.join(",") ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 ? - jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : - jQuery.find.matches(expr, elems); - }, - - dir: function( elem, dir, until ) { - var matched = [], - cur = elem[ dir ]; - - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - nth: function( cur, result, dir, elem ) { - result = result || 1; - var num = 0; - - for ( ; cur; cur = cur[dir] ) { - if ( cur.nodeType === 1 && ++num === result ) { - break; - } - } - - return cur; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, keep ) { - - // Can't pass null or undefined to indexOf in Firefox 4 - // Set to 0 to skip string check - qualifier = qualifier || 0; - - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - var retVal = !!qualifier.call( elem, i, elem ); - return retVal === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return (elem === qualifier) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem, i ) { - return (jQuery.inArray( elem, qualifier ) >= 0) === keep; - }); -} - - - - -var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, - rtagName = /<([\w:]+)/, - rtbody = /", "" ], - legend: [ 1, "
", "
" ], - thead: [ 1, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - col: [ 2, "", "
" ], - area: [ 1, "", "" ], - _default: [ 0, "", "" ] - }; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// IE can't serialize and - - + + +

Last update:

+

Feb 05, 2013

+ next »
diff --git a/libs/network/doc/html/examples.html b/libs/network/doc/html/examples.html index 23e2292f9..43599e279 100644 --- a/libs/network/doc/html/examples.html +++ b/libs/network/doc/html/examples.html @@ -1,19 +1,21 @@ - + - Examples — cpp-netlib v0.9.4 + Examples — cpp-netlib v0.9.5 + + - + +

Last update:

+

Feb 05, 2013

@@ -160,7 +160,7 @@

Quick search

diff --git a/libs/network/doc/html/examples/http/atom_reader.html b/libs/network/doc/html/examples/http/atom_reader.html index 94ded0563..9c8a142e5 100644 --- a/libs/network/doc/html/examples/http/atom_reader.html +++ b/libs/network/doc/html/examples/http/atom_reader.html @@ -1,19 +1,21 @@ - + - Atom feed reader — cpp-netlib v0.9.4 + Atom feed reader — cpp-netlib v0.9.5 + + - + @@ -43,10 +45,11 @@ +
-

cpp-netlib v0.9.4

+

cpp-netlib v0.9.5